mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-07-13 01:44:08 -04:00
Merge pull request #2756 from alphagov/clean-up-domains
Clean up domains file
This commit is contained in:
1307
app/domains.yml
1307
app/domains.yml
File diff suppressed because it is too large
Load Diff
@@ -563,7 +563,10 @@ class AgreementInfo:
|
||||
|
||||
def _get_info(self):
|
||||
|
||||
details = self.domains.get(self._match) or {}
|
||||
details = self.domains.get(self._match, {})
|
||||
|
||||
if details is None:
|
||||
raise TypeError('Domain must have details ({})'.format(self._domain))
|
||||
|
||||
if isinstance(details, str):
|
||||
self.is_canonical = False
|
||||
|
||||
52
domains.py
Executable file
52
domains.py
Executable file
@@ -0,0 +1,52 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import os
|
||||
import yaml
|
||||
from itertools import chain
|
||||
from operator import itemgetter
|
||||
from sys import argv
|
||||
from app.utils import AgreementInfo
|
||||
|
||||
_dir_path = os.path.dirname(os.path.realpath(__file__))
|
||||
|
||||
|
||||
if len(argv) < 2:
|
||||
raise TypeError('Must specify `orgs` or `domains` as the first argument to this script')
|
||||
|
||||
|
||||
with open('{}/app/domains.yml'.format(_dir_path)) as source:
|
||||
|
||||
data = yaml.load(source)
|
||||
|
||||
for domain, details in data.items():
|
||||
if isinstance(details, dict):
|
||||
# We’re looking at the canonical domain
|
||||
data[domain]['domains'] = [domain]
|
||||
|
||||
for domain, details in data.items():
|
||||
if isinstance(details, str):
|
||||
# This is an alias, let’s add it to the canonical domain
|
||||
data[AgreementInfo(domain).canonical_domain]['domains'].append(domain)
|
||||
|
||||
out_data = [
|
||||
details for domain, details in data.items()
|
||||
if isinstance(details, dict)
|
||||
]
|
||||
|
||||
if argv[1] == 'orgs':
|
||||
print(yaml.dump(out_data)) # noqa
|
||||
elif argv[1] == 'domains':
|
||||
print( # noqa
|
||||
sorted(
|
||||
set(
|
||||
chain.from_iterable(
|
||||
map(
|
||||
itemgetter('domains'), out_data
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
else:
|
||||
raise TypeError('Must specify `orgs` or `domains` as the first argument to this script')
|
||||
@@ -1,4 +1,4 @@
|
||||
from collections import OrderedDict
|
||||
from collections import Counter, OrderedDict
|
||||
from csv import DictReader
|
||||
from io import StringIO
|
||||
from pathlib import Path
|
||||
@@ -391,6 +391,11 @@ def test_get_domain_info_for_branding_request():
|
||||
)
|
||||
|
||||
|
||||
def test_domains_are_lowercased():
|
||||
for domain in AgreementInfo.domains.keys():
|
||||
assert domain == domain.lower()
|
||||
|
||||
|
||||
def test_validate_government_domain_data():
|
||||
|
||||
for domain in AgreementInfo.domains.keys():
|
||||
@@ -403,17 +408,25 @@ def test_validate_government_domain_data():
|
||||
True, False, None
|
||||
}
|
||||
|
||||
assert (
|
||||
agreement_info.owner is None
|
||||
) or (
|
||||
isinstance(agreement_info.owner, str)
|
||||
)
|
||||
assert isinstance(agreement_info.owner, str) and agreement_info.owner.strip()
|
||||
|
||||
assert agreement_info.agreement_signed in {
|
||||
True, False, None
|
||||
}
|
||||
|
||||
|
||||
def test_domain_data_is_canonicalized():
|
||||
for owner, count in Counter(
|
||||
AgreementInfo(domain).owner
|
||||
for domain in AgreementInfo.domains.keys()
|
||||
if AgreementInfo(domain).is_canonical
|
||||
).most_common():
|
||||
if count > 1:
|
||||
raise ValueError(
|
||||
'{} entries in domains.yml for {}'.format(count, owner)
|
||||
)
|
||||
|
||||
|
||||
def test_validate_email_domain_data():
|
||||
|
||||
for domain in GovernmentEmailDomain.domains.keys():
|
||||
|
||||
Reference in New Issue
Block a user