From 5c870706867d93d04a7bb01f525d0339fc1fdcfd Mon Sep 17 00:00:00 2001 From: Andrew Hosgood Date: Thu, 2 Jan 2025 12:20:36 +0000 Subject: [PATCH 1/2] Remove MaintenanceModeMiddleware --- config/settings/base.py | 11 -------- etna/core/middleware.py | 39 --------------------------- etna/core/tests/test_middleware.py | 43 ------------------------------ 3 files changed, 93 deletions(-) diff --git a/config/settings/base.py b/config/settings/base.py index 71a9c603a..92d4cb2ef 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -113,7 +113,6 @@ "django.middleware.clickjacking.XFrameOptionsMiddleware", "django.middleware.security.SecurityMiddleware", "whitenoise.middleware.WhiteNoiseMiddleware", - "etna.core.middleware.MaintenanceModeMiddleware", "wagtail.contrib.redirects.middleware.RedirectMiddleware", "etna.core.middleware.InterpretCookiesMiddleware", ] @@ -420,16 +419,6 @@ os.getenv("CACHE_CONTROL_STALE_WHILE_REVALIDATE", 30) ) -# ----------------------------------------------------------------------------- -# Maintenance mode -# ----------------------------------------------------------------------------- - -MAINTENANCE_MODE = strtobool(os.getenv("MAINTENANCE_MODE", "False")) -# MAINTENENCE_MODE_ALLOW_IPS="IPA1,IPA2" where IPA is IP address -MAINTENENCE_MODE_ALLOW_IPS = os.getenv("MAINTENENCE_MODE_ALLOW_IPS", "").split(",") -# datetime is iso MAINTENENCE_MODE_ENDS = "2011-11-04T00:05:23+04:00" -MAINTENENCE_MODE_ENDS = os.getenv("MAINTENENCE_MODE_ENDS", "") - # ----------------------------------------------------------------------------- # Feature flags # ----------------------------------------------------------------------------- diff --git a/etna/core/middleware.py b/etna/core/middleware.py index 4c3cc1ab7..ca442b546 100644 --- a/etna/core/middleware.py +++ b/etna/core/middleware.py @@ -25,45 +25,6 @@ def get_client_ip(request) -> str: return ip -class MaintenanceModeMiddleware: - def __init__(self, get_response): - self.get_response = get_response - - def __call__(self, request): - """ - Renders for a 503 if MAINTENANCE_MODE is set. - Maintenance mode should be bypassed when the user's public IP address is present in MAINTENENCE_MODE_ALLOW_IPS - """ - if settings.MAINTENANCE_MODE: - # check override maintenance mode - if get_client_ip(request) not in settings.MAINTENENCE_MODE_ALLOW_IPS: - kwargs = {"template": "503.html", "status": 503} - if maintenance_mode_ends := settings.MAINTENENCE_MODE_ENDS: - # Evaluate only if config is set - try: - end_datetime = datetime.fromisoformat(maintenance_mode_ends) - except ValueError: - end_datetime = None - logger.debug( - f"settings.MAINTENENCE_MODE_ENDS={maintenance_mode_ends} is not iso format to add to Retry-After header." - ) - - if end_datetime: - # GMT is assumed for naive datetimes, but timezone-aware - # datetimes must be converted to GMT - if end_datetime.utcoffset() is not None: - end_datetime = end_datetime.astimezone(timezone("GMT")) - - kwargs["headers"] = { - "Retry-After": end_datetime.strftime(HTTP_HEADER_FORMAT) - } - return SimpleTemplateResponse(**kwargs).render() - - response = self.get_response(request) - - return response - - class InterpretCookiesMiddleware: exclude_paths = ( "/admin/", diff --git a/etna/core/tests/test_middleware.py b/etna/core/tests/test_middleware.py index 2ed1073c4..41f35868e 100644 --- a/etna/core/tests/test_middleware.py +++ b/etna/core/tests/test_middleware.py @@ -9,49 +9,6 @@ from etna.core.test_utils import prevent_request_warnings -@override_settings(MAINTENANCE_MODE=True) -class TestMaintenanceMode(TestCase): - @prevent_request_warnings - def test_without_maintenance_mode_ends(self): - response = self.client.get("/") - self.assertEqual(response.status_code, 503) - self.assertNotIn("Retry-After", response.headers) - - @prevent_request_warnings - @override_settings(MAINTENENCE_MODE_ENDS="2011-11-04T00:05:23+04:00") - def test_maintenance_mode_ends_with_timezone_info(self): - response = self.client.get("/") - self.assertEqual(response.status_code, 503) - self.assertEqual( - response.headers["Retry-After"], "Thu, 03 Nov 2011 20:05:23 GMT" - ) - - @prevent_request_warnings - @override_settings(MAINTENENCE_MODE_ENDS="2011-11-04T00:05:23") - def test_maintenance_mode_ends_without_timezone_info(self): - response = self.client.get("/") - self.assertEqual(response.status_code, 503) - self.assertEqual( - response.headers["Retry-After"], "Fri, 04 Nov 2011 00:05:23 GMT" - ) - - @override_settings(MAINTENENCE_MODE_ALLOW_IPS=["123.4.5.6"]) - @patch("etna.core.middleware.get_client_ip", return_value="123.4.5.6") - def test_maintenance_mode_bypassed_when_ip_in_allow_list(self, *args): - response = self.client.get("/") - - self.assertEqual(response.status_code, 200) - - @prevent_request_warnings - @override_settings(MAINTENENCE_MODE_ALLOW_IPS=["123.4.5.6"]) - @patch("etna.core.middleware.get_client_ip", return_value="789.0.1.2") - def test_maintenance_mode_enforced_when_ip_not_in_allowed_list( - self, mock_get_client_ip - ): - response = self.client.get("/") - self.assertEqual(response.status_code, 503) - - class TestInterpretCookiesMiddleware(SimpleTestCase): def setUp(self): self.request = HttpRequest() From b5dc2ce0d3c6aff4d6ff323b92e74932e530d0be Mon Sep 17 00:00:00 2001 From: Andrew Hosgood Date: Thu, 2 Jan 2025 12:29:38 +0000 Subject: [PATCH 2/2] Remove unused imports --- etna/core/middleware.py | 5 +---- etna/core/tests/test_middleware.py | 4 +--- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/etna/core/middleware.py b/etna/core/middleware.py index ca442b546..694557caf 100644 --- a/etna/core/middleware.py +++ b/etna/core/middleware.py @@ -1,14 +1,11 @@ import json import logging -from datetime import datetime from urllib.parse import unquote from django.conf import settings from django.http import HttpRequest -from django.template.response import SimpleTemplateResponse, TemplateResponse - -from pytz import timezone +from django.template.response import TemplateResponse logger = logging.getLogger(__name__) diff --git a/etna/core/tests/test_middleware.py b/etna/core/tests/test_middleware.py index 41f35868e..c188cf9ce 100644 --- a/etna/core/tests/test_middleware.py +++ b/etna/core/tests/test_middleware.py @@ -1,12 +1,10 @@ -from unittest.mock import patch from urllib.parse import quote from django.http import HttpRequest from django.template.response import TemplateResponse -from django.test import SimpleTestCase, TestCase, override_settings +from django.test import SimpleTestCase, override_settings from etna.core.middleware import InterpretCookiesMiddleware -from etna.core.test_utils import prevent_request_warnings class TestInterpretCookiesMiddleware(SimpleTestCase):