update bots

This commit is contained in:
2026-05-18 14:15:59 +07:00
parent b0ce866a2f
commit b9054d178e
5775 changed files with 832577 additions and 38 deletions

View File

@@ -0,0 +1,7 @@
from faker.factory import Factory
from faker.generator import Generator
from faker.proxy import Faker
VERSION = "40.18.0"
__all__ = ("Factory", "Generator", "Faker")

View File

@@ -0,0 +1,4 @@
if __name__ == "__main__":
from .cli import execute_from_command_line
execute_from_command_line()

View File

@@ -0,0 +1,310 @@
import argparse
import itertools
import logging
import os
import random
import sys
import textwrap
from io import TextIOWrapper
from pathlib import Path
from typing import Dict, List, Optional, TextIO, TypeVar, Union
from . import VERSION, Faker, documentor, exceptions
from .config import AVAILABLE_LOCALES, DEFAULT_LOCALE, META_PROVIDERS_MODULES
from .documentor import Documentor
from .providers import BaseProvider
__author__ = "joke2k"
T = TypeVar("T")
def _encode_for_output(value: str, output: TextIO) -> str:
encoding = getattr(output, "encoding", None)
if encoding is None:
return value
try:
value.encode(encoding)
except UnicodeEncodeError:
return value.encode(encoding, errors="backslashreplace").decode(encoding)
return value
def print_provider(
doc: Documentor,
provider: BaseProvider,
formatters: Dict[str, T],
excludes: Optional[List[str]] = None,
output: Optional[TextIO] = None,
) -> None:
if output is None:
output = sys.stdout
if excludes is None:
excludes = []
print(file=output)
print(_encode_for_output(f"### {doc.get_provider_name(provider)}", output), file=output)
print(file=output)
margin = max(30, doc.max_name_len + 2)
for signature, example in formatters.items():
if signature in excludes:
continue
signature_lines = textwrap.wrap(signature, width=margin, subsequent_indent=" ")
try:
lines = textwrap.wrap(
str(example).expandtabs(),
width=150 - margin,
initial_indent="# ",
subsequent_indent=" ",
)
except UnicodeDecodeError:
# The example is actually made of bytes.
# We could coerce to bytes, but that would fail anyway when we wiil
# try to `print` the line.
lines = ["<bytes>"]
except UnicodeEncodeError:
raise Exception(f"error on {signature!r} with value {example!r}")
for left, right in itertools.zip_longest(signature_lines, lines, fillvalue=""):
line = f"\t{left:<{margin}} {right}"
print(_encode_for_output(line, output), file=output)
def print_doc(
provider_or_field: Optional[str] = None,
args: Optional[List[T]] = None,
lang: str = DEFAULT_LOCALE,
output: Optional[Union[TextIO, TextIOWrapper]] = None,
seed: Optional[float] = None,
includes: Optional[List[str]] = None,
) -> None:
if args is None:
args = []
if output is None:
output = sys.stdout
fake = Faker(locale=lang, includes=includes)
fake.seed_instance(seed)
from faker.providers import BaseProvider
base_provider_formatters = list(dir(BaseProvider))
if provider_or_field:
if "." in provider_or_field:
parts = provider_or_field.split(".")
locale = parts[-2] if parts[-2] in AVAILABLE_LOCALES else lang
fake = Faker(locale, providers=[provider_or_field], includes=includes)
fake.seed_instance(seed)
doc = documentor.Documentor(fake)
doc.already_generated = base_provider_formatters
print_provider(
doc,
fake.get_providers()[0],
doc.get_provider_formatters(fake.get_providers()[0]),
output=output,
)
else:
try:
print(fake.format(provider_or_field, *args), end="", file=output)
except AttributeError:
raise ValueError(f'No faker found for "{provider_or_field}({args})"')
else:
doc = documentor.Documentor(fake)
unsupported: List[str] = []
while True:
try:
formatters = doc.get_formatters(with_args=True, with_defaults=True, excludes=unsupported)
except exceptions.UnsupportedFeature as e:
unsupported.append(e.name)
else:
break
for provider, fakers in formatters:
print_provider(doc, provider, fakers, output=output)
class Command:
def __init__(self, argv: Optional[str] = None) -> None:
self.argv = argv or sys.argv[:]
self.prog_name = Path(self.argv[0]).name
def execute(self) -> None:
"""
Given the command-line arguments, this creates a parser appropriate
to that command, and runs it.
"""
# retrieve default language from system environment
default_locale = os.environ.get("LANG", "en_US").split(".")[0]
if default_locale not in AVAILABLE_LOCALES:
default_locale = DEFAULT_LOCALE
epilog = f"""supported locales:
{', '.join(sorted(AVAILABLE_LOCALES))}
Faker can take a locale as an optional argument, to return localized data. If
no locale argument is specified, the factory falls back to the user's OS
locale as long as it is supported by at least one of the providers.
- for this user, the default locale is {default_locale}.
If the optional argument locale and/or user's default locale is not available
for the specified provider, the factory falls back to faker's default locale,
which is {DEFAULT_LOCALE}.
examples:
$ faker address
968 Bahringer Garden Apt. 722
Kristinaland, NJ 09890
$ faker -l de_DE address
Samira-Niemeier-Allee 56
94812 Biedenkopf
$ faker profile ssn,birthdate
{{'ssn': u'628-10-1085', 'birthdate': '2008-03-29'}}
$ faker -r=3 -s=";" name
Willam Kertzmann;
Josiah Maggio;
Gayla Schmitt;
"""
formatter_class = argparse.RawDescriptionHelpFormatter
parser = argparse.ArgumentParser(
prog=self.prog_name,
description=f"{self.prog_name} version {VERSION}",
epilog=epilog,
formatter_class=formatter_class,
)
parser.add_argument("--version", action="version", version=f"%(prog)s {VERSION}")
parser.add_argument(
"-v",
"--verbose",
action="store_true",
help="show INFO logging events instead "
"of CRITICAL, which is the default. These logging "
"events provide insight into localization of "
"specific providers.",
)
parser.add_argument(
"-o",
metavar="output",
type=argparse.FileType("w"),
default=sys.stdout,
help="redirect output to a file",
)
parser.add_argument(
"-l",
"--lang",
choices=AVAILABLE_LOCALES,
default=default_locale,
metavar="LOCALE",
help="specify the language for a localized provider (e.g. de_DE)",
)
parser.add_argument(
"-r",
"--repeat",
default=1,
type=int,
help="generate the specified number of outputs",
)
parser.add_argument(
"-s",
"--sep",
default="\n",
help="use the specified separator after each output",
)
parser.add_argument(
"--seed",
metavar="SEED",
type=int,
help="specify a seed for the random generator so "
"that results are repeatable. Also compatible "
"with 'repeat' option",
)
parser.add_argument(
"-i",
"--include",
action="append",
help="list of additional custom providers to "
"user, given as the import path of the module "
"containing your Provider class (not the provider "
"class itself)",
)
parser.add_argument(
"fake",
action="store",
nargs="?",
help="name of the fake to generate output for (e.g. profile)",
)
parser.add_argument(
"fake_args",
metavar="fake argument",
action="store",
nargs="*",
help="optional arguments to pass to the fake "
"(e.g. the profile fake takes an optional "
"list of comma separated field names as the "
"first argument)",
)
arguments = parser.parse_args(self.argv[1:])
if arguments.include is None:
arguments.include = META_PROVIDERS_MODULES
if arguments.verbose:
logging.basicConfig(level=logging.DEBUG)
else:
logging.basicConfig(level=logging.CRITICAL)
random.seed(arguments.seed)
seeds = [random.random() for _ in range(arguments.repeat)]
for i in range(arguments.repeat):
print_doc(
arguments.fake,
arguments.fake_args,
lang=arguments.lang,
output=arguments.o,
seed=seeds[i],
includes=arguments.include,
)
print(arguments.sep, file=arguments.o)
if not arguments.fake:
# repeat not supported for all docs
break
def execute_from_command_line(argv: Optional[str] = None) -> None:
"""A simple method that runs a Command."""
if sys.stdout.encoding is None:
print(
"please set python env PYTHONIOENCODING=UTF-8, example: "
"export PYTHONIOENCODING=UTF-8, when writing to stdout",
file=sys.stderr,
)
exit(1)
command = Command(argv)
command.execute()
if __name__ == "__main__":
execute_from_command_line()

View File

@@ -0,0 +1,13 @@
from importlib import import_module
from .utils.loading import find_available_locales, find_available_providers
DEFAULT_LOCALE = "en_US"
META_PROVIDERS_MODULES = [
"faker.providers",
]
PROVIDERS = find_available_providers([import_module(path) for path in META_PROVIDERS_MODULES])
AVAILABLE_LOCALES = find_available_locales(PROVIDERS)

View File

@@ -0,0 +1,38 @@
import pytest
from faker import Faker
from faker.config import DEFAULT_LOCALE
DEFAULT_SEED = 0
@pytest.fixture(scope="session", autouse=True)
def _session_faker(request):
"""Fixture that stores the session level ``Faker`` instance.
This fixture is internal and is only meant for use within the project.
Third parties should instead use the ``faker`` fixture for their tests.
"""
if "faker_session_locale" in request.fixturenames:
locale = request.getfixturevalue("faker_session_locale")
else:
locale = [DEFAULT_LOCALE]
return Faker(locale=locale)
@pytest.fixture()
def faker(request):
"""Fixture that returns a seeded and suitable ``Faker`` instance."""
if "faker_locale" in request.fixturenames:
locale = request.getfixturevalue("faker_locale")
fake = Faker(locale=locale)
else:
fake = request.getfixturevalue("_session_faker")
seed = DEFAULT_SEED
if "faker_seed" in request.fixturenames:
seed = request.getfixturevalue("faker_seed")
fake.seed_instance(seed=seed)
fake.unique.clear()
return fake

View File

@@ -0,0 +1,13 @@
from .codes import codes
def unidecode(txt: str) -> str:
chars = ""
for ch in txt:
codepoint = ord(ch)
try:
chars += codes[codepoint]
except IndexError:
pass
return chars

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,127 @@
import inspect
import warnings
from enum import Enum, auto
from typing import Any, Dict, List, Optional, Tuple, Type, Union
from .generator import Generator
from .providers import BaseProvider
from .proxy import Faker
class FakerEnum(Enum):
"""Required for faker.providers.enum"""
A = auto
B = auto
class Documentor:
def __init__(self, generator: Union[Generator, Faker]) -> None:
"""
:param generator: a localized Generator with providers filled,
for which to write the documentation
:type generator: faker.Generator()
"""
self.generator = generator
self.max_name_len: int = 0
self.already_generated: List[str] = []
def get_formatters(
self,
locale: Optional[str] = None,
excludes: Optional[List[str]] = None,
**kwargs: Any,
) -> List[Tuple[BaseProvider, Dict[str, str]]]:
self.max_name_len = 0
self.already_generated = [] if excludes is None else excludes[:]
formatters = []
providers: List[BaseProvider] = self.generator.get_providers()
for provider in providers[::-1]: # reverse
if locale and provider.__lang__ and provider.__lang__ != locale:
continue
formatters.append(
(provider, self.get_provider_formatters(provider, **kwargs)),
)
return formatters
def get_provider_formatters(
self,
provider: BaseProvider,
prefix: str = "fake.",
with_args: bool = True,
with_defaults: bool = True,
) -> Dict[str, str]:
formatters = {}
for name, method in inspect.getmembers(provider, inspect.ismethod):
# skip 'private' method and inherited methods
if name.startswith("_") or name in self.already_generated:
continue
arguments = []
faker_args: List[Union[str, Type[Enum]]] = []
faker_kwargs = {}
if name == "binary":
faker_kwargs["length"] = 1024
elif name in ["zip", "tar"]:
faker_kwargs.update(
{
"uncompressed_size": 1024,
"min_file_size": 512,
}
)
if name == "enum":
faker_args = [FakerEnum]
if with_args:
# retrieve all parameter
argspec = inspect.getfullargspec(method)
lst = [x for x in argspec.args if x not in ["self", "cls"]]
for i, arg in enumerate(lst):
if argspec.defaults and with_defaults:
try:
default = argspec.defaults[i]
if isinstance(default, str):
default = repr(default)
else:
# TODO check default type
default = f"{default}"
arg = f"{arg}={default}"
except IndexError:
pass
arguments.append(arg)
if with_args == "first":
break
if with_args != "first":
if argspec.varargs:
arguments.append("*" + argspec.varargs)
if argspec.varkw:
arguments.append("**" + argspec.varkw)
# build fake method signature
signature = f"{prefix}{name}({', '.join(arguments)})"
try:
# make a fake example
example = self.generator.format(name, *faker_args, **faker_kwargs)
except (AttributeError, ValueError) as e:
warnings.warn(str(e))
continue
formatters[signature] = example
self.max_name_len = max(self.max_name_len, *(len(part) for part in signature.split()))
self.already_generated.append(name)
return formatters
@staticmethod
def get_provider_name(provider_class: BaseProvider) -> str:
return provider_class.__provider__

View File

@@ -0,0 +1,16 @@
class BaseFakerException(Exception):
"""The base exception for all Faker exceptions."""
class UniquenessException(BaseFakerException):
"""To avoid infinite loops, after a certain number of attempts,
the "unique" attribute of the Proxy will throw this exception.
"""
class UnsupportedFeature(BaseFakerException):
"""The requested feature is not available on this system."""
def __init__(self, msg: str, name: str) -> None:
self.name = name
super().__init__(msg)

View File

@@ -0,0 +1,114 @@
import functools
import locale as pylocale
import logging
import sys
from importlib import import_module
from typing import Any, List, Optional, Tuple
from .config import AVAILABLE_LOCALES, DEFAULT_LOCALE, PROVIDERS
from .generator import Generator
from .utils.loading import list_module
logger = logging.getLogger(__name__)
# identify if python is being run in interactive mode. If so, disable logging.
inREPL = bool(getattr(sys, "ps1", False))
if inREPL:
logger.setLevel(logging.CRITICAL)
else:
logger.debug("Not in REPL -> leaving logger event level as is.")
class Factory:
@classmethod
def create(
cls,
locale: Optional[str] = None,
providers: Optional[List[str]] = None,
generator: Optional[Generator] = None,
includes: Optional[List[str]] = None,
# Should we use weightings (more realistic) or weight every element equally (faster)?
# By default, use weightings for backwards compatibility & realism
use_weighting: bool = True,
**config: Any,
) -> Generator:
if includes is None:
includes = []
# fix locale to package name
locale = locale.replace("-", "_") if locale else DEFAULT_LOCALE
locale = pylocale.normalize(locale).split(".")[0]
if locale not in AVAILABLE_LOCALES:
msg = f"Invalid configuration for faker locale `{locale}`"
raise AttributeError(msg)
config["locale"] = locale
config["use_weighting"] = use_weighting
_providers = (providers or PROVIDERS) + includes
faker = generator or Generator(**config)
for prov_name in _providers:
if prov_name == "faker.providers":
continue
prov_cls, lang_found, _ = cls._find_provider_class(prov_name, locale)
provider = prov_cls(faker)
provider.__use_weighting__ = use_weighting
provider.__provider__ = prov_name
provider.__lang__ = lang_found
faker.add_provider(provider)
return faker
@classmethod
@functools.lru_cache(maxsize=None)
def _find_provider_class(
cls,
provider_path: str,
locale: Optional[str] = None,
) -> Tuple[Any, Optional[str], Optional[str]]:
provider_module = import_module(provider_path)
default_locale = getattr(provider_module, "default_locale", "")
if getattr(provider_module, "localized", False):
logger.debug(
"Looking for locale `%s` in provider `%s`.",
locale,
provider_module.__name__,
)
available_locales = list_module(provider_module)
if not locale or locale not in available_locales:
unavailable_locale = locale
locale = default_locale or DEFAULT_LOCALE
logger.debug(
"Specified locale `%s` is not available for "
"provider `%s`. Locale reset to `%s` for this "
"provider.",
unavailable_locale,
provider_module.__name__,
locale,
)
else:
logger.debug(
"Provider `%s` has been localized to `%s`.",
provider_module.__name__,
locale,
)
path = f"{provider_path}.{locale}"
provider_module = import_module(path)
else:
if locale:
logger.debug(
"Provider `%s` does not feature localization. "
"Specified locale `%s` is not used for this provider.",
provider_module.__name__,
locale,
)
locale = default_locale = None
return provider_module.Provider, locale, default_locale # type: ignore

View File

@@ -0,0 +1,191 @@
import random as random_module
import re
from typing import TYPE_CHECKING, Any, Callable, Dict, Hashable, List, Optional, Type, Union
from .typing import SeedType
if TYPE_CHECKING:
from .providers import BaseProvider
_re_token = re.compile(r"\{\{\s*(\w+)(:\s*\w+?)?\s*\}\}")
random = random_module.Random()
mod_random = random # compat with name released in 0.8
Sentinel = object()
class Generator:
__config: Dict[str, Dict[Hashable, Any]] = {
"arguments": {},
}
_is_seeded = False
_global_seed = Sentinel
def __init__(self, **config: Dict) -> None:
self.providers: List["BaseProvider"] = []
self.__config = dict(list(self.__config.items()) + list(config.items()))
self.__random = random
def add_provider(self, provider: Union["BaseProvider", Type["BaseProvider"]]) -> None:
if isinstance(provider, type):
provider = provider(self)
self.providers.insert(0, provider)
for method_name in dir(provider):
# skip 'private' method
if method_name.startswith("_"):
continue
faker_function = getattr(provider, method_name)
if callable(faker_function):
# add all faker method to generator
self.set_formatter(method_name, faker_function)
def provider(self, name: str) -> Optional["BaseProvider"]:
try:
lst = [p for p in self.get_providers() if hasattr(p, "__provider__") and p.__provider__ == name.lower()]
return lst[0]
except IndexError:
return None
def get_providers(self) -> List["BaseProvider"]:
"""Returns added providers."""
return self.providers
@property
def random(self) -> random_module.Random:
return self.__random
@random.setter
def random(self, value: random_module.Random) -> None:
self.__random = value
def seed_instance(self, seed: Optional[SeedType] = None) -> "Generator":
"""Calls random.seed"""
if self.__random == random:
# create per-instance random obj when first time seed_instance() is
# called
self.__random = random_module.Random()
self.__random.seed(seed)
self._is_seeded = True
return self
@classmethod
def seed(cls, seed: Optional[SeedType] = None) -> None:
random.seed(seed)
cls._global_seed = seed
cls._is_seeded = True
def format(self, formatter: str, *args: Any, **kwargs: Any) -> str:
"""
This is a secure way to make a fake from another Provider.
"""
return self.get_formatter(formatter)(*args, **kwargs)
def get_formatter(self, formatter: str) -> Callable:
try:
return getattr(self, formatter)
except AttributeError:
if "locale" in self.__config:
msg = f'Unknown formatter {formatter!r} with locale {self.__config["locale"]!r}'
else:
raise AttributeError(f"Unknown formatter {formatter!r}")
raise AttributeError(msg)
def set_formatter(self, name: str, formatter: Callable) -> None:
"""
This method adds a provider method to generator.
Override this method to add some decoration or logging stuff.
"""
setattr(self, name, formatter)
def set_arguments(self, group: str, argument: str, value: Optional[Any] = None) -> None:
"""
Creates an argument group, with an individual argument or a dictionary
of arguments. The argument groups is used to apply arguments to tokens,
when using the generator.parse() method. To further manage argument
groups, use get_arguments() and del_arguments() methods.
generator.set_arguments('small', 'max_value', 10)
generator.set_arguments('small', {'min_value': 5, 'max_value': 10})
"""
if group not in self.__config["arguments"]:
self.__config["arguments"][group] = {}
if isinstance(argument, dict):
self.__config["arguments"][group] = argument
elif not isinstance(argument, str):
raise ValueError("Arguments must be either a string or dictionary")
else:
self.__config["arguments"][group][argument] = value
def get_arguments(self, group: str, argument: Optional[str] = None) -> Any:
"""
Get the value of an argument configured within a argument group, or
the entire group as a dictionary. Used in conjunction with the
set_arguments() method.
generator.get_arguments('small', 'max_value')
generator.get_arguments('small')
"""
if group in self.__config["arguments"] and argument:
result = self.__config["arguments"][group].get(argument)
else:
result = self.__config["arguments"].get(group)
return result
def del_arguments(self, group: str, argument: Optional[str] = None) -> Any:
"""
Delete an argument from an argument group or the entire argument group.
Used in conjunction with the set_arguments() method.
generator.del_arguments('small')
generator.del_arguments('small', 'max_value')
"""
if group in self.__config["arguments"]:
if argument:
result = self.__config["arguments"][group].pop(argument)
else:
result = self.__config["arguments"].pop(group)
else:
result = None
return result
def parse(self, text: str) -> str:
"""
Replaces tokens like '{{ tokenName }}' or '{{tokenName}}' in a string with
the result from the token method call. Arguments can be parsed by using an
argument group. For more information on the use of argument groups, please
refer to the set_arguments() method.
Example:
generator.set_arguments('red_rgb', {'hue': 'red', 'color_format': 'rgb'})
generator.set_arguments('small', 'max_value', 10)
generator.parse('{{ color:red_rgb }} - {{ pyint:small }}')
"""
return _re_token.sub(self.__format_token, text)
def __format_token(self, matches):
formatter, argument_group = list(matches.groups())
argument_group = argument_group.lstrip(":").strip() if argument_group else ""
if argument_group:
try:
arguments = self.__config["arguments"][argument_group]
except KeyError:
raise AttributeError(f"Unknown argument group {argument_group!r}")
formatted = str(self.format(formatter, **arguments))
else:
formatted = str(self.format(formatter))
return "".join(formatted)

View File

@@ -0,0 +1,742 @@
import re
import string
from collections import OrderedDict
from typing import Any, Collection, List, Optional, Sequence, TypeVar, Union
from ..generator import Generator
from ..typing import OrderedDictType
from ..utils.distribution import choices_distribution, choices_distribution_unique
_re_hash = re.compile(r"#")
_re_perc = re.compile(r"%")
_re_dol = re.compile(r"\$")
_re_excl = re.compile(r"!")
_re_at = re.compile(r"@")
_re_qm = re.compile(r"\?")
_re_cir = re.compile(r"\^")
T = TypeVar("T")
ElementsType = Union[Collection[T], OrderedDictType[T, float]]
class BaseProvider:
__provider__ = "base"
__lang__: Optional[str] = None
__use_weighting__ = False
# Locales supported by Linux Mint from `/usr/share/i18n/SUPPORTED`
language_locale_codes = {
"aa": ("DJ", "ER", "ET"),
"af": ("ZA",),
"ak": ("GH",),
"am": ("ET",),
"an": ("ES",),
"apn": ("IN",),
"ar": (
"AE",
"BH",
"DJ",
"DZ",
"EG",
"EH",
"ER",
"IL",
"IN",
"IQ",
"JO",
"KM",
"KW",
"LB",
"LY",
"MA",
"MR",
"OM",
"PS",
"QA",
"SA",
"SD",
"SO",
"SS",
"SY",
"TD",
"TN",
"YE",
),
"as": ("IN",),
"ast": ("ES",),
"ayc": ("PE",),
"az": ("AZ", "IN"),
"be": ("BY",),
"bem": ("ZM",),
"ber": ("DZ", "MA"),
"bg": ("BG",),
"bhb": ("IN",),
"bho": ("IN",),
"bn": ("BD", "IN"),
"bo": ("CN", "IN"),
"br": ("FR",),
"brx": ("IN",),
"bs": ("BA",),
"byn": ("ER",),
"ca": ("AD", "ES", "FR", "IT"),
"ce": ("RU",),
"ckb": ("IQ",),
"cmn": ("TW",),
"crh": ("UA",),
"cs": ("CZ",),
"csb": ("PL",),
"cv": ("RU",),
"cy": ("GB",),
"da": ("DK",),
"de": ("AT", "BE", "CH", "DE", "LI", "LU"),
"doi": ("IN",),
"dv": ("MV",),
"dz": ("BT",),
"el": ("GR", "CY"),
"en": (
"AG",
"AU",
"BD",
"BW",
"CA",
"DK",
"GB",
"HK",
"IE",
"IN",
"NG",
"NZ",
"PH",
"PK",
"SG",
"US",
"ZA",
"ZM",
"ZW",
"KE",
),
"eo": ("US",),
"es": (
"AR",
"BO",
"CL",
"CO",
"CR",
"CU",
"DO",
"EC",
"ES",
"GT",
"HN",
"MX",
"NI",
"PA",
"PE",
"PR",
"PY",
"SV",
"US",
"UY",
"VE",
),
"et": ("EE",),
"eu": ("ES", "FR"),
"fa": ("IR",),
"ff": ("SN",),
"fi": ("FI",),
"fil": ("PH",),
"fo": ("FO",),
"fr": ("CA", "CH", "FR", "LU"),
"fur": ("IT",),
"fy": ("NL", "DE"),
"ga": ("IE",),
"gd": ("GB",),
"gez": ("ER", "ET"),
"gl": ("ES",),
"gu": ("IN",),
"gv": ("GB",),
"ha": ("NG",),
"hak": ("TW",),
"he": ("IL",),
"hi": ("IN",),
"hne": ("IN",),
"hr": ("HR",),
"hsb": ("DE",),
"ht": ("HT",),
"hu": ("HU",),
"hy": ("AM",),
"ia": ("FR",),
"id": ("ID",),
"ig": ("NG",),
"ik": ("CA",),
"is": ("IS",),
"it": ("CH", "IT"),
"iu": ("CA",),
"iw": ("IL",),
"ja": ("JP",),
"ka": ("GE",),
"kk": ("KZ",),
"kl": ("GL",),
"km": ("KH",),
"kn": ("IN",),
"ko": ("KR",),
"kok": ("IN",),
"ks": ("IN",),
"ku": ("TR",),
"kw": ("GB",),
"ky": ("KG",),
"lb": ("LU",),
"lg": ("UG",),
"li": ("BE", "NL"),
"lij": ("IT",),
"ln": ("CD",),
"lo": ("LA",),
"lt": ("LT",),
"lv": ("LV",),
"lzh": ("TW",),
"mag": ("IN",),
"mai": ("IN",),
"mg": ("MG",),
"mhr": ("RU",),
"mi": ("NZ",),
"mk": ("MK",),
"ml": ("IN",),
"mn": ("MN",),
"mni": ("IN",),
"mr": ("IN",),
"ms": ("MY",),
"mt": ("MT",),
"my": ("MM",),
"nan": ("TW",),
"nb": ("NO",),
"nds": ("DE", "NL"),
"ne": ("NP",),
"nhn": ("MX",),
"niu": ("NU", "NZ"),
"nl": ("AW", "BE", "NL"),
"nn": ("NO",),
"nr": ("ZA",),
"nso": ("ZA",),
"oc": ("FR",),
"om": ("ET", "KE"),
"or": ("IN",),
"os": ("RU",),
"pa": ("IN", "PK"),
"pap": ("AN", "AW", "CW"),
"pl": ("PL",),
"ps": ("AF",),
"pt": ("BR", "PT"),
"quz": ("PE",),
"raj": ("IN",),
"ro": ("RO",),
"ru": ("RU", "UA"),
"rw": ("RW",),
"sa": ("IN",),
"sat": ("IN",),
"sc": ("IT",),
"sd": ("IN", "PK"),
"se": ("NO",),
"shs": ("CA",),
"si": ("LK",),
"sid": ("ET",),
"sk": ("SK",),
"sl": ("SI",),
"so": ("DJ", "ET", "KE", "SO"),
"sq": ("AL", "ML"),
"sr": ("ME", "RS"),
"ss": ("ZA",),
"st": ("ZA",),
"sv": ("FI", "SE"),
"sw": ("KE", "TZ"),
"szl": ("PL",),
"ta": ("IN", "LK"),
"tcy": ("IN",),
"te": ("IN",),
"tg": ("TJ",),
"th": ("TH",),
"the": ("NP",),
"ti": ("ER", "ET"),
"tig": ("ER",),
"tk": ("TM",),
"tl": ("PH",),
"tn": ("ZA",),
"tr": ("CY", "TR"),
"ts": ("ZA",),
"tt": ("RU",),
"ug": ("CN",),
"uk": ("UA",),
"unm": ("US",),
"ur": ("IN", "PK"),
"uz": ("UZ",),
"ve": ("ZA",),
"vi": ("VN",),
"wa": ("BE",),
"wae": ("CH",),
"wal": ("ET",),
"wo": ("SN",),
"xh": ("ZA",),
"yi": ("US",),
"yo": ("NG",),
"yue": ("HK",),
"zh": ("CN", "HK", "SG", "TW"),
"zu": ("ZA",),
}
def __init__(self, generator: Any) -> None:
"""
Base class for fake data providers
:param generator: `Generator` instance
"""
self.generator = generator
def locale(self) -> str:
"""Generate a random underscored i18n locale code (e.g. en_US)."""
language_code = self.language_code()
return (
language_code
+ "_"
+ self.random_element(
BaseProvider.language_locale_codes[language_code],
)
)
def language_code(self) -> str:
"""Generate a random i18n language code (e.g. en)."""
return self.random_element(BaseProvider.language_locale_codes.keys())
def random_int(self, min: int = 0, max: int = 9999, step: int = 1) -> int:
"""Generate a random integer between two integers ``min`` and ``max`` inclusive
while observing the provided ``step`` value.
This method is functionally equivalent to randomly sampling an integer
from the sequence ``range(min, max + 1, step)``.
:sample: min=0, max=15
:sample: min=0, max=15, step=3
"""
return self.generator.random.randrange(min, max + 1, step)
def random_digit(self) -> int:
"""Generate a random digit (0 to 9)."""
return self.generator.random.randint(0, 9)
def random_digit_not_null(self) -> int:
"""Generate a random non-zero digit (1 to 9)."""
return self.generator.random.randint(1, 9)
def random_digit_above_two(self) -> int:
"""Generate a random digit above value two (2 to 9)."""
return self.generator.random.randint(2, 9)
def random_digit_or_empty(self) -> Union[int, str]:
"""Generate a random digit (0 to 9) or an empty string.
This method will return an empty string 50% of the time,
and each digit has a 1/20 chance of being generated.
"""
if self.generator.random.randint(0, 1):
return self.generator.random.randint(0, 9)
else:
return ""
def random_digit_not_null_or_empty(self) -> Union[int, str]:
"""Generate a random non-zero digit (1 to 9) or an empty string.
This method will return an empty string 50% of the time,
and each digit has a 1/18 chance of being generated.
"""
if self.generator.random.randint(0, 1):
return self.generator.random.randint(1, 9)
else:
return ""
def random_number(self, digits: Optional[int] = None, fix_len: bool = False) -> int:
"""Generate a random integer according to the following rules:
- If ``digits`` is ``None`` (default), its value will be set to a random
integer from 1 to 9.
- If ``fix_len`` is ``False`` (default), all integers that do not exceed
the number of ``digits`` can be generated.
- If ``fix_len`` is ``True``, only integers with the exact number of
``digits`` can be generated.
:sample: fix_len=False
:sample: fix_len=True
:sample: digits=3
:sample: digits=3, fix_len=False
:sample: digits=3, fix_len=True
"""
if digits is None:
digits = self.random_digit_not_null()
if digits < 0:
raise ValueError("The digit parameter must be greater than or equal to 0.")
if fix_len:
if digits > 0:
return self.generator.random.randint(pow(10, digits - 1), pow(10, digits) - 1)
else:
raise ValueError("A number of fixed length cannot have less than 1 digit in it.")
else:
return self.generator.random.randint(0, pow(10, digits) - 1)
def random_letter(self) -> str:
"""Generate a random ASCII letter (a-z and A-Z)."""
return self.generator.random.choice(getattr(string, "letters", string.ascii_letters))
def random_letters(self, length: int = 16) -> Sequence[str]:
"""Generate a list of random ASCII letters (a-z and A-Z) of the specified ``length``.
:sample: length=10
"""
return self.random_choices(
getattr(string, "letters", string.ascii_letters),
length=length,
)
def random_lowercase_letter(self) -> str:
"""Generate a random lowercase ASCII letter (a-z)."""
return self.generator.random.choice(string.ascii_lowercase)
def random_uppercase_letter(self) -> str:
"""Generate a random uppercase ASCII letter (A-Z)."""
return self.generator.random.choice(string.ascii_uppercase)
def random_elements(
self,
elements: ElementsType[T] = ("a", "b", "c"), # type: ignore[assignment]
length: Optional[int] = None,
unique: bool = False,
use_weighting: Optional[bool] = None,
) -> Sequence[T]:
"""Generate a list of randomly sampled objects from ``elements``.
Set ``unique`` to ``False`` for random sampling with replacement, and set ``unique`` to
``True`` for random sampling without replacement.
If ``length`` is set to ``None`` or is omitted, ``length`` will be set to a random
integer from 1 to the size of ``elements``.
The value of ``length`` cannot be greater than the number of objects
in ``elements`` if ``unique`` is set to ``True``.
The value of ``elements`` can be any sequence type (``list``, ``tuple``, ``set``,
``string``, etc) or an ``OrderedDict`` type. If it is the latter, the keys will be
used as the objects for sampling, and the values will be used as weighted probabilities
if ``unique`` is set to ``False``. For example:
.. code-block:: python
# Random sampling with replacement
fake.random_elements(
elements=OrderedDict([
("variable_1", 0.5), # Generates "variable_1" 50% of the time
("variable_2", 0.2), # Generates "variable_2" 20% of the time
("variable_3", 0.2), # Generates "variable_3" 20% of the time
("variable_4": 0.1), # Generates "variable_4" 10% of the time
]), unique=False
)
# Random sampling without replacement (defaults to uniform distribution)
fake.random_elements(
elements=OrderedDict([
("variable_1", 0.5),
("variable_2", 0.2),
("variable_3", 0.2),
("variable_4": 0.1),
]), unique=True
)
:sample: elements=('a', 'b', 'c', 'd'), unique=False
:sample: elements=('a', 'b', 'c', 'd'), unique=True
:sample: elements=('a', 'b', 'c', 'd'), length=10, unique=False
:sample: elements=('a', 'b', 'c', 'd'), length=4, unique=True
:sample: elements=OrderedDict([
("a", 0.45),
("b", 0.35),
("c", 0.15),
("d", 0.05),
]), length=20, unique=False
:sample: elements=OrderedDict([
("a", 0.45),
("b", 0.35),
("c", 0.15),
("d", 0.05),
]), unique=True
"""
use_weighting = use_weighting if use_weighting is not None else self.__use_weighting__
if isinstance(elements, dict) and not isinstance(elements, OrderedDict):
raise ValueError("Use OrderedDict only to avoid dependency on PYTHONHASHSEED (See #363).")
fn = choices_distribution_unique if unique else choices_distribution
if length is None:
length = self.generator.random.randint(1, len(elements))
if unique and length > len(elements):
raise ValueError("Sample length cannot be longer than the number of unique elements to pick from.")
if isinstance(elements, dict):
if not hasattr(elements, "_key_cache"):
elements._key_cache = tuple(elements.keys()) # type: ignore
choices = elements._key_cache # type: ignore[attr-defined, union-attr]
probabilities = tuple(elements.values()) if use_weighting else None
else:
if unique:
# shortcut
return self.generator.random.sample(elements, length)
choices = elements
probabilities = None
return fn(
tuple(choices),
probabilities,
self.generator.random,
length=length,
)
def random_choices(
self,
elements: ElementsType[T] = ("a", "b", "c"), # type: ignore[assignment]
length: Optional[int] = None,
) -> Sequence[T]:
"""Generate a list of objects randomly sampled from ``elements`` with replacement.
For information on the ``elements`` and ``length`` arguments, please refer to
:meth:`random_elements() <faker.providers.BaseProvider.random_elements>` which
is used under the hood with the ``unique`` argument explicitly set to ``False``.
:sample: elements=('a', 'b', 'c', 'd')
:sample: elements=('a', 'b', 'c', 'd'), length=10
:sample: elements=OrderedDict([
("a", 0.45),
("b", 0.35),
("c", 0.15),
("d", 0.05),
])
:sample: elements=OrderedDict([
("a", 0.45),
("b", 0.35),
("c", 0.15),
("d", 0.05),
]), length=20
"""
return self.random_elements(elements, length, unique=False)
def random_element(self, elements: ElementsType[T] = ("a", "b", "c")) -> T: # type: ignore[assignment]
"""Generate a randomly sampled object from ``elements``.
For information on the ``elements`` argument, please refer to
:meth:`random_elements() <faker.providers.BaseProvider.random_elements>` which
is used under the hood with the ``unique`` argument set to ``False`` and the
``length`` argument set to ``1``.
:sample: elements=('a', 'b', 'c', 'd')
:sample size=10: elements=OrderedDict([
("a", 0.45),
("b", 0.35),
("c", 0.15),
("d", 0.05),
])
"""
return self.random_elements(elements, length=1)[0]
def random_sample(
self, elements: ElementsType[T] = ("a", "b", "c"), length: Optional[int] = None # type: ignore[assignment]
) -> Sequence[T]:
"""Generate a list of objects randomly sampled from ``elements`` without replacement.
For information on the ``elements`` and ``length`` arguments, please refer to
:meth:`random_elements() <faker.providers.BaseProvider.random_elements>` which
is used under the hood with the ``unique`` argument explicitly set to ``True``.
:sample: elements=('a', 'b', 'c', 'd', 'e', 'f')
:sample: elements=('a', 'b', 'c', 'd', 'e', 'f'), length=3
"""
return self.random_elements(elements, length, unique=True)
def randomize_nb_elements(
self,
number: int = 10,
le: bool = False,
ge: bool = False,
min: Optional[int] = None,
max: Optional[int] = None,
) -> int:
"""Generate a random integer near ``number`` according to the following rules:
- If ``le`` is ``False`` (default), allow generation up to 140% of ``number``.
If ``True``, upper bound generation is capped at 100%.
- If ``ge`` is ``False`` (default), allow generation down to 60% of ``number``.
If ``True``, lower bound generation is capped at 100%.
- If a numerical value for ``min`` is provided, generated values less than ``min``
will be clamped at ``min``.
- If a numerical value for ``max`` is provided, generated values greater than
``max`` will be clamped at ``max``.
- If both ``le`` and ``ge`` are ``True``, the value of ``number`` will automatically
be returned, regardless of the values supplied for ``min`` and ``max``.
:sample: number=100
:sample: number=100, ge=True
:sample: number=100, ge=True, min=120
:sample: number=100, le=True
:sample: number=100, le=True, max=80
:sample: number=79, le=True, ge=True, min=80
"""
if le and ge:
return number
_min = 100 if ge else 60
_max = 100 if le else 140
nb = int(number * self.generator.random.randint(_min, _max) / 100)
if min is not None and nb < min:
nb = min
if max is not None and nb > max:
nb = max
return nb
def numerify(self, text: str = "###") -> str:
"""Generate a string with each placeholder in ``text`` replaced according
to the following rules:
- Number signs ('#') are replaced with a random digit (0 to 9).
- Percent signs ('%') are replaced with a random non-zero digit (1 to 9).
- Dollar signs ('$') are replaced with a random digit above two (2 to 9).
- Exclamation marks ('!') are replaced with a random digit or an empty string.
- At symbols ('@') are replaced with a random non-zero digit or an empty string.
Under the hood, this method uses :meth:`random_digit() <faker.providers.BaseProvider.random_digit>`,
:meth:`random_digit_not_null() <faker.providers.BaseProvider.random_digit_not_null>`,
:meth:`random_digit_or_empty() <faker.providers.BaseProvider.random_digit_or_empty>`,
and :meth:`random_digit_not_null_or_empty() <faker.providers.BaseProvider.random_digit_not_null_or_empty>`
to generate the random values.
:sample: text='Intel Core i%-%%##K vs AMD Ryzen % %%##X'
:sample: text='!!! !!@ !@! !@@ @!! @!@ @@! @@@'
"""
text = _re_hash.sub(lambda x: str(self.random_digit()), text)
text = _re_perc.sub(lambda x: str(self.random_digit_not_null()), text)
text = _re_dol.sub(lambda x: str(self.random_digit_above_two()), text)
text = _re_excl.sub(lambda x: str(self.random_digit_or_empty()), text)
text = _re_at.sub(lambda x: str(self.random_digit_not_null_or_empty()), text)
return text
def lexify(self, text: str = "????", letters: str = string.ascii_letters) -> str:
"""Generate a string with each question mark ('?') in ``text``
replaced with a random character from ``letters``.
By default, ``letters`` contains all ASCII letters, uppercase and lowercase.
:sample: text='Random Identifier: ??????????'
:sample: text='Random Identifier: ??????????', letters='ABCDE'
"""
return _re_qm.sub(lambda x: self.random_element(letters), text)
def bothify(self, text: str = "## ??", letters: str = string.ascii_letters) -> str:
"""Generate a string with each placeholder in ``text`` replaced according to the following rules:
- Number signs ('#') are replaced with a random digit (0 to 9).
- Percent signs ('%') are replaced with a random non-zero digit (1 to 9).
- Dollar signs ('$') are replaced with a random digit above two (2 to 9).
- Exclamation marks ('!') are replaced with a random digit or an empty string.
- At symbols ('@') are replaced with a random non-zero digit or an empty string.
- Question marks ('?') are replaced with a random character from ``letters``.
By default, ``letters`` contains all ASCII letters, uppercase and lowercase.
Under the hood, this method uses :meth:`numerify() <faker.providers.BaseProvider.numerify>` and
and :meth:`lexify() <faker.providers.BaseProvider.lexify>` to generate random values for number
signs and question marks respectively.
:sample: letters='ABCDE'
:sample: text='Product Number: ????-########'
:sample: text='Product Number: ????-########', letters='ABCDE'
:sample: text='Order: ##??-$'
"""
return self.lexify(self.numerify(text), letters=letters)
def hexify(self, text: str = "^^^^", upper: bool = False) -> str:
"""Generate a string with each circumflex ('^') in ``text``
replaced with a random hexadecimal character.
By default, ``upper`` is set to False. If set to ``True``, output
will be formatted using uppercase hexadecimal characters.
:sample: text='MAC Address: ^^:^^:^^:^^:^^:^^'
:sample: text='MAC Address: ^^:^^:^^:^^:^^:^^', upper=True
"""
letters = string.hexdigits[:-6]
if upper:
letters = letters.upper()
return _re_cir.sub(lambda x: self.random_element(letters), text)
class DynamicProvider(BaseProvider):
def __init__(
self,
provider_name: str,
elements: Optional[List] = None,
generator: Optional[Any] = None,
):
"""
A faker Provider capable of getting a list of elements to randomly select from,
instead of using the predefined list of elements which exist in the default providers in faker.
:param provider_name: Name of provider, which would translate into the function name e.g. faker.my_fun().
:param elements: List of values to randomly select from
:param generator: Generator object. If missing, the default Generator is used.
:example:
>>>from faker import Faker
>>>from faker.providers import DynamicProvider
>>>medical_professions_provider = DynamicProvider(
>>> provider_name="medical_profession",
>>> elements=["dr.", "doctor", "nurse", "surgeon", "clerk"],
>>>)
>>>fake = Faker()
>>>fake.add_provider(medical_professions_provider)
>>>fake.medical_profession()
"dr."
"""
if not generator:
generator = Generator()
super().__init__(generator)
if provider_name.startswith("__"):
raise ValueError("Provider name cannot start with __ as it would be ignored by Faker")
self.provider_name = provider_name
self.elements = []
if elements:
self.elements = elements
setattr(self, provider_name, self.get_random_value) # Add a method for the provider_name value
def add_element(self, element: str) -> None:
"""Add new element."""
self.elements.append(element)
def get_random_value(self, use_weighting: bool = True) -> Any:
"""Returns a random value for this provider.
:param use_weighting: boolean option to use weighting. Defaults to True
"""
if not self.elements or len(self.elements) == 0:
raise ValueError("Elements should be a list of values the provider samples from")
return self.random_elements(self.elements, length=1, use_weighting=use_weighting)[0]

