forked from octodns/octodns
-
Notifications
You must be signed in to change notification settings - Fork 1
/
generate-geo-data
executable file
·64 lines (54 loc) · 1.58 KB
/
generate-geo-data
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/usr/bin/env python
from collections import defaultdict
from pprint import pformat
from pycountry import countries, subdivisions
from pycountry_convert import country_alpha2_to_continent_code
subs = defaultdict(dict)
for subdivision in subdivisions:
# Route53 only supports US states, Dyn (and others) support US states and CA provinces
if subdivision.country_code not in ('US', 'CA'):
continue
subs[subdivision.country_code][subdivision.code[3:]] = {
'name': subdivision.name
}
subs = dict(subs)
#pprint(subs)
# These are best guesses at things pycountry_convert doesn't map
continent_backups = {
'AQ': 'AN',
'EH': 'AF',
'PN': 'OC',
'SX': 'NA',
'TF': 'AN',
'TL': 'AS',
'UM': 'OC',
'VA': 'EU',
}
geos = defaultdict(dict)
for country in countries:
try:
continent_code = country_alpha2_to_continent_code(country.alpha_2)
except KeyError:
try:
continent_code = continent_backups[country.alpha_2]
except KeyError:
raise
print('{} {} {}'.format(country.alpha_2, country.name, getattr(country, 'official_name', '')))
geos[continent_code][country.alpha_2] = {
'name': country.name
}
try:
geos[continent_code][country.alpha_2]['provinces'] = subs[country.alpha_2]
except KeyError:
pass
geos = dict(geos)
data = pformat(geos).replace('\n', '\n ')
print('''#
# -*- coding: utf-8 -*-
#
# This file is generated using
# ./script/generate-geo-data > octodns/record/geo_data.py
# do not modify it directly
#
geo_data = \\
{}'''.format(data))