Source code for postalcodes_ni.postalcodes
import unicodedata
from ._codes import _postal_codes as postal_codes
from .exceptions import ISOCodeError, PostalCodeError
[docs]def get_all_municipalities_by_iso(iso_code: str) -> list:
""" Returns all the municipalities for a department based on the ISO code
"""
iso_code = iso_code.upper()
if iso_code not in postal_codes:
raise ISOCodeError(
f'Incorrect ISO 3166-2 code \n The code {iso_code} doesnt exists'
)
municipalities = [
(m.get('name'), m.get('code')) for m in postal_codes.get(iso_code)
]
return municipalities
[docs]def get_all_municipalities_by_postal(postal_code: int) -> list:
""" Returns all the municipalities for a department based on the postal code
"""
department_key = None
for department, municipalities in postal_codes.items():
for municipality in municipalities:
if (
municipality['code'] == postal_code
and municipality['neighborhood'] == 'master'
):
department_key = department
break
if department_key is None:
raise PostalCodeError(
f'Cant find any department with the code {postal_code}'
)
municipalities = [
(m.get('name'), m.get('code'))
for m in postal_codes.get(department_key)
]
return municipalities
[docs]def get_municipality_by_name(name: str) -> tuple:
""" Returns a single record for a municipality based on the name
"""
def strip_accents(s):
return ''.join(
c
for c in unicodedata.normalize('NFD', s)
if unicodedata.category(c) != 'Mn'
)
name = strip_accents(name).title()
department_key = None
municipality_key = None
for department, municipalities in postal_codes.items():
for index, municipality in enumerate(municipalities):
if strip_accents(municipality['name']) == name:
department_key = department
municipality_key = index
break
if strip_accents(municipality['neighborhood']) == name:
department_key = department
municipality_key = index
break
if department_key is None and municipality_key is None:
raise PostalCodeError(
f'Cant find any municipality with the name {name}'
)
municipality = postal_codes.get(department_key)[municipality_key]
return (municipality.get('name'), municipality.get('code'))
[docs]def get_municipality_by_postal(postal_code: int) -> dict:
""" Returns a single record for a municipality based on the postal code
"""
for department, municipalities in postal_codes.items():
for index, municipality in enumerate(municipalities):
if municipality['code'] == postal_code:
mun = postal_codes[department][index]
return (mun.get('name'), mun.get('code'))
raise PostalCodeError(
f'Cant find any municipality with the code {postal_code}'
)