Last active
May 9, 2017 16:04
-
-
Save laurentpellegrino/0529d8c39d4874d139ff03a140bfe1e6 to your computer and use it in GitHub Desktop.
Extract emergency numbers from the libphonenumber resource and create an immutable Java map based on country codes
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python3 | |
from lxml import etree | |
import os | |
import tempfile | |
import urllib | |
JAVA_VARIABLE_NAME="emergencyNumberPerCountryCode" | |
PHONE_NUMBER_METADATA_URL="https://raw.githubusercontent.com/googlei18n/libphonenumber/master/resources/ShortNumberMetadata.xml" | |
def download_phone_number_metadata(): | |
tmpdir = tempfile.mkdtemp() | |
tmpfile = os.path.join(tmpdir, "numbers.metadata") | |
urllib.urlretrieve(PHONE_NUMBER_METADATA_URL, tmpfile) | |
return tmpfile | |
def extract_emergency_number_example(metadata_file): | |
tree = etree.parse(metadata_file) | |
result = {} | |
for territory in tree.xpath("/phoneNumberMetadata/territories/territory"): | |
country_code = territory.get("id") | |
emergency_number_example = territory.xpath("emergency/exampleNumber") | |
if len(emergency_number_example) == 1: | |
result[country_code] = emergency_number_example.pop().text | |
return result | |
def build_java_definition(emergency_number_per_country_code): | |
lines = ["ImmutableMap.Builder<String, String> {} = ImmutableMap.builder();".format(JAVA_VARIABLE_NAME)] | |
for key in sorted(emergency_number_per_country_code.keys()): | |
lines.append('{}.put("{}", "{}");'.format(JAVA_VARIABLE_NAME, key, emergency_number_per_country_code[key])) | |
return '\n'.join(lines) | |
metadata_file = download_phone_number_metadata() | |
numbers = extract_emergency_number_example(metadata_file) | |
print build_java_definition(numbers) | |
os.remove(metadata_file) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment