mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-24 00:07:02 -04:00
Allow lookup of org details
This commit: - makes the logic around looking up a domain a bit more sophisticated by matching on the longest domain name first - exposes the details about an organisation to consumers of the `GovernmentDomain` class
This commit is contained in:
162
app/utils.py
162
app/utils.py
@@ -439,131 +439,117 @@ class NotGovernmentDomain(Exception):
|
|||||||
class GovernmentDomain:
|
class GovernmentDomain:
|
||||||
|
|
||||||
domains = {
|
domains = {
|
||||||
"gov.uk": {
|
"gov.uk": None,
|
||||||
"sector": None,
|
"mod.uk": None,
|
||||||
"agreement_signed": False,
|
"mil.uk": None,
|
||||||
},
|
"ddc-mod.org": None,
|
||||||
"mod.uk": {
|
|
||||||
"sector": None,
|
|
||||||
"agreement_signed": False,
|
|
||||||
},
|
|
||||||
"mil.uk": {
|
|
||||||
"sector": None,
|
|
||||||
"agreement_signed": False,
|
|
||||||
},
|
|
||||||
"ddc-mod.org": {
|
|
||||||
"sector": None,
|
|
||||||
"agreement_signed": False,
|
|
||||||
},
|
|
||||||
"slc.co.uk": {
|
"slc.co.uk": {
|
||||||
|
"owner": "Student Loans Company",
|
||||||
"sector": None,
|
"sector": None,
|
||||||
"agreement_signed": False,
|
"agreement_signed": False,
|
||||||
},
|
},
|
||||||
"gov.scot": {
|
"gov.scot": None,
|
||||||
"sector": None,
|
|
||||||
"agreement_signed": False,
|
|
||||||
},
|
|
||||||
"parliament.uk": {
|
"parliament.uk": {
|
||||||
|
"owner": "Parliament",
|
||||||
"sector": None,
|
"sector": None,
|
||||||
"agreement_signed": False,
|
"agreement_signed": False,
|
||||||
},
|
},
|
||||||
"nhs.uk": {
|
"nhs.uk": {
|
||||||
|
"owner": "NHS",
|
||||||
"sector": None,
|
"sector": None,
|
||||||
"agreement_signed": False,
|
"agreement_signed": False,
|
||||||
},
|
},
|
||||||
"nhs.net": {
|
"nhs.net": "nhs.uk",
|
||||||
"sector": None,
|
"police.uk": None,
|
||||||
"agreement_signed": False,
|
|
||||||
},
|
|
||||||
"police.uk": {
|
|
||||||
"sector": None,
|
|
||||||
"agreement_signed": False,
|
|
||||||
},
|
|
||||||
"dclgdatamart.co.uk": {
|
"dclgdatamart.co.uk": {
|
||||||
|
"owner": None,
|
||||||
"sector": None,
|
"sector": None,
|
||||||
"agreement_signed": False,
|
"agreement_signed": False,
|
||||||
},
|
},
|
||||||
"ucds.email": {
|
"dwp.gov.uk": {
|
||||||
|
"owner": "Deparment for Work and Pensions",
|
||||||
"sector": None,
|
"sector": None,
|
||||||
"agreement_signed": False,
|
"agreement_signed": False,
|
||||||
},
|
},
|
||||||
|
"dwp.gsi.gov.uk": "dwp.gov.uk",
|
||||||
|
"ucds.email": "dwp.gov.uk",
|
||||||
"naturalengland.org.uk": {
|
"naturalengland.org.uk": {
|
||||||
|
"Owner": "Natural England",
|
||||||
"sector": None,
|
"sector": None,
|
||||||
"agreement_signed": False,
|
"agreement_signed": False,
|
||||||
},
|
},
|
||||||
"hmcts.net": {
|
"hmcts.net": {
|
||||||
|
"owner": "Her Majesty’s Courts and Tribunals Service",
|
||||||
"sector": None,
|
"sector": None,
|
||||||
"agreement_signed": False,
|
"agreement_signed": False,
|
||||||
},
|
},
|
||||||
"scotent.co.uk": {
|
"scotent.co.uk": None,
|
||||||
"sector": None,
|
"assembly.wales": None,
|
||||||
"agreement_signed": False,
|
"cjsm.net": None,
|
||||||
},
|
"cqc.org.uk": None,
|
||||||
"assembly.wales": {
|
|
||||||
"sector": None,
|
|
||||||
"agreement_signed": False,
|
|
||||||
},
|
|
||||||
"cjsm.net": {
|
|
||||||
"sector": None,
|
|
||||||
"agreement_signed": False,
|
|
||||||
},
|
|
||||||
"cqc.org.uk": {
|
|
||||||
"sector": None,
|
|
||||||
"agreement_signed": False,
|
|
||||||
},
|
|
||||||
"bl.uk": {
|
"bl.uk": {
|
||||||
|
"owner": "British Library",
|
||||||
"sector": None,
|
"sector": None,
|
||||||
"agreement_signed": False,
|
"agreement_signed": False,
|
||||||
},
|
},
|
||||||
"stfc.ac.uk": {
|
"stfc.ac.uk": None,
|
||||||
"sector": None,
|
"wmfs.net": None,
|
||||||
"agreement_signed": False,
|
"bbsrc.ac.uk": None,
|
||||||
},
|
"acas.org.uk": None,
|
||||||
"wmfs.net": {
|
"gov.wales": None,
|
||||||
"sector": None,
|
"biglotteryfund.org.uk": None,
|
||||||
"agreement_signed": False,
|
|
||||||
},
|
|
||||||
"bbsrc.ac.uk": {
|
|
||||||
"sector": None,
|
|
||||||
"agreement_signed": False,
|
|
||||||
},
|
|
||||||
"acas.org.uk": {
|
|
||||||
"sector": None,
|
|
||||||
"agreement_signed": False,
|
|
||||||
},
|
|
||||||
"gov.wales": {
|
|
||||||
"sector": None,
|
|
||||||
"agreement_signed": False,
|
|
||||||
},
|
|
||||||
"biglotteryfund.org.uk": {
|
|
||||||
"sector": None,
|
|
||||||
"agreement_signed": False,
|
|
||||||
},
|
|
||||||
"marinemanagement.org.uk": {
|
"marinemanagement.org.uk": {
|
||||||
"sector": None,
|
"owner": "Marine Management Organisation",
|
||||||
"agreement_signed": False,
|
|
||||||
},
|
},
|
||||||
"britishmuseum.org": {
|
"britishmuseum.org": {
|
||||||
"sector": None,
|
"owner": "British Museum",
|
||||||
"agreement_signed": False,
|
|
||||||
},
|
|
||||||
"derrystrabane.com": {
|
|
||||||
"sector": None,
|
|
||||||
"agreement_signed": False,
|
|
||||||
},
|
|
||||||
"highwaysengland.co.uk": {
|
|
||||||
"sector": None,
|
|
||||||
"agreement_signed": False,
|
|
||||||
},
|
},
|
||||||
|
"derrystrabane.com": None,
|
||||||
|
"highwaysengland.co.uk": None,
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, email_address_or_domain):
|
def __init__(self, email_address_or_domain):
|
||||||
|
|
||||||
for domain, attributes in self.domains.items():
|
try:
|
||||||
if re.search(
|
self._match = sorted(
|
||||||
"[\.|@]({})$".format(domain.replace(".", "\.")),
|
(
|
||||||
email_address_or_domain.lower()
|
domain for domain in self.domains.keys()
|
||||||
):
|
if self._domain_matches(email_address_or_domain, domain)
|
||||||
return
|
),
|
||||||
|
key=len
|
||||||
|
)[0]
|
||||||
|
except IndexError:
|
||||||
|
raise NotGovernmentDomain()
|
||||||
|
|
||||||
raise NotGovernmentDomain()
|
self.owner, self.sector, self.agreement_signed = self._get_details_of_domain()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _domain_matches(email_address_or_domain, domain):
|
||||||
|
|
||||||
|
email_address_or_domain = email_address_or_domain.lower()
|
||||||
|
|
||||||
|
return (email_address_or_domain == domain) or re.search(
|
||||||
|
"[\.|@]({})$".format(domain.replace(".", "\.")),
|
||||||
|
email_address_or_domain
|
||||||
|
)
|
||||||
|
|
||||||
|
def _get_details_of_domain(self):
|
||||||
|
|
||||||
|
details = self.domains[self._match]
|
||||||
|
|
||||||
|
if isinstance(details, str):
|
||||||
|
return GovernmentDomain(details)._get_details_of_domain()
|
||||||
|
|
||||||
|
elif isinstance(details, dict):
|
||||||
|
return(
|
||||||
|
details.get("owner"),
|
||||||
|
details.get("sector"),
|
||||||
|
bool(details.get("agreement_signed")),
|
||||||
|
)
|
||||||
|
|
||||||
|
else:
|
||||||
|
return(
|
||||||
|
None,
|
||||||
|
None,
|
||||||
|
False,
|
||||||
|
)
|
||||||
|
|||||||
@@ -13,7 +13,8 @@ from app.utils import (
|
|||||||
generate_next_dict,
|
generate_next_dict,
|
||||||
Spreadsheet,
|
Spreadsheet,
|
||||||
get_letter_timings,
|
get_letter_timings,
|
||||||
get_cdn_domain
|
get_cdn_domain,
|
||||||
|
GovernmentDomain,
|
||||||
)
|
)
|
||||||
from tests.conftest import fake_uuid
|
from tests.conftest import fake_uuid
|
||||||
|
|
||||||
@@ -307,3 +308,30 @@ def test_get_cdn_domain_on_non_localhost(client, mocker):
|
|||||||
mocker.patch.dict('app.current_app.config', values={'ADMIN_BASE_URL': 'https://some.admintest.com'})
|
mocker.patch.dict('app.current_app.config', values={'ADMIN_BASE_URL': 'https://some.admintest.com'})
|
||||||
domain = get_cdn_domain()
|
domain = get_cdn_domain()
|
||||||
assert domain == 'static-logos.admintest.com'
|
assert domain == 'static-logos.admintest.com'
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("domain_or_email_address", (
|
||||||
|
"test@ucds.email", "test@dwp.gsi.gov.uk", "test@dwp.gov.uk", "dwp.gov.uk",
|
||||||
|
))
|
||||||
|
def test_get_valid_government_domain_known_details(domain_or_email_address):
|
||||||
|
government_domain = GovernmentDomain(domain_or_email_address)
|
||||||
|
assert government_domain.sector is None
|
||||||
|
assert government_domain.owner is None
|
||||||
|
assert government_domain.agreement_signed is False
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("domain_or_email_address", (
|
||||||
|
"test@police.gov.uk", "police.gov.uk",
|
||||||
|
))
|
||||||
|
def test_get_valid_government_domain_unknown_details(domain_or_email_address):
|
||||||
|
government_domain = GovernmentDomain(domain_or_email_address)
|
||||||
|
assert government_domain.sector is None
|
||||||
|
assert government_domain.owner is None
|
||||||
|
assert government_domain.agreement_signed is False
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_valid_government_domain_some_known_details():
|
||||||
|
government_domain = GovernmentDomain("marinemanagement.org.uk")
|
||||||
|
assert government_domain.sector is None
|
||||||
|
assert government_domain.owner == "Marine Management Organisation"
|
||||||
|
assert government_domain.agreement_signed is False
|
||||||
|
|||||||
Reference in New Issue
Block a user