From 27f31962e63e40fbecb25ceb63bb327016575e10 Mon Sep 17 00:00:00 2001 From: Santos Gallegos Date: Thu, 21 Nov 2024 12:47:06 -0500 Subject: [PATCH 1/2] Set brownouts for deprecated embed API v2 Ref https://github.com/readthedocs/readthedocs.org/issues/10677 --- readthedocs/embed/views.py | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/readthedocs/embed/views.py b/readthedocs/embed/views.py index 3a6625319df..070c6824da0 100644 --- a/readthedocs/embed/views.py +++ b/readthedocs/embed/views.py @@ -1,9 +1,11 @@ """Views for the embed app.""" - +import datetime import json import re +import pytz import structlog +from django.conf import settings from django.template.defaultfilters import slugify from docutils.nodes import make_id from pyquery import PyQuery as PQ # noqa @@ -66,8 +68,39 @@ def external(self): # Always return False because APIv2 does not support external domains return False + def _is_disabled_for_deprecation(self): + if settings.RTD_ENFORCE_BROWNOUTS_FOR_DEPRECATIONS: + return False + + tzinfo = pytz.timezone("America/Los_Angeles") + now = datetime.datetime.now(tz=tzinfo) + # Dates as per https://about.readthedocs.com/blog/2024/11/embed-api-v2-deprecated/. + # fmt: off + is_disabled = ( + # 12 hours brownout. + datetime.datetime(2024, 12, 9, 0, 0, 0, tzinfo=tzinfo) < now < datetime.datetime(2024, 12, 9, 12, 0, 0, tzinfo=tzinfo) + # 24 hours brownout. + or datetime.datetime(2025, 1, 13, 0, 0, 0, tzinfo=tzinfo) < now < datetime.datetime(2025, 1, 13, 0, 0, 0, tzinfo=tzinfo) + # Permanent removal. + or datetime.datetime(2025, 1, 20, 0, 0, 0, tzinfo=tzinfo) < now + ) + # fmt: on + return is_disabled + def get(self, request): """Handle the get request.""" + + if self._is_disabled_for_deprecation(): + return Response( + { + "error": ( + "Embed API v2 has been deprecated and is no longer available, please use embed API v3 instead. " + "Read our blog post for more information: https://about.readthedocs.com/blog/2024/11/embed-api-v2-deprecated/." + ) + }, + status=status.HTTP_410_GONE, + ) + project = self._get_project() version = self._get_version() From 527085d5fba9d33bb0e26299f41fb516d1e55d1c Mon Sep 17 00:00:00 2001 From: Santos Gallegos Date: Thu, 21 Nov 2024 13:44:23 -0500 Subject: [PATCH 2/2] Fixes --- readthedocs/embed/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readthedocs/embed/views.py b/readthedocs/embed/views.py index 070c6824da0..b8207d95d38 100644 --- a/readthedocs/embed/views.py +++ b/readthedocs/embed/views.py @@ -69,7 +69,7 @@ def external(self): return False def _is_disabled_for_deprecation(self): - if settings.RTD_ENFORCE_BROWNOUTS_FOR_DEPRECATIONS: + if not settings.RTD_ENFORCE_BROWNOUTS_FOR_DEPRECATIONS: return False tzinfo = pytz.timezone("America/Los_Angeles") @@ -80,7 +80,7 @@ def _is_disabled_for_deprecation(self): # 12 hours brownout. datetime.datetime(2024, 12, 9, 0, 0, 0, tzinfo=tzinfo) < now < datetime.datetime(2024, 12, 9, 12, 0, 0, tzinfo=tzinfo) # 24 hours brownout. - or datetime.datetime(2025, 1, 13, 0, 0, 0, tzinfo=tzinfo) < now < datetime.datetime(2025, 1, 13, 0, 0, 0, tzinfo=tzinfo) + or datetime.datetime(2025, 1, 13, 0, 0, 0, tzinfo=tzinfo) < now < datetime.datetime(2025, 1, 14, 0, 0, 0, tzinfo=tzinfo) # Permanent removal. or datetime.datetime(2025, 1, 20, 0, 0, 0, tzinfo=tzinfo) < now )