From ac431f77e87b3633c0633cb5e92ed78518378f2c Mon Sep 17 00:00:00 2001 From: root Date: Wed, 18 Mar 2020 15:16:18 +0000 Subject: [PATCH 1/4] Added setting to bypass dashboard RSS timeout --- .../core/commands/templates/settings.py.tpl | 2 ++ modoboa/core/views/dashboard.py | 27 +++++++++++-------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/modoboa/core/commands/templates/settings.py.tpl b/modoboa/core/commands/templates/settings.py.tpl index 0cebfae59..988c49254 100644 --- a/modoboa/core/commands/templates/settings.py.tpl +++ b/modoboa/core/commands/templates/settings.py.tpl @@ -297,6 +297,8 @@ SILENCED_SYSTEM_CHECKS = [ "security.W019", # modoboa uses iframes to display e-mails ] +DISABLE_RSS = False + # Load settings from extensions {% for extension in extra_settings %} try: diff --git a/modoboa/core/views/dashboard.py b/modoboa/core/views/dashboard.py index 054c1ad3a..4debb0609 100644 --- a/modoboa/core/views/dashboard.py +++ b/modoboa/core/views/dashboard.py @@ -8,6 +8,8 @@ from requests.exceptions import RequestException from django.contrib.auth import mixins as auth_mixins from django.views import generic +from django.conf import settings + from .. import signals MODOBOA_WEBSITE_URL = "https://modoboa.org/" @@ -43,11 +45,13 @@ class DashboardView(auth_mixins.AccessMixin, generic.TemplateView): self.request.localconfig.parameters.get_value("rss_feed_url")) if custom_feed_url: feed_url = custom_feed_url - posts = feedparser.parse(feed_url) + if not settings.DISABLE_RSS: + posts = feedparser.parse(feed_url) entries = [] - for entry in posts["entries"][:5]: - entry["published"] = parser.parse(entry["published"]) - entries.append(entry) + if not settings.DISABLE_RSS: + for entry in posts["entries"][:5]: + entry["published"] = parser.parse(entry["published"]) + entries.append(entry) context["widgets"]["left"].append("core/_latest_news_widget.html") context.update({"news": entries}) @@ -57,13 +61,14 @@ class DashboardView(auth_mixins.AccessMixin, generic.TemplateView): url = "{}{}/api/projects/?featured=true".format( MODOBOA_WEBSITE_URL, lang) features = [] - try: - response = requests.get(url) - except RequestException: - pass - else: - if response.status_code == 200: - features = response.json() + if not settings.DISABLE_RSS: + try: + response = requests.get(url) + except RequestException: + pass + else: + if response.status_code == 200: + features = response.json() context["widgets"]["right"].append("core/_current_features.html") context.update({"features": features}) From 8df80cc5b24764db3d8f0c4ef92597155ee9ad50 Mon Sep 17 00:00:00 2001 From: ClemRiviere Date: Fri, 27 Mar 2020 16:13:16 +0100 Subject: [PATCH 2/4] Updating test_project settings --- test_project/test_project/settings.py | 1 + 1 file changed, 1 insertion(+) diff --git a/test_project/test_project/settings.py b/test_project/test_project/settings.py index df88ee963..d11adf671 100644 --- a/test_project/test_project/settings.py +++ b/test_project/test_project/settings.py @@ -292,4 +292,5 @@ SILENCED_SYSTEM_CHECKS = [ "security.W019", # modoboa uses iframes to display e-mails ] +DISABLE_RSS = False # Load settings from extensions From 613cf1546a3d7114077bb1831fc0f442a2c0c4c6 Mon Sep 17 00:00:00 2001 From: ClemRiviere Date: Tue, 14 Apr 2020 17:33:09 +0200 Subject: [PATCH 3/4] Adding unit tests --- modoboa/core/tests/test_views.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/modoboa/core/tests/test_views.py b/modoboa/core/tests/test_views.py index 9f7b24787..f4cb7cbc5 100644 --- a/modoboa/core/tests/test_views.py +++ b/modoboa/core/tests/test_views.py @@ -4,6 +4,7 @@ from testfixtures import compare from django import forms from django.urls import reverse +from django.test import override_settings from modoboa.lib.tests import ModoTestCase from modoboa.parameters import forms as param_forms, tools as param_tools @@ -159,6 +160,20 @@ class DashboardTestCase(ModoTestCase): response = self.client.get(url) self.assertNotContains(response, "Features looking for sponsoring") + @override_settings(DISABLE_RSS=False) + def test_enable_rss(self): + """Load dashboard with DISABLE_RSS = False""" + url = reverse("core:dashboard") + response = self.client.get(url) + self.assertContains(response, 'href="https://modoboa.org/en/weblog/') + + @override_settings(DISABLE_RSS=True) + def test_disable_rss(self): + """Load dashboard with DISABLE_RSS = True""" + url = reverse("core:dashboard") + response = self.client.get(url) + self.assertNotContains(response, 'https://modoboa.org/en/weblog/') + def test_root_dispatch(self): """Check root dispatching.""" url = reverse("core:root") From e2492a08b0a7749fbebc3f161af17df20142d028 Mon Sep 17 00:00:00 2001 From: ClemRiviere Date: Wed, 15 Apr 2020 15:05:57 +0200 Subject: [PATCH 4/4] Code improvements --- modoboa/core/commands/templates/settings.py.tpl | 2 +- modoboa/core/tests/test_views.py | 12 ++++++------ modoboa/core/views/dashboard.py | 7 +++---- test_project/test_project/settings.py | 2 +- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/modoboa/core/commands/templates/settings.py.tpl b/modoboa/core/commands/templates/settings.py.tpl index 988c49254..ae49bbe42 100644 --- a/modoboa/core/commands/templates/settings.py.tpl +++ b/modoboa/core/commands/templates/settings.py.tpl @@ -297,7 +297,7 @@ SILENCED_SYSTEM_CHECKS = [ "security.W019", # modoboa uses iframes to display e-mails ] -DISABLE_RSS = False +DISABLE_DASHBOARD_EXTERNAL_QUERIES = False # Load settings from extensions {% for extension in extra_settings %} diff --git a/modoboa/core/tests/test_views.py b/modoboa/core/tests/test_views.py index f4cb7cbc5..bed51b1a5 100644 --- a/modoboa/core/tests/test_views.py +++ b/modoboa/core/tests/test_views.py @@ -160,16 +160,16 @@ class DashboardTestCase(ModoTestCase): response = self.client.get(url) self.assertNotContains(response, "Features looking for sponsoring") - @override_settings(DISABLE_RSS=False) - def test_enable_rss(self): - """Load dashboard with DISABLE_RSS = False""" + @override_settings(DISABLE_DASHBOARD_EXTERNAL_QUERIES=False) + def test_enable_dashboard_external_queries(self): + """Load dashboard with DISABLE_DASHBOARD_EXTERNAL_QUERIES = False""" url = reverse("core:dashboard") response = self.client.get(url) self.assertContains(response, 'href="https://modoboa.org/en/weblog/') - @override_settings(DISABLE_RSS=True) - def test_disable_rss(self): - """Load dashboard with DISABLE_RSS = True""" + @override_settings(DISABLE_DASHBOARD_EXTERNAL_QUERIES=True) + def test_disable_dashboard_external_queries(self): + """Load dashboard with DISABLE_DASHBOARD_EXTERNAL_QUERIES = True""" url = reverse("core:dashboard") response = self.client.get(url) self.assertNotContains(response, 'https://modoboa.org/en/weblog/') diff --git a/modoboa/core/views/dashboard.py b/modoboa/core/views/dashboard.py index 4debb0609..5443e9f90 100644 --- a/modoboa/core/views/dashboard.py +++ b/modoboa/core/views/dashboard.py @@ -45,10 +45,9 @@ class DashboardView(auth_mixins.AccessMixin, generic.TemplateView): self.request.localconfig.parameters.get_value("rss_feed_url")) if custom_feed_url: feed_url = custom_feed_url - if not settings.DISABLE_RSS: - posts = feedparser.parse(feed_url) entries = [] - if not settings.DISABLE_RSS: + if not settings.DISABLE_DASHBOARD_EXTERNAL_QUERIES: + posts = feedparser.parse(feed_url) for entry in posts["entries"][:5]: entry["published"] = parser.parse(entry["published"]) entries.append(entry) @@ -61,7 +60,7 @@ class DashboardView(auth_mixins.AccessMixin, generic.TemplateView): url = "{}{}/api/projects/?featured=true".format( MODOBOA_WEBSITE_URL, lang) features = [] - if not settings.DISABLE_RSS: + if not settings.DISABLE_DASHBOARD_EXTERNAL_QUERIES: try: response = requests.get(url) except RequestException: diff --git a/test_project/test_project/settings.py b/test_project/test_project/settings.py index d11adf671..89670d2b2 100644 --- a/test_project/test_project/settings.py +++ b/test_project/test_project/settings.py @@ -292,5 +292,5 @@ SILENCED_SYSTEM_CHECKS = [ "security.W019", # modoboa uses iframes to display e-mails ] -DISABLE_RSS = False +DISABLE_DASHBOARD_EXTERNAL_QUERIES = False # Load settings from extensions