View File

@@ -0,0 +1,116 @@
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:
"""
:sample:
"""
return self.random_element(self.countries)
def country_code(self, representation: str = ALPHA_2) -> str:
"""
:sample:
:sample: representation='alpha-2'
:sample: representation='alpha-3'
"""
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:
"""
:sample:
"""
try:
return self.__lang__.split("_")[1] # type: ignore
except IndexError:
raise AttributeError("Country code cannot be determined from locale")
def current_country(self) -> str:
"""
:sample:
"""
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}")

View File

@@ -0,0 +1,347 @@
from typing import Tuple
from .. import Provider as AddressProvider
class Provider(AddressProvider):
"""Address provider for ar_DZ locale."""
# Source: https://ar.wikipedia.org/wiki/ولايات_الجزائر
wilayas: Tuple[str, ...] = (
"أدرار",
"الشلف",
"الأغواط",
"أم البواقي",
"باتنة",
"بجاية",
"بسكرة",
"بشار",
"البليدة",
"البويرة",
"تمنراست",
"تبسة",
"تلمسان",
"تيارت",
"تيزي وزو",
"الجزائر",
"الجلفة",
"جيجل",
"سطيف",
"سعيدة",
"سكيكدة",
"سيدي بلعباس",
"عنابة",
"قالمة",
"قسنطينة",
"المدية",
"مستغانم",
"المسيلة",
"معسكر",
"ورقلة",
"وهران",
"البيض",
"إليزي",
"برج بوعريريج",
"بومرداس",
"الطارف",
"تندوف",
"تيسمسيلت",
"الوادي",
"خنشلة",
"سوق أهراس",
"تيبازة",
"ميلة",
"عين الدفلى",
"النعامة",
"عين تموشنت",
"غرداية",
"غليزان",
"تيميمون",
"برج باجي مختار",
"أولاد جلال",
"بني عباس",
"عين صالح",
"عين قزام",
"تقرت",
"جانت",
"المغير",
"المنيعة",
)
# Source: https://github.com/othmanus/algeria-cities
cities: Tuple[str, ...] = (
# Wilaya 01 - أدرار
"أدرار",
"رقان",
"أولف",
"تيميمون",
# Wilaya 02 - الشلف
"الشلف",
"تنس",
"بوقادير",
# Wilaya 03 - الأغواط
"الأغواط",
"أفلو",
"عين ماضي",
# Wilaya 04 - أم البواقي
"أم البواقي",
"عين مليلة",
"عين البيضاء",
# Wilaya 05 - باتنة
"باتنة",
"بريكة",
"عين التوتة",
"أريس",
"نقاوس",
# Wilaya 06 - بجاية
"بجاية",
"أقبو",
"خراطة",
"تاكسلانت",
"أميزور",
# Wilaya 07 - بسكرة
"بسكرة",
"طولقة",
"سيدي عقبة",
"زريبة الوادي",
# Wilaya 08 - بشار
"بشار",
"تاغيت",
"القنادسة",
# Wilaya 09 - البليدة
"البليدة",
"بوفاريك",
"الأربعاء",
"بوعينان",
# Wilaya 10 - البويرة
"البويرة",
"سور الغزلان",
"عين بسام",
# Wilaya 11 - تمنراست
"تمنراست",
"أبلسة",
# Wilaya 12 - تبسة
"تبسة",
"بئر العاتر",
"الونزة",
# Wilaya 13 - تلمسان
"تلمسان",
"مغنية",
"الغزوات",
"ندرومة",
"مرسى بن مهيدي",
# Wilaya 14 - تيارت
"تيارت",
"السوقر",
"فرندة",
"تاقدمت",
# Wilaya 15 - تيزي وزو
"تيزي وزو",
"ذراع بن خدة",
"أزفون",
"بوغني",
"تيقزيرت",
# Wilaya 16 - الجزائر
"الجزائر الوسطى",
"باب الوادي",
"القصبة",
"سيدي امحمد",
"حسين داي",
"القبة",
"الحراش",
"الرويبة",
"زرالدة",
"بئر مراد رايس",
"بوزريعة",
"الشراقة",
"الدرارية",
"باب الزوار",
"برج الكيفان",
"الدار البيضاء",
"عين طاية",
# Wilaya 17 - الجلفة
"الجلفة",
"مسعد",
"عين وسارة",
"حاسي بحبح",
# Wilaya 18 - جيجل
"جيجل",
"الطاهير",
"الميلية",
"زيامة منصورية",
# Wilaya 19 - سطيف
"سطيف",
"العلمة",
"جميلة",
"عين أرنات",
"قجال",
# Wilaya 20 - سعيدة
"سعيدة",
"عين الحجر",
# Wilaya 21 - سكيكدة
"سكيكدة",
"عزابة",
"الحروش",
"القل",
# Wilaya 22 - سيدي بلعباس
"سيدي بلعباس",
"عين البرد",
"مرحوم",
"تلموني",
# Wilaya 23 - عنابة
"عنابة",
"البوني",
"عين الباردة",
"سيدي عمار",
# Wilaya 24 - قالمة
"قالمة",
"بومهرة أحمد",
"حمام النبايل",
# Wilaya 25 - قسنطينة
"قسنطينة",
"الخروب",
"ديدوش مراد",
"زيغود يوسف",
"عين عبيد",
# Wilaya 26 - المدية
"المدية",
"قصر البخاري",
"البرواقية",
"بوغار",
# Wilaya 27 - مستغانم
"مستغانم",
"سيدي علي",
"عين تادلس",
"مزغران",
# Wilaya 28 - المسيلة
"المسيلة",
"بوسعادة",
"سيدي عيسى",
"عين الملح",
# Wilaya 29 - معسكر
"معسكر",
"تيغنيف",
"بوحنيفية",
"سيق",
# Wilaya 30 - ورقلة
"ورقلة",
"حاسي مسعود",
"عين البيضاء",
# Wilaya 31 - وهران
"وهران",
"أرزيو",
"عين الترك",
"بئر الجير",
"مرسى الحجاج",
"السانية",
# Wilaya 32 - البيض
"البيض",
"بريزينة",
# Wilaya 33 - إليزي
"إيليزي",
"إن أمناس",
# Wilaya 34 - برج بوعريريج
"برج بوعريرج",
"رأس الوادي",
"ثنية النصر",
# Wilaya 35 - بومرداس
"بومرداس",
"خميس الخشنة",
"برج منايل",
"دلس",
# Wilaya 36 - الطارف
"الطارف",
"القالة",
"بن مهيدي",
# Wilaya 37 - تندوف
"تندوف",
# Wilaya 38 - تيسمسيلت
"تيسمسيلت",
"خميستي",
# Wilaya 39 - الوادي
"الوادي",
"قمار",
"حاسي خليفة",
"الرقيبة",
# Wilaya 40 - خنشلة
"خنشلة",
"بابار",
# Wilaya 41 - سوق أهراس
"سوق أهراس",
"مداوروش",
"سدراتة",
# Wilaya 42 - تيبازة
"تيبازة",
"شرشال",
"بواسماعيل",
"القليعة",
# Wilaya 43 - ميلة
"ميلة",
"فرجيوة",
"شلغوم العيد",
# Wilaya 44 - عين الدفلى
"عين الدفلى",
"خميس مليانة",
"العطاف",
"مليانة",
# Wilaya 45 - النعامة
"النعامة",
"المشرية",
"عين الصفراء",
# Wilaya 46 - عين تموشنت
"عين تموشنت",
"بني صاف",
"حمام بوحجر",
# Wilaya 47 - غرداية
"غرداية",
"القرارة",
"متليلي",
"العطف",
# Wilaya 48 - غليزان
"غليزان",
"مازونة",
"عمي موسى",
# New wilayas (4958)
"تيميمون",
"برج باجي مختار",
"أولاد جلال",
"بني عباس",
"عين صالح",
"عين قزام",
"تقرت",
"جانت",
"المغير",
"المنيعة",
)
street_prefixes: Tuple[str, ...] = ("شارع", "نهج", "طريق", "حي", "زنقة", "دوار", "بلدية")
building_number_formats: Tuple[str, ...] = ("#", "##", "###")
# Source: https://github.com/othmanus/algeria-cities
postcode_formats: Tuple[str, ...] = tuple(f"{i:02d}###" for i in range(1, 49))
street_name_formats: Tuple[str, ...] = (
"{{street_prefix}} {{last_name}}",
"{{street_prefix}} {{first_name}} {{last_name}}",
)
street_address_formats: Tuple[str, ...] = ("{{building_number}} {{street_name}}",)
address_formats: Tuple[str, ...] = (
"{{street_address}} {{city}}",
"{{street_address}} - {{city}}",
"{{street_address}} {{city}} {{wilaya}}",
"{{street_address}} {{city}} - {{wilaya}}",
)
def street_prefix(self) -> str:
return self.random_element(self.street_prefixes)
def city(self) -> str:
return self.random_element(self.cities)
def administrative_unit(self) -> str:
return self.random_element(self.wilayas)
wilaya = administrative_unit

View File

@@ -0,0 +1,691 @@
from .. import Provider as AddressProvider
class Provider(AddressProvider):
city_formats = ("{{first_name}}",)
city_suffixes = ("şəhəri", "ş.")
street_suffixes = ("küçəsi", "küç.", "prospekti", "pr.")
village_suffixes = ("kəndi", "k.")
district_suffixes = ("rayonu", "ray.")
settlement_suffixes = ("qəsəbəsi", "qəs.")
building_number_formats = ("#",)
house_number_formats = ("#", "##", "###")
address_formats = (
"{{city}} {{city_suffix }}, {{street_name}} {{street_suffix}}, b. {{building_number}}, m. {{house_number}}",
"{{district}} {{district_suffix }}, {{street_name}} {{street_suffix}}, b. {{building_number}},"
" m. {{house_number}}",
"{{district}} {{district_suffix }}, {{village}} {{village_suffix}}, {{street_name}} {{street_suffix}}",
"{{district}} {{district_suffix }}, {{settlement}} {{settlement_suffix}}, {{street_name}} {{street_suffix}},"
" b. {{building_number}}, m. {{house_number}}",
)
street_name_formats = ("{{street}}",)
cities = [
"Bakı",
"Gəncə",
"Naxçıvan",
"Xankəndi",
"Lənkəran",
"Mingəçevir",
"Naftalan",
"Sumqayıt",
"Şəki",
"Şirvan",
"Yevlax",
]
countries = [
"Abxaziya",
"Akrotiri və Dekeliya",
"Aland adaları",
"Albaniya",
"Almaniya",
"Amerika Samoası",
"Andorra Knyazlığı",
"Angilya",
"Anqola",
"Antiqua və Barbuda",
"Argentina Respublikası",
"Aruba",
"Avstraliya",
"Avstriya",
"Azərbaycan",
"Baham adaları",
"Banqladeş",
"Barbados",
"Belçika",
"Beliz",
"Belarus",
"Benin",
"Bermud adaları",
"Birləşmiş Ərəb Əmirlikləri",
"ABŞ",
"Boliviya",
"Bolqarıstan",
"Bosniya və Herseqovina",
"Botsvana",
"Böyük Britaniya",
"Braziliya",
"Bruney",
"Burkina",
"Burundi",
"Butan",
"Bəhreyn",
"Cersi",
"Cəbəllütariq",
"Cənubi Afrika Respublikası",
"Cənubi Sudan",
"Cənubi Koreya",
"Cibuti",
"Çad",
"Çexiya",
"Monteneqro",
"Çili",
"Çin",
"Danimarka",
"Dominika",
"Dominikan",
"Efiopiya",
"Ekvador",
"Ekvatorial",
"Eritreya",
"Ermənistan",
"Estoniya",
"Əfqanıstan",
"Əlcəzair",
"Farer adaları",
"Fələstin",
"Fici",
"Fil Dişi Sahili",
"Filippin",
"Finlandiya",
"Folklend adaları",
"Fransa",
"Fransa Polineziyası",
"Gernsi",
"Gürcüstan",
"Haiti",
"Hindistan",
"Honduras",
"Honkonq",
"Xorvatiya",
"İndoneziya",
"İordaniya",
"İraq",
"İran",
"İrlandiya",
"İslandiya",
"İspaniya",
"İsrail",
"İsveç",
"İsveçrə",
"İtaliya",
"Kabo-Verde",
"Kamboca",
"Kamerun",
"Kanada",
"Kayman adaları",
"Keniya",
"Kipr",
"Kiribati",
"Kokos adaları",
"Kolumbiya",
"Komor adaları",
"Konqo Respublikası",
"Konqo Demokratik Respublikası",
"Kosovo",
"Kosta-Rika",
"Kuba",
"Kuk adaları",
"Küveyt",
"Qabon",
"Qambiya",
"Qana",
"Qətər",
"Qayana",
"Qazaxıstan",
"Qərbi Saxara",
"Qıızıstan",
"Qrenada",
"Qrenlandiya",
"Quam",
"Qvatemala",
"Qvineya",
"Qvineya-Bisau",
"Laos",
"Latviya",
"Lesoto",
"Liberiya",
"Litva",
"Livan",
"Liviya",
"Lixtenşteyn",
"Lüksemburq",
"Macarıstan",
"Madaqaskar",
"Makao",
"Şimali Makedoniya",
"Malavi",
"Malayziya",
"Maldiv adaları",
"Mali",
"Malta",
"Marşall adaları",
"Mavriki",
"Mavritaniya",
"Mayotta",
"Meksika",
"Men adası",
"Mərakeş",
"Mərkəzi Afrika Respublikası",
"Mikroneziya",
"Milad adası",
"Misir",
"Myanma",
"Moldova",
"Monako",
"Monqolustan",
"Montserrat",
"Mozambik",
"Müqəddəs Yelena adası",
"Namibiya",
"Nauru",
"Nepal",
"Niderland",
"Niger",
"Nigeriya",
"Nikaraqua",
"Norveç",
"Oman",
"Özbəkistan",
"Pakistan",
"Palau",
"Panama",
"Papua",
"Paraqvay",
"Peru",
"Pitkern adaları",
"Polşa",
"Portuqaliya",
"Puerto-Riko",
"Ruanda",
"Rumıniya",
"Rusiya",
"Salvador",
"Samoa",
"San-Marino",
"San-Tome və Prinsipi",
"Seneqal",
"Sen-Bartelemi",
"Sent-Kits və Nevis",
"Sent-Lüsiya",
"Sen-Marten",
"Sen-Pyer və Mikelon",
"Sent-Vinsent və Qrenadin",
"Serbiya",
"Seyşel adaları",
"Səudiyyə Ərəbistanı",
"Sinqapur",
"Slovakiya",
"Sloveniya",
"Solomon adaları",
"Somali",
"Somalilend",
"Sudan",
"Surinam",
"Suriya",
"Esvatini",
"Syerra-Leone",
"Şərqi Timor",
"Şimali Kipr Türk Respublikası",
"Şimali Koreya",
"Şimali Marian adaları",
"Şri-Lanka",
"Tacikistan",
"Tanzaniya",
"Tailand",
"Tonqa",
"Toqo",
"Trinidad və Tobaqo",
"Tunis",
"Tuvalu",
"Türkiyə",
"Türkmənistan",
"Ukrayna",
"Uqanda",
"Uruqvay",
"Vanuatu",
"Vatikan",
"Venesuela",
"Vyetnam",
"Yamayka",
"Yaponiya",
"Yeni Kaledoniya",
"Yeni Zelandiya",
"Yəmən",
"Yunanıstan",
"Zambiya",
"Zimbabve",
]
districts = [
"Abşeron",
"Ağcabədi",
"Ağdam",
"Ağdaş",
"Ağstafa",
"Ağsu",
"Astara",
"Babək",
"Balakən",
"Beyləqan",
"Bərdə",
"Biləsuvar",
"Cəbrayıl",
"Cəlilabad",
"Culfa",
"Daşkəsən",
"Füzuli",
"Gədəbəy",
"Goranboy",
"Göyçay",
"Göygöl",
"Hacıqabul",
"Xaçmaz",
"Xızı",
"Xocalı",
"Xocavənd",
"İmişli",
"İsmayıllı",
"Kəlbəcər",
"Kəngərli",
"Kürdəmir",
"Qax",
"Qazax",
"Qəbələ",
"Qobustan",
"Quba",
"Qubadlı",
"Qusar",
"Laçın",
"Lerik",
"Lənkəran",
"Masallı",
"Neftçala",
"Oğuz",
"Ordubad*",
"Saatlı",
"Sabirabad",
"Salyan",
"Samux",
"Sədərək",
"Siyəzən",
"Şabran",
"Şahbuz",
"Şamaxı",
"Şəki",
"Şəmkir",
"Şərur",
"Şuşa",
"Tərtər",
"Tovuz",
"Ucar",
"Yardımlı",
"Yevlax",
"Zaqatala",
"Zəngilan",
"Zərdab",
]
settlements = [
"Ləki",
"Nehrəm",
"Soyuqbulaq",
"Şəkərli",
"Cəhri",
"Qarayazi",
"Həzi asalanov",
"Poylu",
"Ceyrançöl",
"Saloğlu",
"Vurğun",
"Qəhramanli",
"Yuxari aran",
"Mayak",
"Milabad",
"Örənqala",
"Baharabad",
"Günəş",
"Orconikidze",
"Digah",
"Güzdək",
"Hökməli",
"Qobu",
"Mehdiabad",
"Saray",
"Taxtakörpü",
"Hindarx",
"Şərq",
"Sarisu",
"Mil",
"Türklər",
"Bahar",
"Babək",
"Keşlə",
"Qabaqçöl",
"Xindiristan",
"Bənövşələr",
"Birinci alibəyli",
"Birinci baharli",
"Birinci dördyol",
"Birinci quzanli",
"İkinci alibəyli",
"İkinci baharli",
"İkinci dördyol",
"İmamqulubəyli",
"Qasimbəyli",
"Səfərli",
"Təzəkənd",
"Ergi",
"Yeni ergi",
"Aşaği qəsil kəndi",
"Orta qəsil kəndi",
"Türyançay",
"Yuxari qəsil kəndi",
"Birinci zobucuq",
"İkinci zobucuq",
"Üçüncü zobucuq",
"Dördüncü zobucuq",
"Beşinci zobucuq",
"Fin",
"Horadiz",
"Qayidiş 2",
"Hacikənd",
"Yuxari ağcakənd",
"Qizilhacili",
"Goran",
"Aşaği ağcakənd",
"Qazanbulaq",
"Kürəkçay",
"Ayaq qərvənd",
"Quzanli",
"Navahi",
"Pirsaat",
"Muğan",
"Padar",
"Navahi",
"Vətəgə",
"Bəhrəmtəpə",
"Lahic",
"Basqal",
"Şəfəq",
"Yeni mil",
"Xocahəsən",
"Sulutəpə",
"Biləcəri",
"Binəqədi",
"28 may",
"Rəsulzadə",
"Qumlaq",
"Xələfli",
"Xudafərin",
"Mahmudlu",
"Novoqolovka",
"Alunitdağ",
"Quşçu körpüsü",
"Daşkəsən",
"Quşçu",
"Yuxari daşkəsən",
"1 nömrəli qayidiş",
"2 nömrəli qayidiş",
]
streets = [
"A.AĞAYEV",
"A.M.CÜMƏ",
"TƏBRİZ",
"XALİQ ABBASOV",
"İSLAM ABIŞOV",
"HEYDƏR ƏLİYEV",
"XƏTAİ",
"GÖL ƏTRAFI",
"Z.XƏLİL",
"2-Cİ SÜLH",
"Q.PİRİMOV",
"ASİF MƏMMƏDOV",
"R.HACIYEV",
"FƏXRƏDDİN ƏSƏDOV",
"K.MARKS",
"OKTAY KƏRİMOV",
"Z.KAZIMZADƏ",
"HƏSƏNOĞLU",
"KAVEROÇKİN",
"P.ÇAYKOVSKİ",
"HÜSEYN ARİF",
"HACI MURAD",
"BAKI-BATUMİ",
"NEMƏT QULİYEV",
"R.AXUNDOV",
"AKAD.H.ƏLİYEV",
"RƏHİM ŞIXƏLİYEV",
"YUSİFZADƏ",
"E.QOCAYEV",
"TARZƏN H.MƏMMƏDOV",
"İ.HİDAYƏTZADƏ",
"T.ƏLİYEV",
"MƏMMƏD ARAZ",
"V.PLOTNİKOV",
"Ə.ORUCƏLİYEV",
"Z.BÜNYADOV",
"İ.DADAŞOV",
"ƏLƏSGƏR QAYIBOV",
"M.ARİF",
"M.QASQAY",
"Ə.ƏBDÜLRƏHİMOV",
"İZZƏT HƏMİDOV",
"AZADLIQ",
"ARİF HEYDƏROV",
"N.SÜLEYMANOV",
"ŞAHİN MUSTAFAYEV",
"Ə.VAHİD",
"Ü.BÜNYADZADƏ",
"NAZİM HACIYEV",
"24-CÜ KORPÜ",
"1-Cİ MƏDƏN",
"Y.HÜSEYNOV",
"22-Cİ DAĞLIQ",
"SÜD FERMASI",
"ÇAPAYEV",
"E. NƏCƏFOV",
"FAİQ RÜSTƏMOV",
"28 MAY",
"ZABİTLƏR EVİ",
"S.S. AXUNDOV",
"GƏNCLƏR DOSTLUĞU",
"H.SULTANOV",
"ƏHMƏD QASIMOV",
"XURŞUD AĞAYEV",
"NATƏVAN",
"YENİ MASSİV",
"MƏLİK ASLANOV KÜÇƏSİ,",
"VİDADİ",
"8 MART",
"İ.HACIYEV",
"Y. HƏSƏNOV",
]
villages = [
"Kələki",
"Binələr",
"Davudlu",
"Birinci aral",
"İkinci aral",
"Cardam",
"Qaradeyin",
"Qarağan şixlar",
"Qarağan sədi",
"Qəribli",
"Qolqəti",
"Mürsəl",
"Şordəhnə",
"Tofiqi",
"Yenicə",
"Ərəbocaği",
"Hapitli",
"Ovçulu",
"Şəkili",
"Yuxari ağcayazi",
"Aşaği ağcayazi",
"Yuxari ləki",
"Düzqişlaq",
"Kolayir",
"Koçvəlili",
"Xətai",
"Yenigün",
"Qaçaq kərəm",
"Poylu",
"Tatli",
"Yaradullu",
"Xilxina",
"Mollacəfərli",
"Ağgöl",
"Aşaği göycəli",
"Aşaği kəsəmən",
"Böyük kəsik",
"Dağ kəsəmən",
"Eynalli",
"Göycəli",
"Həsənsu",
"Kolxələfli",
"Koçəsgər",
"Köhnəqişlaq",
"Qarahəsənli",
"Soyuqbulaqlar",
"Qiraq kəsəmən",
"Didivar",
"Muğanli",
"Pirili",
"Sadiqli",
"Uzunoba",
"Qaraməmmədli",
"Navahi",
"Ülgüc",
"Ərəbmehdibəy",
"Dədəli",
"Qasimbəyli",
"Ərəbsarvan",
"Haciqədirli",
"Göydəlləkli",
"Ərəbuşaği",
"Ağalarbəyli",
"Maşadqanli",
"Aratli curuğlu",
"Keşdiməz",
"Bozavand",
"Ağarx",
"Qarabağli",
"Xanbulaq",
"Kəndaxan",
"Yenilik",
"Kövlüc",
"Elabad",
"Yenikənd",
"Hingar",
"Girdə",
"Gursulu",
"Qaraqoyunlu",
"Musabəyli",
"İlxiçi",
"Hacisəmədli",
"Qəşəd",
"Kəndoba",
"Cəfərli",
"Haciuşaği",
"Cəlayir",
"Abasxanli",
"Kalva",
"Suraxani",
"Dilman",
"Haciman",
"Xatman",
"Növcü",
"Axundlu",
"Məlikçobanli",
]
def house_number(self) -> str:
"""
:example: 'm. 49'
"""
return self.numerify(self.random_element(self.house_number_formats))
def city(self) -> str:
"""
:example: 'Xankəndi'
"""
return self.random_element(self.cities)
def city_suffix(self) -> str:
"""
:example: 'ş.'
"""
return self.random_element(self.city_suffixes)
def street(self) -> str:
"""
:example: 'A.AĞAYEV'
"""
return self.random_element(self.streets)
def street_suffix(self) -> str:
"""
:example: 'küç.'
"""
return self.random_element(self.street_suffixes)
def village(self) -> str:
"""
:example: 'Didivar'
"""
return self.random_element(self.villages)
def village_suffix(self) -> str:
"""
:example: 'k.'
"""
return self.random_element(self.village_suffixes)
def district(self) -> str:
"""
:example: 'Babək'
"""
return self.random_element(self.districts)
def district_suffix(self) -> str:
"""
:example: 'r.'
"""
return self.random_element(self.district_suffixes)
def settlement(self) -> str:
"""
:example: 'Horadiz'
"""
return self.random_element(self.settlements)
def settlement_suffix(self) -> str:
"""
:example: 'qəs.'
"""
return self.random_element(self.settlement_suffixes)
def administrative_unit(self) -> str:
"""
:example: 'Xankəndi'
"""
return self.random_element(self.districts + self.cities)
def postcode(self) -> str:
"""
:example: 'AZ1027'
"""
index = self.generator.random.randint(900, 6600)
return "AZ%04d" % index if index > 999 else "AZ0%03d" % index
def postalcode(self) -> str:
return self.postcode()

View File

