You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
3.7 KiB

6 months ago
from .. import BaseProvider, ElementsType, date_time
localized = True
class Provider(BaseProvider):
city_suffixes: ElementsType[str] = ["Ville"]
street_suffixes: ElementsType[str] = ["Street"]
city_formats: ElementsType[str] = ("{{first_name}} {{city_suffix}}",)
street_name_formats: ElementsType[str] = ("{{last_name}} {{street_suffix}}",)
street_address_formats: ElementsType[str] = ("{{building_number}} {{street_name}}",)
address_formats: ElementsType[str] = ("{{street_address}} {{postcode}} {{city}}",)
building_number_formats: ElementsType[str] = ("##",)
postcode_formats: ElementsType[str] = ("#####",)
countries: ElementsType[str] = [country.name for country in date_time.Provider.countries]
ALPHA_2 = "alpha-2"
ALPHA_3 = "alpha-3"
alpha_2_country_codes: ElementsType[str] = [country.alpha_2_code for country in date_time.Provider.countries]
alpha_3_country_codes: ElementsType[str] = [country.alpha_3_code for country in date_time.Provider.countries]
def city_suffix(self) -> str:
"""
:example: 'town'
"""
return self.random_element(self.city_suffixes)
def street_suffix(self) -> str:
"""
:example: 'Avenue'
"""
return self.random_element(self.street_suffixes)
def building_number(self) -> str:
"""
:example: '791'
"""
return self.numerify(self.random_element(self.building_number_formats))
def city(self) -> str:
"""
:example: 'Sashabury'
"""
pattern: str = self.random_element(self.city_formats)
return self.generator.parse(pattern)
def street_name(self) -> str:
"""
:example: 'Crist Parks'
"""
pattern: str = self.random_element(self.street_name_formats)
return self.generator.parse(pattern)
def street_address(self) -> str:
"""
:example: '791 Crist Parks'
"""
pattern: str = self.random_element(self.street_address_formats)
return self.generator.parse(pattern)
def postcode(self) -> str:
"""
:example: 86039-9874
"""
return self.bothify(self.random_element(self.postcode_formats)).upper()
def address(self) -> str:
"""
:example: '791 Crist Parks, Sashabury, IL 86039-9874'
"""
pattern: str = self.random_element(self.address_formats)
return self.generator.parse(pattern)
def country(self) -> str:
return self.random_element(self.countries)
def country_code(self, representation: str = ALPHA_2) -> str:
if representation == self.ALPHA_2:
return self.random_element(self.alpha_2_country_codes)
elif representation == self.ALPHA_3:
return self.random_element(self.alpha_3_country_codes)
else:
raise ValueError("`representation` must be one of `alpha-2` or `alpha-3`.")
def current_country_code(self) -> str:
try:
return self.__lang__.split("_")[1] # type: ignore
except IndexError:
raise AttributeError("Country code cannot be determined from locale")
def current_country(self) -> str:
current_country_code = self.current_country_code()
current_country = [
country.name for country in date_time.Provider.countries if country.alpha_2_code == current_country_code
]
if len(current_country) == 1:
return current_country[0] # type: ignore
elif len(current_country) > 1:
raise ValueError(f"Ambiguous country for country code {current_country_code}: {current_country}")
else:
raise ValueError(f"No appropriate country for country code {current_country_code}")