pycountry-wrapper/pycountry_wrapper/__init__.py

61 lines
1.5 KiB
Python
Raw Normal View History

2024-11-19 13:51:55 +00:00
from __future__ import annotations
import pycountry
class CountryDoesNotExist(Exception): pass
class Country:
"""
This gets countries based on the ISO 3166-1 standart.
Two examples are:
- Country.from_alpha_2("DE")
- Country.from_alpha_3("DEU")
If the country couldn't be found, it raises the pycountry_wrapper.CountryDoesNotExist exception.
"""
def __init__(self, pycountry_object):
if pycountry_object is None:
raise CountryDoesNotExist()
self.pycountry_object = pycountry_object
@classmethod
def from_alpha_2(cls, alpha_2: str) -> Country:
return cls(pycountry.countries.get(alpha_2=alpha_2.upper()))
@classmethod
def from_alpha_3(cls, alpha_3: str) -> Country:
return cls(pycountry.countries.get(alpha_3=alpha_3.upper()))
@classmethod
def from_fuzzy(cls, fuzzy: str) -> Country:
return cls(pycountry.countries.search_fuzzy(fuzzy))
@property
def name(self) -> str:
return self.pycountry_object.name
@property
def alpha_2(self) -> str:
return self.pycountry_object.alpha_2
@property
def alpha_3(self) -> str:
return self.pycountry_object.alpha_3
@property
def numeric(self) -> str:
return self.pycountry_object.numeric
@property
def official_name(self) -> str:
return self.pycountry_object.official_name
def __str__(self) -> str:
return self.pycountry_object.__str__()
def __repr__(self) -> str:
return self.pycountry_object.__repr__()