@@ -0,0 +1,547 @@
from faker.providers.person.bn_BD import translate_to_bengali_digits
from .. import Provider as AddressProvider
class Provider(AddressProvider):
area_names = (
"আলি",
"আলম",
"অভয়",
"আনোয়ার",
"ব্রাহ্মণ",
"বটিয়া",
"বাঘার",
"বেগম",
"বিজয়",
"বন্দর",
"বালিয়া",
"বাজিত",
"বাকের",
"বোরহান",
"বকশী",
"বদর",
"বিরাম",
"বিশ্বনাথ",
"চৌদ্দ",
"চিতল",
"দাউদ",
"দৌলত",
"দেব",
"দেবী",
"ইসলাম",
"ফুল",
"ফকির",
"ফটিক",
"গোপাল",
"গৌর",
"হাজী",
"হরিরাম",
"হোসেন",
"হাকিম",
"জীবন",
"জগন্নাথ",
"কুমার",
"কালী",
"কেশব",
"কুতুব",
"কবির",
"কালিয়া",
"করিম",
"কাজী",
"কমল",
"লাল",
"মুরাদ",
"মনোহর",
"মির",
"মহেশ",
"মোড়ল",
"মোল্লা",
"মোহাম্মদ",
"মনিরাম",
"মানিক",
"মির্জা",
"মধু",
"মোহন",
"মহাদেব",
"মাধব",
"নাসির",
"নড়িয়া",
"নাজির",
"নালিতা",
"নন্দী",
"ওসমানী",
"পাইক",
"পলাশ",
"পার্বতী",
"রাম",
"রায়",
"রানী",
"সোনা",
"শরণ",
"শ্যাম",
"সুবর্ণ",
"সিরাজ",
"সখি",
"সদর",
"সুন্দর",
"সৈয়দ",
"শাজাহান",
"শান্তি",
"শিব",
"তের",
"তারা",
"উজির",
)
building_names = (
"বাড়ী নং",
"বিল্ডিং নং",
"বাসা নং",
"হোল্ডিং নং",
)
building_number_formats = ("%", "%#", "%##")
city_prefixes = ("উত্তর", "পূর্ব", "পশ্চিম", "দক্ষিণ", "মধ্য", "নতুন", "পুরাতন")
city_suffixes = (
"বাজার",
"বাড়ি",
"চর",
"দিয়া",
"ডাঙ্গা",
"গঞ্জ",
"গ্রাম",
"গাঁও",
"গাঁ",
"গড়",
"হাট",
"হার",
"খালি",
"মাটি",
"নগর",
"পুর",
"তলা",
)
cities = (
"বরগুনা",
"বরিশাল",
"ভোলা",
"বান্দরবান",
"ব্রাহ্মণবাড়িয়া",
"বাগেরহাট",
"বগুড়া",
"চাঁদপুর",
"চট্টগ্রাম",
"কুমিল্লা",
"কক্সবাজার",
"চুয়াডাঙ্গা",
"ঢাকা",
"দিনাজপুর",
"ফরিদপুর",
"ফেনী",
"গাজীপুর",
"গোপালগঞ্জ",
"গাইবান্ধা",
"হবিগঞ্জ",
"ঝালকাঠি",
"যশোর",
"ঝিনাইদহ",
"জামালপুর",
"জয়পুরহাট",
"খাগড়াছড়ি",
"কিশোরগঞ্জ",
"খুলনা",
"কুষ্টিয়া",
"কুড়িগ্রাম",
"লক্ষ্মীপুর",
"লালমনিরহাট",
"মাদারীপুর",
"মানিকগঞ্জ",
"মুন্সীগঞ্জ",
"মাগুরা",
"মেহেরপুর",
"ময়মনসিংহ",
"মৌলভীবাজার",
"নোয়াখালী",
"নারায়ণগঞ্জ",
"নরসিংদী",
"নড়াইল",
"নেত্রকোণা",
"নওগাঁ",
"নাটোর",
"চাঁপাইনবাবগঞ্জ",
"নীলফামারী",
"পটুয়াখালী",
"পিরোজপুর",
"পাবনা",
"পঞ্চগড়",
"রাঙ্গামাটি",
"রাজবাড়ী",
"রাজশাহী",
"রংপুর",
"শরীয়তপুর",
"সাতক্ষীরা",
"শেরপুর",
"সিরাজগঞ্জ",
"সুনামগঞ্জ",
"সিলেট",
"টাঙ্গাইল",
"ঠাকুরগাঁও",
)
countries = (
"আফগানিস্তান",
"আলবেনিয়া",
"আলজেরিয়া",
"আমেরিকান সামোয়া",
"অ্যান্ডোরা",
"অ্যাঙ্গোলা",
"অ্যাঙ্গুইলা",
"অ্যান্টার্কটিকা",
"অ্যান্টিগুয়া ও বার্বুডা",
"আর্জেন্টিনা",
"আর্মেনিয়া",
"আরুবা",
"অস্ট্রেলিয়া",
"অস্ট্রিয়া",
"আজারবাইজান",
"বাহামাস",
"বাহরাইন",
"বাংলাদেশ",
"বার্বাডোস",
"বেলারুশ",
"বেলজিয়াম",
"বেলিজ",
"বেনিন",
"বারমুডা",
"ভুটান",
"বলিভিয়া",
"বসনিয়া-হার্জেগোভিনা",
"বতসোয়ানা",
"বাউবে দ্বীপ",
"ব্রাজিল",
"ব্রিটিশ ভারত মহাসাগরীয় অঞ্চল",
"ব্রিটিশ ভার্জিন দ্বীপপুঞ্জ",
"ব্রুনাই",
"বুলগেরিয়া",
"বুর্কিনা ফাসো",
"বুরুন্ডি",
"কম্বোডিয়া",
"ক্যামেরুন",
"কানাডা",
"কেপ ভার্দে",
"কেম্যান দ্বীপপুঞ্জ",
"মধ্য আফ্রিকান প্রজাতন্ত্র",
"চাদ",
"চিলি",
"চীন",
"ক্রিস্টমাস দ্বীপ",
"কোকোস দ্বীপপুঞ্জ",
"কলাম্বিয়া",
"কোমোরোস",
"কঙ্গো প্রজাতন্ত্র",
"কুক দ্বীপপুঞ্জ",
"কোস্টারিকা",
"আইভরি কোট",
"ক্রোয়েশিয়া",
"কিউবা",
"সাইপ্রাস প্রজাতন্ত্র",
"চেক প্রজাতন্ত্র",
"ডেনমার্ক",
"জিবুতি প্রজাতন্ত্র",
"ডোমিনিকা",
"ডোমিনিকান প্রজাতন্ত্র",
"ইকুয়েডর",
"মিশর",
"এল সালভাদর",
"নিরক্ষীয় গিনি",
"ইরিত্রিয়া",
"এস্তোনিয়া",
"ইথিওপিয়া",
"ফারো দ্বীপপুঞ্জ",
"ফকল্যান্ড দ্বীপপুঞ্জ",
"ফিজি প্রজাতন্ত্র",
"ফিনল্যান্ড",
"ফ্রান্স",
"একটি দেশের নাম",
"ফরাসি পলিনেশিয়া",
"ফরাসি সুদূর দক্ষিণ দ্বীপপুঞ্জ",
"গ্যাবন",
"গাম্বিয়া",
"জর্জিয়া",
"জার্মানি",
"ঘানা",
"জিব্রাল্টার",
"গ্রীস",
"গ্রিনল্যান্ড",
"গ্রেনাডা",
"গুয়াডেলুপ",
"গুয়াম",
"গুয়াতেমালা",
"গার্নসি",
"গিনি",
"গিনি-বিসাউ",
"গিয়ানা",
"হাইতি",
"হার্ড আইল্যান্ড এবং ম্যাকডোনাল্ড দ্বীপপুঞ্জ",
"ভ্যাটিকান সিটি",
"হন্ডুরাস",
"হংকং",
"হাঙ্গেরি",
"আইসল্যান্ড",
"ভারত",
"ইন্দোনেশিয়া",
"ইরান",
"ইরাক",
"আপনি উত্তর দিবেন না",
"আইল অফ ম্যান",
"ইসরায়েল",
"ইতালি",
"জ্যামাইকা",
"জাপান",
"জার্সি",
"জর্ডান",
"কাজাখস্তান",
"কেনিয়া",
"কিরিবাতি",
"কোরিয়া",
"কোরিয়া",
"কুয়েত",
"কিরগিজস্তান প্রজাতন্ত্র",
"পিপলস ডেমোক্রেটিক রিপাবলিক অফ লাওস",
"লাটভিয়া",
"লেবানন",
"লেসোথো",
"লাইবেরিয়া",
"লিবিয়া",
"লিচেনস্টাইন",
"লিথুয়ানিয়া",
"লাক্সেমবার্গ",
"ম্যাকাও",
"উত্তর মেসিডোনিয়া প্রজাতন্ত্র",
"মাদাগাস্কার",
"মালাউই",
"মালয়েশিয়া",
"মালদ্বীপ",
"মালি",
"মাল্টা প্রজাতন্ত্র",
"মার্শাল দ্বীপপুঞ্জ",
"মার্টিনিক",
"ইসলামী প্রজাতন্ত্র মৌরিতানিয়া",
"মরিশাস",
"মায়োট",
"মেক্সিকো",
"মাইক্রোনেশিয়ার ফেডারেটেড স্টেটস",
"মোল্দোভা প্রজাতন্ত্র",
"মোনাকোর রাজত্ব",
"মঙ্গোলিয়া",
"মন্টিনিগ্রো প্রজাতন্ত্র",
"মন্টসেরাট",
"মরক্কো",
"মোজাম্বিক",
"মিয়ানমার",
"নামিবিয়া",
"নাউরু",
"নেপাল",
"নেদারল্যান্ডস এন্টিলস",
"নেদারল্যান্ডস",
"নতুন ক্যালেডোনিয়া",
"নিউজিল্যান্ড",
"নিকারাগুয়া",
"নাইজার",
"নাইজেরিয়া",
"সুন্দর",
"নরফোক দ্বীপ",
"উত্তর মারিয়ানা দ্বীপপুঞ্জ",
"নরওয়ে",
"ওমান",
"পাকিস্তান",
"পালাউ",
"ফিলিস্তিন অঞ্চল",
"পানামা",
"পাপুয়া নিউ গিনি",
"প্যারাগুয়ে",
"পেরু",
"ফিলিপাইন",
"পিটকের্ন দ্বীপপুঞ্জ",
"পোল্যান্ড",
"পর্তুগাল",
"পুয়ের্তো রিকো",
"কাতার",
"পুনর্মিলন",
"রোমানিয়া",
"রাশিয়া",
"রুয়ান্ডা",
"সেন্ট বার্থেলেমি",
"সেন্ট হেলেনা",
"সেন্ট কিটস ও নেভিস",
"সেন্ট লুসিয়া",
"সেন্ট মার্টিন",
"সেন্ট পিয়ের এবং মিকেলন",
"সেন্ট ভিনসেন্ট ও গ্রেনাডাইন দ্বীপপুঞ্জ",
"সামোয়া",
"সান মারিনো",
"স্যান্টোম প্রিন্সিপ",
"সৌদি আরব",
"সেনেগাল",
"সার্বিয়া",
"সেশেলস",
"সিয়েরা লিওন",
"সিঙ্গাপুর",
"স্লোভাকিয়া",
"স্লোভেনিয়া",
"সলোমান দ্বীপপুঞ্জ",
"সোমালিয়া",
"দক্ষিণ আফ্রিকা প্রজাতন্ত্র",
"দক্ষিণ জর্জিয়া এবং দক্ষিণ স্যান্ডউইচ দ্বীপপুঞ্জ",
"স্পেন",
"শ্রীলংকা",
"সুদান",
"সুরিনাম",
"স্বালবার্ড এবং জানমায়েন দ্বীপপুঞ্জ",
"সোয়াজিল্যান্ডের রাজ্য",
"সুইডেন",
"সুইজারল্যান্ড",
"সিরিয়া",
"তাইওয়ান",
"তাজিকিস্তান প্রজাতন্ত্র",
"তানজানিয়া",
"থাইল্যান্ড",
"পূর্ব তিমুর",
"যাও",
"টোকেলাউ",
"টোঙ্গা",
"ত্রিনিদাদ ও টোবাগো প্রজাতন্ত্র",
"তিউনিসিয়া",
"তুরস্ক",
"তুর্কমেনিস্তান",
"টার্কস্ ও কেইকোস দ্বীপপুঞ্জ",
"টুভালু",
"উগান্ডা",
"ইউক্রেন",
"সংযুক্ত আরব আমিরাত",
"ইংল্যান্ড",
"মার্কিন যুক্তরাষ্ট্র",
"ইউএস মাইনর আউটলি আইল্যান্ড",
"আমেরিকান ভার্জিন আইল্যান্ডস",
"উরুগুয়ে",
"উজবেকিস্তান",
"ভানুয়াতু",
"ভেনিজুয়েলা",
"ভিয়েতনাম",
"ওয়ালিস এবং ফুটুনা",
"পশ্চিম সাহারা",
"ইয়েমেন",
"জাম্বিয়া",
"জিম্বাবুয়ে",
)
secondary_address_formats = (
"ফ্ল্যাট %",
"ফ্ল্যাট %#",
"ষ্টুডিও %",
"ষ্টুডিও %#",
"অ্যাপার্টমেন্ট %",
"অ্যাপার্টমেন্ট %#",
)
street_suffixes = (
"এভিনিউ",
"সেন্টার",
"চত্বর",
"গলি",
"ঘাট",
"কর্নার",
"লেন",
"মহাসড়ক",
"মহল্লা",
"মোড়",
"পাড়া",
"পার্ক",
"প্লাজা",
"রাস্তা",
"রোড",
"সড়ক",
"স্টেশন",
"স্ট্যান্ড",
)
postcode_formats = ("%###",)
street_name_formats = (
"{{area_name}}{{street_suffix}}",
"{{city_prefix}} {{area_name}}{{street_suffix}}",
"{{city_prefix}} {{area_name}}{{city_suffix}}",
"{{area_name}}{{city_suffix}}",
"{{area_name}}{{city_suffix}} {{street_suffix}}",
"{{city_prefix}} {{area_name}}{{city_suffix}} {{street_suffix}}",
)
street_address_formats = (
"{{building_name}} {{building_number}}, {{street_name}}",
"{{secondary_address}}, {{building_name}} {{building_number}}, {{street_name}}",
)
town_formats = ("{{area_name}}{{city_suffix}}",)
address_formats = ("{{street_address}}, {{town}}, {{city}}, {{postcode}}",)
def administrative_unit(self) -> str:
"""
:example: 'ঢাকা'
"""
return self.random_element(self.cities)
def area_name(self) -> str:
"""
:example: 'উজির'
"""
return self.random_element(self.area_names)
def building_name(self) -> str:
"""
:example: 'বাড়ী নং'
"""
return self.random_element(self.building_names)
def building_number(self) -> str:
"""
:example: '791' to '৭৯১'
"""
return translate_to_bengali_digits(self.numerify(self.random_element(self.building_number_formats)))
def city_prefix(self) -> str:
"""
:example: 'উত্তর'
"""
return self.random_element(self.city_prefixes)
def city(self) -> str:
"""
:example: 'ঢাকা'
"""
return self.random_element(self.cities)
def postcode(self) -> str:
"""
See
https://bdpost.portal.gov.bd/site/page/6aaeabe4-479b-4e5a-a671-e9e5b994bf9a
"""
return translate_to_bengali_digits(self.numerify(self.random_element(self.postcode_formats)))
def secondary_address(self) -> str:
"""
As the generated string format is a Bengali word but English number so splitting the value by space
and then convert the English number to Bengali number and concat with generated Bengali word
and return
: example : 'অ্যাপার্টমেন্ট 14' to 'অ্যাপার্টমেন্ট ১৪'
"""
value = self.bothify(self.random_element(self.secondary_address_formats))
word_list = value.split(" ")
return word_list[0] + " " + translate_to_bengali_digits(word_list[1])
def town(self) -> str:
"""
:example: 'নবাব'
"""
pattern: str = self.random_element(self.town_formats)
return self.generator.parse(pattern)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,253 @@
from .. import Provider as AddressProvider
class Provider(AddressProvider):
countries = (
"Afghanistan",
"Alandinseln",
"Albanien",
"Algerien",
"Amerikanisch-Ozeanien",
"Amerikanisch-Samoa",
"Amerikanische Jungferninseln",
"Andorra",
"Angola",
"Anguilla",
"Antarktis",
"Antigua und Barbuda",
"Argentinien",
"Armenien",
"Aruba",
"Aserbaidschan",
"Australien",
"Bahamas",
"Bahrain",
"Bangladesch",
"Barbados",
"Belarus",
"Belgien",
"Belize",
"Benin",
"Bermuda",
"Bhutan",
"Bolivien",
"Bosnien und Herzegowina",
"Botsuana",
"Bouvetinsel",
"Brasilien",
"Britische Jungferninseln",
"Britisches Territorium im Indischen Ozean",
"Brunei Darussalam",
"Bulgarien",
"Burkina Faso",
"Burundi",
"Chile",
"China",
"Cookinseln",
"Costa Rica",
"Côte dIvoire",
"Demokratische Republik Kongo",
"Demokratische Volksrepublik Korea",
"Deutschland",
"Dominica",
"Dominikanische Republik",
"Dschibuti",
"Dänemark",
"Ecuador",
"El Salvador",
"Eritrea",
"Estland",
"Falklandinseln",
"Fidschi",
"Finnland",
"Frankreich",
"Französisch-Guayana",
"Französisch-Polynesien",
"Färöer",
"Gabun",
"Gambia",
"Georgien",
"Ghana",
"Gibraltar",
"Grenada",
"Griechenland",
"Grönland",
"Guadeloupe",
"Guam",
"Guatemala",
"Guernsey",
"Guinea",
"Guinea-Bissau",
"Guyana",
"Haiti",
"Heard- und McDonald-Inseln",
"Honduras",
"Indien",
"Indonesien",
"Irak",
"Iran",
"Irland",
"Island",
"Isle of Man",
"Israel",
"Italien",
"Jamaika",
"Japan",
"Jemen",
"Jersey",
"Jordanien",
"Kaimaninseln",
"Kambodscha",
"Kamerun",
"Kanada",
"Kap Verde",
"Kasachstan",
"Katar",
"Kenia",
"Kirgisistan",
"Kiribati",
"Kokosinseln",
"Kolumbien",
"Komoren",
"Kongo",
"Kroatien",
"Kuba",
"Kuwait",
"Laos",
"Lesotho",
"Lettland",
"Libanon",
"Liberia",
"Libyen",
"Liechtenstein",
"Litauen",
"Luxemburg",
"Madagaskar",
"Malawi",
"Malaysia",
"Malediven",
"Mali",
"Malta",
"Marokko",
"Marshallinseln",
"Martinique",
"Mauretanien",
"Mauritius",
"Mayotte",
"Mexiko",
"Mikronesien",
"Monaco",
"Mongolei",
"Montenegro",
"Montserrat",
"Mosambik",
"Myanmar",
"Namibia",
"Nauru",
"Nepal",
"Neukaledonien",
"Neuseeland",
"Nicaragua",
"Niederlande",
"Niederländische Antillen",
"Niger",
"Nigeria",
"Niue",
"Nordmazedonien",
"Norfolkinsel",
"Norwegen",
"Nördliche Marianen",
"Oman",
"Osttimor",
"Pakistan",
"Palau",
"Palästinensische Gebiete",
"Panama",
"Papua-Neuguinea",
"Paraguay",
"Peru",
"Philippinen",
"Pitcairn",
"Polen",
"Portugal",
"Puerto Rico",
"Republik Korea",
"Republik Moldau",
"Ruanda",
"Rumänien",
"Russische Föderation",
"Réunion",
"Salomonen",
"Sambia",
"Samoa",
"San Marino",
"Saudi-Arabien",
"Schweden",
"Schweiz",
"Senegal",
"Serbien",
"Serbien und Montenegro",
"Seychellen",
"Sierra Leone",
"Simbabwe",
"Singapur",
"Slowakei",
"Slowenien",
"Somalia",
"Sonderverwaltungszone Hongkong",
"Sonderverwaltungszone Macao",
"Spanien",
"Sri Lanka",
"St. Barthélemy",
"St. Helena",
"St. Kitts und Nevis",
"St. Lucia",
"St. Martin",
"St. Pierre und Miquelon",
"St. Vincent und die Grenadinen",
"Sudan",
"Suriname",
"Svalbard und Jan Mayen",
"Swasiland",
"Syrien",
"São Tomé und Príncipe",
"Südafrika",
"Südgeorgien und die Südlichen Sandwichinseln",
"Tadschikistan",
"Taiwan",
"Tansania",
"Thailand",
"Togo",
"Tokelau",
"Tonga",
"Trinidad und Tobago",
"Tschad",
"Tschechische Republik",
"Tunesien",
"Turkmenistan",
"Turks- und Caicosinseln",
"Tuvalu",
"Türkei",
"Uganda",
"Ukraine",
"Ungarn",
"Uruguay",
"Usbekistan",
"Vanuatu",
"Vatikanstadt",
"Venezuela",
"Vereinigte Arabische Emirate",
"Vereinigte Staaten",
"Vereinigtes Königreich",
"Vietnam",
"Wallis und Futuna",
"Weihnachtsinsel",
"Westsahara",
"Zentralafrikanische Republik",
"Zypern",
"Ägypten",
"Äquatorialguinea",
"Äthiopien",
"Äußeres Ozeanien",
"Österreich",
)

View File

@@ -0,0 +1,280 @@
from ..de import Provider as AddressProvider
class Provider(AddressProvider):
city_formats = ("{{city_name}}",)
city_with_postcode_formats = ("{{postcode}} {{city}}",)
street_name_formats = (
"{{first_name}}-{{last_name}}-{{street_suffix_long}}",
"{{last_name}}{{street_suffix_short}}",
)
street_address_formats = ("{{street_name}} {{building_number}}",)
address_formats = ("{{street_address}}\n{{postcode}} {{city}}",)
building_number_formats = ("###", "##", "#", "#/#")
street_suffixes_long = (
"Gasse",
"Platz",
"Ring",
"Straße",
"Weg",
)
street_suffixes_short = (
"gasse",
"platz",
"ring",
"straße",
"str.",
"weg",
)
# https://en.wikipedia.org/wiki/List_of_postal_codes_in_Austria
postcode_formats = (
"1###",
"2###",
"3###",
"4###",
"5###",
"6###",
"7###",
"8###",
"9###",
)
# https://en.wikipedia.org/wiki/List_of_cities_and_towns_in_Austria
cities = (
"Allentsteig",
"Altheim",
"Althofen",
"Amstetten",
"Ansfelden",
"Attnang-Puchheim",
"Bad Aussee",
"Bad Hall",
"Bad Ischl",
"Bad Leonfelden",
"Bad Radkersburg",
"Bad Sankt Leonhard im Lavanttal",
"Bad Vöslau",
"Baden",
"Bärnbach",
"Berndorf",
"Bischofshofen",
"Bleiburg",
"Bludenz",
"Braunau am Inn",
"Bregenz",
"Bruck an der Leitha",
"Bruck an der Mur",
"Deutsch-Wagram",
"Deutschlandsberg",
"Dornbirn",
"Drosendorf-Zissersdorf 1",
"Dürnstein",
"Ebenfurth",
"Ebreichsdorf",
"Eferding",
"Eggenburg",
"Eisenerz",
"Eisenstadt",
"Enns",
"Fehring",
"Feldbach",
"Feldkirch",
"Feldkirchen",
"Ferlach",
"Fischamend",
"Frauenkirchen",
"Freistadt",
"Friedberg",
"Friesach",
"Frohnleiten",
"Fürstenfeld",
"Gallneukirchen",
"Gänserndorf",
"Geras",
"Gerasdorf bei Wien",
"Gföhl",
"Gleisdorf",
"Gloggnitz",
"Gmünd",
"Gmünd in Kärnten",
"Gmunden",
"Graz",
"Grein",
"Grieskirchen",
"Groß-Enzersdorf",
"Groß-Gerungs",
"Groß-Siegharts",
"Güssing",
"Haag",
"Hainburg an der Donau",
"Hainfeld",
"Hall in Tirol",
"Hallein",
"Hardegg",
"Hartberg",
"Heidenreichstein",
"Herzogenburg",
"Imst",
"Innsbruck",
"Jennersdorf",
"Judenburg",
"Kapfenberg",
"Kindberg",
"Klagenfurt",
"Klosterneuburg",
"Knittelfeld",
"Köflach",
"Korneuburg",
"Krems an der Donau",
"Kufstein",
"Laa an der Thaya",
"Laakirchen",
"Landeck",
"Langenlois",
"Leibnitz",
"Leoben",
"Lienz",
"Liezen",
"Lilienfeld",
"Linz",
"Litschau",
"Maissau",
"Mank",
"Mannersdorf am Leithagebirge",
"Marchegg",
"Marchtrenk",
"Mariazell",
"Mattersburg",
"Mattighofen",
"Mautern an der Donau",
"Melk",
"Mistelbach an der Zaya",
"Mödling",
"Murau",
"Mureck",
"Mürzzuschlag",
"Neulengbach",
"Neumarkt am Wallersee",
"Neunkirchen",
"Neusiedl am See",
"Oberndorf bei Salzburg",
"Oberpullendorf",
"Oberwart",
"Oberwälz",
"Perg",
"Peuerbach",
"Pinkafeld",
"Pöchlarn",
"Poysdorf",
"Pregarten",
"Pulkau",
"Purbach am Neusiedler See",
"Purkersdorf",
"Raabs an der Thaya",
"Radenthein",
"Radstadt",
"Rattenberg",
"Retz",
"Ried im Innkreis",
"Rohrbach in Oberösterreich",
"Rottenmann",
"Rust",
"Saalfelden am Steinernen Meer",
"Salzburg",
"Sankt Andrä im Lavanttal",
"Sankt Johann im Pongau",
"Sankt Pölten",
"Sankt Valentin",
"Sankt Veit an der Glan",
"Schärding",
"Scheibbs",
"Schladming",
"Schrattenthal",
"Schrems",
"Schwanenstadt",
"Schwaz",
"Schwechat",
"Spittal an der Drau",
"Stadtschlaining",
"Steyr",
"Steyregg",
"Stockerau",
"Straßburg",
"Ternitz",
"Traiskirchen",
"Traismauer",
"Traun",
"Trieben",
"Trofaiach",
"Tulln an der Donau",
"Villach",
"Vils",
"Vöcklabruck",
"Voitsberg",
"Völkermarkt",
"Waidhofen an der Thaya",
"Waidhofen an der Ybbs",
"Weitra",
"Weiz",
"Wels",
"Wien",
"Wiener Neustadt",
"Wieselburg",
"Wilhelmsburg",
"Wolfsberg",
"Wolkersdorf",
"Wörgl",
"Ybbs an der Donau",
"Zell am See",
"Zeltweg",
"Zistersdorf",
"Zwettl",
)
# https://en.wikipedia.org/wiki/States_of_Austria
states = (
"Wien",
"Steiermark",
"Burgenland",
"Tirol",
"Niederösterreich",
"Oberösterreich",
"Salzburg",
"Kärnten",
"Vorarlberg",
)
municipality_key_formats = (
"1####",
"2####",
"3####",
"4####",
"5####",
"6####",
"7####",
"8####",
"9####",
)
def street_suffix_short(self) -> str:
return self.random_element(self.street_suffixes_short)
def street_suffix_long(self) -> str:
return self.random_element(self.street_suffixes_long)
def city_name(self) -> str:
return self.random_element(self.cities)
def administrative_unit(self) -> str:
return self.random_element(self.states)
state = administrative_unit
def city_with_postcode(self) -> str:
pattern: str = self.random_element(self.city_with_postcode_formats)
return self.generator.parse(pattern)

View File

@@ -0,0 +1,247 @@
from typing import Tuple
from ..de import Provider as AddressProvider
class Provider(AddressProvider):
city_formats = ("{{city_name}}",)
building_number_formats = ("%", "%#", "%#", "%#", "%##")
street_suffixes = ["strasse"]
street_name_formats = ("{{last_name}}{{street_suffix}}",)
street_address_formats = ("{{street_name}} {{building_number}}",)
address_formats = ("{{street_address}}\n{{postcode}} {{city}}",)
postcode_formats = (
"1###",
"2###",
"3###",
"4###",
"5###",
"6###",
"7###",
"8###",
"9###",
)
cities = (
"Aarau",
"Adliswil",
"Aesch",
"Affoltern",
"Aigle",
"Allschwil",
"Altstätten",
"Amriswil",
"Arbon",
"Arth",
"Baar",
"Baden",
"Basel",
"Bassersdorf",
"Bellinzona",
"Belp",
"Bern",
"Bernex",
"Biel/Bienne",
"Binningen",
"Birsfelden",
"Brig-Glis",
"Brugg",
"Buchs",
"Bülach",
"Bulle",
"Burgdorf",
"Carouge",
"Cham",
"Chêne-Bougeries",
"Chur",
"Crans-Montana",
"Davos",
"Delsberg",
"Dietikon",
"Dübendorf",
"Ebikon",
"Ecublens",
"Einsiedeln",
"Emmen",
"Flawil",
"Frauenfeld",
"Freiburg",
"Freienbach",
"Genf",
"Gland",
"Glarus",
"Glarus",
"Gossau",
"Gossau",
"Grenchen",
"Herisau",
"Hinwil",
"Horgen",
"Horw",
"Illnau-Effretikon",
"Ittigen",
"Kloten",
"Köniz",
"Kreuzlingen",
"Kriens",
"Küsnacht",
"Küssnacht",
"La Chaux-de-Fonds",
"La Tour-de-Peilz",
"Lancy",
"Langenthal",
"Lausanne",
"Le Grand-Saconnex",
"Lenzburg",
"Liestal",
"Locarno",
"Lugano",
"Lutry",
"Luzern",
"Lyss",
"Männedorf",
"Martigny",
"Maur",
"Meilen",
"Mendrisio",
"Meyrin",
"Möhlin",
"Monthey",
"Montreux",
"Morges",
"Münchenbuchsee",
"Münchenstein",
"Münsingen",
"Muri",
"Muttenz",
"Naters",
"Neuenburg",
"Neuhausen",
"Nyon",
"Oberwil",
"Oftringen",
"Olten",
"Onex",
"Opfikon",
"Ostermundigen",
"Payerne",
"Pfäffikon",
"Plan-les-Ouates",
"Pratteln",
"Prilly",
"Pully",
"Rapperswil-Jona",
"Regensdorf",
"Reinach",
"Renens",
"Rheinfelden",
"Richterswil",
"Riehen",
"Risch",
"Romanshorn",
"Rüti",
"Sarnen",
"Schaffhausen",
"Schlieren",
"Schwyz",
"Siders",
"Sitten",
"Solothurn",
"Spiez",
"Spreitenbach",
"St. Gallen",
"Stäfa",
"Steffisburg",
"Steinhausen",
"Suhr",
"Sursee",
"Thalwil",
"Thônex",
"Thun",
"Urdorf",
"Uster",
"Uzwil",
"Val-de-Ruz",
"Val-de-Travers",
"Vernier",
"Versoix",
"Vevey",
"Veyrier",
"Villars-sur-Glâne",
"Volketswil",
"Wädenswil",
"Wald",
"Wallisellen",
"Weinfelden",
"Wettingen",
"Wetzikon",
"Wil",
"Winterthur",
"Wohlen",
"Worb",
"Yverdon-les-Bains",
"Zofingen",
"Zollikofen",
"Zollikon",
"Zug",
"Zürich",
)
cantons = (
("AG", "Aargau"),
("AI", "Appenzell Innerrhoden"),
("AR", "Appenzell Ausserrhoden"),
("BE", "Bern"),
("BL", "Basel-Landschaft"),
("BS", "Basel-Stadt"),
("FR", "Freiburg"),
("GE", "Genf"),
("GL", "Glarus"),
("GR", "Graubünden"),
("JU", "Jura"),
("LU", "Luzern"),
("NE", "Neuenburg"),
("NW", "Nidwalden"),
("OW", "Obwalden"),
("SG", "St. Gallen"),
("SH", "Schaffhausen"),
("SO", "Solothurn"),
("SZ", "Schwyz"),
("TG", "Thurgau"),
("TI", "Tessin"),
("UR", "Uri"),
("VD", "Waadt"),
("VS", "Wallis"),
("ZG", "Zug"),
("ZH", "Zürich"),
)
def canton(self) -> Tuple[str, str]:
"""
Randomly returns a swiss canton ('Abbreviated', 'Name').
:example ('ZH', 'Zürich')
"""
return self.random_element(self.cantons)
def city_name(self) -> str:
"""
Randomly returns a swiss city.
:example 'Zug'
"""
return self.random_element(self.cities)
def administrative_unit(self) -> str:
"""
Randomly returns a Swiss canton name.
:example 'Zürich'
"""
return self.canton()[1]
canton_name = administrative_unit
def canton_code(self) -> str:
"""
Randomly returns a Swiss canton code.
:example 'ZH'
"""
return self.canton()[0]

View File

