From 439afdc49a2699d3e3a088b19558574fdec4cac7 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Thu, 24 Nov 2022 22:04:07 +0100 Subject: [PATCH 1/5] add backend for using default static storage --- maintenance_mode/backends.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/maintenance_mode/backends.py b/maintenance_mode/backends.py index 1be4ef6..2268721 100644 --- a/maintenance_mode/backends.py +++ b/maintenance_mode/backends.py @@ -3,6 +3,7 @@ from django.conf import settings from django.core.files.base import ContentFile from django.core.files.storage import default_storage +from django.contrib.staticfiles.storage import staticfiles_storage from maintenance_mode.io import read_file, write_file @@ -55,6 +56,27 @@ def set_value(self, value): default_storage.save(filename, content) +class StaticStorageBackend(AbstractStateBackend): + """ + django-maintenance-mode backend which uses the staticfiles storage. + """ + + def get_value(self): + filename = settings.MAINTENANCE_MODE_STATE_FILE_NAME + try: + with staticfiles_storage.open(filename, "r") as statefile: + return self.from_str_to_bool_value(statefile.read()) + except IOError: + return False + + def set_value(self, value): + filename = settings.MAINTENANCE_MODE_STATE_FILE_NAME + if staticfiles_storage.exists(filename): + staticfiles_storage.delete(filename) + content = ContentFile(self.from_bool_to_str_value(value).encode()) + staticfiles_storage.save(filename, content) + + class LocalFileBackend(AbstractStateBackend): """ django-maintenance-mode backend which uses the local file-sistem. From a87387b5140cb44d09bdb3439b24ca00e567e72f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 24 Nov 2022 21:06:46 +0000 Subject: [PATCH 2/5] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- maintenance_mode/backends.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maintenance_mode/backends.py b/maintenance_mode/backends.py index 2268721..13dc5b9 100644 --- a/maintenance_mode/backends.py +++ b/maintenance_mode/backends.py @@ -1,9 +1,9 @@ # -*- coding: utf-8 -*- from django.conf import settings +from django.contrib.staticfiles.storage import staticfiles_storage from django.core.files.base import ContentFile from django.core.files.storage import default_storage -from django.contrib.staticfiles.storage import staticfiles_storage from maintenance_mode.io import read_file, write_file From 2f9faebc94ae37a8b086c454d39b6a2e5204dfab Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Thu, 24 Nov 2022 22:11:39 +0100 Subject: [PATCH 3/5] add test for new backend --- tests/tests.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tests/tests.py b/tests/tests.py index e9b5f9d..71a3d7f 100644 --- a/tests/tests.py +++ b/tests/tests.py @@ -232,6 +232,27 @@ def test_backend_default_storage(self): "maintenance_mode.backends.LocalFileBackend" ) + def test_backend_static_storage(self): + + self.__reset_state() + + settings.MAINTENANCE_MODE_STATE_BACKEND = ( + "maintenance_mode.backends.StaticStorageBackend" + ) + + backend = core.get_maintenance_mode_backend() + self.assertEqual(backend.get_value(), False) + + backend.set_value(True) + self.assertEqual(backend.get_value(), True) + + backend.set_value(False) + self.assertEqual(backend.get_value(), False) + + settings.MAINTENANCE_MODE_STATE_BACKEND = ( + "maintenance_mode.backends.LocalFileBackend" + ) + def test_backend_custom_invalid(self): self.__reset_state() From 8f11da08f97cbd63137c43d88682b10c31883006 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Thu, 24 Nov 2022 22:19:15 +0100 Subject: [PATCH 4/5] set static settings to default for tests --- tests/tests.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/tests.py b/tests/tests.py index 71a3d7f..665116b 100644 --- a/tests/tests.py +++ b/tests/tests.py @@ -239,6 +239,8 @@ def test_backend_static_storage(self): settings.MAINTENANCE_MODE_STATE_BACKEND = ( "maintenance_mode.backends.StaticStorageBackend" ) + settings.STATIC_URL = "/static/" + settings.STATIC_ROOT = "static" backend = core.get_maintenance_mode_backend() self.assertEqual(backend.get_value(), False) From f3c05bf26d2b82ae79215dbdfd7476cd7072ce5d Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Thu, 24 Nov 2022 22:21:33 +0100 Subject: [PATCH 5/5] add readme entry --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 9d4e06b..5370052 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,10 @@ MAINTENANCE_MODE_STATE_BACKEND = "maintenance_mode.backends.LocalFileBackend" # alternatively it is possible to use the default storage backend MAINTENANCE_MODE_STATE_BACKEND = "maintenance_mode.backends.DefaultStorageBackend" + +# alternatively it is possible to use the static storage backend +# make sure that STATIC_ROOT and SATIC_URL are also set +MAINTENANCE_MODE_STATE_BACKEND = "maintenance_mode.backends.StaticStorageBackend" ``` ```python