Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F7066567
D8317.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
8 KB
Subscribers
None
D8317.id.diff
View Options
diff --git a/swh/web/archive_coverage/__init__.py b/swh/web/archive_coverage/__init__.py
new file mode 100644
diff --git a/swh/web/templates/misc/coverage.html b/swh/web/archive_coverage/templates/archive-coverage.html
rename from swh/web/templates/misc/coverage.html
rename to swh/web/archive_coverage/templates/archive-coverage.html
diff --git a/swh/web/archive_coverage/urls.py b/swh/web/archive_coverage/urls.py
new file mode 100644
--- /dev/null
+++ b/swh/web/archive_coverage/urls.py
@@ -0,0 +1,12 @@
+# Copyright (C) 2018-2022 The Software Heritage developers
+# See the AUTHORS file at the top-level directory of this distribution
+# License: GNU Affero General Public License version 3, or any later version
+# See top-level LICENSE file for more information
+
+from django.urls import re_path as url
+
+from swh.web.archive_coverage.views import swh_coverage
+
+urlpatterns = [
+ url(r"^coverage/$", swh_coverage, name="swh-coverage"),
+]
diff --git a/swh/web/misc/coverage.py b/swh/web/archive_coverage/views.py
rename from swh/web/misc/coverage.py
rename to swh/web/archive_coverage/views.py
--- a/swh/web/misc/coverage.py
+++ b/swh/web/archive_coverage/views.py
@@ -10,7 +10,6 @@
from django.http.request import HttpRequest
from django.http.response import HttpResponse
from django.shortcuts import render
-from django.urls import re_path as url
from django.views.decorators.cache import never_cache
from django.views.decorators.clickjacking import xframe_options_exempt
@@ -383,7 +382,7 @@
@xframe_options_exempt
@never_cache
-def _swh_coverage(request: HttpRequest) -> HttpResponse:
+def swh_coverage(request: HttpRequest) -> HttpResponse:
use_cache = is_swh_web_production(request)
listers_metrics = _get_listers_metrics(use_cache)
@@ -484,7 +483,7 @@
return render(
request,
- "misc/coverage.html",
+ "archive-coverage.html",
{
"origins": {
"Regular crawling": listed_origins,
@@ -494,8 +493,3 @@
"focus": focus,
},
)
-
-
-urlpatterns = [
- url(r"^coverage/$", _swh_coverage, name="swh-coverage"),
-]
diff --git a/swh/web/config.py b/swh/web/config.py
--- a/swh/web/config.py
+++ b/swh/web/config.py
@@ -164,6 +164,7 @@
"swh.web.save_code_now",
"swh.web.deposit",
"swh.web.badges",
+ "swh.web.archive_coverage",
],
),
}
diff --git a/swh/web/misc/urls.py b/swh/web/misc/urls.py
--- a/swh/web/misc/urls.py
+++ b/swh/web/misc/urls.py
@@ -61,7 +61,6 @@
urlpatterns = [
- url(r"^", include("swh.web.misc.coverage")),
url(r"^jslicenses/$", _jslicenses, name="jslicenses"),
url(r"^stat_counters/$", _stat_counters, name="stat-counters"),
url(r"^metrics/prometheus/$", prometheus_metrics, name="metrics-prometheus"),
diff --git a/swh/web/templates/homepage.html b/swh/web/templates/homepage.html
--- a/swh/web/templates/homepage.html
+++ b/swh/web/templates/homepage.html
@@ -52,11 +52,15 @@
</p>
</div>
-<div class="p-3">
-<h4>Content</h4>
+{% if "swh.web.archive_coverage" in SWH_DJANGO_APPS %}
-<iframe class="swh-coverage-list" src="{% url 'swh-coverage' %}"></iframe>
-</div>
+ <div class="p-3">
+ <h4>Content</h4>
+
+ <iframe class="swh-coverage-iframe" src="{% url 'swh-coverage' %}"></iframe>
+ </div>
+
+{% endif %}
<div class="p-3">
<h4>Size</h4>
diff --git a/swh/web/tests/archive_coverage/__init__.py b/swh/web/tests/archive_coverage/__init__.py
new file mode 100644
diff --git a/swh/web/tests/archive_coverage/test_app.py b/swh/web/tests/archive_coverage/test_app.py
new file mode 100644
--- /dev/null
+++ b/swh/web/tests/archive_coverage/test_app.py
@@ -0,0 +1,33 @@
+# Copyright (C) 2022 The Software Heritage developers
+# See the AUTHORS file at the top-level directory of this distribution
+# License: GNU Affero General Public License version 3, or any later version
+# See top-level LICENSE file for more information
+
+import pytest
+
+from django.urls import get_resolver
+
+from swh.web.archive_coverage.urls import urlpatterns
+from swh.web.tests.django_asserts import assert_not_contains
+from swh.web.tests.helpers import check_html_get_response
+from swh.web.utils import reverse
+
+
+@pytest.mark.django_db
+def test_archive_coverage_deactivate(client, django_settings):
+ """Check archive coverage feature is deactivated when the swh.web.archive_coverage
+ django application is not in installed apps."""
+
+ django_settings.SWH_DJANGO_APPS = [
+ app
+ for app in django_settings.SWH_DJANGO_APPS
+ if app != "swh.web.archive_coverage"
+ ]
+
+ url = reverse("swh-web-homepage")
+ resp = check_html_get_response(client, url, status_code=200)
+ assert_not_contains(resp, "swh-coverage-iframe")
+
+ archive_coverage_view_names = set(urlpattern.name for urlpattern in urlpatterns)
+ all_view_names = set(get_resolver().reverse_dict.keys())
+ assert archive_coverage_view_names & all_view_names == set()
diff --git a/swh/web/tests/misc/test_coverage.py b/swh/web/tests/archive_coverage/test_coverage.py
rename from swh/web/tests/misc/test_coverage.py
rename to swh/web/tests/archive_coverage/test_coverage.py
--- a/swh/web/tests/misc/test_coverage.py
+++ b/swh/web/tests/archive_coverage/test_coverage.py
@@ -16,8 +16,12 @@
from django.utils.html import escape
from swh.scheduler.model import LastVisitStatus, ListedOrigin, OriginVisitStats
+from swh.web.archive_coverage.views import (
+ deposited_origins,
+ legacy_origins,
+ listed_origins,
+)
from swh.web.config import SWH_WEB_SERVER_NAME
-from swh.web.misc.coverage import deposited_origins, legacy_origins, listed_origins
from swh.web.tests.django_asserts import assert_contains, assert_not_contains
from swh.web.tests.helpers import check_html_get_response, check_http_get_response
from swh.web.utils import reverse
@@ -30,7 +34,7 @@
"""
url = reverse("swh-coverage")
check_html_get_response(
- client, url, status_code=200, template_used="misc/coverage.html"
+ client, url, status_code=200, template_used="archive-coverage.html"
)
@@ -43,7 +47,7 @@
that will be consumed by the archive coverage view.
"""
# mock calls to get nixguix origin counts
- mock_archive = mocker.patch("swh.web.misc.coverage.archive")
+ mock_archive = mocker.patch("swh.web.archive_coverage.views.archive")
mock_archive.lookup_latest_origin_snapshot.return_value = {"id": "some-snapshot"}
mock_archive.lookup_snapshot_sizes.return_value = {"release": 30095}
@@ -98,7 +102,7 @@
"status": "done",
}
)
- get_deposits_list = mocker.patch("swh.web.misc.coverage.get_deposits_list")
+ get_deposits_list = mocker.patch("swh.web.archive_coverage.views.get_deposits_list")
get_deposits_list.return_value = deposits
@@ -107,7 +111,7 @@
# check view gets rendered without errors
url = reverse("swh-coverage")
resp = check_html_get_response(
- client, url, status_code=200, template_used="misc/coverage.html"
+ client, url, status_code=200, template_used="archive-coverage.html"
)
# check logos and origins search links are present in the rendered page
@@ -153,7 +157,7 @@
# check view gets rendered without errors
url = reverse("swh-coverage", query_params={"focus": ",".join(focus)})
resp = check_html_get_response(
- client, url, status_code=200, template_used="misc/coverage.html"
+ client, url, status_code=200, template_used="archive-coverage.html"
)
# check focused elements
@@ -174,7 +178,7 @@
@pytest.fixture
def archive_coverage_data_with_non_visited_origins(mocker, swh_scheduler):
# mock calls to get nixguix origin counts
- mock_archive = mocker.patch("swh.web.misc.coverage.archive")
+ mock_archive = mocker.patch("swh.web.archive_coverage.views.archive")
mock_archive.lookup_latest_origin_snapshot.return_value = {"id": "some-snapshot"}
mock_archive.lookup_snapshot_sizes.return_value = {"release": 30095}
@@ -223,7 +227,7 @@
swh_scheduler.update_metrics()
# set deposit origins as empty
- get_deposits_list = mocker.patch("swh.web.misc.coverage.get_deposits_list")
+ get_deposits_list = mocker.patch("swh.web.archive_coverage.views.get_deposits_list")
get_deposits_list.return_value = []
@@ -239,7 +243,7 @@
client,
url,
status_code=200,
- template_used="misc/coverage.html",
+ template_used="archive-coverage.html",
server_name=SWH_WEB_SERVER_NAME,
)
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Nov 5 2024, 3:16 PM (12 w, 4 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3223245
Attached To
D8317: misc/coverage: Move feature into its own django application
Event Timeline
Log In to Comment