@@ -0,0 +1,470 @@
from ..de import Provider as AddressProvider
class Provider(AddressProvider):
city_formats = ("{{city_name}}",)
city_with_postcode_formats = ("{{postcode}} {{city}}",)
street_name_formats = (
"{{first_name}}-{{last_name}}-{{street_suffix_long}}",
"{{last_name}}{{street_suffix_short}}",
)
street_address_formats = ("{{street_name}} {{building_number}}",)
address_formats = ("{{street_address}}\n{{postcode}} {{city}}",)
# NOTE: Zero itself can be a valid building number in rare cases e.g., Wilhelm-Wisser-Str. 0, Heidhörn
# see: https://www.uniserv.com/wissen/magazin/article/besonderheiten-von-zustelladressen/
building_number_formats = ("#", "%#", "%##", "%###", "%/%", "%#/%#", "%-%", "%#-%#")
street_suffixes_long = (
"Gasse",
"Platz",
"Ring",
"Straße",
"Weg",
"Allee",
)
street_suffixes_short = (
"gasse",
"platz",
"ring",
"straße",
"str.",
"weg",
"allee",
)
postcode_formats = ("#####",)
cities = (
"Aachen",
"Ahaus",
"Altentreptow",
"Altötting",
"Amberg",
"Angermünde",
"Anklam",
"Ansbach",
"Apolda",
"Arnstadt",
"Artern",
"Aschaffenburg",
"Aue",
"Auerbach",
"Augsburg",
"Aurich",
"Backnang",
"Bad Brückenau",
"Bad Freienwalde",
"Bad Kissingen",
"Bad Kreuznach",
"Bad Langensalza",
"Bad Liebenwerda",
"Bad Mergentheim",
"Badalzungen",
"Badibling",
"Badoberan",
"Bamberg",
"Bautzen",
"Bayreuth",
"Beeskow",
"Beilngries",
"Belzig",
"Berchtesgaden",
"Bergzabern",
"Berlin",
"Bernburg",
"Bersenbrück",
"Biedenkopf",
"Bischofswerda",
"Bitterfeld",
"Bogen",
"Borken",
"Borna",
"Brand",
"Brandenburg",
"Bremen",
"Bremervörde",
"Brilon",
"Bruchsal",
"Burg",
"Burgdorf",
"Burglengenfeld",
"Böblingen",
"Büsingen am Hochrhein",
"Bützow",
"Calau",
"Calw",
"Celle",
"Chemnitz",
"Cloppenburg",
"Coburg",
"Cottbus",
"Crailsheim",
"Cuxhaven",
"Dachau",
"Darmstadt",
"Deggendorf",
"Delitzsch",
"Demmin",
"Dessau",
"Dieburg",
"Diepholz",
"Dinkelsbühl",
"Dinslaken",
"Donaueschingen",
"Dresden",
"Duderstadt",
"Döbeln",
"Düren",
"Ebermannstadt",
"Ebern",
"Ebersberg",
"Eberswalde",
"Eckernförde",
"Eggenfelden",
"Eichstätt",
"Eilenburg",
"Einbeck",
"Eisenach",
"Eisenberg",
"Eisenhüttenstadt",
"Eisleben",
"Emmendingen",
"Erbisdorf",
"Erding",
"Erfurt",
"Erkelenz",
"Euskirchen",
"Eutin",
"Fallingbostel",
"Feuchtwangen",
"Finsterwalde",
"Flöha",
"Forchheim",
"Forst",
"Freising",
"Freital",
"Freudenstadt",
"Fulda",
"Fürstenfeldbruck",
"Fürstenwalde",
"Füssen",
"Gadebusch",
"Gardelegen",
"Garmisch-Partenkirchen",
"Geithain",
"Geldern",
"Gelnhausen",
"Genthin",
"Gera",
"Germersheim",
"Gerolzhofen",
"Gießen",
"Gifhorn",
"Goslar",
"Gotha",
"Grafenau",
"Gransee",
"Greifswald",
"Greiz",
"Grevenbroich",
"Grevesmühlen",
"Griesbach Rottal",
"Grimma",
"Grimmen",
"Groß-Gerau",
"Großenhain",
"Gräfenhainichen",
"Guben",
"Gunzenhausen",
"Göppingen",
"Görlitz",
"Göttingen",
"Günzburg",
"Güstrow",
"Gütersloh",
"Hagenow",
"Hainichen",
"Halberstadt",
"Haldensleben",
"Hamburg",
"Hammelburg",
"Hannover",
"Hannoversch Münden",
"Hansestadttralsund",
"Havelberg",
"Hechingen",
"Heiligenstadt",
"Heinsberg",
"Helmstedt",
"Herford",
"Hersbruck",
"Herzberg",
"Hettstedt",
"Hildburghausen",
"Hildesheim",
"Hofgeismar",
"Hohenmölsen",
"Hohenstein-Ernstthal",
"Holzminden",
"Hoyerswerda",
"Husum",
"Höxter",
"Hünfeld",
"Illertissen",
"Ilmenau",
"Ingolstadt",
"Iserlohn",
"Jena",
"Jessen",
"Jülich",
"Jüterbog",
"Kaiserslautern",
"Kamenz",
"Karlsruhe",
"Kassel",
"Kehl",
"Kelheim",
"Kemnath",
"Kitzingen",
"Kleve",
"Klötze",
"Koblenz",
"Konstanz",
"Kronach",
"Kulmbach",
"Kusel",
"Kyritz",
"Königs Wusterhausen",
"Kötzting",
"Leipziger Land",
"Lemgo",
"Lichtenfels",
"Lippstadt",
"Lobenstein",
"Luckau",
"Luckenwalde",
"Ludwigsburg",
"Ludwigslust",
"Lörrach",
"Lübben",
"Lübeck",
"Lübz",
"Lüdenscheid",
"Lüdinghausen",
"Lüneburg",
"Magdeburg",
"Main-Höchst",
"Mainburg",
"Malchin",
"Mallersdorf",
"Marienberg",
"Marktheidenfeld",
"Mayen",
"Meiningen",
"Meißen",
"Melle",
"Mellrichstadt",
"Melsungen",
"Meppen",
"Merseburg",
"Mettmann",
"Miesbach",
"Miltenberg",
"Mittweida",
"Moers",
"Monschau",
"Mühldorf am Inn",
"Mühlhausen",
"München",
"Nabburg",
"Naila",
"Nauen",
"Neu-Ulm",
"Neubrandenburg",
"Neunburg vorm Wald",
"Neuruppin",
"Neuss",
"Neustadt am Rübenberge",
"Neustadtner Waldnaab",
"Neustrelitz",
"Niesky",
"Norden",
"Nordhausen",
"Northeim",
"Nördlingen",
"Nürtingen",
"Oberviechtach",
"Ochsenfurt",
"Olpe",
"Oranienburg",
"Oschatz",
"Osterburg",
"Osterode am Harz",
"Paderborn",
"Parchim",
"Parsberg",
"Pasewalk",
"Passau",
"Pegnitz",
"Peine",
"Perleberg",
"Pfaffenhofen an der Ilm",
"Pinneberg",
"Pirmasens",
"Plauen",
"Potsdam",
"Prenzlau",
"Pritzwalk",
"Pößneck",
"Quedlinburg",
"Querfurt",
"Rastatt",
"Rathenow",
"Ravensburg",
"Recklinghausen",
"Regen",
"Regensburg",
"Rehau",
"Reutlingen",
"Ribnitz-Damgarten",
"Riesa",
"Rochlitz",
"Rockenhausen",
"Roding",
"Rosenheim",
"Rostock",
"Roth",
"Rothenburg ob der Tauber",
"Rottweil",
"Rudolstadt",
"Saarbrücken",
"Saarlouis",
"Sangerhausen",
"Sankt Goar",
"Sankt Goarshausen",
"Saulgau",
"Scheinfeld",
"Schleiz",
"Schlüchtern",
"Schmölln",
"Schongau",
"Schrobenhausen",
"Schwabmünchen",
"Schwandorf",
"Schwarzenberg",
"Schweinfurt",
"Schwerin",
"Schwäbisch Gmünd",
"Schwäbisch Hall",
"Sebnitz",
"Seelow",
"Senftenberg",
"Siegen",
"Sigmaringen",
"Soest",
"Soltau",
"Sondershausen",
"Sonneberg",
"Spremberg",
"Stade",
"Stadtroda",
"Stadtsteinach",
"Staffelstein",
"Starnberg",
"Staßfurt",
"Steinfurt",
"Stendal",
"Sternberg",
"Stollberg",
"Strasburg",
"Strausberg",
"Stuttgart",
"Suhl",
"Sulzbach-Rosenberg",
"Säckingen",
"Sömmerda",
"Tecklenburg",
"Teterow",
"Tirschenreuth",
"Torgau",
"Tuttlingen",
"Tübingen",
"Ueckermünde",
"Uelzen",
"Uffenheim",
"Vechta",
"Viechtach",
"Viersen",
"Vilsbiburg",
"Vohenstrauß",
"Waldmünchen",
"Wanzleben",
"Waren",
"Warendorf",
"Weimar",
"Weißenfels",
"Weißwasser",
"Werdau",
"Wernigerode",
"Wertingen",
"Wesel",
"Wetzlar",
"Wiedenbrück",
"Wismar",
"Wittenberg",
"Wittmund",
"Wittstock",
"Witzenhausen",
"Wolfach",
"Wolfenbüttel",
"Wolfratshausen",
"Wolgast",
"Wolmirstedt",
"Worbis",
"Wunsiedel",
"Wurzen",
"Zerbst",
"Zeulenroda",
"Zossen",
"Zschopau",
)
states = (
"Baden-Württemberg",
"Bayern",
"Berlin",
"Brandenburg",
"Bremen",
"Hamburg",
"Hessen",
"Mecklenburg-Vorpommern",
"Niedersachsen",
"Nordrhein-Westfalen",
"Rheinland-Pfalz",
"Saarland",
"Sachsen",
"Sachsen-Anhalt",
"Schleswig-Holstein",
"Thüringen",
)
def street_suffix_short(self) -> str:
return self.random_element(self.street_suffixes_short)
def street_suffix_long(self) -> str:
return self.random_element(self.street_suffixes_long)
def city_name(self) -> str:
return self.random_element(self.cities)
def administrative_unit(self) -> str:
return self.random_element(self.states)
state = administrative_unit
def city_with_postcode(self) -> str:
pattern: str = self.random_element(self.city_with_postcode_formats)
return self.generator.parse(pattern)

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,251 @@
from .. import Provider as AddressProvider
class Provider(AddressProvider):
countries = (
"Afghanistan",
"Albania",
"Algeria",
"American Samoa",
"Andorra",
"Angola",
"Anguilla",
"Antarctica (the territory South of 60 deg S)",
"Antigua and Barbuda",
"Argentina",
"Armenia",
"Aruba",
"Australia",
"Austria",
"Azerbaijan",
"Bahamas",
"Bahrain",
"Bangladesh",
"Barbados",
"Belarus",
"Belgium",
"Belize",
"Benin",
"Bermuda",
"Bhutan",
"Bolivia",
"Bosnia and Herzegovina",
"Botswana",
"Bouvet Island (Bouvetoya)",
"Brazil",
"British Indian Ocean Territory (Chagos Archipelago)",
"British Virgin Islands",
"Brunei Darussalam",
"Bulgaria",
"Burkina Faso",
"Burundi",
"Cambodia",
"Cameroon",
"Canada",
"Cape Verde",
"Cayman Islands",
"Central African Republic",
"Chad",
"Chile",
"China",
"Christmas Island",
"Cocos (Keeling) Islands",
"Colombia",
"Comoros",
"Congo",
"Congo",
"Cook Islands",
"Costa Rica",
"Cote d'Ivoire",
"Croatia",
"Cuba",
"Cyprus",
"Czech Republic",
"Denmark",
"Djibouti",
"Dominica",
"Dominican Republic",
"Ecuador",
"Egypt",
"El Salvador",
"Equatorial Guinea",
"Eritrea",
"Estonia",
"Ethiopia",
"Faroe Islands",
"Falkland Islands (Malvinas)",
"Fiji",
"Finland",
"France",
"French Guiana",
"French Polynesia",
"French Southern Territories",
"Gabon",
"Gambia",
"Georgia",
"Germany",
"Ghana",
"Gibraltar",
"Greece",
"Greenland",
"Grenada",
"Guadeloupe",
"Guam",
"Guatemala",
"Guernsey",
"Guinea",
"Guinea-Bissau",
"Guyana",
"Haiti",
"Heard Island and McDonald Islands",
"Holy See (Vatican City State)",
"Honduras",
"Hong Kong",
"Hungary",
"Iceland",
"India",
"Indonesia",
"Iran",
"Iraq",
"Ireland",
"Isle of Man",
"Israel",
"Italy",
"Jamaica",
"Japan",
"Jersey",
"Jordan",
"Kazakhstan",
"Kenya",
"Kiribati",
"Korea",
"Korea",
"Kuwait",
"Kyrgyz Republic",
"Lao People's Democratic Republic",
"Latvia",
"Lebanon",
"Lesotho",
"Liberia",
"Libyan Arab Jamahiriya",
"Liechtenstein",
"Lithuania",
"Luxembourg",
"Macao",
"Madagascar",
"Malawi",
"Malaysia",
"Maldives",
"Mali",
"Malta",
"Marshall Islands",
"Martinique",
"Mauritania",
"Mauritius",
"Mayotte",
"Mexico",
"Micronesia",
"Moldova",
"Monaco",
"Mongolia",
"Montenegro",
"Montserrat",
"Morocco",
"Mozambique",
"Myanmar",
"Namibia",
"Nauru",
"Nepal",
"Netherlands Antilles",
"Netherlands",
"New Caledonia",
"New Zealand",
"Nicaragua",
"Niger",
"Nigeria",
"Niue",
"Norfolk Island",
"North Macedonia",
"Northern Mariana Islands",
"Norway",
"Oman",
"Pakistan",
"Palau",
"Palestinian Territory",
"Panama",
"Papua New Guinea",
"Paraguay",
"Peru",
"Philippines",
"Pitcairn Islands",
"Poland",
"Portugal",
"Puerto Rico",
"Qatar",
"Reunion",
"Romania",
"Russian Federation",
"Rwanda",
"Saint Barthelemy",
"Saint Helena",
"Saint Kitts and Nevis",
"Saint Lucia",
"Saint Martin",
"Saint Pierre and Miquelon",
"Saint Vincent and the Grenadines",
"Samoa",
"San Marino",
"Sao Tome and Principe",
"Saudi Arabia",
"Senegal",
"Serbia",
"Seychelles",
"Sierra Leone",
"Singapore",
"Slovakia (Slovak Republic)",
"Slovenia",
"Solomon Islands",
"Somalia",
"South Africa",
"South Georgia and the South Sandwich Islands",
"Spain",
"Sri Lanka",
"Sudan",
"Suriname",
"Svalbard & Jan Mayen Islands",
"Swaziland",
"Sweden",
"Switzerland",
"Syrian Arab Republic",
"Taiwan",
"Tajikistan",
"Tanzania",
"Thailand",
"Timor-Leste",
"Togo",
"Tokelau",
"Tonga",
"Trinidad and Tobago",
"Tunisia",
"Turkey",
"Turkmenistan",
"Turks and Caicos Islands",
"Tuvalu",
"Uganda",
"Ukraine",
"United Arab Emirates",
"United Kingdom",
"United States of America",
"United States Minor Outlying Islands",
"United States Virgin Islands",
"Uruguay",
"Uzbekistan",
"Vanuatu",
"Venezuela",
"Vietnam",
"Wallis and Futuna",
"Western Sahara",
"Yemen",
"Zambia",
"Zimbabwe",
)

View File

@@ -0,0 +1,342 @@
from ..en import Provider as AddressProvider
class Provider(AddressProvider):
city_prefixes = ("North", "East", "West", "South", "New", "Lake", "Port", "St.")
city_suffixes = (
"town",
"ton",
"land",
"ville",
"berg",
"burgh",
"borough",
"bury",
"view",
"port",
"mouth",
"stad",
"furt",
"chester",
"mouth",
"fort",
"haven",
"side",
"shire",
)
building_number_formats = ("###", "##", "#")
street_suffixes = (
"Access",
"Alley",
"Alleyway",
"Amble",
"Anchorage",
"Approach",
"Arcade",
"Artery",
"Avenue",
"Basin",
"Beach",
"Bend",
"Block",
"Boulevard",
"Brace",
"Brae",
"Break",
"Bridge",
"Broadway",
"Brow",
"Bypass",
"Byway",
"Causeway",
"Centre",
"Centreway",
"Chase",
"Circle",
"Circlet",
"Circuit",
"Circus",
"Close",
"Colonnade",
"Common",
"Concourse",
"Copse",
"Corner",
"Corso",
"Court",
"Courtyard",
"Cove",
"Crescent",
"Crest",
"Cross",
"Crossing",
"Crossroad",
"Crossway",
"Cruiseway",
"Cul-de-sac",
"Cutting",
"Dale",
"Dell",
"Deviation",
"Dip",
"Distributor",
"Drive",
"Driveway",
"Edge",
"Elbow",
"End",
"Entrance",
"Esplanade",
"Estate",
"Expressway",
"Extension",
"Fairway",
"Fire Track",
"Firetrail",
"Flat",
"Follow",
"Footway",
"Foreshore",
"Formation",
"Freeway",
"Front",
"Frontage",
"Gap",
"Garden",
"Gardens",
"Gate",
"Gates",
"Glade",
"Glen",
"Grange",
"Green",
"Ground",
"Grove",
"Gully",
"Heights",
"Highroad",
"Highway",
"Hill",
"Interchange",
"Intersection",
"Junction",
"Key",
"Landing",
"Lane",
"Laneway",
"Lees",
"Line",
"Link",
"Little",
"Lookout",
"Loop",
"Lower",
"Mall",
"Meander",
"Mew",
"Mews",
"Motorway",
"Mount",
"Nook",
"Outlook",
"Parade",
"Park",
"Parklands",
"Parkway",
"Part",
"Pass",
"Path",
"Pathway",
"Piazza",
"Place",
"Plateau",
"Plaza",
"Pocket",
"Point",
"Port",
"Promenade",
"Quad",
"Quadrangle",
"Quadrant",
"Quay",
"Quays",
"Ramble",
"Ramp",
"Range",
"Reach",
"Reserve",
"Rest",
"Retreat",
"Ride",
"Ridge",
"Ridgeway",
"Right Of Way",
"Ring",
"Rise",
"River",
"Riverway",
"Riviera",
"Road",
"Roads",
"Roadside",
"Roadway",
"Ronde",
"Rosebowl",
"Rotary",
"Round",
"Route",
"Row",
"Rue",
"Run",
"Service Way",
"Siding",
"Slope",
"Sound",
"Spur",
"Square",
"Stairs",
"State Highway",
"Steps",
"Strand",
"Street",
"Strip",
"Subway",
"Tarn",
"Terrace",
"Thoroughfare",
"Tollway",
"Top",
"Tor",
"Towers",
"Track",
"Trail",
"Trailer",
"Triangle",
"Trunkway",
"Turn",
"Underpass",
"Upper",
"Vale",
"Viaduct",
"View",
"Villas",
"Vista",
"Wade",
"Walk",
"Walkway",
"Way",
"Wynd",
)
postcode_formats = (
# as per https://en.wikipedia.org/wiki/Postcodes_in_Australia
# NSW
"1###",
"20##",
"21##",
"22##",
"23##",
"24##",
"25##",
"2619",
"262#",
"263#",
"264#",
"265#",
"266#",
"267#",
"268#",
"269#",
"27##",
"28##",
"292#",
"293#",
"294#",
"295#",
"296#",
"297#",
"298#",
"299#",
# ACT
"02##",
"260#",
"261#",
"290#",
"291#",
"2920",
# VIC
"3###",
"8###",
# QLD
"4###",
"9###",
# SA
"5###",
# WA
"6###",
# TAS
"7###",
# NT
"08##",
"09##",
)
states = (
"Australian Capital Territory",
"New South Wales",
"Northern Territory",
"Queensland",
"South Australia",
"Tasmania",
"Victoria",
"Western Australia",
)
states_abbr = ("ACT", "NSW", "NT", "QLD", "SA", "TAS", "VIC", "WA")
city_formats = (
"{{city_prefix}} {{first_name}}{{city_suffix}}",
"{{city_prefix}} {{first_name}}",
"{{first_name}}{{city_suffix}}",
"{{last_name}}{{city_suffix}}",
)
street_name_formats = (
"{{first_name}} {{street_suffix}}",
"{{last_name}} {{street_suffix}}",
)
street_address_formats = (
"{{building_number}} {{street_name}}",
"{{secondary_address}}{{building_number}} {{street_name}}",
)
address_formats = ("{{street_address}}\n{{city}}, {{state_abbr}}, {{postcode}}",)
secondary_address_formats = (
"Apt. ### ",
"Flat ## ",
"Suite ### ",
"Unit ## ",
"Level # ",
"###/",
"##/",
"#/",
)
def city_prefix(self) -> str:
return self.random_element(self.city_prefixes)
def secondary_address(self) -> str:
return self.numerify(self.random_element(self.secondary_address_formats))
def administrative_unit(self) -> str:
return self.random_element(self.states)
state = administrative_unit
def state_abbr(self) -> str:
return self.random_element(self.states_abbr)

View File

@@ -0,0 +1,547 @@
"""
Contributed by: @aamibhoot 🇧🇩
"""
from .. import Provider as AddressProvider
class Provider(AddressProvider):
area_names = (
"Ali",
"Alam",
"Abhay",
"Anwar",
"Brahmin",
"Botia",
"Baghar",
"Begum",
"Bijoy",
"Bandar",
"Balia",
"Bajit",
"Baker",
"Borhan",
"Bakhsh",
"Badr",
"Biram",
"Biswnath",
"Chouddah",
"Chital",
"Daud",
"Daulat",
"Dev",
"Devi",
"Islam",
"Ful",
"Fakir",
"Fatik",
"Gopal",
"Gour",
"Haji",
"Hariram",
"Hossain",
"Hakim",
"Jibon",
"Jagannath",
"Kumar",
"Kali",
"Keshav",
"Qutub",
"Kabi",
"Kalia",
"Karim",
"Kazi",
"Kamal",
"Lal",
"Murad",
"Manohar",
"Mir",
"Mahes",
"Moral",
"Molla",
"Mohammad",
"Maniram",
"Manik",
"Mirza",
"Mud",
"Mohan",
"Mahadev",
"Madhab",
"Nasir",
"Naria",
"Nazir",
"Nalitha",
"Nandi",
"Osmani",
"Pai",
"Palash",
"Parvati",
"Ram",
"Ray",
"Rani",
"Sona",
"Sharan",
"Shyam",
"Subarna",
"Siraj",
"Sakhi",
"Sadar",
"Sundar",
"Syed",
"Shahjahan",
"Shanti",
"Shib",
"Ter",
"Tara",
"Uzir",
)
building_names = (
"House No.",
"Building No.",
"House No.",
"Holding No.",
)
building_number_formats = ("%", "%#", "%##")
city_prefixes = ("North", "East", "West", "South", "Middle", "New", "Old")
city_suffixes = (
"Bazar",
"Bari",
"Char",
"Diya",
"Danga",
"Ganz",
"Gram",
"Gan",
"Gan",
"Garh",
"Hat",
"Har",
"Khali",
"Mati",
"Nagar",
"Pur",
"Tala",
)
cities = (
"Barguna",
"Barisal",
"Bhola",
"Bandarban",
"Brahmanbaria",
"Bagherhat",
"Bogura",
"Chandpur",
"Chittagong",
"Cumilla",
"Cox's Bazar",
"Chuadanga",
"Dhaka",
"Dinajpur",
"Faripur",
"Feni",
"Gazipur",
"Gopalganj",
"Gaibandha",
"Habiganj",
"Jhalokati",
"Jessore",
"Jhenaidah",
"Jamalpur",
"Joypurhat",
"Khagrachhari",
"Kishoreganj",
"Khulna",
"Kushtia",
"Kurigram",
"Lakshmipur",
"Lalmonirhat",
"Madaripur",
"Manikganj",
"Munshiganj",
"Magura",
"Meherpur",
"Mymensingh",
"Maulvibazar",
"Noakhali",
"Narayanganj",
"Narsingdi",
"Narail",
"Netrokona",
"Naogaon",
"Naogaon",
"Chapainawabganj",
"Nilphamari",
"Patuakhali",
"Pirojpur",
"Pabna",
"Panchagarh",
"Rangpur",
"Shariatpur",
"Satkhira",
"Sherpur",
"Sirajganj",
"Sunamganj",
"Sylhet",
"Tangail",
"Thakurgaon",
)
countries = (
"Afghanistan",
"Albania",
"Algeria",
"American Samoa",
"Andorra",
"Angola",
"Anguilla",
"Antarctica (the territory South of 60 deg S)",
"Antigua and Barbuda",
"Argentina",
"Armenia",
"Aruba",
"Australia",
"Austria",
"Azerbaijan",
"Bahamas",
"Bahrain",
"Bangladesh",
"Barbados",
"Belarus",
"Belgium",
"Belize",
"Benin",
"Bermuda",
"Bhutan",
"Bolivia",
"Bosnia and Herzegovina",
"Botswana",
"Bouvet Island (Bouvetoya)",
"Brazil",
"British Indian Ocean Territory (Chagos Archipelago)",
"British Virgin Islands",
"Brunei Darussalam",
"Bulgaria",
"Burkina Faso",
"Burundi",
"Cambodia",
"Cameroon",
"Canada",
"Cape Verde",
"Cayman Islands",
"Central African Republic",
"Chad",
"Chile",
"China",
"Christmas Island",
"Cocos (Keeling) Islands",
"Colombia",
"Comoros",
"Congo",
"Congo",
"Cook Islands",
"Costa Rica",
"Cote d'Ivoire",
"Croatia",
"Cuba",
"Cyprus",
"Czech Republic",
"Denmark",
"Djibouti",
"Dominica",
"Dominican Republic",
"Ecuador",
"Egypt",
"El Salvador",
"Equatorial Guinea",
"Eritrea",
"Estonia",
"Ethiopia",
"Faroe Islands",
"Falkland Islands (Malvinas)",
"Fiji",
"Finland",
"France",
"French Guiana",
"French Polynesia",
"French Southern Territories",
"Gabon",
"Gambia",
"Georgia",
"Germany",
"Ghana",
"Gibraltar",
"Greece",
"Greenland",
"Grenada",
"Guadeloupe",
"Guam",
"Guatemala",
"Guernsey",
"Guinea",
"Guinea-Bissau",
"Guyana",
"Haiti",
"Heard Island and McDonald Islands",
"Holy See (Vatican City State)",
"Honduras",
"Hong Kong",
"Hungary",
"Iceland",
"India",
"Indonesia",
"Iran",
"Iraq",
"Ireland",
"Isle of Man",
"Israel",
"Italy",
"Jamaica",
"Japan",
"Jersey",
"Jordan",
"Kazakhstan",
"Kenya",
"Kiribati",
"Korea",
"Korea",
"Kuwait",
"Kyrgyz Republic",
"Lao People's Democratic Republic",
"Latvia",
"Lebanon",
"Lesotho",
"Liberia",
"Libyan Arab Jamahiriya",
"Liechtenstein",
"Lithuania",
"Luxembourg",
"Macao",
"Madagascar",
"Malawi",
"Malaysia",
"Maldives",
"Mali",
"Malta",
"Marshall Islands",
"Martinique",
"Mauritania",
"Mauritius",
"Mayotte",
"Mexico",
"Micronesia",
"Moldova",
"Monaco",
"Mongolia",
"Montenegro",
"Montserrat",
"Morocco",
"Mozambique",
"Myanmar",
"Namibia",
"Nauru",
"Nepal",
"Netherlands Antilles",
"Netherlands",
"New Caledonia",
"New Zealand",
"Nicaragua",
"Niger",
"Nigeria",
"Niue",
"Norfolk Island",
"North Macedonia",
"Northern Mariana Islands",
"Norway",
"Oman",
"Pakistan",
"Palau",
"Palestinian Territory",
"Panama",
"Papua New Guinea",
"Paraguay",
"Peru",
"Philippines",
"Pitcairn Islands",
"Poland",
"Portugal",
"Puerto Rico",
"Qatar",
"Reunion",
"Romania",
"Russian Federation",
"Rwanda",
"Saint Barthelemy",
"Saint Helena",
"Saint Kitts and Nevis",
"Saint Lucia",
"Saint Martin",
"Saint Pierre and Miquelon",
"Saint Vincent and the Grenadines",
"Samoa",
"San Marino",
"Sao Tome and Principe",
"Saudi Arabia",
"Senegal",
"Serbia",
"Seychelles",
"Sierra Leone",
"Singapore",
"Slovakia (Slovak Republic)",
"Slovenia",
"Solomon Islands",
"Somalia",
"South Africa",
"South Georgia and the South Sandwich Islands",
"Spain",
"Sri Lanka",
"Sudan",
"Suriname",
"Svalbard & Jan Mayen Islands",
"Swaziland",
"Sweden",
"Switzerland",
"Syrian Arab Republic",
"Taiwan",
"Tajikistan",
"Tanzania",
"Thailand",
"Timor-Leste",
"Togo",
"Tokelau",
"Tonga",
"Trinidad and Tobago",
"Tunisia",
"Turkey",
"Turkmenistan",
"Turks and Caicos Islands",
"Tuvalu",
"Uganda",
"Ukraine",
"United Arab Emirates",
"United Kingdom",
"United States of America",
"United States Minor Outlying Islands",
"United States Virgin Islands",
"Uruguay",
"Uzbekistan",
"Vanuatu",
"Venezuela",
"Vietnam",
"Wallis and Futuna",
"Western Sahara",
"Yemen",
"Zambia",
"Zimbabwe",
)
secondary_address_formats = (
"Flat %",
"Flat %#",
"Studio %",
"Studio %#",
"Apartment %",
"Apartment %#",
)
street_suffixes = (
"Avenue",
"Center",
"Square",
"Lane",
"Ghat",
"Corner",
"Lane",
"Highway",
"Mohalla",
"Moor",
"Para",
"Park",
"Plaza",
"Road",
"Road",
"Sorok",
"Station",
"Stand",
)
postcode_formats = ("%###",)
street_name_formats = (
"{{area_name}}{{street_suffix}}",
"{{city_prefix}} {{area_name}}{{street_suffix}}",
"{{city_prefix}} {{area_name}}{{city_suffix}}",
"{{area_name}}{{city_suffix}}",
"{{area_name}}{{city_suffix}} {{street_suffix}}",
"{{city_prefix}} {{area_name}}{{city_suffix}} {{street_suffix}}",
)
street_address_formats = (
"{{building_name}} {{building_number}}, {{street_name}}",
"{{secondary_address}}, {{building_name}} {{building_number}}, {{street_name}}",
)
town_formats = ("{{area_name}}{{city_suffix}}",)
address_formats = ("{{street_address}}, {{town}}, {{city}}, {{postcode}}",)
def administrative_unit(self) -> str:
"""
:example: 'Dhaka'
"""
return self.random_element(self.cities)
def area_name(self) -> str:
"""
:example: 'Dhanmondi'
"""
return self.random_element(self.area_names)
def building_name(self) -> str:
"""
:example: 'House No.'
"""
return self.random_element(self.building_names)
def building_number(self) -> str:
"""
:example: '791'
"""
return self.numerify(self.random_element(self.building_number_formats))
def city_prefix(self) -> str:
"""
:example: 'North'
"""
return self.random_element(self.city_prefixes)
def city(self) -> str:
"""
:example: 'Dhaka'
"""
return self.random_element(self.cities)
def postcode(self) -> str:
"""
See
https://bdpost.portal.gov.bd/site/page/6aaeabe4-479b-4e5a-a671-e9e5b994bf9a
"""
return self.numerify(self.random_element(self.postcode_formats))
def secondary_address(self) -> str:
"""
As the generated string format is a Bengali word but English number so splitting the value by space
and then convert the English number to Bengali number and concat with generated Bengali word
and return
: example : 'Apartment 123'
"""
value = self.bothify(self.random_element(self.secondary_address_formats))
word_list = value.split(" ")
return word_list[0] + " " + word_list[1]
def town(self) -> str:
"""
:example: 'Dhanmondi'
"""
pattern: str = self.random_element(self.town_formats)
return self.generator.parse(pattern)

View File

@@ -0,0 +1,417 @@
import re
from typing import Optional
from faker.providers import ElementsType
from ..en import Provider as AddressProvider
class Provider(AddressProvider):
# Source: https://www.canadapost.ca/tools/pg/manual/PGaddress-e.asp#1449294
#
# 'W' and 'Z' are valid in non-initial position (easily verified in the
# wild), but online official documentation is hard to find, so just ignore
# them for now.
postal_code_letters = (
"A",
"B",
"C",
"E",
"G",
"H",
"J",
"K",
"L",
"M",
"N",
"P",
"R",
"S",
"T",
"V",
"X",
"Y",
)
city_prefixes: ElementsType[str] = ("North", "East", "West", "South", "New", "Lake", "Port")
city_suffixes: ElementsType[str] = (
"town",
"ton",
"land",
"ville",
"berg",
"burgh",
"borough",
"bury",
"view",
"port",
"mouth",
"stad",
"furt",
"chester",
"mouth",
"fort",
"haven",
"side",
"shire",
)
building_number_formats = ("#####", "####", "###")
street_suffixes = (
"Alley",
"Avenue",
"Branch",
"Bridge",
"Brook",
"Brooks",
"Burg",
"Burgs",
"Bypass",
"Camp",
"Canyon",
"Cape",
"Causeway",
"Center",
"Centers",
"Circle",
"Circles",
"Cliff",
"Cliffs",
"Club",
"Common",
"Corner",
"Corners",
"Course",
"Court",
"Courts",
"Cove",
"Coves",
"Creek",
"Crescent",
"Crest",
"Crossing",
"Crossroad",
"Curve",
"Dale",
"Dam",
"Divide",
"Drive",
"Drive",
"Drives",
"Estate",
"Estates",
"Expressway",
"Extension",
"Extensions",
"Fall",
"Falls",
"Ferry",
"Field",
"Fields",
"Flat",
"Flats",
"Ford",
"Fords",
"Forest",
"Forge",
"Forges",
"Fork",
"Forks",
"Fort",
"Freeway",
"Garden",
"Gardens",
"Gateway",
"Glen",
"Glens",
"Green",
"Greens",
"Grove",
"Groves",
"Harbor",
"Harbors",
"Haven",
"Heights",
"Highway",
"Hill",
"Hills",
"Hollow",
"Inlet",
"Inlet",
"Island",
"Island",
"Islands",
"Islands",
"Isle",
"Isle",
"Junction",
"Junctions",
"Key",
"Keys",
"Knoll",
"Knolls",
"Lake",
"Lakes",
"Land",
"Landing",
"Lane",
"Light",
"Lights",
"Loaf",
"Lock",
"Locks",
"Locks",
"Lodge",
"Lodge",
"Loop",
"Mall",
"Manor",
"Manors",
"Meadow",
"Meadows",
"Mews",
"Mill",
"Mills",
"Mission",
"Mission",
"Motorway",
"Mount",
"Mountain",
"Mountain",
"Mountains",
"Mountains",
"Neck",
"Orchard",
"Oval",
"Overpass",
"Park",
"Parks",
"Parkway",
"Parkways",
"Pass",
"Passage",
"Path",
"Pike",
"Pine",
"Pines",
"Place",
"Plain",
"Plains",
"Plains",
"Plaza",
"Plaza",
"Point",
"Points",
"Port",
"Port",
"Ports",
"Ports",
"Prairie",
"Prairie",
"Radial",
"Ramp",
"Ranch",
"Rapid",
"Rapids",
"Rest",
"Ridge",
"Ridges",
"River",
"Road",
"Road",
"Roads",
"Roads",
"Route",
"Row",
"Rue",
"Run",
"Shoal",
"Shoals",
"Shore",
"Shores",
"Skyway",
"Spring",
"Springs",
"Springs",
"Spur",
"Spurs",
"Square",
"Square",
"Squares",
"Squares",
"Station",
"Station",
"Stravenue",
"Stravenue",
"Stream",
"Stream",
"Street",
"Street",
"Streets",
"Summit",
"Summit",
"Terrace",
"Throughway",
"Trace",
"Track",
"Trafficway",
"Trail",
"Trail",
"Tunnel",
"Tunnel",
"Turnpike",
"Turnpike",
"Underpass",
"Union",
"Unions",
"Valley",
"Valleys",
"Via",
"Viaduct",
"View",
"Views",
"Village",
"Village",
"Villages",
"Ville",
"Vista",
"Vista",
"Walk",
"Walks",
"Wall",
"Way",
"Ways",
"Well",
"Wells",
)
postal_code_formats = ("?%? %?%", "?%?%?%")
provinces = (
"Alberta",
"British Columbia",
"Manitoba",
"New Brunswick",
"Newfoundland and Labrador",
"Northwest Territories",
"Nova Scotia",
"Nunavut",
"Ontario",
"Prince Edward Island",
"Quebec",
"Saskatchewan",
"Yukon Territory",
)
provinces_abbr = (
"AB",
"BC",
"MB",
"NB",
"NL",
"NT",
"NS",
"NU",
"ON",
"PE",
"QC",
"SK",
"YT",
)
provinces_postcode_prefixes = {
"NL": ["A"],
"NS": ["B"],
"PE": ["C"],
"NB": ["E"],
"QC": ["G", "H", "J"],
"ON": ["K", "L", "M", "N", "P"],
"MB": ["R"],
"SK": ["S"],
"AB": ["T"],
"BC": ["V"],
"NU": ["X"],
"NT": ["X"],
"YT": ["Y"],
}
city_formats: ElementsType[str] = (
"{{city_prefix}} {{first_name}}{{city_suffix}}",
"{{city_prefix}} {{first_name}}",
"{{first_name}}{{city_suffix}}",
"{{last_name}}{{city_suffix}}",
)
street_name_formats = (
"{{first_name}} {{street_suffix}}",
"{{last_name}} {{street_suffix}}",
)
street_address_formats = (
"{{building_number}} {{street_name}}",
"{{building_number}} {{street_name}} {{secondary_address}}",
)
address_formats = ("{{street_address}}\n{{city}}, {{province_abbr}} {{postalcode}}",)
secondary_address_formats = ("Apt. ###", "Suite ###")
def administrative_unit(self) -> str:
""" """
return self.random_element(self.provinces)
province = administrative_unit
def province_abbr(self) -> str:
return self.random_element(self.provinces_abbr)
def city_prefix(self) -> str:
return self.random_element(self.city_prefixes)
def secondary_address(self) -> str:
return self.numerify(self.random_element(self.secondary_address_formats))
def postal_code_letter(self) -> str:
"""
Returns a random letter from the list of allowable
letters in a canadian postal code
"""
return self.random_element(self.postal_code_letters)
def _postcode_replace(self, postal_code_format: str) -> str:
"""
Replaces all question mark ('?') occurrences with a random letter
from given postal_code_format, then passes result to numerify to insert
numbers
"""
temp = re.sub(r"\?", lambda x: self.postal_code_letter(), postal_code_format)
return self.numerify(temp)
def postcode(self) -> str:
"""
Returns a random postcode
"""
return self._postcode_replace(self.random_element(self.postal_code_formats))
def postcode_in_province(self, province_abbr: Optional[str] = None) -> str:
"""
Returns a random postcode within the provided province abbreviation
"""
if province_abbr is None:
province_abbr = self.random_element(self.provinces_abbr)
if province_abbr in self.provinces_abbr:
postal_code_format: str = self.random_element(self.postal_code_formats)
postal_code_format = postal_code_format.replace(
"?",
self.generator.random_element(self.provinces_postcode_prefixes[province_abbr]),
1,
)
return self._postcode_replace(postal_code_format)
else:
raise Exception("Province Abbreviation not found in list")
def postalcode_in_province(self, province_abbr: Optional[str] = None) -> str:
return self.postcode_in_province(province_abbr)
def postalcode(self) -> str:
return self.postcode()

View File

