From a655d8db27ce631e69fa74c70c08e0fb688caa77 Mon Sep 17 00:00:00 2001 From: mattiagiupponi <51856725+mattiagiupponi@users.noreply.github.com> Date: Tue, 21 Nov 2023 12:46:15 +0100 Subject: [PATCH] Control read only mode with environmental variable #11710 (#11711) * Add env-var to override the readonly mode * Fix flake8 issue * Add test coverage * Add test coverage * Add test coverage * Fix broken test --- .env.sample | 2 ++ geonode/base/tests.py | 11 +++++++++++ geonode/singleton.py | 5 +++++ 3 files changed, 18 insertions(+) diff --git a/.env.sample b/.env.sample index f43b64a7823..962f5a82258 100644 --- a/.env.sample +++ b/.env.sample @@ -253,3 +253,5 @@ RESTART_POLICY_WINDOW=120s DEFAULT_MAX_UPLOAD_SIZE=5368709120 DEFAULT_MAX_PARALLEL_UPLOADS_PER_USER=5 + +# FORCE_READ_ONLY_MODE=False Override the read-only value saved in the configuration \ No newline at end of file diff --git a/geonode/base/tests.py b/geonode/base/tests.py index d61b021ad66..f3741425074 100644 --- a/geonode/base/tests.py +++ b/geonode/base/tests.py @@ -666,6 +666,17 @@ def test_maintenance_true(self): self.assertEqual(response.status_code, 503, "User is allowed to get index page") + @patch.dict(os.environ, {"FORCE_READ_ONLY_MODE": "True"}) + def test_readonly_overwrite_by_env(self): + config = Configuration.load() + self.assertTrue(config.read_only) + + @patch.dict(os.environ, {"FORCE_READ_ONLY_MODE": "False"}) + def test_readonly_is_not_overwrite_by_env(self): + # will take the value from the db + config = Configuration.load() + self.assertFalse(config.read_only) + class TestOwnerRightsRequestUtils(TestCase): def setUp(self): diff --git a/geonode/singleton.py b/geonode/singleton.py index def45c9a430..d6607475716 100644 --- a/geonode/singleton.py +++ b/geonode/singleton.py @@ -20,6 +20,8 @@ # Geonode functionality +import os +import ast from django.db import models @@ -38,6 +40,9 @@ class Meta: @classmethod def load(cls): obj, _ = cls.objects.get_or_create(pk=1) + val = os.getenv("FORCE_READ_ONLY_MODE", None) + if val is not None: + setattr(obj, "read_only", ast.literal_eval(val)) return obj def save(self, *args, **kwargs):