mirror of
https://github.com/github/octodns.git
synced 2024-05-11 05:55:00 +00:00
89 lines
2.4 KiB
Python
Executable File
89 lines
2.4 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
from collections import defaultdict
|
|
|
|
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)
|
|
|
|
# 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)
|
|
|
|
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 = {'''
|
|
)
|
|
|
|
for continent, details in sorted(geos.items()):
|
|
print(f" '{continent}': {{")
|
|
for country, info in sorted(details.items()):
|
|
name = info['name']
|
|
quoted_name = f'"{name}"' if "'" in name else f"'{name}'"
|
|
if 'provinces' in info:
|
|
print(f" '{country}': {{")
|
|
print(f" 'name': {quoted_name},")
|
|
print(" 'provinces': {")
|
|
for prov, info in sorted(info['provinces'].items()):
|
|
name = info['name']
|
|
quoted_name = f'"{name}"' if "'" in name else f"'{name}'"
|
|
print(f" '{prov}': {{'name': {quoted_name}}},")
|
|
print(' },')
|
|
print(' },')
|
|
else:
|
|
print(f" '{country}': {{'name': {quoted_name}}},")
|
|
print(' },')
|
|
print('}')
|