@@ -0,0 +1,550 @@
from collections import OrderedDict
from ..en import Provider as AddressProvider
class Provider(AddressProvider):
city_prefixes = ("North", "East", "West", "South", "New", "Lake", "Port")
city_suffixes = (
"town",
"ton",
"land",
"ville",
"berg",
"burgh",
"borough",
"bury",
"view",
"port",
"mouth",
"stad",
"furt",
"chester",
"mouth",
"fort",
"haven",
"side",
"shire",
)
counties = (
"Bedfordshire",
"Buckinghamshire",
"Cambridgeshire",
"Cheshire",
"Cleveland",
"Cornwall",
"Cumbria",
"Derbyshire",
"Devon",
"Dorset",
"Durham",
"East Sussex",
"Essex",
"Gloucestershire",
"Greater London",
"Greater Manchester",
"Hampshire",
"Hertfordshire",
"Kent",
"Lancashire",
"Leicestershire",
"Lincolnshire",
"Merseyside",
"Norfolk",
"North Yorkshire",
"Northamptonshire",
"Northumberland",
"Nottinghamshire",
"Oxfordshire",
"Shropshire",
"Somerset",
"South Yorkshire",
"Staffordshire",
"Suffolk",
"Surrey",
"Tyne and Wear",
"Warwickshire",
"West Berkshire",
"West Midlands",
"West Sussex",
"West Yorkshire",
"Wiltshire",
"Worcestershire",
"Flintshire",
"Glamorgan",
"Merionethshire",
"Monmouthshire",
"Montgomeryshire",
"Pembrokeshire",
"Radnorshire",
"Anglesey",
"Breconshire",
"Caernarvonshire",
"Cardiganshire",
"Carmarthenshire",
"Denbighshire",
"Aberdeen City",
"Aberdeenshire",
"Angus",
"Argyll and Bute",
"City of Edinburgh",
"Clackmannanshire",
"Dumfries and Galloway",
"Dundee City",
"East Ayrshire",
"East Dunbartonshire",
"East Lothian",
"East Renfrewshire",
"Eilean Siar",
"Falkirk",
"Fife",
"Glasgow City",
"Highland",
"Inverclyde",
"Midlothian",
"Moray",
"North Ayrshire",
"North Lanarkshire",
"Orkney Islands",
"Perth and Kinross",
"Renfrewshire",
"Scottish Borders",
"Shetland Islands",
"South Ayrshire",
"South Lanarkshire",
"Stirling",
"West Dunbartonshire",
"West Lothian",
"Antrim",
"Armagh",
"Down",
"Fermanagh",
"Derry and Londonderry",
"Tyrone",
)
building_number_formats = ("#", "##", "###")
street_suffixes = (
"Alley",
"Avenue",
"Branch",
"Bridge",
"Brook",
"Brooks",
"Burg",
"Burgs",
"Bypass",
"Camp",
"Canyon",
"Cape",
"Causeway",
"Center",
"Centers",
"Circle",
"Circles",
"Cliff",
"Cliffs",
"Club",
"Common",
"Corner",
"Corners",
"Course",
"Court",
"Courts",
"Cove",
"Coves",
"Creek",
"Crescent",
"Crest",
"Crossing",
"Crossroad",
"Curve",
"Dale",
"Dam",
"Divide",
"Drive",
"Drive",
"Drives",
"Estate",
"Estates",
"Expressway",
"Extension",
"Extensions",
"Fall",
"Falls",
"Ferry",
"Field",
"Fields",
"Flat",
"Flats",
"Ford",
"Fords",
"Forest",
"Forge",
"Forges",
"Fork",
"Forks",
"Fort",
"Freeway",
"Garden",
"Gardens",
"Gateway",
"Glen",
"Glens",
"Green",
"Greens",
"Grove",
"Groves",
"Harbor",
"Harbors",
"Haven",
"Heights",
"Highway",
"Hill",
"Hills",
"Hollow",
"Inlet",
"Inlet",
"Island",
"Island",
"Islands",
"Islands",
"Isle",
"Isle",
"Junction",
"Junctions",
"Key",
"Keys",
"Knoll",
"Knolls",
"Lake",
"Lakes",
"Land",
"Landing",
"Lane",
"Light",
"Lights",
"Loaf",
"Lock",
"Locks",
"Locks",
"Lodge",
"Lodge",
"Loop",
"Mall",
"Manor",
"Manors",
"Meadow",
"Meadows",
"Mews",
"Mill",
"Mills",
"Mission",
"Mission",
"Motorway",
"Mount",
"Mountain",
"Mountain",
"Mountains",
"Mountains",
"Neck",
"Orchard",
"Oval",
"Overpass",
"Park",
"Parks",
"Parkway",
"Parkways",
"Pass",
"Passage",
"Path",
"Pike",
"Pine",
"Pines",
"Place",
"Plain",
"Plains",
"Plains",
"Plaza",
"Plaza",
"Point",
"Points",
"Port",
"Port",
"Ports",
"Ports",
"Prairie",
"Prairie",
"Radial",
"Ramp",
"Ranch",
"Rapid",
"Rapids",
"Rest",
"Ridge",
"Ridges",
"River",
"Road",
"Road",
"Roads",
"Roads",
"Route",
"Row",
"Rue",
"Run",
"Shoal",
"Shoals",
"Shore",
"Shores",
"Skyway",
"Spring",
"Springs",
"Springs",
"Spur",
"Spurs",
"Square",
"Square",
"Squares",
"Squares",
"Station",
"Station",
"Stravenue",
"Stravenue",
"Stream",
"Stream",
"Street",
"Street",
"Streets",
"Summit",
"Summit",
"Terrace",
"Throughway",
"Trace",
"Track",
"Trafficway",
"Trail",
"Trail",
"Tunnel",
"Tunnel",
"Turnpike",
"Turnpike",
"Underpass",
"Union",
"Unions",
"Valley",
"Valleys",
"Via",
"Viaduct",
"View",
"Views",
"Village",
"Village",
"Villages",
"Ville",
"Vista",
"Vista",
"Walk",
"Walks",
"Wall",
"Way",
"Ways",
"Well",
"Wells",
)
POSTAL_ZONES = (
"AB",
"AL",
"B",
"BA",
"BB",
"BD",
"BH",
"BL",
"BN",
"BR",
"BS",
"BT",
"CA",
"CB",
"CF",
"CH",
"CM",
"CO",
"CR",
"CT",
"CV",
"CW",
"DA",
"DD",
"DE",
"DG",
"DH",
"DL",
"DN",
"DT",
"DY",
"E",
"EC",
"EH",
"EN",
"EX",
"FK",
"FY",
"G",
"GL",
"GY",
"GU",
"HA",
"HD",
"HG",
"HP",
"HR",
"HS",
"HU",
"HX",
"IG",
"IM",
"IP",
"IV",
"JE",
"KA",
"KT",
"KW",
"KY",
"L",
"LA",
"LD",
"LE",
"LL",
"LN",
"LS",
"LU",
"M",
"ME",
"MK",
"ML",
"N",
"NE",
"NG",
"NN",
"NP",
"NR",
"NW",
"OL",
"OX",
"PA",
"PE",
"PH",
"PL",
"PO",
"PR",
"RG",
"RH",
"RM",
"S",
"SA",
"SE",
"SG",
"SK",
"SL",
"SM",
"SN",
"SO",
"SP",
"SR",
"SS",
"ST",
"SW",
"SY",
"TA",
"TD",
"TF",
"TN",
"TQ",
"TR",
"TS",
"TW",
"UB",
"W",
"WA",
"WC",
"WD",
"WF",
"WN",
"WR",
"WS",
"WV",
"YO",
"ZE",
)
POSTAL_ZONES_ONE_CHAR = [zone for zone in POSTAL_ZONES if len(zone) == 1]
POSTAL_ZONES_TWO_CHARS = [zone for zone in POSTAL_ZONES if len(zone) == 2]
postcode_formats = (
"AN NEE",
"ANN NEE",
"PN NEE",
"PNN NEE",
"ANC NEE",
"PND NEE",
)
_postcode_sets = OrderedDict(
(
(" ", " "),
("N", [str(i) for i in range(0, 10)]),
("A", POSTAL_ZONES_ONE_CHAR),
("B", "ABCDEFGHKLMNOPQRSTUVWXY"),
("C", "ABCDEFGHJKSTUW"),
("D", "ABEHMNPRVWXY"),
("E", "ABDEFGHJLNPQRSTUWXYZ"),
("P", POSTAL_ZONES_TWO_CHARS),
)
)
city_formats = (
"{{city_prefix}} {{first_name}}{{city_suffix}}",
"{{city_prefix}} {{first_name}}",
"{{first_name}}{{city_suffix}}",
"{{last_name}}{{city_suffix}}",
)
street_name_formats = (
"{{first_name}} {{street_suffix}}",
"{{last_name}} {{street_suffix}}",
)
street_address_formats = (
"{{building_number}} {{street_name}}",
"{{secondary_address}}\n{{street_name}}",
)
address_formats = ("{{street_address}}\n{{city}}\n{{postcode}}",)
secondary_address_formats = (
"Flat #",
"Flat ##",
"Flat ##?",
"Studio #",
"Studio ##",
"Studio ##?",
)
def postcode(self) -> str:
"""
See
http://web.archive.org/web/20090930140939/http://www.govtalk.gov.uk/gdsc/html/noframes/PostCode-2-1-Release.htm
"""
postcode = ""
pattern: str = self.random_element(self.postcode_formats)
for placeholder in pattern:
postcode += self.random_element(self._postcode_sets[placeholder])
return postcode
def city_prefix(self) -> str:
return self.random_element(self.city_prefixes)
def secondary_address(self) -> str:
return self.bothify(self.random_element(self.secondary_address_formats))
def administrative_unit(self) -> str:
return self.random_element(self.counties)
county = administrative_unit

View File

@@ -0,0 +1,61 @@
from collections import OrderedDict
from ..en import Provider as AddressProvider
class Provider(AddressProvider):
counties = (
"Cork",
"Galway",
"Mayo",
"Donegal",
"Kerry",
"Tipperary",
"Clare",
"Tyrone",
"Antrim",
"Limerick",
"Roscommon",
"Down",
"Meath",
"Londonderry",
"Wexford",
"Kilkenny",
"Offaly",
"Cavan",
"Wicklow",
"Waterford",
"Sligo",
"Laois",
"Westmeath",
"Kildare",
"Leitrim",
"Armagh",
"Fermanagh",
"Monaghan",
"Dublin",
"Louth",
"Longford",
"Carlow",
)
_postcode_sets = OrderedDict(
(
(" ", [" ", ""]),
("N", [str(i) for i in range(0, 10)]),
("L", "ACDEFHKNPRTVWXY"),
("A", "ACDEFHKNPRTVWXY0123456789"),
)
)
postcode_pattern: str = "LNN AAAA"
def postcode(self) -> str:
postcode = ""
for placeholder in self.postcode_pattern:
postcode += self.random_element(self._postcode_sets[placeholder])
return postcode
def administrative_unit(self) -> str:
return self.random_element(self.counties)
county = administrative_unit

View File

@@ -0,0 +1,572 @@
from typing import Dict, List, Optional, Tuple
from faker.providers.address import Provider as AddressProvider
Range = Tuple[int, int]
class Provider(AddressProvider):
# City and States names taken from wikipedia
# Street format taken from some common famous places in India
# Link for cities: https://en.wikipedia.org/wiki/List_of_cities_in_India_by_population
# Link for States: https://en.wikipedia.org/wiki/States_and_union_territories_of_India
# Links for street name formats: https://www.mumbai77.com/city/3313/travel/old-new-street-names/
city_formats = ("{{city_name}}",)
street_name_formats = (
"{{last_name}} Nagar",
"{{last_name}} Zila",
"{{last_name}} Street",
"{{last_name}} Ganj",
"{{last_name}} Road",
"{{last_name}} Path",
"{{last_name}} Marg",
"{{last_name}} Chowk",
"{{last_name}} Circle",
"{{last_name}}",
)
street_address_formats = (
"{{building_number}}, {{street_name}}",
"{{building_number}}\n{{street_name}}",
)
address_formats = (
"{{street_address}}\n{{city}} {{postcode}}",
"{{street_address}}\n{{city}}-{{postcode}}",
"{{street_address}}, {{city}} {{postcode}}",
"{{street_address}}, {{city}}-{{postcode}}",
)
building_number_formats = ("H.No. ###", "###", "H.No. ##", "##", "##/##", "##/###")
postcode_formats = ("######",)
cities = (
"Mumbai",
"Delhi",
"Kolkata",
"Chennai",
"Bangalore",
"Hyderabad",
"Ahmedabad",
"Kanpur",
"Pune",
"Surat",
"Jaipur",
"Lucknow",
"Nagpur",
"Indore",
"Bhopal",
"Ludhiana",
"Patna",
"Visakhapatnam",
"Vadodara",
"Agra",
"Thane",
"Kalyan-Dombivli",
"Varanasi",
"Ranchi",
"Nashik",
"Dhanbad",
"Faridabad",
"Meerut",
"Pimpri-Chinchwad",
"Howrah",
"Allahabad",
"Ghaziabad",
"Rajkot",
"Amritsar",
"Jabalpur",
"Coimbatore",
"Madurai",
"Srinagar",
"Aurangabad",
"Solapur",
"Vijayawada",
"Jodhpur",
"Gwalior",
"Guwahati",
"Chandigarh",
"HubliDharwad",
"Mysore",
"Tiruchirappalli",
"Bareilly",
"Jalandhar",
"Navi Mumbai",
"Salem",
"Kota",
"Vasai-Virar",
"Aligarh",
"Moradabad",
"Bhubaneswar",
"Gorakhpur",
"Raipur",
"Bhiwandi",
"Kochi",
"Jamshedpur",
"Bhilai",
"Amravati",
"Cuttack",
"Warangal",
"Bikaner",
"Mira-Bhayandar",
"Guntur",
"Bhavnagar",
"Durgapur",
"Kolhapur",
"Ajmer",
"Asansol",
"Ulhasnagar",
"Siliguri",
"Jalgaon",
"Saharanpur",
"Jamnagar",
"Bhatpara",
"Sangli-Miraj & Kupwad",
"Kozhikode",
"Nanded",
"Ujjain",
"Dehradun",
"Rourkela",
"Gulbarga",
"Tirunelveli",
"Malegaon",
"Akola",
"Belgaum",
"Mangalore",
"Bokaro",
"South Dumdum",
"Udaipur",
"Gaya",
"Maheshtala",
"Jhansi",
"Nellore",
"Jammu",
"Thiruvananthapuram",
"Davanagere",
"Kollam",
"Panihati",
"Kurnool",
"Tiruppur",
"Dhule",
"Bhagalpur",
"Rajpur Sonarpur",
"Kakinada",
"Thrissur",
"Bellary",
"Muzaffarnagar",
"Korba",
"Rajahmundry",
"Kamarhati",
"Ambattur",
"Berhampur",
"Ahmednagar",
"Muzaffarpur",
"Noida",
"Patiala",
"Mathura",
"New Delhi",
"Latur",
"Sambalpur",
"Shahjahanpur",
"Kulti",
"Chandrapur",
"Nizamabad",
"Rohtak",
"Bardhaman",
"Rampur",
"Bhilwara",
"Firozabad",
"Bilaspur",
"Shimoga",
"Agartala",
"Gopalpur",
"Darbhanga",
"Panipat",
"Bally",
"Alwar",
"Parbhani",
"Ichalkaranji",
"Anantapuram",
"Baranagar",
"Tumkur",
"Ramagundam",
"Jalna",
"Durg",
"Sagar",
"Bihar Sharif",
"Dewas",
"Barasat",
"Avadi",
"Farrukhabad",
"Aizawl",
"Tirupati",
"Bijapur",
"Satara",
"Satna",
"Ratlam",
"Imphal",
"Pondicherry",
"North Dumdum",
"Anantapur",
"Khammam",
"Ozhukarai",
"Bathinda",
"Thoothukudi",
"Thanjavur",
"Naihati",
"Sonipat",
"Mau",
"Tiruvottiyur",
"Hapur",
"Sri Ganganagar",
"Karnal",
"Etawah",
"Nagercoil",
"Raichur",
"Raurkela Industrial Township",
"Secunderabad",
"Karimnagar",
"Mirzapur",
"Bharatpur",
"Ambarnath",
"Arrah",
"Uluberia",
"Serampore",
"Dindigul",
"Gandhinagar",
"Burhanpur",
"Nadiad",
"Eluru",
"Yamunanagar",
"Kharagpur",
"Munger",
"Pali",
"Katni",
"Singrauli",
"Tenali",
"Sikar",
"Silchar",
"Rewa",
"Sambhal",
"Machilipatnam",
"Vellore",
"Alappuzha",
"Bulandshahr",
"Haridwar",
"Vijayanagaram",
"Erode",
"Gurgaon",
"Bidar",
"Bhusawal",
"Khandwa",
"Purnia",
"Haldia",
"Chinsurah",
"Bhiwani",
"Raebareli",
"Junagadh",
"Bahraich",
"Gandhidham",
"Mango",
"Raiganj",
"Amroha",
"Sultan Pur Majra",
"Hospet",
"Bidhannagar",
"Malda",
"Sirsa",
"Berhampore",
"Jaunpur",
"Surendranagar Dudhrej",
"Madhyamgram",
"Kirari Suleman Nagar",
"Bhind",
"Nandyal",
"Chittoor",
"Bhalswa Jahangir Pur",
"Fatehpur",
"Morena",
"Nangloi Jat",
"Ongole",
"Karawal Nagar",
"Shivpuri",
"Morbi",
"Unnao",
"Pallavaram",
"Kumbakonam",
"Shimla",
"Mehsana",
"Panchkula",
"Orai",
"Ambala",
"Dibrugarh",
"Guna",
"Danapur",
"Sasaram",
"Anand",
"Kottayam",
"Hazaribagh",
"Kadapa",
"Saharsa",
"Nagaon",
"Loni",
"Hajipur",
"Dehri",
"Bettiah",
"Katihar",
"Deoghar",
"Jorhat",
"Siwan",
"Panvel",
"Hosur",
"Tinsukia",
"Bongaigaon",
"Motihari",
"Jamalpur",
"Suryapet",
"Begusarai",
"Miryalaguda",
"Proddatur",
"Karaikudi",
"Kishanganj",
"Phusro",
"Buxar",
"Tezpur",
"Jehanabad",
"Aurangabad",
"Chapra",
"Ramgarh",
"Gangtok",
"Adoni",
"Amaravati",
"Ballia",
"Bhimavaram",
"Dharmavaram",
"Giridih",
"Gudivada",
"Guntakal",
"Hindupur",
"Kavali",
"Khora ",
"Ghaziabad",
"Madanapalle",
"Mahbubnagar",
"Medininagar",
"Narasaraopet",
"Phagwara",
"Pudukkottai",
"Srikakulam",
"Tadepalligudem",
"Tadipatri",
"Udupi",
)
states = (
"Andhra Pradesh",
"Arunachal Pradesh",
"Assam",
"Bihar",
"Chhattisgarh",
"Goa",
"Gujarat",
"Haryana",
"Himachal Pradesh",
"Jharkhand",
"Karnataka",
"Kerala",
"Madhya Pradesh",
"Maharashtra",
"Manipur",
"Meghalaya",
"Mizoram",
"Nagaland",
"Odisha",
"Punjab",
"Rajasthan",
"Sikkim",
"Tamil Nadu",
"Telangana",
"Tripura",
"Uttar Pradesh",
"Uttarakhand",
"West Bengal",
)
states_abbr: Tuple[str, ...] = (
"AP",
"AR",
"AS",
"BR",
"CG",
"GA",
"GJ",
"HR",
"HP",
"JH",
"KA",
"KL",
"MP",
"MH",
"MN",
"ML",
"MZ",
"NL",
"OD",
"PB",
"RJ",
"SK",
"TN",
"TG",
"TR",
"UK",
"UP",
"WB",
)
union_territories = (
("Andaman and Nicobar Islands",),
("Chandigarh",),
("Dadra and Nagar Haveli, Dadra & Nagar Haveli",),
("Daman and Diu",),
("Delhi, National Capital Territory of Delhi",),
("Jammu and Kashmir",),
("Ladakh",),
("Lakshadweep",),
("Pondicherry",),
("Puducherry",),
)
union_territories_abbr = (
"AN",
"CH",
"DN",
"DD",
"DL",
"JK",
"LA",
"LD",
"PY",
)
# https://en.wikipedia.org/wiki/Postal_Index_Number
# FIXME: Some states such as `BR/JH` / `UK/UP` have similar PIN code ranges
# FIXME: as mentioned in above link.
state_pincode: Dict[str, List[Range]] = {
"AP": [(510_000, 539_999)],
"AR": [(790_000, 792_999)],
"AS": [(780_000, 789_999)],
"BR": [(800_000, 859_999)],
"CG": [(490_000, 499_999)],
"GA": [(403_000, 403_999)],
"GJ": [(360_000, 399_999)],
"HR": [(120_000, 139_999)],
"HP": [(170_000, 179_999)],
"JH": [(800_000, 859_999)],
"KA": [(560_000, 599_999)],
"KL": [(670_000, 681_999), (683_000, 699_999)],
"MP": [(450_000, 489_999)],
"MH": [(400_000, 402_999), (404_000, 449_999)],
"MN": [(795_000, 795_999)],
"ML": [(793_000, 794_999)],
"MZ": [(796_000, 796_999)],
"NL": [(797_000, 798_999)],
"OD": [(750_000, 779_999)],
"PB": [(140_000, 159_999)],
"RJ": [(300_000, 349_999)],
"SK": [(737_000, 737_999)],
"TN": [(600_000, 669_999)],
"TG": [(500_000, 509_999)],
"TR": [(799_000, 799_999)],
"UK": [(200_000, 289_999)],
"UP": [(200_000, 289_999)],
"WB": [(700_000, 736_999), (738_000, 743_999), (745_000, 749_999)],
}
union_territories_pincode: Dict[str, List[Range]] = {
"AN": [(744_000, 744_999)],
"CH": [(160_000, 169_999)],
"DN": [(396_000, 396_999)],
"DD": [(396_000, 396_999)],
"DL": [(110_000, 119_999)],
"JK": [(180_000, 199_999)],
"LA": [(180_000, 199_999)],
"LD": [(682_000, 682_999)],
"PY": [(605_000, 605_999)],
}
army_pincode: Dict[str, Range] = {"APS": (900_000, 999_999)}
def city_name(self) -> str:
return self.random_element(self.cities)
def administrative_unit(self) -> str:
return self.random_element(self.states)
state = administrative_unit
def union_territory(self) -> str:
"""Returns random union territory name"""
return self.random_element(self.union_territories)[0]
def pincode_in_state(self, state_abbr: Optional[str] = None, include_union_territories: bool = False) -> int:
"""Random PIN Code within provided state abbreviation
:param state_abbr: State Abbr, defaults to None
:param include_union_territories: Include Union Territories ?, defaults to False
:raises ValueError: If incorrect state abbr
:return: PIN Code
"""
known_abbrs = self.states_abbr
if include_union_territories:
known_abbrs += self.union_territories_abbr
if state_abbr is None:
state_abbr = self.random_element(known_abbrs)
if state_abbr in known_abbrs:
codes = self.state_pincode
if include_union_territories:
codes.update(self.union_territories_pincode)
pincode_range = self.random_element(codes[state_abbr])
return self.generator.random.randint(*pincode_range)
raise ValueError("State Abbreviation not found in list")
def pincode_in_military(self) -> int:
"""Random PIN Code within Army Postal Service range"""
key: str = self.random_element(self.army_pincode.keys())
return self.generator.random.randint(*self.army_pincode[key])
# Aliases
def zipcode_in_state(self, state_abbr: Optional[str] = None, include_union_territories: bool = False) -> int:
return self.pincode_in_state(state_abbr, include_union_territories)
def postcode_in_state(self, state_abbr: Optional[str] = None, include_union_territories: bool = False) -> int:
return self.pincode_in_state(state_abbr, include_union_territories)
def pincode_in_army(self) -> int:
return self.pincode_in_military()
def zipcode_in_military(self) -> int:
return self.pincode_in_military()
def zipcode_in_army(self) -> int:
return self.pincode_in_military()
def postcode_in_military(self) -> int:
return self.pincode_in_military()
def postcode_in_army(self) -> int:
return self.pincode_in_military()

View File

@@ -0,0 +1,486 @@
from collections import OrderedDict
from typing import Dict, List, Optional
from ... import ElementsType
from ..en import Provider as AddressProvider
# https://en.wikipedia.org/wiki/Addresses_in_Malaysia
class Provider(AddressProvider):
# 'Bandar' and 'Taman' are the most common township prefix
# https://en.wikipedia.org/wiki/Template:Greater_Kuala_Lumpur > Townships
# https://en.wikipedia.org/wiki/Template:Johor > Townships
# https://en.wikipedia.org/wiki/Template:Kedah > Townships
# https://en.wikipedia.org/wiki/Template:Kelantan > Townships
# https://en.wikipedia.org/wiki/Template:Melaka > Townships
# https://en.wikipedia.org/wiki/Template:Negeri_Sembilan > Townships
# https://en.wikipedia.org/wiki/Template:Perak > Townships
# https://en.wikipedia.org/wiki/Template:Penang > Townships
# https://en.wikipedia.org/wiki/Template:Selangor > Townships
# https://en.wikipedia.org/wiki/Template:Terengganu > Townships
city_prefixes = (
"Alam",
"Apartment",
"Ara",
"Bandar",
"Bandar",
"Bandar",
"Bandar",
"Bandar",
"Bandar",
"Bandar Bukit",
"Bandar Seri",
"Bandar Sri",
"Bandar Baru",
"Batu",
"Bukit",
"Desa",
"Damansara",
"Kampung",
"Kampung Baru",
"Kampung Baru",
"Kondominium",
"Kota",
"Laman",
"Lembah",
"Medan",
"Pandan",
"Pangsapuri",
"Petaling",
"Puncak",
"Seri",
"Sri",
"Taman",
"Taman",
"Taman",
"Taman",
"Taman",
"Taman",
"Taman Desa",
)
city_suffixes = (
"Aman",
"Amanjaya",
"Anggerik",
"Angkasa",
"Antarabangsa",
"Awan",
"Bahagia",
"Bangsar",
"Baru",
"Belakong",
"Bendahara",
"Bestari",
"Bintang",
"Brickfields",
"Casa",
"Changkat",
"Country Heights",
"Damansara",
"Damai",
"Dato Harun",
"Delima",
"Duta",
"Flora",
"Gembira",
"Genting",
"Harmoni",
"Hartamas",
"Impian",
"Indah",
"Intan",
"Jasa",
"Jaya",
"Keramat",
"Kerinchi",
"Kiara",
"Kinrara",
"Kuchai",
"Laksamana",
"Mahkota",
"Maluri",
"Manggis",
"Maxwell",
"Medan",
"Melawati",
"Menjalara",
"Meru",
"Mulia",
"Mutiara",
"Pahlawan",
"Perdana",
"Pertama",
"Permai",
"Pelangi",
"Petaling",
"Pinang",
"Puchong",
"Puteri",
"Putra",
"Rahman",
"Rahmat",
"Raya",
"Razak",
"Ria",
"Saujana",
"Segambut",
"Selamat",
"Selatan",
"Semarak",
"Sentosa",
"Seputeh",
"Setapak",
"Setia Jaya",
"Sinar",
"Sungai Besi",
"Sungai Buaya",
"Sungai Long",
"Suria",
"Tasik Puteri",
"Tengah",
"Timur",
"Tinggi",
"Tropika",
"Tun Hussein Onn",
"Tun Perak",
"Tunku",
"Ulu",
"Utama",
"Utara",
"Wangi",
)
# https://en.wikipedia.org/wiki/States_and_federal_territories_of_Malaysia
states: Dict[str, List[str]] = {
"JHR": ["Johor Darul Ta'zim", "Johor"],
"KDH": ["Kedah Darul Aman", "Kedah"],
"KTN": ["Kelantan Darul Naim", "Kelantan"],
"KUL": ["KL", "Kuala Lumpur", "WP Kuala Lumpur"],
"LBN": ["Labuan"],
"MLK": ["Malacca", "Melaka"],
"NSN": ["Negeri Sembilan Darul Khusus", "Negeri Sembilan"],
"PHG": ["Pahang Darul Makmur", "Pahang"],
"PNG": ["Penang", "Pulau Pinang"],
"PRK": ["Perak Darul Ridzuan", "Perak"],
"PLS": ["Perlis Indera Kayangan", "Perlis"],
"PJY": ["Putrajaya"],
"SBH": ["Sabah"],
"SWK": ["Sarawak"],
"SGR": ["Selangor Darul Ehsan", "Selangor"],
"TRG": ["Terengganu Darul Iman", "Terengganu"],
}
states_postcode = {
"PLS": [(1000, 2800)],
"KDH": [(5000, 9810)],
"PNG": [(10000, 14400)],
"KTN": [(15000, 18500)],
"TRG": [(20000, 24300)],
"PHG": [
(25000, 28800),
(39000, 39200),
(49000, 69000),
],
"PRK": [(30000, 36810)],
"SGR": [(40000, 48300), (63000, 68100)],
"KUL": [(50000, 60000)],
"PJY": [(62000, 62988)],
"NSN": [(70000, 73509)],
"MLK": [(75000, 78309)],
"JHR": [(79000, 86900)],
"LBN": [(87000, 87033)],
"SBH": [(88000, 91309)],
"SWK": [(93000, 98859)],
}
city_prefix_abbrs: ElementsType[str] = (
"SS",
"Seksyen ",
"PJS",
"PJU",
"USJ ",
)
def city_prefix_abbr(self) -> str:
return self.random_element(self.city_prefix_abbrs)
city_formats: ElementsType[str] = (
"{{city_prefix}} {{city_suffix}}",
"{{city_prefix}} {{city_suffix}}",
"{{city_prefix}} {{city_suffix}}",
"{{city_prefix}} {{city_suffix}}",
"{{city_prefix}} {{city_suffix}}",
"{{city_prefix}} {{city_suffix}}",
"{{city_prefix_abbr}}%",
"{{city_prefix_abbr}}%#",
"{{city_prefix_abbr}}%#?",
)
def city(self) -> str:
pattern: str = self.bothify(self.random_element(self.city_formats))
return self.generator.parse(pattern)
# https://en.wikipedia.org/wiki/List_of_roads_in_Kuala_Lumpur#Standard_translations
street_prefixes: ElementsType[str] = [
"Jln",
"Jln",
"Jalan",
"Jalan",
"Jalan",
"Lorong",
]
def street_prefix(self) -> str:
return self.random_element(self.street_prefixes)
# https://en.wikipedia.org/wiki/List_of_roads_in_Kuala_Lumpur
# https://en.wikipedia.org/wiki/List_of_roads_in_Ipoh
# https://en.wikipedia.org/wiki/Transportation_in_Seremban#Inner_city_roads
# https://en.wikipedia.org/wiki/List_of_streets_in_George_Town,_Penang
street_suffixes: ElementsType[str] = [
"Air Itam",
"Alor",
"Ampang",
"Ampang Hilir",
"Anson",
"Ariffin",
"Bangsar",
"Baru",
"Bellamy",
"Birch",
"Bijih Timah",
"Bukit Aman",
"Bukit Bintang",
"Bukit Petaling",
"Bukit Tunku",
"Cantonment",
"Cenderawasih",
"Chan Sow Lin",
"Chow Kit",
"Cinta",
"Cochrane",
"Conlay",
"D. S. Ramanathan",
"Damansara",
"Dang Wangi",
"Davis",
"Dewan Bahasa",
"Dato Abdul Rahman",
"Dato'Keramat",
"Dato' Maharaja Lela",
"Doraisamy",
"Eaton",
"Faraday",
"Galloway",
"Genting Klang",
"Gereja",
"Hang Jebat",
"Hang Kasturi",
"Hang Lekir",
"Hang Lekiu",
"Hang Tuah",
"Hospital",
"Imbi",
"Istana",
"Jelutong",
"Kampung Attap",
"Kebun Bunga",
"Kedah",
"Keliling",
"Kia Peng",
"Kinabalu",
"Kuala Kangsar",
"Kuching",
"Ledang",
"Lembah Permai",
"Loke Yew",
"Lt. Adnan",
"Lumba Kuda",
"Madras",
"Magazine",
"Maharajalela",
"Masjid",
"Maxwell",
"Mohana Chandran",
"Muda",
"P. Ramlee",
"Padang Kota Lama",
"Pahang",
"Pantai Baharu",
"Parlimen",
"Pasar",
"Pasar Besar",
"Perak",
"Perdana",
"Petaling",
"Prangin",
"Pudu",
"Pudu Lama",
"Raja",
"Raja Abdullah",
"Raja Chulan",
"Raja Laut",
"Rakyat",
"Residensi",
"Robson",
"S.P. Seenivasagam",
"Samarahan 1",
"Selamat",
"Sempadan",
"Sentul",
"Serian 1",
"Sasaran",
"Sin Chee",
"Sultan Abdul Samad",
"Sultan Azlan Shah",
"Sultan Iskandar",
"Sultan Ismail",
"Sultan Sulaiman",
"Sungai Besi",
"Syed Putra",
"Tan Cheng Lock",
"Thambipillay",
"Tugu",
"Tuanku Abdul Halim",
"Tuanku Abdul Rahman",
"Tun Abdul Razak",
"Tun Dr Ismail",
"Tun H S Lee",
"Tun Ismail",
"Tun Perak",
"Tun Razak",
"Tun Sambanthan",
"U-Thant",
"Utama",
"Vermont",
"Vivekananda",
"Wan Kadir",
"Wesley",
"Wisma Putra",
"Yaacob Latif",
"Yap Ah Loy",
"Yap Ah Shak",
"Yap Kwan Seng",
"Yew",
"Zaaba",
"Zainal Abidin",
]
street_name_formats: ElementsType[str] = (
"{{street_prefix}} %",
"{{street_prefix}} %/%",
"{{street_prefix}} %/%#",
"{{street_prefix}} %/%?",
"{{street_prefix}} %/%#?",
"{{street_prefix}} %?",
"{{street_prefix}} %#?",
"{{street_prefix}} {{street_suffix}}",
"{{street_prefix}} {{street_suffix}} %",
"{{street_prefix}} {{street_suffix}} %/%",
"{{street_prefix}} {{street_suffix}} %/%#",
"{{street_prefix}} {{street_suffix}} %/%?",
"{{street_prefix}} {{street_suffix}} %/%#?",
"{{street_prefix}} {{street_suffix}} %?",
"{{street_prefix}} {{street_suffix}} %#?",
)
def street_name(self) -> str:
"""
:example: 'Crist Parks'
"""
pattern: str = self.bothify(self.random_element(self.street_name_formats))
return self.generator.parse(pattern)
building_prefixes: ElementsType[str] = [
"",
"",
"",
"",
"",
"",
"No. ",
"No. ",
"No. ",
"Lot ",
]
def building_prefix(self) -> str:
return self.random_element(self.building_prefixes)
building_number_formats: ElementsType[str] = (
"%",
"%",
"%",
"%#",
"%#",
"%#",
"%#",
"%##",
"%-%",
"?-##-##",
"%?-##",
)
def building_number(self) -> str:
return self.bothify(self.random_element(self.building_number_formats))
street_address_formats: ElementsType[str] = ("{{building_prefix}}{{building_number}}, {{street_name}}",)
def city_state(self) -> str:
"""Return the complete city address with matching postcode and state
Example: 55100 Bukit Bintang, Kuala Lumpur
"""
state: str = self.random_element(self.states.keys())
postcode = self.postcode_in_state(state)
city = self.city()
state_name: str = self.random_element(self.states[state])
return f"{postcode} {city}, {state_name}"
# https://en.wikipedia.org/wiki/Addresses_in_Malaysia
# street number, street name, region, and town/city, state.
address_formats = OrderedDict((("{{street_address}}, {{city}}, {{city_state}}", 100.0),))
def city_prefix(self) -> str:
return self.random_element(self.city_prefixes)
def administrative_unit(self) -> str:
return self.random_element(self.states[self.random_element(self.states.keys())])
state = administrative_unit
def postcode_in_state(self, state_abbr: Optional[str] = None) -> str:
"""
:returns: A random postcode within the provided state
:param state: A state
Example: 55100
https://en.wikipedia.org/wiki/Postal_codes_in_Malaysia#States
"""
if state_abbr is None:
state_abbr = self.random_element(self.states.keys())
try:
# some states have multiple ranges so first pick one, then generate a random postcode
range = self.generator.random.choice(self.states_postcode[state_abbr])
postcode = "%d" % (self.generator.random.randint(*range))
# zero left pad up until desired length (some have length 3 or 4)
target_postcode_len = 5
current_postcode_len = len(postcode)
if current_postcode_len < target_postcode_len:
pad = target_postcode_len - current_postcode_len
postcode = f"{'0'*pad}{postcode}"
return postcode
except KeyError as e:
raise KeyError("State Abbreviation not found in list") from e
def postcode(self) -> str:
return self.postcode_in_state(None)

View File

