Page MenuHomeSoftware Heritage

D7798.id28171.diff
No OneTemporary

D7798.id28171.diff

diff --git a/assets/src/bundles/add_forge/request-dashboard.js b/assets/src/bundles/add_forge/request-dashboard.js
--- a/assets/src/bundles/add_forge/request-dashboard.js
+++ b/assets/src/bundles/add_forge/request-dashboard.js
@@ -57,7 +57,7 @@
// Setting data for the email, now adding static data
$('#contactForgeAdmin').attr('emailTo', forgeRequest.forge_contact_email);
- $('#contactForgeAdmin').attr('emailSubject', `[swh-add_forge_now] Request ${forgeRequest.id}`);
+ $('#contactForgeAdmin').attr('emailSubject', `Software Heritage archival request for ${forgeRequest.forge_domain}`);
populateRequestHistory(data.history);
populateDecisionSelectOption(forgeRequest.status);
} catch (response) {
diff --git a/cypress/integration/add-forge-now-request-dashboard.spec.js b/cypress/integration/add-forge-now-request-dashboard.spec.js
--- a/cypress/integration/add-forge-now-request-dashboard.spec.js
+++ b/cypress/integration/add-forge-now-request-dashboard.spec.js
@@ -5,7 +5,7 @@
* See top-level LICENSE file for more information
*/
-let requestId;
+let requestId, forgeDomain;
function createDummyRequest(urls) {
cy.task('db:add_forge_now:delete');
@@ -27,8 +27,9 @@
'X-CSRFToken': token
}
}).then((response) => {
- // setting requestId from response
+ // setting requestId and forgeDomain from response
requestId = response.body.id;
+ forgeDomain = response.body.forge_domain;
// logout the user
cy.visit(urls.swh_web_homepage());
cy.contains('a', 'logout').click();
@@ -87,7 +88,7 @@
cy.get('#contactForgeAdmin')
.should('have.attr', 'emailsubject')
- .and('include', `[swh-add_forge_now] Request ${requestId}`);
+ .and('include', `Software Heritage archival request for ${forgeDomain}`);
});
it('should not show any error message', function() {
diff --git a/swh/web/add_forge_now/models.py b/swh/web/add_forge_now/models.py
--- a/swh/web/add_forge_now/models.py
+++ b/swh/web/add_forge_now/models.py
@@ -7,6 +7,7 @@
import enum
from typing import List
+from urllib.parse import urlparse
from django.db import models
@@ -118,3 +119,18 @@
"""Generate an email address for correspondence related to this request."""
base_address = get_config()["add_forge_now"]["email_address"]
return get_address_for_pk(salt=APP_LABEL, base_address=base_address, pk=self.pk)
+
+ @property
+ def forge_domain(self) -> str:
+ """Get the domain/netloc out of the forge_url.
+
+ Fallback to using the first part of the url path, if the netloc can't be found
+ (for instance, if the url scheme hasn't been set).
+ """
+
+ parsed_url = urlparse(self.forge_url)
+ domain = parsed_url.netloc
+ if not domain:
+ domain = parsed_url.path.split("/", 1)[0]
+
+ return domain
diff --git a/swh/web/api/views/add_forge_now.py b/swh/web/api/views/add_forge_now.py
--- a/swh/web/api/views/add_forge_now.py
+++ b/swh/web/api/views/add_forge_now.py
@@ -64,6 +64,7 @@
class AddForgeNowRequestSerializer(serializers.ModelSerializer):
inbound_email_address = serializers.CharField()
+ forge_domain = serializers.CharField()
last_moderator = serializers.SerializerMethodField()
last_modified_date = serializers.SerializerMethodField()
diff --git a/swh/web/tests/add_forge_now/test_models.py b/swh/web/tests/add_forge_now/test_models.py
--- a/swh/web/tests/add_forge_now/test_models.py
+++ b/swh/web/tests/add_forge_now/test_models.py
@@ -5,7 +5,7 @@
import pytest
-from swh.web.add_forge_now.models import RequestStatus
+from swh.web.add_forge_now.models import Request, RequestStatus
@pytest.mark.parametrize(
@@ -24,3 +24,15 @@
)
def test_allowed_next_statuses(current_status, allowed_next_statuses):
assert current_status.allowed_next_statuses() == allowed_next_statuses
+
+
+@pytest.mark.parametrize(
+ "forge_url, expected_domain",
+ [
+ ("https://gitlab.example.com/foo/bar", "gitlab.example.com"),
+ ("gitlab.example.com", "gitlab.example.com"),
+ ("gitlab.example.com/foo/bar", "gitlab.example.com"),
+ ],
+)
+def test_request_forge_domain(forge_url, expected_domain):
+ assert Request(forge_url=forge_url).forge_domain == expected_domain
diff --git a/swh/web/tests/api/views/test_add_forge_now.py b/swh/web/tests/api/views/test_add_forge_now.py
--- a/swh/web/tests/api/views/test_add_forge_now.py
+++ b/swh/web/tests/api/views/test_add_forge_now.py
@@ -7,7 +7,7 @@
import threading
import time
from typing import Dict
-from urllib.parse import urlencode
+from urllib.parse import urlencode, urlparse
import iso8601
import pytest
@@ -128,6 +128,7 @@
"last_moderator": resp.data["last_moderator"],
"last_modified_date": resp.data["last_modified_date"],
"inbound_email_address": inbound_email_for_pk(resp.data["id"]),
+ "forge_domain": urlparse(add_forge_data["forge_url"]).netloc,
}
assert date_before < iso8601.parse_date(resp.data["submission_date"]) < date_after
@@ -165,6 +166,7 @@
"last_moderator": resp.data["last_moderator"],
"last_modified_date": resp.data["last_modified_date"],
"inbound_email_address": inbound_email_for_pk(1),
+ "forge_domain": urlparse(ADD_FORGE_DATA_FORGE1["forge_url"]).netloc,
}
assert date_before < iso8601.parse_date(resp.data["submission_date"]) < date_after
@@ -389,6 +391,7 @@
"last_modified_date": resp.data[1]["last_modified_date"],
"id": resp.data[1]["id"],
"inbound_email_address": inbound_email_for_pk(resp.data[1]["id"]),
+ "forge_domain": urlparse(ADD_FORGE_DATA_FORGE1["forge_url"]).netloc,
}
other_forge_request = {
@@ -401,6 +404,7 @@
"last_modified_date": resp.data[0]["last_modified_date"],
"id": resp.data[0]["id"],
"inbound_email_address": inbound_email_for_pk(resp.data[0]["id"]),
+ "forge_domain": urlparse(ADD_FORGE_DATA_FORGE2["forge_url"]).netloc,
}
assert resp.data == [other_forge_request, add_forge_request]
@@ -536,6 +540,7 @@
"last_moderator": add_forge_moderator.username,
"last_modified_date": resp.data["history"][1]["date"],
"inbound_email_address": inbound_email_for_pk(1),
+ "forge_domain": urlparse(ADD_FORGE_DATA_FORGE1["forge_url"]).netloc,
},
"history": [
{

File Metadata

Mime Type
text/plain
Expires
Thu, Jul 3, 3:18 PM (6 d, 8 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3219250

Event Timeline