mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-05-03 07:31:28 -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:
|
||||
|
||||
domains = {
|
||||
"gov.uk": {
|
||||
"sector": None,
|
||||
"agreement_signed": False,
|
||||
},
|
||||
"mod.uk": {
|
||||
"sector": None,
|
||||
"agreement_signed": False,
|
||||
},
|
||||
"mil.uk": {
|
||||
"sector": None,
|
||||
"agreement_signed": False,
|
||||
},
|
||||
"ddc-mod.org": {
|
||||
"sector": None,
|
||||
"agreement_signed": False,
|
||||
},
|
||||
"gov.uk": None,
|
||||
"mod.uk": None,
|
||||
"mil.uk": None,
|
||||
"ddc-mod.org": None,
|
||||
"slc.co.uk": {
|
||||
"owner": "Student Loans Company",
|
||||
"sector": None,
|
||||
"agreement_signed": False,
|
||||
},
|
||||
"gov.scot": {
|
||||
"sector": None,
|
||||
"agreement_signed": False,
|
||||
},
|
||||
"gov.scot": None,
|
||||
"parliament.uk": {
|
||||
"owner": "Parliament",
|
||||
"sector": None,
|
||||
"agreement_signed": False,
|
||||
},
|
||||
"nhs.uk": {
|
||||
"owner": "NHS",
|
||||
"sector": None,
|
||||
"agreement_signed": False,
|
||||
},
|
||||
"nhs.net": {
|
||||
"sector": None,
|
||||
"agreement_signed": False,
|
||||
},
|
||||
"police.uk": {
|
||||
"sector": None,
|
||||
"agreement_signed": False,
|
||||
},
|
||||
"nhs.net": "nhs.uk",
|
||||
"police.uk": None,
|
||||
"dclgdatamart.co.uk": {
|
||||
"owner": None,
|
||||
"sector": None,
|
||||
"agreement_signed": False,
|
||||
},
|
||||
"ucds.email": {
|
||||
"dwp.gov.uk": {
|
||||
"owner": "Deparment for Work and Pensions",
|
||||
"sector": None,
|
||||
"agreement_signed": False,
|
||||
},
|
||||
"dwp.gsi.gov.uk": "dwp.gov.uk",
|
||||
"ucds.email": "dwp.gov.uk",
|
||||
"naturalengland.org.uk": {
|
||||
"Owner": "Natural England",
|
||||
"sector": None,
|
||||
"agreement_signed": False,
|
||||
},
|
||||
"hmcts.net": {
|
||||
"owner": "Her Majesty’s Courts and Tribunals Service",
|
||||
"sector": None,
|
||||
"agreement_signed": False,
|
||||
},
|
||||
"scotent.co.uk": {
|
||||
"sector": None,
|
||||
"agreement_signed": False,
|
||||
},
|
||||
"assembly.wales": {
|
||||
"sector": None,
|
||||
"agreement_signed": False,
|
||||
},
|
||||
"cjsm.net": {
|
||||
"sector": None,
|
||||
"agreement_signed": False,
|
||||
},
|
||||
"cqc.org.uk": {
|
||||
"sector": None,
|
||||
"agreement_signed": False,
|
||||
},
|
||||
"scotent.co.uk": None,
|
||||
"assembly.wales": None,
|
||||
"cjsm.net": None,
|
||||
"cqc.org.uk": None,
|
||||
"bl.uk": {
|
||||
"owner": "British Library",
|
||||
"sector": None,
|
||||
"agreement_signed": False,
|
||||
},
|
||||
"stfc.ac.uk": {
|
||||
"sector": None,
|
||||
"agreement_signed": False,
|
||||
},
|
||||
"wmfs.net": {
|
||||
"sector": 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,
|
||||
},
|
||||
"stfc.ac.uk": None,
|
||||
"wmfs.net": None,
|
||||
"bbsrc.ac.uk": None,
|
||||
"acas.org.uk": None,
|
||||
"gov.wales": None,
|
||||
"biglotteryfund.org.uk": None,
|
||||
"marinemanagement.org.uk": {
|
||||
"sector": None,
|
||||
"agreement_signed": False,
|
||||
"owner": "Marine Management Organisation",
|
||||
},
|
||||
"britishmuseum.org": {
|
||||
"sector": None,
|
||||
"agreement_signed": False,
|
||||
},
|
||||
"derrystrabane.com": {
|
||||
"sector": None,
|
||||
"agreement_signed": False,
|
||||
},
|
||||
"highwaysengland.co.uk": {
|
||||
"sector": None,
|
||||
"agreement_signed": False,
|
||||
"owner": "British Museum",
|
||||
},
|
||||
"derrystrabane.com": None,
|
||||
"highwaysengland.co.uk": None,
|
||||
}
|
||||
|
||||
def __init__(self, email_address_or_domain):
|
||||
|
||||
for domain, attributes in self.domains.items():
|
||||
if re.search(
|
||||
"[\.|@]({})$".format(domain.replace(".", "\.")),
|
||||
email_address_or_domain.lower()
|
||||
):
|
||||
return
|
||||
try:
|
||||
self._match = sorted(
|
||||
(
|
||||
domain for domain in self.domains.keys()
|
||||
if self._domain_matches(email_address_or_domain, domain)
|
||||
),
|
||||
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,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user