@@ -0,0 +1,340 @@
from ..en import Provider as AddressProvider
class Provider(AddressProvider):
city_prefixes = (
"North",
"East",
"West",
"South",
"New",
"Lake",
"Port",
"Upper",
"Lower",
"High",
"Mount",
)
city_suffixes = (
"town",
"ton",
"land",
"ville",
"berg",
"burgh",
"borough",
"bury",
"burn",
"ing",
"port",
"mouth",
"stone",
"ings",
"mouth",
"fort",
"haven",
"leigh",
"side",
"gate",
"neath",
"side",
" Flats",
" Hill",
)
building_number_formats = ("%##", "%#", "%")
street_suffixes = (
# Most common:
"Arcade",
"Arcade",
"Arcade",
"Avenue",
"Avenue",
"Avenue",
"Avenue",
"Avenue",
"Avenue",
"Avenue",
"Avenue",
"Beach Road",
"Beach Road",
"Beach Road",
"Beach Road",
"Crescent",
"Crescent",
"Crescent",
"Crescent",
"Crescent",
"Drive",
"Drive",
"Drive",
"Drive",
"Mews",
"Mews",
"Mews",
"Place",
"Place",
"Place",
"Place",
"Range Road",
"Range Road",
"Road",
"Road",
"Road",
"Road",
"Road",
"Road",
"Road",
"Road",
"Road",
"Street",
"Street",
"Street",
"Street",
"Street",
"Street",
"Street",
"Street",
"Street",
"Street",
"Street",
"Street",
"Street",
"Street",
"Street",
"Street",
"Street",
"Street",
"Street",
"Street",
"Street",
"Terrace",
"Terrace",
"Terrace",
"Way",
"Way",
"Way",
# Other:
"Access",
"Alley",
"Alleyway",
"Amble",
"Anchorage",
"Approach",
"Broadway",
"Bypass",
"Causeway",
"Centre",
"Circle",
"Circuit",
"Close",
"Concourse",
"Copse",
"Corner",
"Court",
"Cove",
"Crest",
"Cross",
"Crossing",
"Cutting",
"Esplanade",
"Flats",
"Gardens",
"Grove",
"Heights",
"Highway",
"Lane",
"Line",
"Keys",
"Parade",
"Park",
"Pass",
"Plaza",
"Point",
"Quay",
"Reserve",
"Ridge",
"Rise",
"Square",
"Track",
"Trail",
"View",
)
# Māori nouns commonly present in placenames.
te_reo_parts = (
"ara",
"awa",
"horo",
"kawa",
"koro",
"kowhai",
"manawa",
"mata",
"maunga",
"moko",
"motu",
"ngauru",
"pa" "papa",
"po",
"puke",
"rangi",
"rohe",
"rongo",
"roto",
"tahi",
"tai",
"tangi",
"tau",
"tere",
"tipu",
"wai",
"waka",
"whaka",
"whanga",
"whare",
"weka",
)
# Māori endings (usually adjectives) commonly present in placenames.
te_reo_endings = (
"hanga",
"hope",
"iti",
"iti",
"kiwi",
"makau",
"nui",
"nui",
"nui",
"nuku",
"roa",
"rua",
"tanga",
"tapu",
"toa",
"whenua",
"whero",
"whitu",
)
postcode_formats = (
# as per https://en.wikipedia.org/wiki/Postcodes_in_New_Zealand
# Northland
"0%##",
# Auckland
"1###",
"20##",
"21##",
"22##",
"23##",
"24##",
"25##",
"26##",
# Central North Island
"3###",
"4###",
# Lower North Island
"50##",
"51##",
"52##",
"53##",
"55##",
"57##",
"58##",
# Wellington
"60##",
"61##",
"62##",
"64##",
"69##",
# Upper South Island
"7###",
# Christchurch
"80##",
"81##",
"82##",
"84##",
"85##",
"86##",
"88##",
"89##",
# Southland
"90##",
"92##",
"93##",
"94##",
"95##",
"96##",
"97##",
"98##",
)
city_formats = (
"{{first_name}}{{city_suffix}}",
"{{last_name}}{{city_suffix}}",
"{{last_name}}{{city_suffix}}",
"{{last_name}}{{city_suffix}}",
"{{last_name}}{{city_suffix}}",
"{{last_name}}{{city_suffix}}",
"{{city_prefix}} {{last_name}}{{city_suffix}}",
"{{te_reo_first}}{{te_reo_ending}}",
"{{te_reo_first}}{{te_reo_ending}}",
"{{te_reo_first}}{{te_reo_ending}}",
"{{te_reo_first}}{{te_reo_ending}}",
"{{te_reo_first}}{{te_reo_part}}{{te_reo_ending}}",
"{{te_reo_first}}{{te_reo_part}}{{te_reo_ending}}",
)
street_name_formats = (
"{{first_name}} {{street_suffix}}",
"{{last_name}} {{street_suffix}}",
"{{last_name}} {{street_suffix}}",
"{{last_name}} {{street_suffix}}",
"{{last_name}}-{{last_name}} {{street_suffix}}",
"{{te_reo_first}}{{te_reo_ending}} {{street_suffix}}",
"{{te_reo_first}}{{te_reo_ending}} {{street_suffix}}",
"{{te_reo_first}}{{te_reo_part}}{{te_reo_ending}} {{street_suffix}}",
)
street_address_formats = (
"{{building_number}} {{street_name}}",
"{{building_number}} {{street_name}}",
"{{building_number}} {{street_name}}",
"{{building_number}} {{street_name}}\nRD {{rd_number}}",
"{{secondary_address}}\n{{building_number}} {{street_name}}",
"PO Box {{building_number}}",
)
address_formats = ("{{street_address}}\n{{city}} {{postcode}}",)
secondary_address_formats = (
"Apt. %##",
"Flat %#",
"Suite %##",
"Unit %#",
"Level %",
)
def te_reo_part(self) -> str:
return self.random_element(self.te_reo_parts)
def te_reo_first(self) -> str:
return str(self.random_element(self.te_reo_parts)).capitalize()
def te_reo_ending(self) -> str:
return self.random_element(self.te_reo_parts + self.te_reo_endings)
def city_prefix(self) -> str:
return self.random_element(self.city_prefixes)
def city_suffix(self) -> str:
return self.random_element(self.city_suffixes)
def rd_number(self) -> str:
return self.random_element([str(i) for i in range(1, 11)])
def secondary_address(self) -> str:
return self.numerify(self.random_element(self.secondary_address_formats))

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,599 @@
from collections import OrderedDict
from typing import Optional, Tuple
from ..en import Provider as AddressProvider
class Provider(AddressProvider):
city_prefixes = ("North", "East", "West", "South", "New", "Lake", "Port")
city_suffixes = (
"town",
"ton",
"land",
"ville",
"berg",
"burgh",
"borough",
"bury",
"view",
"port",
"mouth",
"stad",
"furt",
"chester",
"mouth",
"fort",
"haven",
"side",
"shire",
)
building_number_formats = ("#####", "####", "###")
street_suffixes = (
"Alley",
"Avenue",
"Branch",
"Bridge",
"Brook",
"Brooks",
"Burg",
"Burgs",
"Bypass",
"Camp",
"Canyon",
"Cape",
"Causeway",
"Center",
"Centers",
"Circle",
"Circles",
"Cliff",
"Cliffs",
"Club",
"Common",
"Corner",
"Corners",
"Course",
"Court",
"Courts",
"Cove",
"Coves",
"Creek",
"Crescent",
"Crest",
"Crossing",
"Crossroad",
"Curve",
"Dale",
"Dam",
"Divide",
"Drive",
"Drive",
"Drives",
"Estate",
"Estates",
"Expressway",
"Extension",
"Extensions",
"Fall",
"Falls",
"Ferry",
"Field",
"Fields",
"Flat",
"Flats",
"Ford",
"Fords",
"Forest",
"Forge",
"Forges",
"Fork",
"Forks",
"Fort",
"Freeway",
"Garden",
"Gardens",
"Gateway",
"Glen",
"Glens",
"Green",
"Greens",
"Grove",
"Groves",
"Harbor",
"Harbors",
"Haven",
"Heights",
"Highway",
"Hill",
"Hills",
"Hollow",
"Inlet",
"Inlet",
"Island",
"Island",
"Islands",
"Islands",
"Isle",
"Isle",
"Junction",
"Junctions",
"Key",
"Keys",
"Knoll",
"Knolls",
"Lake",
"Lakes",
"Land",
"Landing",
"Lane",
"Light",
"Lights",
"Loaf",
"Lock",
"Locks",
"Locks",
"Lodge",
"Lodge",
"Loop",
"Mall",
"Manor",
"Manors",
"Meadow",
"Meadows",
"Mews",
"Mill",
"Mills",
"Mission",
"Mission",
"Motorway",
"Mount",
"Mountain",
"Mountain",
"Mountains",
"Mountains",
"Neck",
"Orchard",
"Oval",
"Overpass",
"Park",
"Parks",
"Parkway",
"Parkways",
"Pass",
"Passage",
"Path",
"Pike",
"Pine",
"Pines",
"Place",
"Plain",
"Plains",
"Plains",
"Plaza",
"Plaza",
"Point",
"Points",
"Port",
"Port",
"Ports",
"Ports",
"Prairie",
"Prairie",
"Radial",
"Ramp",
"Ranch",
"Rapid",
"Rapids",
"Rest",
"Ridge",
"Ridges",
"River",
"Road",
"Road",
"Roads",
"Roads",
"Route",
"Row",
"Rue",
"Run",
"Shoal",
"Shoals",
"Shore",
"Shores",
"Skyway",
"Spring",
"Springs",
"Springs",
"Spur",
"Spurs",
"Square",
"Square",
"Squares",
"Squares",
"Station",
"Station",
"Stravenue",
"Stravenue",
"Stream",
"Stream",
"Street",
"Street",
"Streets",
"Summit",
"Summit",
"Terrace",
"Throughway",
"Trace",
"Track",
"Trafficway",
"Trail",
"Trail",
"Tunnel",
"Tunnel",
"Turnpike",
"Turnpike",
"Underpass",
"Union",
"Unions",
"Valley",
"Valleys",
"Via",
"Viaduct",
"View",
"Views",
"Village",
"Village",
"Villages",
"Ville",
"Vista",
"Vista",
"Walk",
"Walks",
"Wall",
"Way",
"Ways",
"Well",
"Wells",
)
postcode_formats = ("#####", "#####-####")
states = (
"Alabama",
"Alaska",
"Arizona",
"Arkansas",
"California",
"Colorado",
"Connecticut",
"Delaware",
"Florida",
"Georgia",
"Hawaii",
"Idaho",
"Illinois",
"Indiana",
"Iowa",
"Kansas",
"Kentucky",
"Louisiana",
"Maine",
"Maryland",
"Massachusetts",
"Michigan",
"Minnesota",
"Mississippi",
"Missouri",
"Montana",
"Nebraska",
"Nevada",
"New Hampshire",
"New Jersey",
"New Mexico",
"New York",
"North Carolina",
"North Dakota",
"Ohio",
"Oklahoma",
"Oregon",
"Pennsylvania",
"Rhode Island",
"South Carolina",
"South Dakota",
"Tennessee",
"Texas",
"Utah",
"Vermont",
"Virginia",
"Washington",
"West Virginia",
"Wisconsin",
"Wyoming",
)
states_abbr = (
"AL",
"AK",
"AZ",
"AR",
"CA",
"CO",
"CT",
"DE",
"DC",
"FL",
"GA",
"HI",
"ID",
"IL",
"IN",
"IA",
"KS",
"KY",
"LA",
"ME",
"MD",
"MA",
"MI",
"MN",
"MS",
"MO",
"MT",
"NE",
"NV",
"NH",
"NJ",
"NM",
"NY",
"NC",
"ND",
"OH",
"OK",
"OR",
"PA",
"RI",
"SC",
"SD",
"TN",
"TX",
"UT",
"VT",
"VA",
"WA",
"WV",
"WI",
"WY",
)
states_postcode = {
"AL": (35004, 36925),
"AK": (99501, 99950),
"AZ": (85001, 86556),
"AR": (71601, 72959),
"CA": (90001, 96162),
"CO": (80001, 81658),
"CT": (6001, 6389),
"DE": (19701, 19980),
"DC": (20001, 20039),
"FL": (32004, 34997),
"GA": (30001, 31999),
"HI": (96701, 96898),
"ID": (83201, 83876),
"IL": (60001, 62999),
"IN": (46001, 47997),
"IA": (50001, 52809),
"KS": (66002, 67954),
"KY": (40003, 42788),
"LA": (70001, 71232),
"ME": (3901, 4992),
"MD": (20812, 21930),
"MA": (1001, 2791),
"MI": (48001, 49971),
"MN": (55001, 56763),
"MS": (38601, 39776),
"MO": (63001, 65899),
"MT": (59001, 59937),
"NE": (68001, 68118),
"NV": (88901, 89883),
"NH": (3031, 3897),
"NJ": (7001, 8989),
"NM": (87001, 88441),
"NY": (10001, 14905),
"NC": (27006, 28909),
"ND": (58001, 58856),
"OH": (43001, 45999),
"OK": (73001, 73199),
"OR": (97001, 97920),
"PA": (15001, 19640),
"RI": (2801, 2940),
"SC": (29001, 29948),
"SD": (57001, 57799),
"TN": (37010, 38589),
"TX": (75503, 79999),
"UT": (84001, 84784),
"VT": (5001, 5495),
"VA": (22001, 24658),
"WA": (98001, 99403),
"WV": (24701, 26886),
"WI": (53001, 54990),
"WY": (82001, 83128),
# Territories & freely-associated states
# incomplete ranges with accurate subsets - https://www.geonames.org/postalcode-search.html
"AS": (96799, 96799),
"FM": (96941, 96944),
"GU": (96910, 96932),
"MH": (96960, 96970),
"MP": (96950, 96952),
"PW": (96940, 96940),
"PR": (600, 799),
"VI": (801, 805),
}
territories_abbr = (
"AS",
"GU",
"MP",
"PR",
"VI",
)
# Freely-associated states (sovereign states; members of COFA)
# https://en.wikipedia.org/wiki/Compact_of_Free_Association
freely_associated_states_abbr = (
"FM",
"MH",
"PW",
)
known_usps_abbr = states_abbr + territories_abbr + freely_associated_states_abbr
military_state_abbr = ("AE", "AA", "AP")
military_ship_prefix = ("USS", "USNS", "USNV", "USCGC")
military_apo_format = "PSC ####, Box ####"
military_dpo_format = "Unit #### Box ####"
city_formats = (
"{{city_prefix}} {{first_name}}{{city_suffix}}",
"{{city_prefix}} {{first_name}}",
"{{first_name}}{{city_suffix}}",
"{{last_name}}{{city_suffix}}",
)
street_name_formats = (
"{{first_name}} {{street_suffix}}",
"{{last_name}} {{street_suffix}}",
)
street_address_formats = (
"{{building_number}} {{street_name}}",
"{{building_number}} {{street_name}} {{secondary_address}}",
)
address_formats = OrderedDict(
(
("{{street_address}}\n{{city}}, {{state_abbr}} {{postcode}}", 25.0),
# military address formatting.
("{{military_apo}}\nAPO {{military_state}} {{postcode}}", 1.0),
(
"{{military_ship}} {{last_name}}\nFPO {{military_state}} {{postcode}}",
1.0,
),
("{{military_dpo}}\nDPO {{military_state}} {{postcode}}", 1.0),
)
)
secondary_address_formats = ("Apt. ###", "Suite ###")
def city_prefix(self) -> str:
return self.random_element(self.city_prefixes)
def secondary_address(self) -> str:
return self.numerify(self.random_element(self.secondary_address_formats))
def administrative_unit(self) -> str:
return self.random_element(self.states)
state = administrative_unit
def state_abbr(
self,
include_territories: bool = True,
include_freely_associated_states: bool = True,
) -> str:
"""
:returns: A random two-letter USPS postal code
By default, the resulting code may abbreviate any of the fifty states,
five US territories, or three freely-associating sovereign states.
:param include_territories: If True, territories will be included.
If False, US territories will be excluded.
:param include_freely_associated_states: If True, freely-associated states will be included.
If False, sovereign states in free association with the US will be excluded.
"""
abbreviations: Tuple[str, ...] = self.states_abbr
if include_territories:
abbreviations += self.territories_abbr
if include_freely_associated_states:
abbreviations += self.freely_associated_states_abbr
return self.random_element(abbreviations)
def postcode(self) -> str:
return "%05d" % self.generator.random.randint(501, 99950)
def zipcode_plus4(self) -> str:
return "%s-%04d" % (self.zipcode(), self.generator.random.randint(1, 9999))
def postcode_in_state(self, state_abbr: Optional[str] = None) -> str:
"""
:returns: A random postcode within the provided state abbreviation
:param state_abbr: A state abbreviation
"""
if state_abbr is None:
state_abbr = self.random_element(self.states_abbr)
if state_abbr in self.known_usps_abbr:
postcode = "%d" % (
self.generator.random.randint(
self.states_postcode[state_abbr][0],
self.states_postcode[state_abbr][1],
)
)
# zero left pad up until desired length (some have length 3 or 4)
target_postcode_len = 5
current_postcode_len = len(postcode)
if current_postcode_len < target_postcode_len:
pad = target_postcode_len - current_postcode_len
postcode = f"{'0'*pad}{postcode}"
return postcode
else:
raise Exception("State Abbreviation not found in list")
def military_ship(self) -> str:
"""
:example: 'USS'
"""
return self.random_element(self.military_ship_prefix)
def military_state(self) -> str:
"""
:example: 'APO'
"""
return self.random_element(self.military_state_abbr)
def military_apo(self) -> str:
"""
:example: 'PSC 5394 Box 3492
"""
return self.numerify(self.military_apo_format)
def military_dpo(self) -> str:
"""
:example: 'Unit 3333 Box 9342'
"""
return self.numerify(self.military_dpo_format)
# Aliases
def zipcode(self) -> str:
return self.postcode()
def zipcode_in_state(self, state_abbr: Optional[str] = None) -> str:
return self.postcode_in_state(state_abbr)
def postalcode(self) -> str:
return self.postcode()
def postalcode_in_state(self, state_abbr: Optional[str] = None) -> str:
return self.postcode_in_state(state_abbr)
def postalcode_plus4(self) -> str:
return self.zipcode_plus4()

View File

@@ -0,0 +1,200 @@
from .. import Provider as AddressProvider
class Provider(AddressProvider):
# List of Countries https://www.un.org/es/members/
countries = (
"Afganistán",
"Albania",
"Alemania",
"Andorra",
"Angola",
"Antigua y Barbuda",
"Arabia Saudita",
"Argelia",
"Argentina",
"Armenia",
"Australia",
"Austria",
"Azerbaiyán",
"Bahamas",
"Bahrein",
"Bangladesh",
"Barbados",
"Belarús",
"Bélgica",
"Belice",
"Benin",
"Bhután",
"Bolivia",
"Bosnia y Herzegovina",
"Botswana",
"Brasil",
"Brunei Darussalam",
"Bulgaria",
"Burkina Faso",
"Burundi",
"Cabo Verde",
"Camboya",
"Camerún",
"Canadá",
"Chad",
"Chile",
"China",
"Chipre",
"Colombia",
"Comoras",
"Congo",
"Costa Rica",
"Côte d'Ivoire",
"Croacia",
"Cuba",
"Dinamarca",
"Djibouti",
"Dominicana",
"Ecuador",
"Egipto",
"El Salvador",
"Emiratos Árabes Unidos",
"Eritrea",
"Eslovaquia",
"Eslovenia",
"España",
"Estados Unidos de América",
"Estonia",
"Etiopía",
"Federación de Rusia",
"Fiji",
"Filipinas",
"Finlandia",
"Francia",
"Gabón",
"Gambia",
"Georgia",
"Ghana",
"Granada",
"Grecia",
"Guatemala",
"Guinea",
"Guinea Bissau",
"Guinea Ecuatorial",
"Guyana",
"Haití",
"Honduras",
"Hungría",
"India",
"Indonesia",
"Irán",
"Iraq",
"Irlanda",
"Islandia",
"Islas Marshall",
"Islas Salomón",
"Israel",
"Italia",
"Jamaica",
"Japón",
"Jordania",
"Kazajstán",
"Kenya",
"Kirguistán",
"Kiribati",
"Kuwait",
"Lesotho",
"Letonia",
"Líbano",
"Liberia",
"Libia",
"Liechtenstein",
"Lituania",
"Luxemburgo",
"Madagascar",
"Malasia",
"Malawi",
"Maldivas",
"Mali",
"Malta",
"Marruecos",
"Mauricio",
"Mauritania",
"México",
"Micronesia",
"Mónaco",
"Mongolia",
"Montenegro",
"Mozambique",
"Myanmar",
"Namibia",
"Nauru",
"Nicaragua",
"Niger",
"Nigeria",
"Noruega",
"Nueva Zelandia",
"Omán",
"Países Bajos",
"Pakistán",
"Palau",
"Panamá",
"Papua Nueva Guinea",
"Paraguay",
"Perú",
"Polonia",
"Portugal",
"Qatar",
"Reino Unido de Gran Bretaña e Irlanda del Norte",
"República Árabe Siria",
"República Centroafricana",
"República Checa",
"República de Corea",
"República de Macedonia del Norte",
"República de Moldova",
"República Democrática del Congo",
"República Democrática Popular Lao",
"República Dominicana",
"República Federal Democrática de Nepal",
"República Popular Democrática de Corea",
"República Unida de Tanzanía",
"Rumania",
"Rwanda",
"Saint Kitts y Nevis",
"Samoa",
"San Marino",
"Santa Lucía",
"Santo Tomé y Príncipe",
"San Vicente y las Granadinas",
"Senegal",
"Serbia",
"Seychelles",
"Sierra Leona",
"Singapur",
"Somalia",
"Sri Lanka",
"Sudáfrica",
"Sudán",
"Sudán del Sur",
"Suecia",
"Suiza",
"Suriname",
"Swazilandia",
"Tailandia",
"Tayikistán",
"Timor-Leste",
"Togo",
"Tonga",
"Trinidad y Tabago",
"Túnez",
"Turkmenistán",
"Turquía",
"Tuvalu",
"Ucrania",
"Uganda",
"Uruguay",
"Uzbekistán",
"Vanuatu",
"Venezuela",
"Vietman",
"Yemen",
"Zambia",
"Zimbabwe",
)

View File

@@ -0,0 +1,231 @@
from collections import OrderedDict
from typing import List, Tuple
from ..es import Provider as AddressProvider
class Provider(AddressProvider):
provinces = {
"CABA": "Ciudad Autónoma de Buenos Aires",
"BA": "Buenos Aires",
"CA": "Catamarca",
"CH": "Chaco",
"CT": "Chubut",
"CB": "Córdoba",
"CR": "Corrientes",
"ER": "Entre Ríos",
"FO": "Formosa",
"JY": "Jujuy",
"LP": "La Pampa",
"LR": "La Rioja",
"MZ": "Mendoza",
"MI": "Misiones",
"NQN": "Neuquén",
"RN": "Río Negro",
"SA": "Salta",
"SJ": "San Juan",
"SL": "San Luis",
"SC": "Santa Cruz",
"SF": "Santa Fe",
"SE": "Santiago del Estero",
"TF": "Tierra del Fuego",
"TU": "Tucumán",
}
municipalities: List[Tuple[str, str, str]] = [
("1004", "Constitución", "CABA"),
("1900", "La Plata", "BA"),
("7600", "Mar del Plata", "BA"),
("8000", "Bahía Blanca", "BA"),
("4700", "San Ferando del Valle de Catamarca", "CA"),
("3500", "Resistencia", "CH"),
("9103", "Rawson", "CT"),
("9000", "Comodoro Rivadavia", "CT"),
("5000", "Córdoba", "CB"),
("3400", "Corrientes", "CR"),
("3100", "Paraná", "ER"),
("3600", "Formosa", "FO"),
("4600", "San Salvador de Jujuy", "JY"),
("6300", "Santa Rosa", "LP"),
("5300", "La Rioja", "LR"),
("5360", "Chilecito", "LR"),
("5500", "Mendoza", "MZ"),
("3300", "Posadas", "MI"),
("8300", "Neuquén", "NQN"),
("8500", "Viedma", "RN"),
("4400", "Salta", "SA"),
("5400", "San Juan", "SJ"),
("5700", "San Luis", "SL"),
("5881", "Merlo", "SL"),
("9400", "Río Gallegos", "SC"),
("3000", "Santa Fe", "SF"),
("2000", "Rosario", "SF"),
("4200", "Santiago del Estero", "SE"),
("9410", "Ushuaia", "TF"),
("4000", "San Miguel de Tucumán", "TU"),
]
street_prefixes = OrderedDict(
[
("Calle", 0.2),
("Avenida", 0.2),
("Av.", 0.2),
("Diagonal", 0.2),
("Diag.", 0.05),
("Camino", 0.05),
("Boulevard", 0.05),
("Blv.", 0.05),
]
)
street_suffixes = ["A", "B", "Bis"]
street_proceres = (
"San Martin",
"Belgrano",
"Saavedra",
"Rivadavia",
"Güemes",
"G. Brown",
"J.B. Alberdi",
"J.M. de Rosas",
"J.J. Castelli",
"Mitre",
"Alem",
"Alvear",
"Malvinas Argentinas",
"Pte. Perón",
"Omar Nuñez",
)
street_name_formats = OrderedDict(
[
("{{street_prefix}} %", 0.2),
("{{street_prefix}} {{street_municipality}}", 0.2),
("{{street_prefix}} {{street_province}}", 0.2),
("{{street_prefix}} {{street_procer}}", 0.2),
("{{street_prefix}} 1## {{street_suffix}}", 0.02),
]
)
building_number_formats = OrderedDict(
[
("%%", 0.2),
("%%#", 0.2),
("%#%", 0.2),
("%#%#", 0.2),
]
)
secondary_address_formats = [
"Piso % Dto. %",
"Dto. %",
"Torre % Dto. %",
"Local %!",
"Oficina %!",
]
postcode_formats = ["{{municipality_code}}####"]
def provinces_code(self) -> str:
"""
:example: "BA"
"""
return self.random_element(self.provinces.keys())
def province(self) -> str:
"""
:example: "Buenos Aires"
"""
return self.random_element(list(self.provinces.values()))
administrative_unit = province
def municipality_code(self) -> str:
"""
:example: "1900"
"""
return self.random_element(self.municipalities)[0] # type: ignore
def municipality(self) -> str:
"""
:example: "La Plata"
"""
return self.random_element(self.municipalities)[1] # type: ignore
city = municipality
def street_prefix(self) -> str:
"""
:example: "Calle"
"""
return self.random_element(self.street_prefixes)
def street_procer(self) -> str:
"""
:example: "Belgrano"
"""
return self.random_element(self.street_proceres)
def street_municipality(self) -> str:
"""
:example: "La Plata"
"""
return self.random_element(self.municipalities)[1]
def street_province(self) -> str:
"""
:example: "San Juan"
"""
return self.random_element(list(self.provinces.values()))
def street_suffix(self) -> str:
"""
:example: "Sur"
"""
return self.generator.parse(self.random_element(self.street_suffixes))
def street_name(self) -> str:
"""
:example: "Calle 1"
"""
pattern: str = self.random_element(self.street_name_formats)
return self.numerify(self.generator.parse(pattern))
def building_number(self) -> str:
"""
:example: "23"
"""
return self.numerify(self.generator.parse(self.random_element(self.building_number_formats)))
def secondary_address(self) -> str:
"""
:example: "Departamento 123"
"""
return self.numerify(self.random_element(self.secondary_address_formats))
def street_address(self) -> str:
"""
:example: "Calle 1 N° 23"
"""
return self.street_name() + "" + self.building_number()
def postcode(self) -> str:
"""
:example: "1900"
"""
return self.numerify(self.generator.parse(self.random_element(self.postcode_formats)))
def address(self) -> str:
"""
:example: "Calle 1 N° 23, La Plata 1900, Buenos Aires"
"""
municipality: Tuple[str, str, str] = self.random_element(self.municipalities)
municipality_code = municipality[0]
municipality_prov = municipality[2]
secondary_address: str = self.random_element(
[
" " + self.secondary_address(),
"",
]
)
postcode = "\n" + municipality[1] + " " + municipality_code
province_name = ", " + self.provinces[municipality_prov]
return self.street_address() + secondary_address + postcode + province_name

View File

@@ -0,0 +1,648 @@
from collections import OrderedDict
from typing import Dict, Tuple
from ... import ElementsType
from ..es import Provider as AddressProvider
class Provider(AddressProvider):
# Source for regions, provinces and communes
# https://www.subdere.gov.cl/documentacion/c%C3%B3digos-%C3%BAnicos-
# territoriales-actualizados-al-06-de-septiembre-2018
regions: Dict[str, str] = {
"TA": "Región de Tarapacá",
"AN": "Región de Antofagasta",
"AT": "Región de Atacama",
"CO": "Región de Coquimbo",
"VA": "Región de Valparaíso",
"LI": "Región del Libertador General Bernardo O'Higgins",
"ML": "Región del Maule",
"BI": "Región del Biobío",
"AR": "Región de La Araucanía",
"LL": "Región de Los Lagos",
"AI": "Región de Aysén del General Carlos Ibáñez del Campo",
"MA": "Región de Magallanes y de la Antártica Chilena",
"RM": "Región Metropolitana",
"LR": "Región de Los Ríos",
"AP": "Región de Arica y Parinacota",
"NB": "Región de Ñuble",
}
provinces: Dict[str, str] = {
"011": "Iquique",
"014": "Tamarugal",
"021": "Antofagasta",
"022": "El Loa",
"023": "Tocopilla",
"031": "Copiapó",
"032": "Chañaral",
"033": "Huasco",
"041": "Elqui",
"042": "Choapa",
"043": "Limarí",
"051": "Valparaíso",
"052": "Isla de Pascua",
"053": "Los Andes",
"054": "Petorca",
"055": "Quillota",
"056": "San Antonio",
"057": "San Felipe de Aconcagua",
"058": "Marga Marga",
"061": "Cachapoal",
"062": "Cardenal Caro",
"063": "Colchagua",
"071": "Talca",
"072": "Cauquenes",
"073": "Curicó",
"074": "Linares",
"081": "Concepción",
"082": "Arauco",
"083": "Biobío",
"091": "Cautín",
"092": "Malleco",
"101": "Llanquihue",
"102": "Chiloé",
"103": "Osorno",
"104": "Palena",
"111": "Coyhaique",
"112": "Aysén",
"113": "Capitán Prat",
"114": "General Carrera",
"121": "Magallanes",
"122": "Antártica Chilena",
"123": "Tierra del Fuego",
"124": "Última Esperanza",
"131": "Santiago",
"132": "Cordillera",
"133": "Chacabuco",
"134": "Maipo",
"135": "Melipilla",
"136": "Talagante",
"141": "Valdivia",
"142": "Ranco",
"151": "Arica",
"152": "Parinacota",
"161": "Diguillín",
"162": "Itata",
"163": "Punilla",
}
communes: Dict[str, str] = {
"15101": "Arica",
"15102": "Camarones",
"15201": "Putre",
"15202": "General Lagos",
"01101": "Iquique",
"01402": "Camiña",
"01403": "Colchane",
"01404": "Huara",
"01405": "Pica",
"01401": "Pozo Almonte",
"01107": "Alto Hospicio",
"02101": "Antofagasta",
"02102": "Mejillones",
"02103": "Sierra Gorda",
"02104": "Taltal",
"02201": "Calama",
"02202": "Ollagüe",
"02203": "San Pedro de Atacama",
"02301": "Tocopilla",
"02302": "María Elena",
"03101": "Copiapó",
"03102": "Caldera",
"03103": "Tierra Amarilla",
"03201": "Chañaral",
"03202": "Diego de Almagro",
"03301": "Vallenar",
"03302": "Alto del Carmen",
"03303": "Freirina",
"03304": "Huasco",
"04101": "La Serena",
"04102": "Coquimbo",
"04103": "Andacollo",
"04104": "La Higuera",
"04105": "Paiguano",
"04106": "Vicuña",
"04201": "Illapel",
"04202": "Canela",
"04203": "Los Vilos",
"04204": "Salamanca",
"04301": "Ovalle",
"04302": "Combarbalá",
"04303": "Monte Patria",
"04304": "Punitaqui",
"04305": "Río Hurtado",
"05101": "Valparaíso",
"05102": "Casablanca",
"05103": "Concón",
"05104": "Juan Fernández",
"05105": "Puchuncaví",
"05801": "Quilpué",
"05107": "Quintero",
"05804": "Villa Alemana",
"05109": "Viña del Mar",
"05201": "Isla de Pascua",
"05301": "Los Andes",
"05302": "Calle Larga",
"05303": "Rinconada",
"05304": "San Esteban",
"05401": "La Ligua",
"05402": "Cabildo",
"05403": "Papudo",
"05404": "Petorca",
"05405": "Zapallar",
"05501": "Quillota",
"05502": "Calera",
"05503": "Hijuelas",
"05504": "La Cruz",
"05802": "Limache",
"05506": "Nogales",
"05803": "Olmué",
"05601": "San Antonio",
"05602": "Algarrobo",
"05603": "Cartagena",
"05604": "El Quisco",
"05605": "El Tabo",
"05606": "Santo Domingo",
"05701": "San Felipe",
"05702": "Catemu",
"05703": "Llaillay",
"05704": "Panquehue",
"05705": "Putaendo",
"05706": "Santa María",
"06101": "Rancagua",
"06102": "Codegua",
"06103": "Coinco",
"06104": "Coltauco",
"06105": "Doñihue",
"06106": "Graneros",
"06107": "Las Cabras",
"06108": "Machalí",
"06109": "Malloa",
"06110": "Mostazal",
"06111": "Olivar",
"06112": "Peumo",
"06113": "Pichidegua",
"06114": "Quinta de Tilcoco",
"06115": "Rengo",
"06116": "Requínoa",
"06117": "San Vicente",
"06201": "Pichilemu",
"06202": "La Estrella",
"06203": "Litueche",
"06204": "Marchihue",
"06205": "Navidad",
"06206": "Paredones",
"06301": "San Fernando",
"06302": "Chépica",
"06303": "Chimbarongo",
"06304": "Lolol",
"06305": "Nancagua",
"06306": "Palmilla",
"06307": "Peralillo",
"06308": "Placilla",
"06309": "Pumanque",
"06310": "Santa Cruz",
"07101": "Talca",
"07102": "Constitución",
"07103": "Curepto",
"07104": "Empedrado",
"07105": "Maule",
"07106": "Pelarco",
"07107": "Pencahue",
"07108": "Río Claro",
"07109": "San Clemente",
"07110": "San Rafael",
"07201": "Cauquenes",
"07202": "Chanco",
"07203": "Pelluhue",
"07301": "Curicó",
"07302": "Hualañé",
"07303": "Licantén",
"07304": "Molina",
"07305": "Rauco",
"07306": "Romeral",
"07307": "Sagrada Familia",
"07308": "Teno",
"07309": "Vichuquén",
"07401": "Linares",
"07402": "Colbún",
"07403": "Longaví",
"07404": "Parral",
"07405": "Retiro",
"07406": "San Javier",
"07407": "Villa Alegre",
"07408": "Yerbas Buenas",
"08101": "Concepción",
"08102": "Coronel",
"08103": "Chiguayante",
"08104": "Florida",
"08105": "Hualqui",
"08106": "Lota",
"08107": "Penco",
"08108": "San Pedro de la Paz",
"08109": "Santa Juana",
"08110": "Talcahuano",
"08111": "Tomé",
"08112": "Hualpén",
"08201": "Lebu",
"08202": "Arauco",
"08203": "Cañete",
"08204": "Contulmo",
"08205": "Curanilahue",
"08206": "Los Álamos",
"08207": "Tirúa",
"08301": "Los Ángeles",
"08302": "Antuco",
"08303": "Cabrero",
"08304": "Laja",
"08305": "Mulchén",
"08306": "Nacimiento",
"08307": "Negrete",
"08308": "Quilaco",
"08309": "Quilleco",
"08310": "San Rosendo",
"08311": "Santa Bárbara",
"08312": "Tucapel",
"08313": "Yumbel",
"08314": "Alto Biobío",
"16101": "Chillán",
"16102": "Bulnes",
"16202": "Cobquecura",
"16203": "Coelemu",
"16302": "Coihueco",
"16103": "Chillán Viejo",
"16104": "El Carmen",
"16204": "Ninhue",
"16303": "Ñiquén",
"16105": "Pemuco",
"16106": "Pinto",
"16205": "Portezuelo",
"16107": "Quillón",
"16201": "Quirihue",
"16206": "Ránquil",
"16301": "San Carlos",
"16304": "San Fabián",
"16108": "San Ignacio",
"16305": "San Nicolás",
"16207": "Treguaco",
"16109": "Yungay",
"09101": "Temuco",
"09102": "Carahue",
"09103": "Cunco",
"09104": "Curarrehue",
"09105": "Freire",
"09106": "Galvarino",
"09107": "Gorbea",
"09108": "Lautaro",
"09109": "Loncoche",
"09110": "Melipeuco",
"09111": "Nueva Imperial",
"09112": "Padre Las Casas",
"09113": "Perquenco",
"09114": "Pitrufquén",
"09115": "Pucón",
"09116": "Saavedra",
"09117": "Teodoro Schmidt",
"09118": "Toltén",
"09119": "Vilcún",
"09120": "Villarrica",
"09121": "Cholchol",
"09201": "Angol",
"09202": "Collipulli",
"09203": "Curacautín",
"09204": "Ercilla",
"09205": "Lonquimay",
"09206": "Los Sauces",
"09207": "Lumaco",
"09208": "Purén",
"09209": "Renaico",
"09210": "Traiguén",
"09211": "Victoria",
"14101": "Valdivia",
"14102": "Corral",
"14202": "Futrono",
"14201": "La Unión",
"14203": "Lago Ranco",
"14103": "Lanco",
"14104": "Los Lagos",
"14105": "Máfil",
"14106": "Mariquina",
"14107": "Paillaco",
"14108": "Panguipulli",
"14204": "Río Bueno",
"10101": "Puerto Montt",
"10102": "Calbuco",
"10103": "Cochamó",
"10104": "Fresia",
"10105": "Frutillar",
"10106": "Los Muermos",
"10107": "Llanquihue",
"10108": "Maullín",
"10109": "Puerto Varas",
"10201": "Castro",
"10202": "Ancud",
"10203": "Chonchi",
"10204": "Curaco de Vélez",
"10205": "Dalcahue",
"10206": "Puqueldón",
"10207": "Queilén",
"10208": "Quellón",
"10209": "Quemchi",
"10210": "Quinchao",
"10301": "Osorno",
"10302": "Puerto Octay",
"10303": "Purranque",
"10304": "Puyehue",
"10305": "Río Negro",
"10306": "San Juan de la Costa",
"10307": "San Pablo",
"10401": "Chaitén",
"10402": "Futaleufú",
"10403": "Hualaihué",
"10404": "Palena",
"11101": "Coihaique",
"11102": "Lago Verde",
"11201": "Aisén",
"11202": "Cisnes",
"11203": "Guaitecas",
"11301": "Cochrane",
"11302": "O'Higgins",
"11303": "Tortel",
"11401": "Chile Chico",
"11402": "Río Ibáñez",
"12101": "Punta Arenas",
"12102": "Laguna Blanca",
"12103": "Río Verde",
"12104": "San Gregorio",
"12201": "Cabo de Hornos",
"12202": "Antártica",
"12301": "Porvenir",
"12302": "Primavera",
"12303": "Timaukel",
"12401": "Natales",
"12402": "Torres del Paine",
"13101": "Santiago",
"13102": "Cerrillos",
"13103": "Cerro Navia",
"13104": "Conchalí",
"13105": "El Bosque",
"13106": "Estación Central",
"13107": "Huechuraba",
"13108": "Independencia",
"13109": "La Cisterna",
"13110": "La Florida",
"13111": "La Granja",
"13112": "La Pintana",
"13113": "La Reina",
"13114": "Las Condes",
"13115": "Lo Barnechea",
"13116": "Lo Espejo",
"13117": "Lo Prado",
"13118": "Macul",
"13119": "Maipú",
"13120": "Ñuñoa",
"13121": "Pedro Aguirre Cerda",
"13122": "Peñalolén",
"13123": "Providencia",
"13124": "Pudahuel",
"13125": "Quilicura",
"13126": "Quinta Normal",
"13127": "Recoleta",
"13128": "Renca",
"13129": "San Joaquín",
"13130": "San Miguel",
"13131": "San Ramón",
"13132": "Vitacura",
"13201": "Puente Alto",
"13202": "Pirque",
"13203": "San José de Maipo",
"13301": "Colina",
"13302": "Lampa",
"13303": "Tiltil",
"13401": "San Bernardo",
"13402": "Buin",
"13403": "Calera de Tango",
"13404": "Paine",
"13501": "Melipilla",
"13502": "Alhué",
"13503": "Curacaví",
"13504": "María Pinto",
"13505": "San Pedro",
"13601": "Talagante",
"13602": "El Monte",
"13603": "Isla de Maipo",
"13604": "Padre Hurtado",
"13605": "Peñaflor",
}
street_prefixes = OrderedDict(
[
("Calle", 0.6),
("Avenida", 0.1),
("Avda.", 0.1),
("Av.", 0.1),
("Pasaje", 0.04),
("Psje.", 0.04),
("Camino", 0.02),
]
)
street_suffixes = (
"Norte",
"Sur",
)
city_formats = ("{{city}}",)
street_name_formats = (
"{{street_prefix}} {{common_street_name}}",
"{{street_prefix}} {{historic_people_street_name}}",
"{{street_prefix}} {{first_name_male}} {{last_name}}",
"{{street_prefix}} {{first_name_female}} {{last_name}}",
"{{street_prefix}} {{plant_street_name}}",
"{{common_street_name}}",
"{{historic_people_street_name}}",
"{{plant_street_name}}",
"{{first_name_male}} {{last_name}}",
"{{first_name_female}} {{last_name}}",
)
building_number_formats = OrderedDict(
[
("%###", 0.35),
("%##", 0.35),
("%#", 0.25),
("%", 0.05),
]
)
street_address_formats = (
"{{street_name}} {{building_number}}",
"{{street_name}} {{building_number}} {{secondary_address}}",
)
address_formats = OrderedDict(
[
("{{street_address}}\n{{commune_and_region}}, {{postcode}}", 0.4),
("{{street_address}}\n{{commune_and_region}}", 0.4),
("{{highway_name}}, km {{random_int:big_kilometer}}", 0.1),
("{{road_name}}, km {{random_int:kilometer}}, {{region}}", 0.1),
]
)
secondary_address_formats = ("Dpto. @@##", "Piso @#", "Of. %##@")
common_street_names = OrderedDict(
[
("Arturo Prat", 0.118812),
("Esmeralda", 0.107261),
("Manuel Rodríguez", 0.105611),
("Gabriela Mistral", 0.104785),
("Los Aromos", 0.104785),
("Las Rosas", 0.098185),
("Caupolicán", 0.094884),
("Lautaro", 0.094059),
("Los Alerces", 0.086634),
("Los Copihues", 0.084983),
]
)
# Some chilean historic people. Full names come first, then its variants
historic_people_street_names = (
("Alonso de Ercilla",),
("Alonso de Ribera",),
("Álvaro Casanova", "Casanova"),
("Aníbal Pinto Garmendia", "Aníbal Pinto"),
("Antonio Varas",),
("Arturo Alessandri Palma", "Arturo Alessandri"),
("Benjamín Vicuña Mackenna", "Vicuña Mackenna", "Mackenna"),
("Bernardo O'Higgins", "O'Higgins"),
("Camilo Henríquez",),
("Caupolicán",),
("Colo Colo",),
("Diego Barros Arana", "Barros Arana"),
("Diego Portales", "Portales"),
("Domingo Santa María", "Santa María"),
("Eliodoro Yáñez",),
("Enrique Mac Iver", "Mac Iver"),
("Eusebio Lillo",),
("Francisco Bilbao", "Bilbao"),
("José de San Martín", "San Martín"),
("José Manuel Balmaceda", "Balmaceda"),
("José Miguel Carrera",),
("José Victorino Lastarria", "Lastarria"),
("Juan Mackenna",),
("Lord Thomas Cochrane", "Lord Cochrane", "Cochrane"),
("Los Carrera",),
("Manuel Antonio Matta", "Matta"),
("Manuel Bulnes", "Bulnes"),
("Manuel José Irarrázaval", "Irarrázabal"),
("Manuel Montt",),
("Manuel Rodríguez",),
("Manuel Baquedano", "Baquedano"),
("Michimalonco",),
("Padre Alberto Hurtado", "Alberto Hurtado"),
("Patricio Lynch", "Lynch"),
("Paula Jaraquemada",),
("Pedro Aguirre Cerda",),
("Pedro de Valdivia",),
("Pedro Montt",),
("Ramón Barros Luco", "Barros Luco"),
("Ramón Carnicer",),
("Ramón Freire", "Freire"),
("Ramón Picarte", "Picarte"),
("Salvador Allende Gossens", "Salvador Allende"),
("Santa Rosa",),
)
# Some streets are named by plants
plant_street_names: ElementsType[str] = (
"Los Cactus",
"Los Laureles",
"Los Piñones",
"Los Helechos",
"Los Higos",
"Los Abedules",
"Los Encinos",
"Los Palmitos",
"Los Naranjos",
"Los Robles",
"Los Pinos",
"Los Coihues",
"Los Calafates",
"Los Digitales",
"Los Lirios",
"Los Tilos",
"Los Girasoles",
"Las Azucenas",
"Las Lilas",
"Las Hortensias",
"Las Margaritas",
"Las Maravillas",
"Las Manzanillas",
"Las Mandarinas",
"Las Araucarias",
"Las Mosquetas",
"Las Malvas",
"Las Mosquetas",
)
road_names = ("Ruta T-%#", "Ruta U-%##", "Ruta %##-CH")
highway_names = ("Ruta 5 Norte", "Ruta 5 Sur")
def commune(self) -> str:
return self.random_element(self.communes.values())
def province(self) -> str:
return self.random_element(self.provinces.values())
def region(self) -> str:
return self.random_element(self.regions.values())
def commune_code(self) -> str:
return self.random_element(self.communes.keys())
def province_code(self) -> str:
return self.random_element(self.provinces.keys())
def region_code(self) -> str:
return self.random_element(self.regions.keys())
def common_street_name(self) -> str:
return self.random_element(self.common_street_names)
def plant_street_name(self) -> str:
return self.random_element(self.plant_street_names)
def historic_people_street_name(self) -> str:
person_names: Tuple[str, ...] = self.random_element(self.historic_people_street_names)
return self.random_element(person_names)
def street_prefix(self) -> str:
return self.random_element(self.street_prefixes)
def secondary_address(self) -> str:
return self.numerify(self.random_element(self.secondary_address_formats))
def commune_and_region(self) -> str:
commune_code = self.commune_code()
commune_name = self.communes[commune_code]
region_index = int(commune_code[0:2]) - 1
region_name = tuple(self.regions.values())[region_index]
return f"{commune_name:s}, {region_name:s}"
def road_name(self) -> str:
self.generator.set_arguments("kilometer", {"min": 1, "max": 35})
return self.numerify(self.generator.parse(self.random_element(self.road_names)))
def highway_name(self) -> str:
self.generator.set_arguments("big_kilometer", {"min": 1, "max": 1000})
return self.numerify(self.generator.parse(self.random_element(self.highway_names)))
def postcode(self) -> str:
return self.numerify("######0")
administrative_unit = region
city = commune

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,140 @@
from ..es import Provider as AddressProvider
class Provider(AddressProvider):
building_number_formats = ("%", "%#", "%#", "%#", "%##")
street_prefixes = (
"Plaza",
"Calle",
"Avenida",
"Via",
"Vial",
"Rambla",
"Glorieta",
"Urbanización",
"Callejón",
"Cañada",
"Alameda",
"Acceso",
"C.",
"Ronda",
"Pasaje",
"Cuesta",
"Pasadizo",
"Paseo",
"Camino",
)
states = (
"Álava",
"Albacete",
"Alicante",
"Almería",
"Asturias",
"Ávila",
"Badajoz",
"Baleares",
"Barcelona",
"Burgos",
"Cáceres",
"Cádiz",
"Cantabria",
"Castellón",
"Ceuta",
"Ciudad",
"Córdoba",
"Cuenca",
"Girona",
"Granada",
"Guadalajara",
"Guipúzcoa",
"Huelva",
"Huesca",
"Jaén",
"La Coruña",
"La Rioja",
"Las Palmas",
"León",
"Lleida",
"Lugo",
"Madrid",
"Málaga",
"Melilla",
"Murcia",
"Navarra",
"Ourense",
"Palencia",
"Pontevedra",
"Salamanca",
"Santa Cruz de Tenerife",
"Segovia",
"Sevilla",
"Soria",
"Tarragona",
"Teruel",
"Toledo",
"Valencia",
"Valladolid",
"Vizcaya",
"Zamora",
"Zaragoza",
)
# Source:
# https://administracionelectronica.gob.es/ctt/resources/Soluciones
# /238/Descargas/Catalogo-de-Comunidades-Autonomas.xlsx
regions = (
"Andalucía",
"Aragón",
"Principado de Asturias",
"Illes Balears",
"Canarias",
"Cantabria",
"Castilla y León",
"Castilla-La Mancha",
"Cataluña",
"Comunitat Valenciana",
"Extremadura",
"Galicia",
"Comunidad de Madrid",
"Región de Murcia",
"Comunidad Foral de Navarra",
"País Vasco",
"La Rioja",
"Ciudad Autónoma de Ceuta",
"Ciudad Autónoma de Melilla",
)
city_formats = ("{{state_name}}",)
street_name_formats = (
"{{street_prefix}} {{first_name}} {{last_name}}",
"{{street_prefix}} de {{first_name}} {{last_name}}",
)
street_address_formats = (
"{{street_name}} {{building_number}}",
"{{street_name}} {{building_number}} {{secondary_address}} ",
)
address_formats = ("{{street_address}}\n{{city}}, {{postcode}}",)
secondary_address_formats = ("Apt. ##", "Piso #", "Puerta #")
def state_name(self) -> str:
return self.random_element(self.states)
def street_prefix(self) -> str:
return self.random_element(self.street_prefixes)
def secondary_address(self) -> str:
return self.numerify(self.random_element(self.secondary_address_formats))
def administrative_unit(self) -> str:
return self.random_element(self.states)
state = administrative_unit
def region(self) -> str:
return self.random_element(self.regions)
def postcode(self) -> str:
return str(self.generator.random.randint(1000, 52100)).zfill(5)
autonomous_community = region

View File

@@ -0,0 +1,163 @@
from collections import OrderedDict
from ..es import Provider as AddressProvider
class Provider(AddressProvider):
city_prefixes = ("Sur", "Norte")
city_adjectives = ("Nueva", "Vieja")
city_suffixes = ("de la Montaña", "los bajos", "los altos")
street_prefixes = (
"Ampliación",
"Andador",
"Avenida",
"Boulevard",
"Calle",
"Callejón",
"Calzada",
"Cerrada",
"Circuito",
"Circunvalación",
"Continuación",
"Corredor",
"Diagonal",
"Eje vial",
"Pasaje",
"Peatonal",
"Periférico",
"Privada",
"Prolongación",
"Retorno",
"Viaducto",
)
building_number_formats = ("#####", "####", "###")
postcode_formats = ("#####", "#####-####")
# States and abbrs from Mexico from INEGI
# http://www.inegi.org.mx/geo/contenidos/geoestadistica/CatalogoClaves.aspx
states = (
("AGS", "Aguascalientes"),
("BC", "Baja California"),
("BCS", "Baja California Sur"),
("CAMP", "Campeche"),
("COAH", "Coahuila de Zaragoza"),
("COL", "Colima"),
("CHIS", "Chiapas"),
("CHIH", "Chihuahua"),
("DF", "Distrito Federal"),
("DGO", "Durango"),
("GTO", "Guanajuato"),
("GRO", "Guerrero"),
("HGO", "Hidalgo"),
("JAL", "Jalisco"),
("MEX", "México"),
("MICH", "Michoacán de Ocampo"),
("MOR", "Morelos"),
("NAY", "Nayarit"),
("NL", "Nuevo León"),
("OAX", "Oaxaca"),
("PUE", "Puebla"),
("QRO", "Querétaro"),
("Q. ROO", "Quintana Roo"),
("SLP", "San Luis Potosí"),
("SIN", "Sinaloa"),
("SON", "Sonora"),
("TAB", "Tabasco"),
("TAMPS", "Tamaulipas"),
("TLAX", "Tlaxcala"),
("VER", "Veracruz de Ignacio de la Llave"),
("YUC", "Yucatán"),
("ZAC", "Zacatecas"),
)
zip_codes = OrderedDict(
(
# The ZipCodes has a begin & final range
# Source: Norma Técnica de Domicilios INEGI
("AGS", (20000, 20999)),
("BC", (21000, 22999)),
("BCS", (23000, 23999)),
("CAMP", (24000, 24999)),
("COAH", (25000, 27999)),
("COL", (28000, 28999)),
("CHIS", (29000, 30999)),
("CHIH", (31000, 33999)),
("DF", (1000, 19999)),
("DGO", (36000, 35999)),
("GTO", (36000, 38999)),
("GRO", (39000, 41999)),
("HGO", (42000, 43999)),
("JAL", (44000, 49999)),
("MEX", (50000, 57999)),
("MICH", (58000, 61999)),
("MOR", (62000, 62999)),
("NAY", (63000, 63999)),
("NL", (64000, 67999)),
("OAX", (68000, 71999)),
("PUE", (72000, 75999)),
("QRO", (76000, 76999)),
("Q. ROO", (77000, 75999)),
("SLP", (78000, 79999)),
("SIN", (80000, 82999)),
("SON", (83000, 85999)),
("TAB", (86000, 86999)),
("TAMPS", (87000, 89999)),
("TLAX", (90000, 90999)),
("VER", (91000, 97999)),
("YUC", (97000, 97999)),
("ZAC", (98000, 99999)),
)
)
city_formats = (
"{{city_adjective}} {{country}}",
"San {{first_name}} {{city_suffix}}",
)
street_name_formats = (
"{{street_prefix}} {{last_name}}",
"{{street_prefix}} {{country}}",
"{{street_prefix}} {{state}}",
"{{street_prefix}} {{city_prefix}} {{last_name}}",
)
street_address_formats = ("{{street_name}} {{secondary_address}}",)
address_formats = ("{{street_address}}\n{{city}}, {{state_abbr}} {{postcode}}",)
secondary_address_formats = (
"### ###",
"### Interior ###",
"### Edif. ### , Depto. ###",
)
def city_prefix(self) -> str:
return self.random_element(self.city_prefixes)
def city_suffix(self) -> str:
return self.random_element(self.city_suffixes)
def city_adjective(self) -> str:
return self.random_element(self.city_adjectives)
def street_prefix(self) -> str:
"""
:example 'Avenida'
"""
return self.random_element(self.street_prefixes)
def secondary_address(self) -> str:
"""
:example '020 Interior 999'
"""
return self.numerify(self.random_element(self.secondary_address_formats))
def administrative_unit(self) -> str:
"""
example: u'Guerrero'
"""
return self.random_element(self.states)[1] # type: ignore
state = administrative_unit
def state_abbr(self) -> str:
"""
example: u'GRO'
"""
return self.random_element(self.states)[0] # type: ignore

View File

@@ -0,0 +1,296 @@
from .. import Provider as AddressProvider
class Provider(AddressProvider):
city_prefixes = (
"شمال",
"غرب",
"شرق",
"جنوب",
"بندر",
"شهر",
"روستای",
"دهستان",
"شهرستان",
"باغات",
"استان",
)
building_number_formats = ("#####", "####", "###")
street_suffixes = (
"کوچه",
"خیابان",
"پل",
"دره",
"میدان",
"چهار راه",
"بن بست",
"بلوار",
"جنب",
"تقاطع",
"آزاد راه",
"بزرگ راه",
"جزیره",
"کوه",
"جاده",
"تونل",
)
postcode_formats = ("###", "####", "#####", "######", "##########")
states = (
"آذربایجان شرقی",
"آذربایجان غربی",
"اردبیل",
"خراسان",
"کردستان",
"گیلان",
"اصفهان",
"البرز",
"ایلام",
"بوشهر",
"تهران",
"چهارمحال و بختیاری",
"خراسان جنوبی",
"خراسان رضوی",
"خراسان شمالی",
"خوزستان",
"زنجان",
"سمنان",
"سیستان و بلوچستان",
"فارس",
"قزوین",
"قم",
"کرمان",
"کرمانشاه",
"کهگیلویه و بویراحمد",
"گلستان",
"لرستان",
"مازندران",
"مرکزی",
"هرمزگان",
"همدان",
"یزد",
)
countries = (
"جمهوری آذربایجان",
"آرژانتین",
"آفریقای جنوبی",
"جمهوری آفریقای مرکزی",
"آلبانی",
"آلمان",
"آنتیگوا و باربودا",
"آندورا",
"آنگولا",
"اتریش",
"اتیوپی",
"اردن",
"ارمنستان",
"اروگوئه",
"اریتره",
"ازبکستان",
"اسپانیا",
"استرالیا",
"استونی",
"اسرائیل",
"اسلواکی",
"اسلوونی",
"افغانستان",
"اکوادور",
"الجزایر",
"السالوادور",
"امارات متحده عربی",
"اندونزی",
"اوکراین",
"اوگاندا",
"ایالات متحده آمریکا",
"ایتالیا",
"ایران",
"جمهوری ایرلند",
"ایسلند",
"باربادوس",
"باهاما",
"بحرین",
"برزیل",
"برونئی",
"بریتانیا",
"بلاروس",
"بلژیک",
"بلغارستان",
"بلیز",
"بنگلادش",
"بنین",
"پادشاهی بوتان",
"بوتسوانا",
"بورکینافاسو",
"بوروندی",
"بوسنی و هرزگوین",
"بولیوی",
"پاپوآ گینه نو",
"پاراگوئه",
"پاناما",
"پاکستان",
"پرتغال",
"پرو",
"پورتوریکو",
"تاجیکستان",
"تانزانیا",
"تایلند",
"جمهوری چین",
"ترکمنستان",
"ترکیه",
"ترینیداد و توباگو",
"توگو",
"تونس",
"تونگا",
"تووالو",
"تیمور شرقی",
"جامائیکا",
"جزایر سلیمان",
"جزایر مارشال",
"جمهوری چک",
"جمهوری دومینیکن",
"جیبوتی",
"چاد",
"چین",
"دانمارک",
"دومینیکا",
"جمهوری دومینیکن",
"رواندا",
"روسیه",
"رومانی",
"زامبیا",
"نیوزیلند",
"زیمباوه",
"جمهوری دموکراتیک کنگو (زئیر)",
"ژاپن",
"سائوتومه و پرینسیپ",
"ساحل عاج",
"ساموآی غربی",
"سن مارینو",
"سری‌لانکا",
"سنت کیتس و نویس",
"سنت لوسیا",
"سنت وینسنت و گرنادین‌ها",
"سنگاپور",
"سنگال",
"سوئد",
"سوئیس",
"سوازیلند",
"سودان",
"سودان جنوبی",
"سورینام",
"سوریه",
"سومالی",
"سیرالئون",
"سیشل",
"شیلی",
"صربستان",
"عراق",
"عربستان سعودی",
"عمان",
"غنا",
"فرانسه",
"فلسطین",
"فنلاند",
"فیجی",
"فیلیپین",
"قبرس",
"قرقیزستان",
"قزاقستان",
"قطر",
"کامبوج",
"کامرون",
"کانادا",
"کره جنوبی",
"کره شمالی",
"کرواسی",
"کاستاریکا",
"کلمبیا",
"جمهوری کنگو",
"جمهوری دموکراتیک کنگو",
"کنیا",
"کوبا",
"کوزوو",
"مجمع‌الجزایر قمر",
"کویت",
"کیپ ورد",
"کیریباتی",
"گابن",
"گامبیا",
"گرجستان",
"گرنادا",
"گرینلند(از مستعمرات دانمارک)",
"گواتمالا",
"گویان",
"گینه",
"گینه استوایی",
"گینه بیسائو",
"لائوس",
"لبنان",
"لتونی",
"لسوتو",
"لهستان",
"لوکزامبورگ",
"لیبریا",
"لیبی",
"لیتوانی",
"لیختن‌اشتاین",
"ماداگاسکار",
"مالاوی",
"مالت",
"مالدیو",
"مالزی",
"مالی",
"مجارستان",
"مراکش",
"مصر",
"مغولستان",
"مقدونیه شمالی",
"مکزیک",
"موریتانی",
"موریس",
"موزامبیک",
"مولداوی",
"موناکو",
"مونته‌نگرو",
"میانمار",
"ایالات فدرال میکرونزی",
"نائورو",
"نامیبیا",
"نپال",
"نروژ",
"نیجریه",
"نیکاراگوئه",
"نیوزیلند",
"واتیکان",
"وانواتو",
"ونزوئلا",
"ویتنام",
"هائیتی",
"هلند",
"هندوراس",
"هند",
"یمن",
"یونان",
)
city_formats = ("{{city_prefix}} {{first_name}}",)
street_name_formats = (
"{{first_name}} {{street_suffix}}",
"{{last_name}} {{street_suffix}}",
)
street_address_formats = (
"{{building_number}} {{street_name}}",
"{{building_number}} {{street_name}} {{secondary_address}}",
)
address_formats = ("{{street_address}}\n{{city}}, {{state}} {{postcode}}",)
secondary_address_formats = ("سوئیت ###", "واحد ###")
def city_prefix(self) -> str:
return self.random_element(self.city_prefixes)
def secondary_address(self) -> str:
return self.numerify(self.random_element(self.secondary_address_formats))
def administrative_unit(self) -> str:
return self.random_element(self.states)
state = administrative_unit

View File

@@ -0,0 +1,800 @@
from .. import Provider as AddressProvider
class Provider(AddressProvider):
building_number_formats = ("###", "##", "#")
postcode_formats = ("#####",)
city_formats = ("{{city_name}}",)
street_name_formats = ("{{street_prefix}}{{street_suffix}}",)
street_address_formats = ("{{street_name}} {{building_number}}",)
address_formats = ("{{street_address}}\n{{postcode}} {{city}}",)
# Data from:
# https://www.avoindata.fi/data/en/dataset/kunnat/resource/b1cb9870-191f-4616-9c53-5388b7ca6beb
cities = (
"Alajärvi",
"Alavieska",
"Alavus",
"Asikkala",
"Askola",
"Aura",
"Akaa",
"Brändö",
"Eckerö",
"Enonkoski",
"Enontekiö",
"Espoo",
"Eura",
"Eurajoki",
"Evijärvi",
"Finström",
"Forssa",
"Föglö",
"Geta",
"Haapajärvi",
"Haapavesi",
"Hailuoto",
"Halsua",
"Hamina",
"Hammarland",
"Hankasalmi",
"Hanko",
"Harjavalta",
"Hartola",
"Hattula",
"Hausjärvi",
"Heinävesi",
"Helsinki",
"Vantaa",
"Hirvensalmi",
"Hollola",
"Honkajoki",
"Huittinen",
"Humppila",
"Hyrynsalmi",
"Hyvinkää",
"Hämeenkyrö",
"Hämeenlinna",
"Heinola",
"Ii",
"Iisalmi",
"Iitti",
"Ikaalinen",
"Ilmajoki",
"Ilomantsi",
"Inari",
"Inkoo",
"Isojoki",
"Isokyrö",
"Imatra",
"Janakkala",
"Joensuu",
"Jokioinen",
"Jomala",
"Joroinen",
"Joutsa",
"Juuka",
"Juupajoki",
"Juva",
"Jyväskylä",
"Jämijärvi",
"Jämsä",
"Järvenpää",
"Kaarina",
"Kaavi",
"Kajaani",
"Kalajoki",
"Kangasala",
"Kangasniemi",
"Kankaanpää",
"Kannonkoski",
"Kannus",
"Karijoki",
"Karkkila",
"Karstula",
"Karvia",
"Kaskinen",
"Kauhajoki",
"Kauhava",
"Kauniainen",
"Kaustinen",
"Keitele",
"Kemi",
"Keminmaa",
"Kempele",
"Kerava",
"Keuruu",
"Kihniö",
"Kinnula",
"Kirkkonummi",
"Kitee",
"Kittilä",
"Kiuruvesi",
"Kivijärvi",
"Kokemäki",
"Kokkola",
"Kolari",
"Konnevesi",
"Kontiolahti",
"Korsnäs",
"Koski Tl",
"Kotka",
"Kouvola",
"Kristiinankaupunki",
"Kruunupyy",
"Kuhmo",
"Kuhmoinen",
"Kumlinge",
"Kuopio",
"Kuortane",
"Kurikka",
"Kustavi",
"Kuusamo",
"Outokumpu",
"Kyyjärvi",
"Kärkölä",
"Kärsämäki",
"Kökar",
"Kemijärvi",
"Kemiönsaari",
"Lahti",
"Laihia",
"Laitila",
"Lapinlahti",
"Lappajärvi",
"Lappeenranta",
"Lapinjärvi",
"Lapua",
"Laukaa",
"Lemi",
"Lemland",
"Lempäälä",
"Leppävirta",
"Lestijärvi",
"Lieksa",
"Lieto",
"Liminka",
"Liperi",
"Loimaa",
"Loppi",
"Loviisa",
"Luhanka",
"Lumijoki",
"Lumparland",
"Luoto",
"Luumäki",
"Lohja",
"Parainen",
"Maalahti",
"Maarianhamina",
"Marttila",
"Masku",
"Merijärvi",
"Merikarvia",
"Miehikkälä",
"Mikkeli",
"Muhos",
"Multia",
"Muonio",
"Mustasaari",
"Muurame",
"Mynämäki",
"Myrskylä",
"Mäntsälä",
"Mäntyharju",
"Mänttä-Vilppula",
"Naantali",
"Nakkila",
"Nivala",
"Nokia",
"Nousiainen",
"Nurmes",
"Nurmijärvi",
"Närpiö",
"Orimattila",
"Oripää",
"Orivesi",
"Oulainen",
"Oulu",
"Padasjoki",
"Paimio",
"Paltamo",
"Parikkala",
"Parkano",
"Pelkosenniemi",
"Perho",
"Pertunmaa",
"Petäjävesi",
"Pieksämäki",
"Pielavesi",
"Pietarsaari",
"Pedersören kunta",
"Pihtipudas",
"Pirkkala",
"Polvijärvi",
"Pomarkku",
"Pori",
"Pornainen",
"Posio",
"Pudasjärvi",
"Pukkila",
"Punkalaidun",
"Puolanka",
"Puumala",
"Pyhtää",
"Pyhäjoki",
"Pyhäjärvi",
"Pyhäntä",
"Pyhäranta",
"Pälkäne",
"Pöytyä",
"Porvoo",
"Raahe",
"Raisio",
"Rantasalmi",
"Ranua",
"Rauma",
"Rautalampi",
"Rautavaara",
"Rautjärvi",
"Reisjärvi",
"Riihimäki",
"Ristijärvi",
"Rovaniemi",
"Ruokolahti",
"Ruovesi",
"Rusko",
"Rääkkylä",
"Raasepori",
"Saarijärvi",
"Salla",
"Salo",
"Saltvik",
"Sauvo",
"Savitaipale",
"Savonlinna",
"Savukoski",
"Seinäjoki",
"Sievi",
"Siikainen",
"Siikajoki",
"Siilinjärvi",
"Simo",
"Sipoo",
"Siuntio",
"Sodankylä",
"Soini",
"Somero",
"Sonkajärvi",
"Sotkamo",
"Sottunga",
"Sulkava",
"Sund",
"Suomussalmi",
"Suonenjoki",
"Sysmä",
"Säkylä",
"Vaala",
"Sastamala",
"Siikalatva",
"Taipalsaari",
"Taivalkoski",
"Taivassalo",
"Tammela",
"Tampere",
"Tervo",
"Tervola",
"Teuva",
"Tohmajärvi",
"Toholampi",
"Toivakka",
"Tornio",
"Turku",
"Pello",
"Tuusniemi",
"Tuusula",
"Tyrnävä",
"Ulvila",
"Urjala",
"Utajärvi",
"Utsjoki",
"Uurainen",
"Uusikaarlepyy",
"Uusikaupunki",
"Vaasa",
"Valkeakoski",
"Valtimo",
"Varkaus",
"Vehmaa",
"Vesanto",
"Vesilahti",
"Veteli",
"Vieremä",
"Vihti",
"Viitasaari",
"Vimpeli",
"Virolahti",
"Virrat",
"Värdö",
"Vöyri",
"Ylitornio",
"Ylivieska",
"Ylöjärvi",
"Ypäjä",
"Ähtäri",
"Äänekoski",
)
countries = (
"Afganistan",
"Alankomaat",
"Albania",
"Algeria",
"Andorra",
"Angola",
"Antigua ja Barbuda",
"Argentiina",
"Armenia",
"Australia",
"Azerbaidžan",
"Bahama",
"Bahrain",
"Bangladesh",
"Barbados",
"Belgia",
"Belize",
"Benin",
"Bhutan",
"Bolivia",
"Bosnia ja Hertsegovina",
"Botswana",
"Brasilia",
"Brunei",
"Bulgaria",
"Burkina",
"Faso",
"Burundi",
"Chile",
"Costa",
"Rica",
"Djibouti",
"Dominica",
"Dominikaaninen tasavalta",
"Ecuador",
"Egypti",
"El",
"Salvador",
"Eritrea",
"Espanja",
"Etelä-Afrikka",
"Korean tasavalta",
"Etelä-Sudan",
"Etiopia",
"Fidži",
"Filippiinit",
"Gabon",
"Gambia",
"Georgia",
"Ghana",
"Grenada",
"Guatemala",
"Guinea-Bissau",
"Guinea",
"Guyana",
"Haiti",
"Honduras",
"Indonesia",
"Intia",
"Irak",
"Iran",
"Irlanti",
"Islanti",
"Israel",
"Italia",
"Itä-Timor",
"Itävalta",
"Jamaika",
"Japani",
"Jemen",
"Jordania",
"Kambodža",
"Kamerun",
"Kanada",
"Kap",
"Verde",
"Kazakstan",
"Kenia",
"Keski-Afrikan tasavalta",
"Kiina",
"Kirgisia",
"Kiribati",
"Kolumbia",
"Komorit",
"Kongon demokraattinen tasavalta",
"Kongon tasavalta",
"Kosovo",
"Kreikka",
"Kroatia",
"Kuuba",
"Kuwait",
"Kypros",
"Laos",
"Latvia",
"Lesotho",
"Libanon",
"Liberia",
"Libya",
"Liechtenstein",
"Liettua",
"Luxemburg",
"Madagaskar",
"Malawi",
"Malediivit",
"Malesia",
"Mali",
"Malta",
"Marokko",
"Marshallinsaaret",
"Mauritania",
"Mauritius",
"Meksiko",
"Mikronesia",
"Moldova",
"Monaco",
"Mongolia",
"Montenegro",
"Mosambik",
"Myanmar",
"Namibia",
"Nauru",
"Nepal",
"Nicaragua",
"Nigeria",
"Niger",
"Norja",
"Norsunluurannikko",
"Oman",
"Pakistan",
"Palau",
"Panama",
"Papua-Uusi-Guinea",
"Paraguay",
"Peru",
"Pohjois-Makedonia",
"Korean demokraattinen kansantasavalta",
"Portugali",
"Puola",
"Päiväntasaajan Guinea",
"Qatar",
"Ranska",
"Romania",
"Ruanda",
"Ruotsi",
"Saint Kitts ja Nevis",
"Saint Lucia",
"Saint Vincent ja Grenadiinit",
"Saksa",
"Salomonsaaret",
"Sambia",
"Samoa",
"San Marino",
"São Tomé ja Príncipe",
"Saudi-Arabia",
"Senegal",
"Serbia",
"Seychellit",
"Sierra",
"Leone",
"Singapore",
"Slovakia",
"Slovenia",
"Somalia",
"Sri",
"Lanka",
"Sudan",
"Suomi",
"Suriname",
"Swazimaa",
"Sveitsi",
"Syyria",
"Tadžikistan",
"Tansania",
"Tanska",
"Thaimaa",
"Togo",
"Tonga",
"Trinidad ja Tobago",
"Tšad",
"Tšekki",
"Tunisia",
"Turkki",
"Turkmenistan",
"Tuvalu",
"Uganda",
"Ukraina",
"Unkari",
"Uruguay",
"Uusi-Seelanti",
"Uzbekistan",
"Valko-Venäjä",
"Vanuatu",
"Vatikaanivaltio",
"Venezuela",
"Venäjä",
"Vietnam",
"Viro",
"Yhdistyneet arabiemiirikunnat",
"Yhdistynyt kuningaskunta",
"Yhdysvallat",
"Zimbabwe",
)
# Data from Finnish legislation:
# https://www.finlex.fi/fi/laki/alkup/2019/20190978
states = (
"Ahvenanmaa",
"Etelä-Karjala",
"Etelä-Pohjanmaa",
"Etelä-Savo",
"Kainuu",
"Kanta-Häme",
"Keski-Pohjanmaa",
"Keski-Suomi",
"Kymenlaakso",
"Lappi",
"Pirkanmaa",
"Pohjanmaa",
"Pohjois-Karjala",
"Pohjois-Pohjanmaa",
"Pohjois-Savo",
"Päijät-Häme",
"Satakunta",
"Uusimaa",
"Varsinais-Suomi",
)
street_suffixes = ("tie", "katu", "polku", "kuja", "bulevardi")
# Prefixes parsed from a street list of Helsinki:
# http://kartta.hel.fi/ws/geoserver/avoindata/wfs?outputFormat=application/json&REQUEST=GetFeature&typeNames=avoindata:Helsinki_osoiteluettelo
street_prefixes = (
"Adolf Lindforsin ",
"Agnes Sjöbergin ",
"Agnetan",
"Agricolan",
"Ahomäen",
"Ahvenkosken",
"Aidasmäen",
"Agroksen",
"Agronomin",
"Ahdekaunokin",
"Bertel Jungin ",
"Bertha Pauligin ",
"Betlehemin",
"Betoni",
"Biologin",
"Birger Kaipiaisen ",
"Bysantin",
"Böstaksen",
"Bengalin",
"Benktan",
"Bergan",
"Caloniuksen",
"Capellan puisto",
"Castrénin",
"Chydeniuksen",
"Cygnaeuksen",
"Dagmarin",
"Damaskuksen",
"Degermosan",
"Disan",
"Dosentin",
"Dunckerin",
"Döbelnin",
"Ehrensvärdin",
"Eino Leinon ",
"Elimäen",
"Elisabeth Kochin ",
"Eljaksen",
"Elon",
"Elon",
"Edelfeltin",
"Eduskunta",
"Eerik Pyhän ",
"Franzénin",
"Fredrikin",
"Freesen",
"Fabianin",
"Fagotti",
"Fahlanderin puisto",
"Fallin",
"Fallkullan",
"Fallpakan",
"Fastbölen",
"Gadolinin",
"Gneissi",
"Granfeltin",
"Gunillan",
"Gunnel Nymanin ",
"Graniitti",
"Gustav Pauligin ",
"Gyldénin",
"Gotlannin",
"Haapa",
"Haagan pappilan",
"Haahka",
"Haakoninlahden",
"Haaksi",
"Hankasuon",
"Hannukselan",
"Harakkamyllyn",
"Harava",
"Harbon",
"Ilmattaren",
"Ilomäen",
"Ilotulitus",
"Iltaruskon",
"Iltatähden",
"Ilves",
"Immolan",
"Ilkan",
"Ida Ekmanin ",
"Ies",
"Jälsi",
"Jämsän",
"Jänkä",
"Jänne",
"Järkäle",
"Jätkäsaaren",
"Jättiläisen",
"Jyvä",
"Jägerhornin",
"Jäkälä",
"Kukkaniityn",
"Kolsin",
"Kolu",
"Kolvi",
"Kuhankeittäjän",
"Katajaharjun",
"Kiitäjän",
"Kilpolan",
"Kimalais",
"Kimmon",
"Laajasalon",
"Laakavuoren",
"Lemun",
"Lentokapteenin ",
"Lepolan",
"Louhen",
"Louhikko",
"Lukkarimäen",
"Laurinniityn",
"Lautamiehen",
"Mamsellimyllyn",
"Mannerheimin",
"Maanmittarin",
"Maapadon",
"Maa",
"Maasalon",
"Maasälvän",
"Maatullin",
"Malminkartanon",
"Maneesi",
"Niittylän",
"Niemi",
"Niitynperän",
"Nikon",
"Nils Westermarckin ",
"Nordenskiöldin",
"Nelikko",
"Neon",
"Nervanderin",
"Neulapadon",
"Ostos",
"Orapihlaja",
"Oras",
"Orava",
"Osmon",
"Osuuskunnan",
"Orisaaren",
"Ormus",
"Orvokki",
"Oterman",
"Pore",
"Porin",
"Porkkalan",
"Pyörökiven",
"Puusepän",
"Puuska",
"Pohjolan",
"Poikasaarten",
"Purjetuulen",
"Puroniityn",
"Rukkilan",
"Ruko",
"Rukoushuoneen",
"Runebergin",
"Runoilijan",
"Runokylän",
"Runonlaulajan",
"Rantavaraston",
"Rapakiven",
"Rapolan",
"Santerlan",
"Saparon",
"Sapilas",
"Saramäen",
"Saanatunturin",
"Sade",
"Sahaajan",
"Salakka",
"Salama",
"Salava",
"Tuomarinkylän",
"Tuulilasin",
"Taavetti Laitisen ",
"Taavin",
"Tahti",
"Taimiston",
"Tukkisillan",
"Tuohikoivun",
"Tyynelän",
"Tyynylaavan",
"Uussillan",
"Urheilu",
"Urkurin",
"Urpu",
"Uskalikon",
"Usva",
"Uudenkaupungin",
"Uunilinnun",
"Uunisepän",
"Uurtajan",
"Vanha Raja",
"Veropellon",
"Veräjämäen",
"Vesakko",
"Vesalan",
"Vellikellon",
"Verkko",
"Verso",
"Vaakalinnun",
"Vaarna",
"Wavulinin",
"Walentin Chorellin ",
"Wallinin",
"Waseniuksen puisto",
"Wecksellin",
"Willebrandin",
"Winqvistin",
"Wäinö Aaltosen ",
"Werner Wirénin ",
"Yhteiskoulun",
"Ylipalon",
"Yllästunturin",
"Ylä-Fallin ",
"Yläkasken",
"Ylänkö",
"Ylätuvan",
"Yrjö-Koskisen ",
"Yrjön",
"Yrttimaan",
"Zaidan",
)
def street_prefix(self) -> str:
return self.random_element(self.street_prefixes)
def city_name(self) -> str:
return self.random_element(self.cities)
def administrative_unit(self) -> str:
return self.random_element(self.states)
state = administrative_unit

View File

@@ -0,0 +1,7 @@
from ..en_PH import Provider as EnPhAddressProvider
class Provider(EnPhAddressProvider):
"""No difference from Address Provider for en_PH locale"""
pass

View File

@@ -0,0 +1,81 @@
from typing import Any
from ..en_CA import Provider as EnCaProvider
class Provider(EnCaProvider):
# Most of the parts are identical to en_CA, we simply override those who are not shared between the two.
city_prefixes = (
"Ville",
"Baie",
"Saint-",
"Sainte-",
"Mont-",
"La",
"Lac-",
"L'",
"L'Île-",
)
city_suffixes = (
"Est",
"Ouest",
"-sur-Mer",
)
street_prefixes = (
"rue",
"rue",
"chemin",
"avenue",
"boulevard",
"route",
"rang",
"allé",
"montée",
)
provinces = (
"Alberta",
"Colombie-Britannique",
"Manitoba",
"Nouveau-Brunswick",
"Terre-Neuve-et-Labrador",
"Territoires du Nord-Ouest",
"Nouvelle-Écosse",
"Nunavut",
"Ontario",
"Île-du-Prince-Édouard",
"Québec",
"Saskatchewan",
"Yukon",
)
street_name_formats = (
"{{street_prefix}} {{first_name}}",
"{{street_prefix}} {{last_name}}",
)
city_formats = (
"{{city_prefix}} {{last_name}}",
"{{city_prefix}} {{last_name}}",
"{{city_prefix}}-{{city_prefix}}-{{last_name}}",
"{{city_prefix}} {{first_name}} {{city_suffix}}",
"{{city_prefix}} {{first_name}}",
"{{city_prefix}} {{first_name}}",
"{{city_prefix}} {{first_name}}",
"{{last_name}}",
"{{last_name}}",
"{{first_name}} {{city_suffix}}",
"{{last_name}} {{city_suffix}}",
)
def __init__(self, *args: Any, **kwargs: Any) -> None:
super().__init__(*args, **kwargs)
def street_prefix(self) -> str:
"""
:example: 'rue'
"""
return self.random_element(self.street_prefixes)

View File

@@ -0,0 +1,367 @@
from typing import Tuple
from .. import Provider as AddressProvider
class Provider(AddressProvider):
city_suffixes = (
"-des-Bois",
"-les-Bains",
"-la-Ville",
"-Dessus",
"-Dessous",
" am Rhein",
" am See",
" am Albis",
" an der Aare",
)
city_prefixes = ("Saint ", "Sainte ", "San ", "Ober", "Unter")
street_prefixes = ("rue", "rue", "chemin", "avenue", "boulevard")
address_formats = ("{{street_address}}\n{{postcode}} {{city}}",)
building_number_formats = ("%", "%#", "%#", "%#", "%##")
city_formats = (
"{{last_name}}",
"{{last_name}}",
"{{last_name}}",
"{{last_name}}",
"{{last_name}}{{city_suffix}}",
"{{last_name}}{{city_suffix}}",
"{{last_name}}{{city_suffix}}",
"{{last_name}}-près-{{last_name}}",
"{{last_name}}-sur-{{last_name}}",
"{{city_prefix}}{{last_name}}",
"{{last_name}} ({{canton_code}})",
)
street_address_formats = (
"{{street_name}}",
"{{street_name}} {{building_number}}",
"{{street_name}} {{building_number}}",
"{{street_name}} {{building_number}}",
"{{street_name}} {{building_number}}",
"{{street_name}} {{building_number}}",
)
street_name_formats = (
"{{street_prefix}} {{last_name}}",
"{{street_prefix}} {{first_name}} {{last_name}}",
"{{street_prefix}} de {{last_name}}",
)
postcode_formats = (
"1###",
"2###",
"3###",
"4###",
"5###",
"6###",
"7###",
"8###",
"9###",
)
cantons = (
("AG", "Argovie"),
("AI", "Appenzell Rhodes-Intérieures"),
("AR", "Appenzell Rhodes-Extérieures"),
("BE", "Berne"),
("BL", "Bâle-Campagne"),
("BS", "Bâle-Ville"),
("FR", "Fribourg"),
("GE", "Genève"),
("GL", "Glaris"),
("GR", "Grisons"),
("JU", "Jura"),
("LU", "Lucerne"),
("NE", "Neuchâtel"),
("NW", "Nidwald"),
("OW", "Obwald"),
("SG", "Saint-Gall"),
("SH", "Schaffhouse"),
("SO", "Soleure"),
("SZ", "Schwytz"),
("TG", "Thurgovie"),
("TI", "Tessin"),
("UR", "Uri"),
("VD", "Vaud"),
("VS", "Valais"),
("ZG", "Zoug"),
("ZH", "Zurich"),
)
countries = (
"Afghanistan",
"Afrique du sud",
"Albanie",
"Algérie",
"Allemagne",
"Andorre",
"Angola",
"Anguilla",
"Antarctique",
"Antigua et Barbuda",
"Antilles néerlandaises",
"Arabie saoudite",
"Argentine",
"Arménie",
"Aruba",
"Australie",
"Autriche",
"Azerbaïdjan",
"Bahamas",
"Bahrain",
"Bangladesh",
"Belgique",
"Belize",
"Benin",
"Bermudes (Les)",
"Bhoutan",
"Biélorussie",
"Bolivie",
"Bosnie-Herzégovine",
"Botswana",
"Bouvet (Îles)",
"Brunei",
"Brésil",
"Bulgarie",
"Burkina Faso",
"Burundi",
"Cambodge",
"Cameroun",
"Canada",
"Cap Vert",
"Cayman (Îles)",
"Chili",
"Chine (Rép. pop.)",
"Christmas (Île)",
"Chypre",
"Cocos (Îles)",
"Colombie",
"Comores",
"Cook (Îles)",
"Corée du Nord",
"Corée, Sud",
"Costa Rica",
"Croatie",
"Cuba",
"Côte d'Ivoire",
"Danemark",
"Djibouti",
"Dominique",
"Égypte",
"El Salvador",
"Émirats arabes unis",
"Équateur",
"Érythrée",
"Espagne",
"Estonie",
"États-Unis",
"Ethiopie",
"Falkland (Île)",
"Fidji (République des)",
"Finlande",
"France",
"Féroé (Îles)",
"Gabon",
"Gambie",
"Ghana",
"Gibraltar",
"Grenade",
"Groenland",
"Grèce",
"Guadeloupe",
"Guam",
"Guatemala",
"Guinée",
"Guinée Equatoriale",
"Guinée-Bissau",
"Guyane",
"Guyane française",
"Géorgie",
"Géorgie du Sud et Sandwich du Sud (Îles)",
"Haïti",
"Heard et McDonald (Îles)",
"Honduras",
"Hong Kong",
"Hongrie",
"Îles Mineures Éloignées des États-Unis",
"Inde",
"Indonésie",
"Irak",
"Iran",
"Irlande",
"Islande",
"Israël",
"Italie",
"Jamaïque",
"Japon",
"Jordanie",
"Kazakhstan",
"Kenya",
"Kirghizistan",
"Kiribati",
"Koweit",
"La Barbad",
"Laos",
"Lesotho",
"Lettonie",
"Liban",
"Libye",
"Libéria",
"Liechtenstein",
"Lithuanie",
"Luxembourg",
"Macau",
"Macédoine du Nord",
"Madagascar",
"Malaisie",
"Malawi",
"Maldives (Îles)",
"Mali",
"Malte",
"Mariannes du Nord (Îles)",
"Maroc",
"Marshall (Îles)",
"Martinique",
"Maurice",
"Mauritanie",
"Mayotte",
"Mexique",
"Micronésie (États fédérés de)",
"Moldavie",
"Monaco",
"Mongolie",
"Montserrat",
"Mozambique",
"Myanmar",
"Namibie",
"Nauru",
"Nepal",
"Nicaragua",
"Niger",
"Nigeria",
"Niue",
"Norfolk (Îles)",
"Norvège",
"Nouvelle Calédonie",
"Nouvelle-Zélande",
"Oman",
"Ouganda",
"Ouzbékistan",
"Pakistan",
"Palau",
"Panama",
"Papouasie-Nouvelle-Guinée",
"Paraguay",
"Pays-Bas",
"Philippines",
"Pitcairn (Îles)",
"Pologne",
"Polynésie française",
"Porto Rico",
"Portugal",
"Pérou",
"Qatar",
"Roumanie",
"Royaume-Uni",
"Russie",
"Rwanda",
"Rép. Dém. du Congo",
"République centrafricaine",
"République Dominicaine",
"République tchèque",
"Réunion (La)",
"Sahara Occidental",
"Saint Pierre et Miquelon",
"Saint Vincent et les Grenadines",
"Saint-Kitts et Nevis",
"Saint-Marin (Rép. de)",
"Sainte Hélène",
"Sainte Lucie",
"Samoa",
"Samoa",
"Seychelles",
"Sierra Leone",
"Singapour",
"Slovaquie",
"Slovénie",
"Somalie",
"Soudan",
"Sri Lanka",
"Suisse",
"Suriname",
"Suède",
"Svalbard et Jan Mayen (Îles)",
"Swaziland",
"Syrie",
"São Tomé et Príncipe (Rép.)",
"Sénégal",
"Tadjikistan",
"Taiwan",
"Tanzanie",
"Tchad",
"Territoire britannique de l'océan Indien",
"Territoires français du sud",
"Thailande",
"Timor",
"Togo",
"Tokelau",
"Tonga",
"Trinité et Tobago",
"Tunisie",
"Turkménistan",
"Turks et Caïques (Îles)",
"Turquie",
"Tuvalu",
"Ukraine",
"Uruguay",
"Vanuatu",
"Vatican (Etat du)",
"Venezuela",
"Vierges (Îles)",
"Vierges britanniques (Îles)",
"Vietnam",
"Wallis et Futuna (Îles)",
"Yemen",
"Yougoslavie",
"Zambie",
"Zaïre",
"Zimbabwe",
)
def street_prefix(self) -> str:
"""
:example: 'rue'
"""
return self.random_element(self.street_prefixes)
def city_prefix(self) -> str:
"""
:example: 'rue'
"""
return self.random_element(self.city_prefixes)
def canton(self) -> Tuple[str, str]:
"""
Randomly returns a swiss canton ('Abbreviated' , 'Name').
:example: ('VD' . 'Vaud')
"""
return self.random_element(self.cantons)
def administrative_unit(self) -> str:
"""
Randomly returns a Swiss canton name.
:example: 'Vaud'
"""
return self.canton()[1]
canton_name = administrative_unit
def canton_code(self) -> str:
"""
Randomly returns a Swiss canton code.
:example: 'VD'
"""
return self.canton()[0]

View File

@@ -0,0 +1,355 @@
from typing import Tuple
from .. import Provider as AddressProvider
class Provider(AddressProvider):
"""Address provider for fr_DZ locale."""
# Source: https://fr.wikipedia.org/wiki/Wilayas_d%27Alg%C3%A9rie
wilayas: Tuple[str, ...] = (
"Adrar",
"Chlef",
"Laghouat",
"Oum El Bouaghi",
"Batna",
"Béjaïa",
"Biskra",
"Béchar",
"Blida",
"Bouira",
"Tamanrasset",
"Tébessa",
"Tlemcen",
"Tiaret",
"Tizi Ouzou",
"Alger",
"Djelfa",
"Jijel",
"Sétif",
"Saïda",
"Skikda",
"Sidi Bel Abbès",
"Annaba",
"Guelma",
"Constantine",
"Médéa",
"Mostaganem",
"M'Sila",
"Mascara",
"Ouargla",
"Oran",
"El Bayadh",
"Illizi",
"Bordj Bou Arreridj",
"Boumerdès",
"El Tarf",
"Tindouf",
"Tissemsilt",
"El Oued",
"Khenchela",
"Souk Ahras",
"Tipaza",
"Mila",
"Aïn Defla",
"Naâma",
"Aïn Témouchent",
"Ghardaïa",
"Relizane",
"Timimoun",
"Bordj Badji Mokhtar",
"Ouled Djellal",
"Béni Abbès",
"In Salah",
"In Guezzam",
"Touggourt",
"Djanet",
"El Meghaier",
"El Menia",
)
# Source: https://github.com/othmanus/algeria-cities
cities: Tuple[str, ...] = (
# Wilaya 01 - Adrar
"Adrar",
"Reggane",
"Aoulef",
"Timimoun",
# Wilaya 02 - Chlef
"Chlef",
"Ténès",
"Boukadir",
# Wilaya 03 - Laghouat
"Laghouat",
"Aflou",
"Aïn Madhi",
# Wilaya 04 - Oum El Bouaghi
"Oum El Bouaghi",
"Aïn Mlila",
"Aïn Beïda",
# Wilaya 05 - Batna
"Batna",
"Barika",
"Aïn Touta",
"Arris",
"N'Gaous",
# Wilaya 06 - Béjaïa
"Béjaïa",
"Akbou",
"Kherrata",
"Taklast",
"Amizour",
# Wilaya 07 - Biskra
"Biskra",
"Tolga",
"Sidi Okba",
"Zéribet El Oued",
# Wilaya 08 - Béchar
"Béchar",
"Taghit",
"Kenadsa",
# Wilaya 09 - Blida
"Blida",
"Boufarik",
"Larbaa",
"Bouinan",
# Wilaya 10 - Bouira
"Bouira",
"Sour El Ghozlane",
"Aïn Bessem",
# Wilaya 11 - Tamanrasset
"Tamanrasset",
"Ablessa",
# Wilaya 12 - Tébessa
"Tébessa",
"Bir El Ater",
"El Aouinet",
# Wilaya 13 - Tlemcen
"Tlemcen",
"Maghnia",
"Ghazaouet",
"Nedroma",
"Marsa Ben M'Hidi",
# Wilaya 14 - Tiaret
"Tiaret",
"Sougueur",
"Frenda",
"Takhmaret",
# Wilaya 15 - Tizi Ouzou
"Tizi Ouzou",
"Draa Ben Khedda",
"Azeffoun",
"Boughni",
"Tigzirt",
# Wilaya 16 - Alger
"Alger Centre",
"Bab El Oued",
"La Casbah",
"Sidi M'Hamed",
"Hussein Dey",
"El Harrach",
"Rouiba",
"Zéralda",
"Bir Mourad Raïs",
"Bouzaréah",
"Chéraga",
"Draria",
"Bab Ezzouar",
"Bordj El Kiffan",
"Dar El Beïda",
"Aïn Taya",
# Wilaya 17 - Djelfa
"Djelfa",
"Messaad",
"Aïn Oussera",
"Hassi Bahbah",
# Wilaya 18 - Jijel
"Jijel",
"El Milia",
"Taher",
"Ziama Mansouriah",
# Wilaya 19 - Sétif
"Sétif",
"El Eulma",
"Djemila",
"Aïn Arnat",
"Bougaa",
# Wilaya 20 - Saïda
"Saïda",
"Aïn El Hadjar",
# Wilaya 21 - Skikda
"Skikda",
"Azzaba",
"El Harrouch",
"Collo",
# Wilaya 22 - Sidi Bel Abbès
"Sidi Bel Abbès",
"Aïn El Berd",
"Marhoum",
"Tlemnia",
# Wilaya 23 - Annaba
"Annaba",
"El Bouni",
"Aïn Berda",
"Sidi Amar",
# Wilaya 24 - Guelma
"Guelma",
"Bouchegouf",
"Hammam Debagh",
# Wilaya 25 - Constantine
"Constantine",
"El Khroub",
"Didouche Mourad",
"Zighoud Youcef",
"Aïn Abid",
# Wilaya 26 - Médéa
"Médéa",
"Ksar El Boukhari",
"Berrouaghia",
"Boughzoul",
# Wilaya 27 - Mostaganem
"Mostaganem",
"Sidi Ali",
"Aïn Tédeles",
"Mazagran",
# Wilaya 28 - M'Sila
"M'Sila",
"Bou Saâda",
"Sidi Aïssa",
"Aïn El Melh",
# Wilaya 29 - Mascara
"Mascara",
"Tighennif",
"Bouhanifia",
"Sig",
# Wilaya 30 - Ouargla
"Ouargla",
"Hassi Messaoud",
"Aïn El Beïda",
# Wilaya 31 - Oran
"Oran",
"Arzew",
"Aïn El Turk",
"Bir El Djir",
"Mers El Hadjadj",
"Es Sénia",
# Wilaya 32 - El Bayadh
"El Bayadh",
"Brezina",
# Wilaya 33 - Illizi
"Illizi",
"In Amenas",
# Wilaya 34 - Bordj Bou Arreridj
"Bordj Bou Arreridj",
"Ras El Oued",
"Aïn Taghrout",
# Wilaya 35 - Boumerdès
"Boumerdès",
"Khemis El Khechna",
"Bordj Menaïel",
"Dellys",
# Wilaya 36 - El Tarf
"El Tarf",
"El Kala",
"Ben M'Hidi",
# Wilaya 37 - Tindouf
"Tindouf",
# Wilaya 38 - Tissemsilt
"Tissemsilt",
"Khemisti",
# Wilaya 39 - El Oued
"El Oued",
"Guemar",
"Hassi Khalifa",
"Reguiba",
# Wilaya 40 - Khenchela
"Khenchela",
"Babar",
# Wilaya 41 - Souk Ahras
"Souk Ahras",
"Mdaourouch",
"Sedrata",
# Wilaya 42 - Tipaza
"Tipaza",
"Cherchell",
"Bou Ismaïl",
"Koléa",
# Wilaya 43 - Mila
"Mila",
"Ferdjioua",
"Chelghoum Laïd",
# Wilaya 44 - Aïn Defla
"Aïn Defla",
"Khemis Miliana",
"El Attaf",
"Miliana",
# Wilaya 45 - Naâma
"Naâma",
"Mecheria",
"Aïn Sefra",
# Wilaya 46 - Aïn Témouchent
"Aïn Témouchent",
"Béni Saf",
"Hammam Bou Hadjar",
# Wilaya 47 - Ghardaïa
"Ghardaïa",
"Guerrara",
"Metlili",
"El Atteuf",
# Wilaya 48 - Relizane
"Relizane",
"Mazouna",
"Oued Rhiou",
# New wilayas
"Timimoun",
"Bordj Badji Mokhtar",
"Ouled Djellal",
"Béni Abbès",
"In Salah",
"In Guezzam",
"Touggourt",
"Djanet",
"El Meghaier",
"El Menia",
)
street_prefixes: Tuple[str, ...] = (
"rue",
"avenue",
"boulevard",
"chemin",
)
building_number_formats: Tuple[str, ...] = ("%", "%#", "%#", "%##")
postcode_formats: Tuple[str, ...] = tuple(f"{i:02d}###" for i in range(1, 49))
street_name_formats: Tuple[str, ...] = (
"{{street_prefix}} {{last_name}}",
"{{street_prefix}} {{first_name}} {{last_name}}",
"{{street_prefix}} de {{last_name}}",
)
street_address_formats: Tuple[str, ...] = (
"{{building_number}} {{street_name}}",
"{{building_number}}, {{street_name}}",
)
address_formats: Tuple[str, ...] = (
"{{street_address}} {{city}}",
"{{street_address}} - {{city}}",
"{{street_address}} {{city}}, {{administrative_unit}}",
"{{street_address}}, {{city}}, {{administrative_unit}}",
"{{street_address}} {{city}} - {{administrative_unit}}",
)
def street_prefix(self) -> str:
return self.random_element(self.street_prefixes)
def city(self) -> str:
return self.random_element(self.cities)
def administrative_unit(self) -> str:
return self.random_element(self.wilayas)
wilaya = administrative_unit

View File

@@ -0,0 +1,478 @@
from typing import Tuple
from .. import Provider as AddressProvider
class Provider(AddressProvider):
city_suffixes = (
"Ville",
"Bourg",
"-les-Bains",
"-sur-Mer",
"-la-Forêt",
"boeuf",
"nec",
"dan",
)
city_prefixes = ("Saint", "Sainte")
street_prefixes = ("rue", "rue", "chemin", "avenue", "boulevard")
city_formats = (
"{{city_prefix}} {{first_name}}",
"{{city_prefix}} {{first_name}}{{city_suffix}}",
"{{last_name}}",
"{{last_name}}",
"{{last_name}}",
"{{last_name}}",
"{{last_name}}{{city_suffix}}",
"{{last_name}}{{city_suffix}}",
"{{last_name}}{{city_suffix}}",
"{{last_name}}-sur-{{last_name}}",
)
street_name_formats = (
"{{street_prefix}} {{last_name}}",
"{{street_prefix}} {{first_name}} {{last_name}}",
"{{street_prefix}} de {{last_name}}",
)
street_address_formats = (
"{{street_name}}",
"{{building_number}}, {{street_name}}",
"{{building_number}}, {{street_name}}",
"{{building_number}}, {{street_name}}",
"{{building_number}}, {{street_name}}",
"{{building_number}}, {{street_name}}",
)
address_formats = ("{{street_address}}\n{{postcode}} {{city}}",)
building_number_formats = ("%", "%#", "%#", "%#", "%##")
countries = (
"Afghanistan",
"Afrique du sud",
"Albanie",
"Algérie",
"Allemagne",
"Andorre",
"Angola",
"Anguilla",
"Antarctique",
"Antigua et Barbuda",
"Antilles néerlandaises",
"Arabie saoudite",
"Argentine",
"Arménie",
"Aruba",
"Australie",
"Autriche",
"Azerbaïdjan",
"Bahamas",
"Bahrain",
"Bangladesh",
"Belgique",
"Belize",
"Benin",
"Bermudes (Les)",
"Bhoutan",
"Biélorussie",
"Bolivie",
"Bosnie-Herzégovine",
"Botswana",
"Bouvet (Îles)",
"Brunei",
"Brésil",
"Bulgarie",
"Burkina Faso",
"Burundi",
"Cambodge",
"Cameroun",
"Canada",
"Cap Vert",
"Cayman (Îles)",
"Chili",
"Chine (Rép. pop.)",
"Christmas (Île)",
"Chypre",
"Cocos (Îles)",
"Colombie",
"Comores",
"Cook (Îles)",
"Corée du Nord",
"Corée, Sud",
"Costa Rica",
"Croatie",
"Cuba",
"Côte d'Ivoire",
"Danemark",
"Djibouti",
"Dominique",
"Égypte",
"El Salvador",
"Émirats arabes unis",
"Équateur",
"Érythrée",
"Espagne",
"Estonie",
"États-Unis",
"Ethiopie",
"Falkland (Île)",
"Fidji (République des)",
"Finlande",
"France",
"Féroé (Îles)",
"Gabon",
"Gambie",
"Ghana",
"Gibraltar",
"Grenade",
"Groenland",
"Grèce",
"Guadeloupe",
"Guam",
"Guatemala",
"Guinée",
"Guinée Equatoriale",
"Guinée-Bissau",
"Guyane",
"Guyane française",
"Géorgie",
"Géorgie du Sud et Sandwich du Sud (Îles)",
"Haïti",
"Heard et McDonald (Îles)",
"Honduras",
"Hong Kong",
"Hongrie",
"Îles Mineures Éloignées des États-Unis",
"Inde",
"Indonésie",
"Irak",
"Iran",
"Irlande",
"Islande",
"Israël",
"Italie",
"Jamaïque",
"Japon",
"Jordanie",
"Kazakhstan",
"Kenya",
"Kirghizistan",
"Kiribati",
"Koweit",
"La Barbad",
"Laos",
"Lesotho",
"Lettonie",
"Liban",
"Libye",
"Libéria",
"Liechtenstein",
"Lithuanie",
"Luxembourg",
"Macau",
"Macédoine du Nord",
"Madagascar",
"Malaisie",
"Malawi",
"Maldives (Îles)",
"Mali",
"Malte",
"Mariannes du Nord (Îles)",
"Maroc",
"Marshall (Îles)",
"Martinique",
"Maurice",
"Mauritanie",
"Mayotte",
"Mexique",
"Micronésie (États fédérés de)",
"Moldavie",
"Monaco",
"Mongolie",
"Montserrat",
"Mozambique",
"Myanmar",
"Namibie",
"Nauru",
"Nepal",
"Nicaragua",
"Niger",
"Nigeria",
"Niue",
"Norfolk (Îles)",
"Norvège",
"Nouvelle Calédonie",
"Nouvelle-Zélande",
"Oman",
"Ouganda",
"Ouzbékistan",
"Pakistan",
"Palau",
"Panama",
"Papouasie-Nouvelle-Guinée",
"Paraguay",
"Pays-Bas",
"Philippines",
"Pitcairn (Îles)",
"Pologne",
"Polynésie française",
"Porto Rico",
"Portugal",
"Pérou",
"Qatar",
"Roumanie",
"Royaume-Uni",
"Russie",
"Rwanda",
"Rép. Dém. du Congo",
"République centrafricaine",
"République Dominicaine",
"République tchèque",
"Réunion (La)",
"Sahara Occidental",
"Saint Pierre et Miquelon",
"Saint Vincent et les Grenadines",
"Saint-Kitts et Nevis",
"Saint-Marin (Rép. de)",
"Sainte Hélène",
"Sainte Lucie",
"Samoa",
"Samoa",
"Seychelles",
"Sierra Leone",
"Singapour",
"Slovaquie",
"Slovénie",
"Somalie",
"Soudan",
"Sri Lanka",
"Suisse",
"Suriname",
"Suède",
"Svalbard et Jan Mayen (Îles)",
"Swaziland",
"Syrie",
"São Tomé et Príncipe (Rép.)",
"Sénégal",
"Tadjikistan",
"Taiwan",
"Tanzanie",
"Tchad",
"Territoire britannique de l'océan Indien",
"Territoires français du sud",
"Thailande",
"Timor",
"Togo",
"Tokelau",
"Tonga",
"Trinité et Tobago",
"Tunisie",
"Turkménistan",
"Turks et Caïques (Îles)",
"Turquie",
"Tuvalu",
"Ukraine",
"Uruguay",
"Vanuatu",
"Vatican (Etat du)",
"Venezuela",
"Vierges (Îles)",
"Vierges britanniques (Îles)",
"Vietnam",
"Wallis et Futuna (Îles)",
"Yemen",
"Yougoslavie",
"Zambie",
"Zaïre",
"Zimbabwe",
)
regions = (
"Alsace",
"Aquitaine",
"Auvergne",
"Bourgogne",
"Bretagne",
"Centre",
"Champagne-Ardenne",
"Corse",
"Franche-Comté",
"Île-de-France",
"Languedoc-Roussillon",
"Limousin",
"Lorraine",
"Midi-Pyrénées",
"Nord-Pas-de-Calais",
"Basse-Normandie",
"Haute-Normandie",
"Pays-de-Loire",
"Picardie",
"Poitou-Charentes",
"Province-Alpes-Côte d'Azur",
"Rhone-Alpes",
"Guadeloupe",
"Martinique",
"Guyane",
"Réunion",
"Saint-Pierre-et-Miquelon",
"Mayotte",
"Saint-Barthélémy",
"Saint-Martin",
"Wallis-et-Futuna",
"Polynésie française",
"Nouvelle-Calédonie",
)
departments = (
("01", "Ain"),
("02", "Aisne"),
("03", "Allier"),
("04", "Alpes-de-Haute-Provence"),
("05", "Hautes-Alpes"),
("06", "Alpes-Maritimes"),
("07", "Ardèche"),
("08", "Ardennes"),
("09", "Ariège"),
("10", "Aube"),
("11", "Aude"),
("12", "Aveyron"),
("13", "Bouches-du-Rhône"),
("14", "Calvados"),
("15", "Cantal"),
("16", "Charente"),
("17", "Charente-Maritime"),
("18", "Cher"),
("19", "Corrèze"),
("2A", "Corse-du-Sud"),
("2B", "Haute-Corse"),
("21", "Côte-d'Or"),
("22", "Côtes-d'Armor"),
("23", "Creuse"),
("24", "Dordogne"),
("25", "Doubs"),
("26", "Drôme"),
("27", "Eure"),
("28", "Eure-et-Loir"),
("29", "Finistère"),
("30", "Gard"),
("31", "Haute-Garonne"),
("32", "Gers"),
("33", "Gironde"),
("34", "Hérault"),
("35", "Ille-et-Vilaine"),
("36", "Indre"),
("37", "Indre-et-Loire"),
("38", "Isère"),
("39", "Jura"),
("40", "Landes"),
("41", "Loir-et-Cher"),
("42", "Loire"),
("43", "Haute-Loire"),
("44", "Loire-Atlantique"),
("45", "Loiret"),
("46", "Lot"),
("47", "Lot-et-Garonne"),
("48", "Lozère"),
("49", "Maine-et-Loire"),
("50", "Manche"),
("51", "Marne"),
("52", "Haute-Marne"),
("53", "Mayenne"),
("54", "Meurthe-et-Moselle"),
("55", "Meuse"),
("56", "Morbihan"),
("57", "Moselle"),
("58", "Nièvre"),
("59", "Nord"),
("60", "Oise"),
("61", "Orne"),
("62", "Pas-de-Calais"),
("63", "Puy-de-Dôme"),
("64", "Pyrénées-Atlantiques"),
("65", "Hautes-Pyrénées"),
("66", "Pyrénées-Orientales"),
("67", "Bas-Rhin"),
("68", "Haut-Rhin"),
("69", "Rhône"),
("70", "Haute-Saône"),
("71", "Saône-et-Loire"),
("72", "Sarthe"),
("73", "Savoie"),
("74", "Haute-Savoie"),
("75", "Paris"),
("76", "Seine-Maritime"),
("77", "Seine-et-Marne"),
("78", "Yvelines"),
("79", "Deux-Sèvres"),
("80", "Somme"),
("81", "Tarn"),
("82", "Tarn-et-Garonne"),
("83", "Var"),
("84", "Vaucluse"),
("85", "Vendée"),
("86", "Vienne"),
("87", "Haute-Vienne"),
("88", "Vosges"),
("89", "Yonne"),
("90", "Territoire de Belfort"),
("91", "Essonne"),
("92", "Hauts-de-Seine"),
("93", "Seine-Saint-Denis"),
("94", "Val-de-Marne"),
("95", "Val-d'Oise"),
("971", "Guadeloupe"),
("972", "Martinique"),
("973", "Guyane"),
("974", "La Réunion"),
("976", "Mayotte"),
)
def street_prefix(self) -> str:
"""
:example: 'rue'
"""
return self.random_element(self.street_prefixes)
def city_prefix(self) -> str:
"""
:example: 'rue'
"""
return self.random_element(self.city_prefixes)
def administrative_unit(self) -> str:
"""
:example: 'Guadeloupe'
"""
return self.random_element(self.regions)
region = administrative_unit
def department(self) -> Tuple[str, str]:
"""
Randomly returns a french department ('departmentNumber' , 'departmentName').
:example: ('2B' . 'Haute-Corse')
"""
return self.random_element(self.departments)
def department_name(self) -> str:
"""
Randomly returns a french department name.
:example: 'Ardèche'
"""
return self.department()[1]
def department_number(self) -> str:
"""
Randomly returns a french department number.
:example: '59'
"""
return self.department()[0]
def postcode(self) -> str:
"""
Randomly returns a postcode generated from existing french department number.
exemple: '33260'
"""
department = self.department_number()
if department in ["2A", "2B"]:
department = "20"
return f"{department}{self.random_number(digits=5 - len(department), fix_len=True)}"

Some files were not shown because too many files have changed in this diff Show More