From 003b94c81eab074fd644c52b61925c5c90327f53 Mon Sep 17 00:00:00 2001 From: Farouk Adams Date: Mon, 1 Dec 2025 23:12:56 +0000 Subject: [PATCH] feat(en_NG): Add phone number provider and balance names --- faker/cli.py | 8 +- faker/config.py | 4 +- faker/documentor.py | 4 +- faker/generator.py | 14 +- faker/providers/__init__.py | 40 +- faker/providers/address/__init__.py | 24 +- faker/providers/address/bn_BD/__init__.py | 8 +- faker/providers/address/el_GR/__init__.py | 4 +- faker/providers/address/en_CA/__init__.py | 18 +- faker/providers/address/en_IN/__init__.py | 12 +- faker/providers/address/en_MS/__init__.py | 8 +- faker/providers/address/en_PH/__init__.py | 49 +- faker/providers/address/es_AR/__init__.py | 8 +- faker/providers/address/es_CL/__init__.py | 8 +- faker/providers/address/es_CO/__init__.py | 29 +- faker/providers/address/it_IT/__init__.py | 3683 +++++++-- faker/providers/address/ne_NP/__init__.py | 4 +- faker/providers/address/no_NO/__init__.py | 4 +- faker/providers/address/pl_PL/__init__.py | 5 +- faker/providers/address/pt_BR/__init__.py | 4 +- faker/providers/address/ru_RU/__init__.py | 5 +- faker/providers/address/vi_VN/__init__.py | 3 +- faker/providers/address/zh_CN/__init__.py | 4 +- faker/providers/address/zh_TW/__init__.py | 4 +- faker/providers/automotive/__init__.py | 4 +- faker/providers/automotive/az_AZ/__init__.py | 4 +- faker/providers/automotive/bn_BD/__init__.py | 4 +- faker/providers/automotive/de_AT/__init__.py | 9 +- faker/providers/automotive/es_AR/__init__.py | 8 +- faker/providers/automotive/es_CL/__init__.py | 10 +- faker/providers/automotive/es_ES/__init__.py | 6 +- faker/providers/automotive/ja_JP/__init__.py | 4 +- faker/providers/automotive/nl_NL/__init__.py | 4 +- faker/providers/automotive/pl_PL/__init__.py | 5 +- faker/providers/automotive/uk_UA/__init__.py | 25 +- faker/providers/automotive/zh_CN/__init__.py | 6 +- faker/providers/bank/__init__.py | 12 +- faker/providers/bank/bn_BD/__init__.py | 15 +- faker/providers/bank/nl_BE/__init__.py | 4 +- faker/providers/bank/ru_RU/__init__.py | 12 +- faker/providers/barcode/en_US/__init__.py | 12 +- faker/providers/color/color.py | 12 +- faker/providers/color/de_CH/__init__.py | 3 +- faker/providers/company/__init__.py | 13 +- faker/providers/company/en_PH/__init__.py | 6 +- faker/providers/company/fil_PH/__init__.py | 4 +- faker/providers/company/fr_FR/__init__.py | 8 +- faker/providers/company/pt_BR/__init__.py | 4 +- faker/providers/company/ru_RU/__init__.py | 4 +- faker/providers/credit_card/fa_IR/__init__.py | 4 +- faker/providers/credit_card/uk_UA/__init__.py | 5 +- faker/providers/credit_card/zh_CN/__init__.py | 5 +- faker/providers/currency/__init__.py | 14 +- faker/providers/currency/az_AZ/__init__.py | 5 +- faker/providers/currency/cs_CZ/__init__.py | 5 +- faker/providers/currency/de_AT/__init__.py | 5 +- faker/providers/currency/de_CH/__init__.py | 13 +- faker/providers/currency/de_DE/__init__.py | 5 +- faker/providers/currency/el_GR/__init__.py | 5 +- faker/providers/currency/en_AU/__init__.py | 4 +- faker/providers/currency/en_CA/__init__.py | 4 +- faker/providers/currency/es_AR/__init__.py | 10 +- faker/providers/currency/es_CL/__init__.py | 4 +- faker/providers/currency/es_ES/__init__.py | 5 +- faker/providers/currency/fa_IR/__init__.py | 7 +- faker/providers/currency/fr_CA/__init__.py | 5 +- faker/providers/currency/fr_FR/__init__.py | 5 +- faker/providers/currency/it_IT/__init__.py | 5 +- faker/providers/currency/ng_NG/__init__.py | 6 +- faker/providers/currency/pl_PL/__init__.py | 5 +- faker/providers/currency/ro_RO/__init__.py | 5 +- faker/providers/currency/ru_RU/__init__.py | 3 +- faker/providers/currency/sk_SK/__init__.py | 5 +- faker/providers/currency/uk_UA/__init__.py | 5 +- faker/providers/currency/uz_UZ/__init__.py | 3 +- faker/providers/date_time/__init__.py | 126 +- faker/providers/date_time/th_TH/__init__.py | 5 +- faker/providers/file/__init__.py | 8 +- faker/providers/geo/__init__.py | 8 +- faker/providers/geo/bn_BD/__init__.py | 24 +- faker/providers/geo/cs_CZ/__init__.py | 16 +- faker/providers/geo/el_GR/__init__.py | 17 +- faker/providers/geo/sk_SK/__init__.py | 24 +- faker/providers/internet/__init__.py | 73 +- faker/providers/internet/az_AZ/__init__.py | 15 +- faker/providers/isbn/__init__.py | 8 +- faker/providers/isbn/isbn.py | 16 +- faker/providers/job/de_AT/__init__.py | 6860 ++++++++++++++--- faker/providers/lorem/__init__.py | 57 +- faker/providers/lorem/en_PH/__init__.py | 12 +- faker/providers/misc/__init__.py | 92 +- faker/providers/misc/en_PH/__init__.py | 4 +- faker/providers/passport/en_US/__init__.py | 15 +- faker/providers/passport/ru_RU/__init__.py | 4 +- faker/providers/person/__init__.py | 12 +- faker/providers/person/bn_BD/__init__.py | 14 +- faker/providers/person/cs_CZ/__init__.py | 12 +- faker/providers/person/en_NG/__init__.py | 87 + faker/providers/person/es_CL/__init__.py | 4 +- faker/providers/person/fr_BE/__init__.py | 10 +- faker/providers/person/is_IS/__init__.py | 9 +- faker/providers/person/ja_JP/__init__.py | 4 +- faker/providers/person/nl_BE/__init__.py | 10 +- faker/providers/person/pl_PL/__init__.py | 15 +- faker/providers/person/sk_SK/__init__.py | 12 +- faker/providers/person/uk_UA/__init__.py | 4 +- faker/providers/person/vi_VN/__init__.py | 13 +- faker/providers/person/zh_TW/__init__.py | 4 +- .../providers/phone_number/ar_AE/__init__.py | 4 +- .../providers/phone_number/ar_PS/__init__.py | 4 +- .../providers/phone_number/de_LU/__init__.py | 4 +- .../providers/phone_number/en_NG/__init__.py | 42 + .../providers/phone_number/en_NG/__init__.pyi | 0 .../providers/phone_number/en_PH/__init__.py | 16 +- .../providers/phone_number/es_ES/__init__.py | 3 +- faker/providers/profile/__init__.py | 10 +- faker/providers/python/__init__.py | 132 +- faker/providers/sbn/__init__.py | 4 +- faker/providers/sbn/sbn.py | 4 +- faker/providers/ssn/cs_CZ/__init__.py | 4 +- faker/providers/ssn/el_GR/__init__.py | 4 +- faker/providers/ssn/en_US/__init__.py | 8 +- faker/providers/ssn/es_ES/__init__.py | 4 +- faker/providers/ssn/es_MX/__init__.py | 15 +- faker/providers/ssn/et_EE/__init__.py | 4 +- faker/providers/ssn/fi_FI/__init__.py | 12 +- faker/providers/ssn/hu_HU/__init__.py | 4 +- faker/providers/ssn/it_IT/__init__.py | 17 +- faker/providers/ssn/lv_LV/__init__.py | 13 +- faker/providers/ssn/nl_BE/__init__.py | 8 +- faker/providers/ssn/no_NO/__init__.py | 8 +- faker/providers/ssn/sk_SK/__init__.py | 4 +- faker/providers/ssn/sv_SE/__init__.py | 4 +- faker/providers/ssn/th_TH/__init__.py | 4 +- faker/providers/ssn/uk_UA/__init__.py | 4 +- faker/providers/ssn/zh_CN/__init__.py | 6 +- faker/providers/ssn/zh_TW/__init__.py | 4 +- faker/providers/user_agent/__init__.py | 41 +- faker/proxy.py | 35 +- faker/proxy.pyi | 347 +- faker/sphinx/docstring.py | 30 +- faker/sphinx/documentor.py | 9 +- faker/typing.py | 11 +- faker/utils/checksums.py | 4 +- faker/utils/distribution.py | 4 +- faker/utils/loading.py | 4 +- faker/utils/text.py | 4 +- generate_stubs.py | 64 +- tests/providers/__init__.py | 10 +- tests/providers/test_address.py | 151 +- tests/providers/test_automotive.py | 66 +- tests/providers/test_bank.py | 5 +- tests/providers/test_barcode.py | 20 +- tests/providers/test_color.py | 46 +- tests/providers/test_company.py | 54 +- tests/providers/test_credit_card.py | 8 +- tests/providers/test_currency.py | 32 +- tests/providers/test_date_time.py | 226 +- tests/providers/test_enum.py | 8 +- tests/providers/test_file.py | 8 +- tests/providers/test_geo.py | 20 +- tests/providers/test_internet.py | 36 +- tests/providers/test_lorem.py | 119 +- tests/providers/test_misc.py | 13 +- tests/providers/test_person.py | 46 +- tests/providers/test_phone_number.py | 100 +- tests/providers/test_python.py | 103 +- tests/providers/test_ssn.py | 35 +- tests/providers/test_user_agent.py | 15 +- tests/sphinx/test_docstring.py | 27 +- tests/sphinx/test_validator.py | 12 +- tests/test_factory.py | 12 +- tests/test_generator.py | 12 +- tests/test_optional.py | 5 +- tests/test_proxy.py | 48 +- tests/test_unique.py | 12 +- tests/utils/test_utils.py | 4 +- 177 files changed, 11539 insertions(+), 2510 deletions(-) create mode 100644 faker/providers/phone_number/en_NG/__init__.py create mode 100644 faker/providers/phone_number/en_NG/__init__.pyi diff --git a/faker/cli.py b/faker/cli.py index 52badf1750..5310601b90 100644 --- a/faker/cli.py +++ b/faker/cli.py @@ -104,7 +104,9 @@ def print_doc( while True: try: - formatters = doc.get_formatters(with_args=True, with_defaults=True, excludes=unsupported) + formatters = doc.get_formatters( + with_args=True, with_defaults=True, excludes=unsupported + ) except exceptions.UnsupportedFeature as e: unsupported.append(e.name) else: @@ -171,7 +173,9 @@ def execute(self) -> None: formatter_class=formatter_class, ) - parser.add_argument("--version", action="version", version=f"%(prog)s {VERSION}") + parser.add_argument( + "--version", action="version", version=f"%(prog)s {VERSION}" + ) parser.add_argument( "-v", diff --git a/faker/config.py b/faker/config.py index e668c37b64..b30e0952b2 100644 --- a/faker/config.py +++ b/faker/config.py @@ -8,6 +8,8 @@ "faker.providers", ] -PROVIDERS = find_available_providers([import_module(path) for path in META_PROVIDERS_MODULES]) +PROVIDERS = find_available_providers( + [import_module(path) for path in META_PROVIDERS_MODULES] +) AVAILABLE_LOCALES = find_available_locales(PROVIDERS) diff --git a/faker/documentor.py b/faker/documentor.py index 0dbce60d83..2470fc88a8 100644 --- a/faker/documentor.py +++ b/faker/documentor.py @@ -117,7 +117,9 @@ def get_provider_formatters( continue formatters[signature] = example - self.max_name_len = max(self.max_name_len, *(len(part) for part in signature.split())) + self.max_name_len = max( + self.max_name_len, *(len(part) for part in signature.split()) + ) self.already_generated.append(name) return formatters diff --git a/faker/generator.py b/faker/generator.py index 5eda9648e2..3ff92f98e1 100644 --- a/faker/generator.py +++ b/faker/generator.py @@ -29,7 +29,9 @@ def __init__(self, **config: Dict) -> None: self.__config = dict(list(self.__config.items()) + list(config.items())) self.__random = random - def add_provider(self, provider: Union["BaseProvider", Type["BaseProvider"]]) -> None: + def add_provider( + self, provider: Union["BaseProvider", Type["BaseProvider"]] + ) -> None: if isinstance(provider, type): provider = provider(self) @@ -48,7 +50,11 @@ def add_provider(self, provider: Union["BaseProvider", Type["BaseProvider"]]) -> 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()] + lst = [ + p + for p in self.get_providers() + if hasattr(p, "__provider__") and p.__provider__ == name.lower() + ] return lst[0] except IndexError: return None @@ -104,7 +110,9 @@ def set_formatter(self, name: str, formatter: Callable) -> None: """ setattr(self, name, formatter) - def set_arguments(self, group: str, argument: str, value: Optional[Any] = None) -> None: + 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, diff --git a/faker/providers/__init__.py b/faker/providers/__init__.py index 037dc0b06b..e141b5184d 100644 --- a/faker/providers/__init__.py +++ b/faker/providers/__init__.py @@ -380,16 +380,22 @@ def random_number(self, digits: Optional[int] = None, fix_len: bool = False) -> 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) + 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.") + 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)) + 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``. @@ -473,10 +479,14 @@ def random_elements( ("d", 0.05), ]), unique=True """ - use_weighting = use_weighting if use_weighting is not None else self.__use_weighting__ + 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).") + raise ValueError( + "Use OrderedDict only to avoid dependency on PYTHONHASHSEED (See #363)." + ) fn = choices_distribution_unique if unique else choices_distribution @@ -484,7 +494,9 @@ def random_elements( 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.") + 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"): @@ -717,7 +729,9 @@ def __init__( generator = Generator() super().__init__(generator) if provider_name.startswith("__"): - raise ValueError("Provider name cannot start with __ as it would be ignored by Faker") + raise ValueError( + "Provider name cannot start with __ as it would be ignored by Faker" + ) self.provider_name = provider_name @@ -725,7 +739,9 @@ def __init__( if elements: self.elements = elements - setattr(self, provider_name, self.get_random_value) # Add a method for the provider_name value + 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.""" @@ -737,6 +753,10 @@ def get_random_value(self, use_weighting: bool = True) -> Any: :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") + 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] + return self.random_elements( + self.elements, length=1, use_weighting=use_weighting + )[0] diff --git a/faker/providers/address/__init__.py b/faker/providers/address/__init__.py index dd040bfe38..825f9e7c8b 100644 --- a/faker/providers/address/__init__.py +++ b/faker/providers/address/__init__.py @@ -12,13 +12,19 @@ class Provider(BaseProvider): 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] + 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] + 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: """ @@ -106,11 +112,17 @@ def current_country(self) -> str: """ current_country_code = self.current_country_code() current_country = [ - country.name for country in date_time.Provider.countries if country.alpha_2_code == current_country_code + 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}") + 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}") + raise ValueError( + f"No appropriate country for country code {current_country_code}" + ) diff --git a/faker/providers/address/bn_BD/__init__.py b/faker/providers/address/bn_BD/__init__.py index 0aa519156b..2c5354a792 100644 --- a/faker/providers/address/bn_BD/__init__.py +++ b/faker/providers/address/bn_BD/__init__.py @@ -507,7 +507,9 @@ def building_number(self) -> str: """ :example: '791' to '৭৯১' """ - return translate_to_bengali_digits(self.numerify(self.random_element(self.building_number_formats))) + return translate_to_bengali_digits( + self.numerify(self.random_element(self.building_number_formats)) + ) def city_prefix(self) -> str: """ @@ -526,7 +528,9 @@ 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))) + return translate_to_bengali_digits( + self.numerify(self.random_element(self.postcode_formats)) + ) def secondary_address(self) -> str: """ diff --git a/faker/providers/address/el_GR/__init__.py b/faker/providers/address/el_GR/__init__.py index d78742790d..57a5b7f481 100644 --- a/faker/providers/address/el_GR/__init__.py +++ b/faker/providers/address/el_GR/__init__.py @@ -52,7 +52,9 @@ def line_address(self) -> str: return self.generator.parse(pattern) def street_prefix(self) -> str: - return self.random_element(self.street_prefixes_short + self.street_prefixes_long) + return self.random_element( + self.street_prefixes_short + self.street_prefixes_long + ) def street_prefix_short(self) -> str: return self.random_element(self.street_prefixes_short) diff --git a/faker/providers/address/en_CA/__init__.py b/faker/providers/address/en_CA/__init__.py index db6592f57a..b0934b1554 100644 --- a/faker/providers/address/en_CA/__init__.py +++ b/faker/providers/address/en_CA/__init__.py @@ -34,7 +34,15 @@ class Provider(AddressProvider): "Y", ) - city_prefixes: ElementsType[str] = ("North", "East", "West", "South", "New", "Lake", "Port") + city_prefixes: ElementsType[str] = ( + "North", + "East", + "West", + "South", + "New", + "Lake", + "Port", + ) city_suffixes: ElementsType[str] = ( "town", @@ -352,7 +360,9 @@ class Provider(AddressProvider): "{{building_number}} {{street_name}}", "{{building_number}} {{street_name}} {{secondary_address}}", ) - address_formats = ("{{street_address}}\n{{city}}, {{province_abbr}} {{postalcode}}",) + address_formats = ( + "{{street_address}}\n{{city}}, {{province_abbr}} {{postalcode}}", + ) secondary_address_formats = ("Apt. ###", "Suite ###") def administrative_unit(self) -> str: @@ -403,7 +413,9 @@ def postcode_in_province(self, province_abbr: Optional[str] = None) -> str: 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]), + self.generator.random_element( + self.provinces_postcode_prefixes[province_abbr] + ), 1, ) return self._postcode_replace(postal_code_format) diff --git a/faker/providers/address/en_IN/__init__.py b/faker/providers/address/en_IN/__init__.py index c517e6c44f..f31bf3f190 100644 --- a/faker/providers/address/en_IN/__init__.py +++ b/faker/providers/address/en_IN/__init__.py @@ -514,7 +514,9 @@ def union_territory(self) -> str: return self.random_element(self.union_territories)[0] - def pincode_in_state(self, state_abbr: Optional[str] = None, include_union_territories: bool = False) -> int: + 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 @@ -550,10 +552,14 @@ def pincode_in_military(self) -> int: # Aliases - def zipcode_in_state(self, state_abbr: Optional[str] = None, include_union_territories: bool = False) -> int: + 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: + 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: diff --git a/faker/providers/address/en_MS/__init__.py b/faker/providers/address/en_MS/__init__.py index 0983ff6e5f..d919d75e5d 100644 --- a/faker/providers/address/en_MS/__init__.py +++ b/faker/providers/address/en_MS/__init__.py @@ -427,7 +427,9 @@ def building_prefix(self) -> 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}}",) + 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 @@ -443,7 +445,9 @@ def city_state(self) -> str: # 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),)) + address_formats = OrderedDict( + (("{{street_address}}, {{city}}, {{city_state}}", 100.0),) + ) def city_prefix(self) -> str: return self.random_element(self.city_prefixes) diff --git a/faker/providers/address/en_PH/__init__.py b/faker/providers/address/en_PH/__init__.py index 60484947c2..53c74c506c 100644 --- a/faker/providers/address/en_PH/__init__.py +++ b/faker/providers/address/en_PH/__init__.py @@ -51,15 +51,24 @@ class Provider(AddressProvider): """ metro_manila_postcodes = tuple(x for x in range(400, 1849)) - luzon_province_postcodes = tuple(x for x in range(1850, 5000)) + tuple(x for x in range(5100, 5600)) + luzon_province_postcodes = tuple(x for x in range(1850, 5000)) + tuple( + x for x in range(5100, 5600) + ) visayas_province_postcodes = ( - tuple(x for x in range(5000, 5100)) + tuple(x for x in range(5600, 5800)) + tuple(x for x in range(6000, 6900)) + tuple(x for x in range(5000, 5100)) + + tuple(x for x in range(5600, 5800)) + + tuple(x for x in range(6000, 6900)) ) mindanao_province_postcodes = ( - tuple(x for x in range(7000, 7600)) + tuple(x for x in range(8000, 8900)) + tuple(x for x in range(9000, 9900)) + tuple(x for x in range(7000, 7600)) + + tuple(x for x in range(8000, 8900)) + + tuple(x for x in range(9000, 9900)) ) postcodes = ( - metro_manila_postcodes + luzon_province_postcodes + visayas_province_postcodes + mindanao_province_postcodes + metro_manila_postcodes + + luzon_province_postcodes + + visayas_province_postcodes + + mindanao_province_postcodes ) metro_manila_lgus = ( "Caloocan", @@ -1621,11 +1630,21 @@ class Provider(AddressProvider): ) floor_numbers = OrderedDict( [(str(x), 0.08) for x in range(2, 5)] # Floors 2 to 4, 24% of the time - + [(str(x), 0.32356832089420257 / x) for x in range(5, 13)] # Floors 5 to 12, 33% of the time - + [(str(x), 0.30341265418486174 / (x - 1)) for x in range(14, 30)] # Floors 14 to 29, 25% of the time - + [(str(x), 0.30096338222652870 / (x - 1)) for x in range(30, 50)] # Floors 30 to 49, 16% of the time - + [(str(x), 0.04570476167856688 / (x - 1)) for x in range(50, 75)] # Floors 50 to 74, 1.9% of the time - + [(str(x), 0.003415677066138734 / (x - 1)) for x in range(75, 100)] # Floors 75 to 99, 0.1% of the time + + [ + (str(x), 0.32356832089420257 / x) for x in range(5, 13) + ] # Floors 5 to 12, 33% of the time + + [ + (str(x), 0.30341265418486174 / (x - 1)) for x in range(14, 30) + ] # Floors 14 to 29, 25% of the time + + [ + (str(x), 0.30096338222652870 / (x - 1)) for x in range(30, 50) + ] # Floors 30 to 49, 16% of the time + + [ + (str(x), 0.04570476167856688 / (x - 1)) for x in range(50, 75) + ] # Floors 50 to 74, 1.9% of the time + + [ + (str(x), 0.003415677066138734 / (x - 1)) for x in range(75, 100) + ] # Floors 75 to 99, 0.1% of the time ) street_suffixes = OrderedDict( @@ -1663,7 +1682,9 @@ class Provider(AddressProvider): "{{building_unit_number}} {{building_name}}, {{standalone_building_number}} {{street_name}}", ) - metro_manila_address_formats = ("{{street_address}}, {{metro_manila_lgu}}, {{metro_manila_postcode}} Metro Manila",) + metro_manila_address_formats = ( + "{{street_address}}, {{metro_manila_lgu}}, {{metro_manila_postcode}} Metro Manila", + ) luzon_province_address_formats = ( "{{street_address}}, {{province_lgu}}, {{luzon_province_postcode}} {{luzon_province}}", ) @@ -1754,7 +1775,9 @@ def floor_unit_number(self) -> str: return f"{self.floor_number()}{self.random_int(1, 40):02d}" def building_unit_number(self) -> str: - return self.generator.parse(self.random_element(self.building_unit_number_formats)) + return self.generator.parse( + self.random_element(self.building_unit_number_formats) + ) def building_name(self) -> str: return self.generator.parse(self.random_element(self.building_name_formats)) @@ -1769,7 +1792,9 @@ def subdivision_lot_number(self) -> str: return f"{self.random_int(1, 99):02d}" def subdivision_unit_number(self) -> str: - return self.generator.parse(self.random_element(self.subdivision_unit_number_formats)) + return self.generator.parse( + self.random_element(self.subdivision_unit_number_formats) + ) def subdivision_name(self) -> str: return self.generator.parse(self.random_element(self.subdivision_name_formats)) diff --git a/faker/providers/address/es_AR/__init__.py b/faker/providers/address/es_AR/__init__.py index 4ac425b1d2..b8c762e85d 100644 --- a/faker/providers/address/es_AR/__init__.py +++ b/faker/providers/address/es_AR/__init__.py @@ -191,7 +191,9 @@ def building_number(self) -> str: """ :example: "23" """ - return self.numerify(self.generator.parse(self.random_element(self.building_number_formats))) + return self.numerify( + self.generator.parse(self.random_element(self.building_number_formats)) + ) def secondary_address(self) -> str: """ @@ -209,7 +211,9 @@ def postcode(self) -> str: """ :example: "1900" """ - return self.numerify(self.generator.parse(self.random_element(self.postcode_formats))) + return self.numerify( + self.generator.parse(self.random_element(self.postcode_formats)) + ) def address(self) -> str: """ diff --git a/faker/providers/address/es_CL/__init__.py b/faker/providers/address/es_CL/__init__.py index c47dcb3d56..6536d014ec 100644 --- a/faker/providers/address/es_CL/__init__.py +++ b/faker/providers/address/es_CL/__init__.py @@ -616,7 +616,9 @@ 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) + person_names: Tuple[str, ...] = self.random_element( + self.historic_people_street_names + ) return self.random_element(person_names) def street_prefix(self) -> str: @@ -639,7 +641,9 @@ def road_name(self) -> str: 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))) + return self.numerify( + self.generator.parse(self.random_element(self.highway_names)) + ) def postcode(self) -> str: return self.numerify("######0") diff --git a/faker/providers/address/es_CO/__init__.py b/faker/providers/address/es_CO/__init__.py index 65a829211a..78754137a2 100644 --- a/faker/providers/address/es_CO/__init__.py +++ b/faker/providers/address/es_CO/__init__.py @@ -1292,7 +1292,9 @@ def building_number(self) -> str: """ :example: "2-3" """ - return self.numerify(self.generator.parse(self.random_element(self.building_number_formats))) + return self.numerify( + self.generator.parse(self.random_element(self.building_number_formats)) + ) def secondary_address(self) -> str: """ @@ -1304,13 +1306,20 @@ def street_address(self) -> str: """ :example: "Calle 1 # 2-3" """ - return self.street_name() + " # " + self.building_number() + self.random_element(("", " Sur", " Este")) + return ( + self.street_name() + + " # " + + self.building_number() + + self.random_element(("", " Sur", " Este")) + ) def postcode(self) -> str: """ :example: "11001" """ - return self.numerify(self.generator.parse(self.random_element(self.postcode_formats))) + return self.numerify( + self.generator.parse(self.random_element(self.postcode_formats)) + ) def address(self) -> str: """ @@ -1329,6 +1338,16 @@ def address(self) -> str: ) postcode = "\n" + department_code + self.numerify("####") municipality_name = "\n" + municipality[1] - department_name = ", " + self.departments[department_code] if not is_department_capital else "" + department_name = ( + ", " + self.departments[department_code] + if not is_department_capital + else "" + ) - return self.street_address() + secondary_address + postcode + municipality_name + department_name + return ( + self.street_address() + + secondary_address + + postcode + + municipality_name + + department_name + ) diff --git a/faker/providers/address/it_IT/__init__.py b/faker/providers/address/it_IT/__init__.py index 35de91f8f2..1d4f9933d4 100644 --- a/faker/providers/address/it_IT/__init__.py +++ b/faker/providers/address/it_IT/__init__.py @@ -12,7 +12,12 @@ class Provider(AddressProvider): cap_city_province = { "67010": [["Barete", "AQ"]], "67012": [["San Giovanni", "AQ"], ["Cagnano Amiterno", "AQ"]], - "67013": [["Mascioni", "AQ"], ["Campotosto", "AQ"], ["Ortolano", "AQ"], ["Poggio Cancelli", "AQ"]], + "67013": [ + ["Mascioni", "AQ"], + ["Campotosto", "AQ"], + ["Ortolano", "AQ"], + ["Poggio Cancelli", "AQ"], + ], "67014": [["Capitignano", "AQ"]], "67015": [ ["Marana Di Montereale", "AQ"], @@ -23,7 +28,11 @@ class Provider(AddressProvider): ["Montereale", "AQ"], ["San Giovanni Paganica", "AQ"], ], - "67017": [["Pizzoli", "AQ"], ["Marruci", "AQ"], ["San Lorenzo Di Pizzoli", "AQ"]], + "67017": [ + ["Pizzoli", "AQ"], + ["Marruci", "AQ"], + ["San Lorenzo Di Pizzoli", "AQ"], + ], "67019": [["Sella Di Corno", "AQ"], ["Vigliano", "AQ"], ["Scoppito", "AQ"]], "67020": [ ["Castelnuovo Di San Pio Delle Camere", "AQ"], @@ -114,10 +123,19 @@ class Provider(AddressProvider): "67041": [["Aielli Stazione", "AQ"], ["Aielli", "AQ"]], "67043": [["Celano", "AQ"]], "67044": [["Cerchio", "AQ"]], - "67045": [["Lucoli", "AQ"], ["Casamaina Di Lucoli", "AQ"], ["Casamaina", "AQ"], ["Ville Di Lucoli", "AQ"]], + "67045": [ + ["Lucoli", "AQ"], + ["Casamaina Di Lucoli", "AQ"], + ["Casamaina", "AQ"], + ["Ville Di Lucoli", "AQ"], + ], "67046": [["San Potito", "AQ"], ["Santo Iona", "AQ"], ["Ovindoli", "AQ"]], "67047": [["Rocca Di Cambio", "AQ"]], - "67048": [["Rocca Di Mezzo", "AQ"], ["Rovere", "AQ"], ["Rovere Di Rocca Di Mezzo", "AQ"]], + "67048": [ + ["Rocca Di Mezzo", "AQ"], + ["Rovere", "AQ"], + ["Rovere Di Rocca Di Mezzo", "AQ"], + ], "67049": [ ["Rocca Santo Stefano", "AQ"], ["San Nicola Di Tornimparte", "AQ"], @@ -164,7 +182,12 @@ class Provider(AddressProvider): ["Avezzano", "AQ"], ["Paterno", "AQ"], ], - "67052": [["Balsorano Nuovo", "AQ"], ["Ridotti", "AQ"], ["Ridotti Di Balsorano", "AQ"], ["Balsorano", "AQ"]], + "67052": [ + ["Balsorano Nuovo", "AQ"], + ["Ridotti", "AQ"], + ["Ridotti Di Balsorano", "AQ"], + ["Balsorano", "AQ"], + ], "67053": [ ["Capistrello", "AQ"], ["Corcumello", "AQ"], @@ -202,7 +225,11 @@ class Provider(AddressProvider): ["Santo Stefano Di Sante Marie", "AQ"], ["Sante Marie", "AQ"], ], - "67068": [["Scurcola Marsicana", "AQ"], ["Cappelle", "AQ"], ["Cappelle Dei Marsi", "AQ"]], + "67068": [ + ["Scurcola Marsicana", "AQ"], + ["Cappelle", "AQ"], + ["Cappelle Dei Marsi", "AQ"], + ], "67069": [ ["San Donato Di Tagliacozzo", "AQ"], ["Villa San Sebastiano", "AQ"], @@ -306,9 +333,21 @@ class Provider(AddressProvider): ["Sant'Egidio", "CH"], ["Scerni", "CH"], ], - "66021": [["Miracoli", "CH"], ["Casalbordino Stazione", "CH"], ["Casalbordino", "CH"]], - "66022": [["Villascorciosa", "CH"], ["Scorciosa", "CH"], ["Fossacesia Marina", "CH"], ["Fossacesia", "CH"]], - "66023": [["Francavilla Al Mare", "CH"], ["Francavilla Al Mare Rione Foro", "CH"]], + "66021": [ + ["Miracoli", "CH"], + ["Casalbordino Stazione", "CH"], + ["Casalbordino", "CH"], + ], + "66022": [ + ["Villascorciosa", "CH"], + ["Scorciosa", "CH"], + ["Fossacesia Marina", "CH"], + ["Fossacesia", "CH"], + ], + "66023": [ + ["Francavilla Al Mare", "CH"], + ["Francavilla Al Mare Rione Foro", "CH"], + ], "66026": [ ["Ortona", "CH"], ["Ortona Foro", "CH"], @@ -346,7 +385,11 @@ class Provider(AddressProvider): ], "66036": [["Orsogna", "CH"]], "66037": [["Sant'Eusanio Del Sangro", "CH"]], - "66038": [["Marina Di San Vito", "CH"], ["Sant'Apollinare Chietino", "CH"], ["San Vito Chietino", "CH"]], + "66038": [ + ["Marina Di San Vito", "CH"], + ["Sant'Apollinare Chietino", "CH"], + ["San Vito Chietino", "CH"], + ], "66040": [ ["Pennadomo", "CH"], ["Roccascalegna", "CH"], @@ -381,7 +424,10 @@ class Provider(AddressProvider): "66042": [["Bomba", "CH"]], "66043": [["Casoli", "CH"], ["Selva Piana", "CH"]], "66044": [["Piane D'Archi", "CH"], ["Archi", "CH"]], - "66045": [["Schiavi Di Abruzzo", "CH"], ["Taverna Di Schiavi Di Abruzzo", "CH"]], + "66045": [ + ["Schiavi Di Abruzzo", "CH"], + ["Taverna Di Schiavi Di Abruzzo", "CH"], + ], "66046": [["San Giovanni", "CH"], ["Tornareccio", "CH"]], "66047": [["Villa Santa Maria", "CH"]], "66050": [ @@ -559,7 +605,11 @@ class Provider(AddressProvider): ["Garrufo Di Campli", "TE"], ], "64013": [["Corropoli", "TE"]], - "64014": [["Martinsicuro", "TE"], ["Villa Rosa", "TE"], ["Villa Rosa Di Martinsicuro", "TE"]], + "64014": [ + ["Martinsicuro", "TE"], + ["Villa Rosa", "TE"], + ["Villa Rosa Di Martinsicuro", "TE"], + ], "64015": [["Nereto", "TE"]], "64016": [ ["Sant'Egidio Alla Vibrata", "TE"], @@ -585,9 +635,21 @@ class Provider(AddressProvider): ["Villa Zaccheo", "TE"], ["Bellante", "TE"], ], - "64021": [["Giulianova Spiaggia", "TE"], ["Colleranesco", "TE"], ["Giulianova", "TE"]], - "64023": [["Mosciano Sant'Angelo", "TE"], ["Montone", "TE"], ["Notaresco Stazione", "TE"]], - "64024": [["Guardia Vomano", "TE"], ["Pianura Vomano", "TE"], ["Notaresco", "TE"]], + "64021": [ + ["Giulianova Spiaggia", "TE"], + ["Colleranesco", "TE"], + ["Giulianova", "TE"], + ], + "64023": [ + ["Mosciano Sant'Angelo", "TE"], + ["Montone", "TE"], + ["Notaresco Stazione", "TE"], + ], + "64024": [ + ["Guardia Vomano", "TE"], + ["Pianura Vomano", "TE"], + ["Notaresco", "TE"], + ], "64025": [ ["Borgo Santa Maria Immacolata", "TE"], ["Mutignano", "TE"], @@ -606,8 +668,18 @@ class Provider(AddressProvider): ["Cologna Paese", "TE"], ], "64027": [["Garrufo", "TE"], ["Poggio Morello", "TE"], ["Sant'Omero", "TE"]], - "64028": [["Pianacce", "TE"], ["Silvi Marina", "TE"], ["San Silvestro", "TE"], ["Silvi", "TE"]], - "64030": [["Basciano", "TE"], ["Castel Castagna", "TE"], ["Montefino", "TE"], ["Villa Bozza", "TE"]], + "64028": [ + ["Pianacce", "TE"], + ["Silvi Marina", "TE"], + ["San Silvestro", "TE"], + ["Silvi", "TE"], + ], + "64030": [ + ["Basciano", "TE"], + ["Castel Castagna", "TE"], + ["Montefino", "TE"], + ["Villa Bozza", "TE"], + ], "64031": [["Arsita", "TE"]], "64032": [ ["Atri", "TE"], @@ -624,7 +696,11 @@ class Provider(AddressProvider): "64034": [["Appignano", "TE"], ["Castiglione Messer Raimondo", "TE"]], "64035": [["Castilenti", "TE"], ["Villa San Romualdo", "TE"]], "64036": [["Scorrano", "TE"], ["Cellino Attanasio", "TE"]], - "64037": [["Montegualtieri", "TE"], ["Poggio Delle Rose", "TE"], ["Cermignano", "TE"]], + "64037": [ + ["Montegualtieri", "TE"], + ["Poggio Delle Rose", "TE"], + ["Cermignano", "TE"], + ], "64039": [["Val Vomano", "TE"], ["Penna Sant'Andrea", "TE"]], "64040": [["Cortino", "TE"], ["Padula", "TE"], ["Pagliaroli", "TE"]], "64041": [["Castelli", "TE"], ["Colledoro", "TE"]], @@ -692,7 +768,12 @@ class Provider(AddressProvider): ["San Mauro Forte", "MT"], ], "75011": [["Accettura", "MT"]], - "75012": [["Metaponto Lido", "MT"], ["Metaponto", "MT"], ["Bernalda", "MT"], ["Serra Marina", "MT"]], + "75012": [ + ["Metaponto Lido", "MT"], + ["Metaponto", "MT"], + ["Bernalda", "MT"], + ["Serra Marina", "MT"], + ], "75013": [["Macchia", "MT"], ["Borgo Macchia", "MT"], ["Ferrandina", "MT"]], "75014": [["Grassano", "MT"]], "75015": [["Pisticci", "MT"], ["Marconia", "MT"], ["Pisticci Scalo", "MT"]], @@ -787,7 +868,11 @@ class Provider(AddressProvider): "85025": [["Foggiano", "PZ"], ["Melfi", "PZ"], ["Leonessa Di Melfi", "PZ"]], "85026": [["Palazzo San Gervasio", "PZ"]], "85027": [["Rapolla", "PZ"]], - "85028": [["Monticchio", "PZ"], ["Rionero In Vulture", "PZ"], ["Monticchio Bagni", "PZ"]], + "85028": [ + ["Monticchio", "PZ"], + ["Rionero In Vulture", "PZ"], + ["Monticchio Bagni", "PZ"], + ], "85029": [["Venosa", "PZ"]], "85030": [ ["Mezzana", "PZ"], @@ -825,7 +910,13 @@ class Provider(AddressProvider): ["Nemoli", "PZ"], ], "85042": [["Lagonegro", "PZ"]], - "85043": [["Latronico", "PZ"], ["Mileo", "PZ"], ["Cerri", "PZ"], ["Agromonte", "PZ"], ["Magnano", "PZ"]], + "85043": [ + ["Latronico", "PZ"], + ["Mileo", "PZ"], + ["Cerri", "PZ"], + ["Agromonte", "PZ"], + ["Magnano", "PZ"], + ], "85044": [ ["Lauria", "PZ"], ["Seluci", "PZ"], @@ -923,7 +1014,11 @@ class Provider(AddressProvider): ["San Marco Roggiano Stazione", "CS"], ["San Marco Argentano", "CS"], ], - "87019": [["Spezzano Albanese Stazione", "CS"], ["Spezzano Albanese Terme", "CS"], ["Spezzano Albanese", "CS"]], + "87019": [ + ["Spezzano Albanese Stazione", "CS"], + ["Spezzano Albanese Terme", "CS"], + ["Spezzano Albanese", "CS"], + ], "87020": [ ["San Nicola Arcella", "CS"], ["Sangineto", "CS"], @@ -953,7 +1048,11 @@ class Provider(AddressProvider): ["Sangineto Lido", "CS"], ["Tortora", "CS"], ], - "87021": [["Laise", "CS"], ["Marina Di Belvedere Marittimo", "CS"], ["Belvedere Marittimo", "CS"]], + "87021": [ + ["Laise", "CS"], + ["Marina Di Belvedere Marittimo", "CS"], + ["Belvedere Marittimo", "CS"], + ], "87022": [ ["Cetraro Marina", "CS"], ["Cetraro", "CS"], @@ -963,7 +1062,12 @@ class Provider(AddressProvider): ["Sant'Angelo", "CS"], ], "87023": [["Cirella", "CS"], ["Diamante", "CS"]], - "87024": [["Cariglio", "CS"], ["Marina Di Fuscaldo", "CS"], ["Scarcelli", "CS"], ["Fuscaldo", "CS"]], + "87024": [ + ["Cariglio", "CS"], + ["Marina Di Fuscaldo", "CS"], + ["Scarcelli", "CS"], + ["Fuscaldo", "CS"], + ], "87026": [["Mormanno", "CS"]], "87027": [ ["Paola Marina", "CS"], @@ -1001,10 +1105,24 @@ class Provider(AddressProvider): ["Reggio", "CS"], ], "87031": [["Aiello Calabro", "CS"]], - "87032": [["Amantea Marina", "CS"], ["Amantea", "CS"], ["Campora San Giovanni", "CS"], ["Corica", "CS"]], - "87033": [["Belmonte Calabro Marina", "CS"], ["Belmonte Calabro", "CS"], ["Vadi", "CS"]], + "87032": [ + ["Amantea Marina", "CS"], + ["Amantea", "CS"], + ["Campora San Giovanni", "CS"], + ["Corica", "CS"], + ], + "87033": [ + ["Belmonte Calabro Marina", "CS"], + ["Belmonte Calabro", "CS"], + ["Vadi", "CS"], + ], "87034": [["Grimaldi", "CS"]], - "87035": [["Terrati", "CS"], ["Greci", "CS"], ["Aria Di Lupi", "CS"], ["Lago", "CS"]], + "87035": [ + ["Terrati", "CS"], + ["Greci", "CS"], + ["Aria Di Lupi", "CS"], + ["Lago", "CS"], + ], "87036": [ ["Roges", "CS"], ["Santo Stefano", "CS"], @@ -1072,7 +1190,11 @@ class Provider(AddressProvider): ["Vaccarizzo", "CS"], ["Montalto Uffugo", "CS"], ], - "87047": [["Redipiano", "CS"], ["San Benedetto In Guarano", "CS"], ["San Pietro In Guarano", "CS"]], + "87047": [ + ["Redipiano", "CS"], + ["San Benedetto In Guarano", "CS"], + ["San Pietro In Guarano", "CS"], + ], "87048": [["Santa Sofia D'Epiro", "CS"]], "87050": [ ["Pian Del Lago", "CS"], @@ -1100,7 +1222,11 @@ class Provider(AddressProvider): ["Silvana Mansio", "CS"], ["Lappano", "CS"], ], - "87051": [["Vico", "CS"], ["Camarda Di Aprigliano", "CS"], ["Aprigliano", "CS"]], + "87051": [ + ["Vico", "CS"], + ["Camarda Di Aprigliano", "CS"], + ["Aprigliano", "CS"], + ], "87052": [ ["Moccone", "CS"], ["Croce Di Magara", "CS"], @@ -1110,7 +1236,11 @@ class Provider(AddressProvider): ], "87053": [["Celico", "CS"]], "87054": [["Rogliano", "CS"], ["Saliano", "CS"]], - "87055": [["Lorica", "CS"], ["Monte Oliveto", "CS"], ["San Giovanni In Fiore", "CS"]], + "87055": [ + ["Lorica", "CS"], + ["Monte Oliveto", "CS"], + ["San Giovanni In Fiore", "CS"], + ], "87056": [["Santo Stefano Di Rogliano", "CS"]], "87057": [["Scigliano", "CS"], ["Diano", "CS"], ["Calvisi", "CS"]], "87058": [["Spezzano Della Sila", "CS"]], @@ -1148,7 +1278,12 @@ class Provider(AddressProvider): ["Cantinella", "CS"], ], "87066": [["Longobucco", "CS"], ["Destro", "CS"]], - "87067": [["Rossano", "CS"], ["Piragineti", "CS"], ["Amica", "CS"], ["Rossano Stazione", "CS"]], + "87067": [ + ["Rossano", "CS"], + ["Piragineti", "CS"], + ["Amica", "CS"], + ["Rossano Stazione", "CS"], + ], "87069": [["Macchia Albanese", "CS"], ["San Demetrio Corone", "CS"]], "87070": [ ["Castroregio", "CS"], @@ -1223,8 +1358,17 @@ class Provider(AddressProvider): ["Conflenti Inferiore", "CZ"], ["Migliuso", "CZ"], ], - "88041": [["Decollatura", "CZ"], ["San Bernardo", "CZ"], ["Adami", "CZ"], ["Cerrisi", "CZ"]], - "88042": [["Falerna Scalo", "CZ"], ["Falerna", "CZ"], ["Castiglione Marittimo", "CZ"]], + "88041": [ + ["Decollatura", "CZ"], + ["San Bernardo", "CZ"], + ["Adami", "CZ"], + ["Cerrisi", "CZ"], + ], + "88042": [ + ["Falerna Scalo", "CZ"], + ["Falerna", "CZ"], + ["Castiglione Marittimo", "CZ"], + ], "88044": [["Marcellinara", "CZ"]], "88045": [ ["Gimigliano Inferiore", "CZ"], @@ -1320,8 +1464,17 @@ class Provider(AddressProvider): "88062": [["Cardinale", "CZ"], ["Novalba", "CZ"]], "88064": [["Chiaravalle Centrale", "CZ"]], "88065": [["Guardavalle", "CZ"], ["Guardavalle Marina", "CZ"]], - "88067": [["Cenadi", "CZ"], ["Centrache", "CZ"], ["San Vito Sullo Ionio", "CZ"], ["Olivadi", "CZ"]], - "88068": [["Soverato Superiore", "CZ"], ["Soverato Marina", "CZ"], ["Soverato", "CZ"]], + "88067": [ + ["Cenadi", "CZ"], + ["Centrache", "CZ"], + ["San Vito Sullo Ionio", "CZ"], + ["Olivadi", "CZ"], + ], + "88068": [ + ["Soverato Superiore", "CZ"], + ["Soverato Marina", "CZ"], + ["Soverato", "CZ"], + ], "88069": [ ["Squillace Lido", "CZ"], ["Staletti", "CZ"], @@ -1360,7 +1513,12 @@ class Provider(AddressProvider): "88834": [["Castelsilano", "KR"]], "88835": [["Roccabernarda", "KR"]], "88836": [["Cotronei", "KR"]], - "88837": [["Camellino", "KR"], ["Pagliarelle", "KR"], ["Foresta", "KR"], ["Petilia Policastro", "KR"]], + "88837": [ + ["Camellino", "KR"], + ["Pagliarelle", "KR"], + ["Foresta", "KR"], + ["Petilia Policastro", "KR"], + ], "88838": [["Filippa", "KR"], ["Mesoraca", "KR"]], "88841": [ ["Punta Le Castella", "KR"], @@ -1368,9 +1526,18 @@ class Provider(AddressProvider): ["Le Castella", "KR"], ["Isola Di Capo Rizzuto", "KR"], ], - "88842": [["San Leonardo Di Cutro", "KR"], ["Cutro", "KR"], ["Steccato Di Cutro", "KR"]], + "88842": [ + ["San Leonardo Di Cutro", "KR"], + ["Cutro", "KR"], + ["Steccato Di Cutro", "KR"], + ], "88900": [["Villaggio Bucchi", "KR"], ["Crotone", "KR"], ["Papanice", "KR"]], - "89010": [["Scido", "RC"], ["Terranova Sappo Minulio", "RC"], ["Varapodio", "RC"], ["Molochio", "RC"]], + "89010": [ + ["Scido", "RC"], + ["Terranova Sappo Minulio", "RC"], + ["Varapodio", "RC"], + ["Molochio", "RC"], + ], "89011": [ ["Marinella", "RC"], ["Ceramida", "RC"], @@ -1390,7 +1557,12 @@ class Provider(AddressProvider): ["Oppido Mamertina", "RC"], ], "89015": [["Palmi", "RC"], ["Taureana", "RC"], ["Trodio", "RC"]], - "89016": [["Rizziconi", "RC"], ["Spina", "RC"], ["Drosi", "RC"], ["Cirello", "RC"]], + "89016": [ + ["Rizziconi", "RC"], + ["Spina", "RC"], + ["Drosi", "RC"], + ["Cirello", "RC"], + ], "89017": [["San Giorgio Morgeto", "RC"]], "89018": [ ["Acciarello", "RC"], @@ -1418,12 +1590,21 @@ class Provider(AddressProvider): ], "89021": [["Cinquefrondi", "RC"]], "89022": [["Cittanova", "RC"]], - "89023": [["Stelletanone", "RC"], ["Bellantone", "RC"], ["Laureana Di Borrello", "RC"]], + "89023": [ + ["Stelletanone", "RC"], + ["Bellantone", "RC"], + ["Laureana Di Borrello", "RC"], + ], "89024": [["Polistena", "RC"]], "89025": [["Bosco", "RC"], ["Rosarno", "RC"]], "89026": [["San Ferdinando", "RC"]], "89027": [["Sant'Eufemia D'Aspromonte", "RC"]], - "89028": [["Seminara", "RC"], ["Barritteri", "RC"], ["Sant'Anna", "RC"], ["Sant'Anna Di Seminara", "RC"]], + "89028": [ + ["Seminara", "RC"], + ["Barritteri", "RC"], + ["Sant'Anna", "RC"], + ["Sant'Anna Di Seminara", "RC"], + ], "89029": [ ["San Martino", "RC"], ["Taurianova", "RC"], @@ -1463,9 +1644,19 @@ class Provider(AddressProvider): ["Bovalino Superiore", "RC"], ], "89035": [["Bova Marina", "RC"]], - "89036": [["Brancaleone Marina", "RC"], ["Capo Spartivento", "RC"], ["Galati", "RC"], ["Brancaleone", "RC"]], + "89036": [ + ["Brancaleone Marina", "RC"], + ["Capo Spartivento", "RC"], + ["Galati", "RC"], + ["Brancaleone", "RC"], + ], "89037": [["Ardore Marina", "RC"], ["Marina D'Ardore", "RC"]], - "89038": [["Marina Di Palizzi", "RC"], ["Palizzi", "RC"], ["Palizzi Marina", "RC"], ["Pietrapennata", "RC"]], + "89038": [ + ["Marina Di Palizzi", "RC"], + ["Palizzi", "RC"], + ["Palizzi Marina", "RC"], + ["Pietrapennata", "RC"], + ], "89039": [["Plati'", "RC"]], "89040": [ ["Monasterace", "RC"], @@ -1501,11 +1692,21 @@ class Provider(AddressProvider): ], "89042": [["Gioiosa Ionica", "RC"]], "89043": [["Grotteria", "RC"], ["Croce Ferrata", "RC"]], - "89044": [["Merici", "RC"], ["Moschetta Di Locri", "RC"], ["Moschetta", "RC"], ["Locri", "RC"]], + "89044": [ + ["Merici", "RC"], + ["Moschetta Di Locri", "RC"], + ["Moschetta", "RC"], + ["Locri", "RC"], + ], "89045": [["Mammola", "RC"]], "89046": [["Marina Di Gioiosa Ionica", "RC"]], "89047": [["Roccella Ionica", "RC"]], - "89048": [["Siderno Superiore", "RC"], ["Donisi", "RC"], ["Siderno", "RC"], ["Siderno Marina", "RC"]], + "89048": [ + ["Siderno Superiore", "RC"], + ["Donisi", "RC"], + ["Siderno", "RC"], + ["Siderno Marina", "RC"], + ], "89049": [["Stilo", "RC"]], "89050": [ ["Villa Mesa", "RC"], @@ -1525,7 +1726,12 @@ class Provider(AddressProvider): "89054": [["Galatro", "RC"]], "89056": [["Lubrichi", "RC"], ["Santa Cristina D'Aspromonte", "RC"]], "89057": [["Santo Stefano In Aspromonte", "RC"], ["Gambarie", "RC"]], - "89058": [["Scilla", "RC"], ["Favazzina", "RC"], ["Milea", "RC"], ["Melia", "RC"]], + "89058": [ + ["Scilla", "RC"], + ["Favazzina", "RC"], + ["Milea", "RC"], + ["Melia", "RC"], + ], "89060": [ ["Saline Joniche", "RC"], ["Ghorio", "RC"], @@ -1544,7 +1750,12 @@ class Provider(AddressProvider): ["Lacco", "RC"], ["Prunella", "RC"], ], - "89064": [["Masella", "RC"], ["Fossato Ionico", "RC"], ["Montebello Ionico", "RC"], ["Saline Ioniche", "RC"]], + "89064": [ + ["Masella", "RC"], + ["Fossato Ionico", "RC"], + ["Montebello Ionico", "RC"], + ["Saline Ioniche", "RC"], + ], "89065": [["Motta San Giovanni", "RC"]], "89069": [ ["Marina Di San Lorenzo", "RC"], @@ -1577,7 +1788,13 @@ class Provider(AddressProvider): "89127": [["Reggio Calabria", "RC"]], "89128": [["Reggio Calabria", "RC"], ["Spirito Santo", "RC"]], "89129": [["Reggio Calabria", "RC"]], - "89131": [["Reggio Calabria", "RC"], ["Armo", "RC"], ["Ravagnese", "RC"], ["Gallina", "RC"], ["Puzzi", "RC"]], + "89131": [ + ["Reggio Calabria", "RC"], + ["Armo", "RC"], + ["Ravagnese", "RC"], + ["Gallina", "RC"], + ["Puzzi", "RC"], + ], "89132": [["Reggio Calabria", "RC"]], "89133": [ ["Reggio Calabria", "RC"], @@ -1612,7 +1829,12 @@ class Provider(AddressProvider): "89813": [["Polia", "VV"], ["Menniti", "VV"], ["Trecroci", "VV"]], "89814": [["Montesoro", "VV"], ["Scarro", "VV"], ["Filadelfia", "VV"]], "89815": [["Francavilla Angitola", "VV"]], - "89816": [["Cessaniti", "VV"], ["San Cono", "VV"], ["Favelloni", "VV"], ["Pannaconi", "VV"]], + "89816": [ + ["Cessaniti", "VV"], + ["San Cono", "VV"], + ["Favelloni", "VV"], + ["Pannaconi", "VV"], + ], "89817": [ ["Sciconi", "VV"], ["Paradisoni", "VV"], @@ -1624,7 +1846,12 @@ class Provider(AddressProvider): "89818": [["Capistrano", "VV"]], "89819": [["Monterosso Calabro", "VV"]], "89821": [["Vallelonga", "VV"], ["San Nicola Da Crissa", "VV"]], - "89822": [["Brognaturo", "VV"], ["Serra San Bruno", "VV"], ["Simbario", "VV"], ["Spadola", "VV"]], + "89822": [ + ["Brognaturo", "VV"], + ["Serra San Bruno", "VV"], + ["Simbario", "VV"], + ["Spadola", "VV"], + ], "89823": [["Mongiana", "VV"], ["Fabrizia", "VV"]], "89824": [["Nardodipace", "VV"]], "89831": [ @@ -1635,8 +1862,17 @@ class Provider(AddressProvider): ["Gerocarne", "VV"], ["Ciano", "VV"], ], - "89832": [["Limpidi", "VV"], ["Acquaro", "VV"], ["Arena", "VV"], ["Dasa'", "VV"]], - "89833": [["Melicucca' Di Dinami", "VV"], ["Monsoreto", "VV"], ["Dinami", "VV"]], + "89832": [ + ["Limpidi", "VV"], + ["Acquaro", "VV"], + ["Arena", "VV"], + ["Dasa'", "VV"], + ], + "89833": [ + ["Melicucca' Di Dinami", "VV"], + ["Monsoreto", "VV"], + ["Dinami", "VV"], + ], "89834": [["Vazzano", "VV"], ["Pizzoni", "VV"]], "89841": [ ["Rombiolo", "VV"], @@ -1648,7 +1884,12 @@ class Provider(AddressProvider): ["Pizzinni", "VV"], ], "89842": [["San Calogero", "VV"], ["Calimera Calabra", "VV"]], - "89843": [["Stefanaconi", "VV"], ["Sant'Onofrio", "VV"], ["Filogaso", "VV"], ["Maierato", "VV"]], + "89843": [ + ["Stefanaconi", "VV"], + ["Sant'Onofrio", "VV"], + ["Filogaso", "VV"], + ["Maierato", "VV"], + ], "89844": [ ["Badia", "VV"], ["Limbadi", "VV"], @@ -1660,11 +1901,26 @@ class Provider(AddressProvider): ["Comerconi", "VV"], ["Caroni", "VV"], ], - "89851": [["Jonadi", "VV"], ["San Costantino Calabro", "VV"], ["Nao", "VV"], ["Francica", "VV"]], - "89852": [["Mileto", "VV"], ["Paravati", "VV"], ["San Giovanni", "VV"], ["Comparni", "VV"]], + "89851": [ + ["Jonadi", "VV"], + ["San Costantino Calabro", "VV"], + ["Nao", "VV"], + ["Francica", "VV"], + ], + "89852": [ + ["Mileto", "VV"], + ["Paravati", "VV"], + ["San Giovanni", "VV"], + ["Comparni", "VV"], + ], "89853": [["San Gregorio D'Ippona", "VV"]], "89861": [["Tropea", "VV"], ["Parghelia", "VV"], ["Fitili", "VV"]], - "89862": [["Drapia", "VV"], ["Gasponi", "VV"], ["Caria", "VV"], ["Brattiro'", "VV"]], + "89862": [ + ["Drapia", "VV"], + ["Gasponi", "VV"], + ["Caria", "VV"], + ["Brattiro'", "VV"], + ], "89863": [["Coccorino", "VV"], ["Joppolo", "VV"], ["Caroniti", "VV"]], "89864": [["Panaia", "VV"], ["Spilinga", "VV"]], "89866": [ @@ -1677,7 +1933,11 @@ class Provider(AddressProvider): ["Ricadi", "VV"], ], "89867": [["Zaccanopoli", "VV"], ["Zungri", "VV"]], - "89868": [["Zambrone", "VV"], ["Daffina'", "VV"], ["San Giovanni Di Zambrone", "VV"]], + "89868": [ + ["Zambrone", "VV"], + ["Daffina'", "VV"], + ["San Giovanni Di Zambrone", "VV"], + ], "89900": [ ["Longobardi", "VV"], ["Vibo Marina", "VV"], @@ -1713,7 +1973,12 @@ class Provider(AddressProvider): ], "83014": [["Ospedaletto D'Alpinolo", "AV"]], "83015": [["Pietrastornina", "AV"], ["Ciardelli Inferiore", "AV"]], - "83016": [["Tufara Valle", "AV"], ["Roccabascerana", "AV"], ["Squillani", "AV"], ["Cassano Caudino", "AV"]], + "83016": [ + ["Tufara Valle", "AV"], + ["Roccabascerana", "AV"], + ["Squillani", "AV"], + ["Cassano Caudino", "AV"], + ], "83017": [["Ferrari Di Cervinara", "AV"], ["Rotondi", "AV"]], "83018": [["San Martino Valle Caudina", "AV"]], "83020": [ @@ -1758,7 +2023,10 @@ class Provider(AddressProvider): ["Montoro Superiore", "AV"], ["Montoro Inferiore", "AV"], ], - "83026": [["San Pietro Di Montoro Superiore", "AV"], ["Banzano Di Montoro Superiore", "AV"]], + "83026": [ + ["San Pietro Di Montoro Superiore", "AV"], + ["Banzano Di Montoro Superiore", "AV"], + ], "83027": [["Mugnano Del Cardinale", "AV"]], "83028": [ ["Serino", "AV"], @@ -1768,7 +2036,11 @@ class Provider(AddressProvider): ["San Biagio", "AV"], ["Ferrari Stazione Serino", "AV"], ], - "83029": [["Sant'Andrea Apostolo", "AV"], ["Sant'Agata Irpina", "AV"], ["Solofra", "AV"]], + "83029": [ + ["Sant'Andrea Apostolo", "AV"], + ["Sant'Agata Irpina", "AV"], + ["Solofra", "AV"], + ], "83030": [ ["Savignano Irpino", "AV"], ["San Barbato", "AV"], @@ -1808,7 +2080,12 @@ class Provider(AddressProvider): "83032": [["Morroni", "AV"], ["Bonito", "AV"]], "83034": [["Casalbore", "AV"]], "83035": [["Grottaminarda", "AV"], ["Carpignano", "AV"]], - "83036": [["Calore", "AV"], ["Pianopantano", "AV"], ["Mirabella Eclano", "AV"], ["Passo Di Mirabella", "AV"]], + "83036": [ + ["Calore", "AV"], + ["Pianopantano", "AV"], + ["Mirabella Eclano", "AV"], + ["Passo Di Mirabella", "AV"], + ], "83037": [["Montecalvo Irpino", "AV"]], "83038": [["Montemiletto", "AV"], ["Montaperto", "AV"]], "83039": [ @@ -1848,12 +2125,24 @@ class Provider(AddressProvider): ], "83041": [["Aquilonia", "AV"]], "83042": [["Atripalda", "AV"]], - "83043": [["Laceno", "AV"], ["Villaggio Laceno", "AV"], ["Bagnoli Irpino", "AV"]], - "83044": [["Piano Regolatore", "AV"], ["Bisaccia Nuova", "AV"], ["Bisaccia", "AV"]], + "83043": [ + ["Laceno", "AV"], + ["Villaggio Laceno", "AV"], + ["Bagnoli Irpino", "AV"], + ], + "83044": [ + ["Piano Regolatore", "AV"], + ["Bisaccia Nuova", "AV"], + ["Bisaccia", "AV"], + ], "83045": [["Calitri", "AV"]], "83046": [["Lacedonia", "AV"]], "83047": [["Lioni", "AV"]], - "83048": [["Sorbo Di Montella", "AV"], ["Fontana Di Montella", "AV"], ["Montella", "AV"]], + "83048": [ + ["Sorbo Di Montella", "AV"], + ["Fontana Di Montella", "AV"], + ["Montella", "AV"], + ], "83049": [["Monteverde", "AV"]], "83050": [ ["Rocca San Felice", "AV"], @@ -1875,13 +2164,22 @@ class Provider(AddressProvider): "83051": [["Ponteromito", "AV"], ["Nusco", "AV"]], "83052": [["Paternopoli", "AV"]], "83053": [["Sant'Andrea Di Conza", "AV"]], - "83054": [["Sant'Angelo Dei Lombardi", "AV"], ["San Vito", "AV"], ["San Vito Dei Lombardi", "AV"]], + "83054": [ + ["Sant'Angelo Dei Lombardi", "AV"], + ["San Vito", "AV"], + ["San Vito Dei Lombardi", "AV"], + ], "83055": [["Sturno", "AV"]], "83056": [["Teora", "AV"]], "83057": [["Torella Dei Lombardi", "AV"]], "83058": [["Trevico", "AV"], ["Molini", "AV"]], "83059": [["Vallata", "AV"]], - "83100": [["Avellino", "AV"], ["Valle Ponticelli", "AV"], ["Bellizzi Irpino", "AV"], ["Picarelli", "AV"]], + "83100": [ + ["Avellino", "AV"], + ["Valle Ponticelli", "AV"], + ["Bellizzi Irpino", "AV"], + ["Picarelli", "AV"], + ], "82010": [ ["Moiano", "BN"], ["San Giovanni Di Ceppaloni", "BN"], @@ -1911,7 +2209,12 @@ class Provider(AddressProvider): ["Cavuoti", "BN"], ["San Leucio Del Sannio", "BN"], ], - "82011": [["Forchia", "BN"], ["Arpaia", "BN"], ["Paolisi", "BN"], ["Airola", "BN"]], + "82011": [ + ["Forchia", "BN"], + ["Arpaia", "BN"], + ["Paolisi", "BN"], + ["Airola", "BN"], + ], "82013": [["Bonea", "BN"]], "82015": [["Durazzano", "BN"]], "82016": [["Cirignano", "BN"], ["Varoni", "BN"], ["Montesarchio", "BN"]], @@ -1923,7 +2226,12 @@ class Provider(AddressProvider): ["San Giorgio Del Sannio", "BN"], ["San Nazzaro", "BN"], ], - "82019": [["Bagnoli", "BN"], ["Faggiano", "BN"], ["Sant'Agata De' Goti", "BN"], ["Laiano", "BN"]], + "82019": [ + ["Bagnoli", "BN"], + ["Faggiano", "BN"], + ["Sant'Agata De' Goti", "BN"], + ["Laiano", "BN"], + ], "82020": [ ["San Giorgio La Molara", "BN"], ["Ginestra Degli Schiavoni", "BN"], @@ -1942,7 +2250,11 @@ class Provider(AddressProvider): ["Molinara", "BN"], ["Buonalbergo", "BN"], ], - "82021": [["Apice Nuovo", "BN"], ["Apice", "BN"], ["Sant'Arcangelo Trimonte", "BN"]], + "82021": [ + ["Apice Nuovo", "BN"], + ["Apice", "BN"], + ["Sant'Arcangelo Trimonte", "BN"], + ], "82022": [["Castelfranco In Miscano", "BN"]], "82023": [["Castelvetere In Val Fortore", "BN"]], "82024": [["Colle Sannita", "BN"], ["Castelpagano", "BN"], ["Decorata", "BN"]], @@ -1981,7 +2293,11 @@ class Provider(AddressProvider): "82031": [["Amorosi", "BN"]], "82032": [["Cerreto Sannita", "BN"]], "82033": [["Civitella Licinio", "BN"], ["Cusano Mutri", "BN"]], - "82034": [["San Lupo", "BN"], ["Guardia Sanframondi", "BN"], ["San Lorenzo Maggiore", "BN"]], + "82034": [ + ["San Lupo", "BN"], + ["Guardia Sanframondi", "BN"], + ["San Lorenzo Maggiore", "BN"], + ], "82036": [["Solopaca", "BN"]], "82037": [["Telese Terme", "BN"], ["Castelvenere", "BN"]], "82038": [["Vitulano", "BN"]], @@ -2025,7 +2341,11 @@ class Provider(AddressProvider): ["Piedimonte Matese", "CE"], ["Sepicciano", "CE"], ], - "81017": [["Quattroventi", "CE"], ["Sant'Angelo D'Alife", "CE"], ["Raviscanina", "CE"]], + "81017": [ + ["Quattroventi", "CE"], + ["Sant'Angelo D'Alife", "CE"], + ["Raviscanina", "CE"], + ], "81020": [ ["Castel Morrone", "CE"], ["Capodrise", "CE"], @@ -2038,7 +2358,11 @@ class Provider(AddressProvider): ], "81021": [["Arienzo", "CE"]], "81022": [["Casagiove", "CE"]], - "81023": [["Messercola", "CE"], ["Cervino", "CE"], ["Forchia Di Cervino", "CE"]], + "81023": [ + ["Messercola", "CE"], + ["Cervino", "CE"], + ["Forchia Di Cervino", "CE"], + ], "81024": [["Grotticella", "CE"], ["Montedecoro", "CE"], ["Maddaloni", "CE"]], "81025": [["Cantone", "CE"], ["Marcianise", "CE"]], "81027": [ @@ -2162,9 +2486,18 @@ class Provider(AddressProvider): ["Cave", "CE"], ["Vaglie", "CE"], ], - "81046": [["Grazzanise", "CE"], ["Brezza", "CE"], ["Borgo Rurale Appio", "CE"], ["Borgo Appio", "CE"]], + "81046": [ + ["Grazzanise", "CE"], + ["Brezza", "CE"], + ["Borgo Rurale Appio", "CE"], + ["Borgo Appio", "CE"], + ], "81047": [["Macerata Campania", "CE"], ["Caturano", "CE"]], - "81049": [["Mignano Monte Lungo", "CE"], ["San Pietro Infine", "CE"], ["Caspoli", "CE"]], + "81049": [ + ["Mignano Monte Lungo", "CE"], + ["San Pietro Infine", "CE"], + ["Caspoli", "CE"], + ], "81050": [ ["Portico Di Caserta", "CE"], ["San Felice", "CE"], @@ -2207,7 +2540,12 @@ class Provider(AddressProvider): ["Marzanello", "CE"], ["Vairano Patenora", "CE"], ], - "81059": [["Santa Lucia", "CE"], ["Caianello", "CE"], ["Vairano Stazione", "CE"], ["Montano", "CE"]], + "81059": [ + ["Santa Lucia", "CE"], + ["Caianello", "CE"], + ["Vairano Stazione", "CE"], + ["Montano", "CE"], + ], "81100": [ ["Casolla", "CE"], ["Tredici", "CE"], @@ -2230,7 +2568,12 @@ class Provider(AddressProvider): ["Casertavecchia", "CE"], ["Casola Di Caserta", "CE"], ], - "80010": [["Scalzapecora", "NA"], ["Quarto", "NA"], ["Torretta", "NA"], ["Villaricca", "NA"]], + "80010": [ + ["Scalzapecora", "NA"], + ["Quarto", "NA"], + ["Torretta", "NA"], + ["Villaricca", "NA"], + ], "80011": [["Pezzalunga", "NA"], ["Acerra", "NA"]], "80012": [["Calvizzano", "NA"]], "80013": [ @@ -2239,12 +2582,25 @@ class Provider(AddressProvider): ["Licignano Di Napoli", "NA"], ["Casarea", "NA"], ], - "80014": [["Giugliano In Campania", "NA"], ["Varcaturo", "NA"], ["Lago Patria", "NA"]], - "80016": [["Torre Piscitelli", "NA"], ["San Rocco", "NA"], ["Marano Di Napoli", "NA"]], + "80014": [ + ["Giugliano In Campania", "NA"], + ["Varcaturo", "NA"], + ["Lago Patria", "NA"], + ], + "80016": [ + ["Torre Piscitelli", "NA"], + ["San Rocco", "NA"], + ["Marano Di Napoli", "NA"], + ], "80017": [["Melito Di Napoli", "NA"]], "80018": [["Mugnano Di Napoli", "NA"]], "80019": [["Qualiano", "NA"]], - "80020": [["Crispano", "NA"], ["Parco Delle Acacie", "NA"], ["Casavatore", "NA"], ["Frattaminore", "NA"]], + "80020": [ + ["Crispano", "NA"], + ["Parco Delle Acacie", "NA"], + ["Casavatore", "NA"], + ["Frattaminore", "NA"], + ], "80021": [["Afragola", "NA"]], "80022": [["Arzano", "NA"]], "80023": [["Pascarola", "NA"], ["Caivano", "NA"]], @@ -2276,9 +2632,26 @@ class Provider(AddressProvider): "80031": [["Brusciano", "NA"]], "80032": [["Casamarciano", "NA"]], "80033": [["Cicciano", "NA"]], - "80034": [["Marigliano", "NA"], ["Faibano", "NA"], ["Lausdomini", "NA"], ["Selva", "NA"], ["Casaferro", "NA"]], - "80035": [["Nola", "NA"], ["Polvica", "NA"], ["Piazzolla", "NA"], ["Cinquevie", "NA"], ["Pollastri", "NA"]], - "80036": [["Palma Campania", "NA"], ["Vico Di Palma", "NA"], ["Vico", "NA"], ["Castello", "NA"]], + "80034": [ + ["Marigliano", "NA"], + ["Faibano", "NA"], + ["Lausdomini", "NA"], + ["Selva", "NA"], + ["Casaferro", "NA"], + ], + "80035": [ + ["Nola", "NA"], + ["Polvica", "NA"], + ["Piazzolla", "NA"], + ["Cinquevie", "NA"], + ["Pollastri", "NA"], + ], + "80036": [ + ["Palma Campania", "NA"], + ["Vico Di Palma", "NA"], + ["Vico", "NA"], + ["Castello", "NA"], + ], "80038": [["Pomigliano D'Arco", "NA"]], "80039": [["Saviano", "NA"], ["Piazzolla Di Saviano", "NA"]], "80040": [ @@ -2300,9 +2673,18 @@ class Provider(AddressProvider): "80041": [["Boscoreale", "NA"], ["Marchesa", "NA"]], "80042": [["Boscotrecase", "NA"]], "80044": [["Ottaviano", "NA"], ["San Gennarello", "NA"]], - "80045": [["Mariconda", "NA"], ["Messigno", "NA"], ["Pompei", "NA"], ["Pompei Scavi", "NA"]], + "80045": [ + ["Mariconda", "NA"], + ["Messigno", "NA"], + ["Pompei", "NA"], + ["Pompei Scavi", "NA"], + ], "80046": [["San Giorgio A Cremano", "NA"]], - "80047": [["Santa Maria La Scala", "NA"], ["San Giuseppe Vesuviano", "NA"], ["Casilli", "NA"]], + "80047": [ + ["Santa Maria La Scala", "NA"], + ["San Giuseppe Vesuviano", "NA"], + ["Casilli", "NA"], + ], "80048": [ ["Madonna Dell'Arco", "NA"], ["Starza Vecchia", "NA"], @@ -2321,7 +2703,12 @@ class Provider(AddressProvider): ["San Nicola", "NA"], ["Lettere", "NA"], ], - "80051": [["Agerola", "NA"], ["Pianillo", "NA"], ["San Lazzaro Di Agerola", "NA"], ["Bomerano", "NA"]], + "80051": [ + ["Agerola", "NA"], + ["Pianillo", "NA"], + ["San Lazzaro Di Agerola", "NA"], + ["Bomerano", "NA"], + ], "80053": [ ["Castellammare Di Stabia", "NA"], ["Scanzano", "NA"], @@ -2333,7 +2720,11 @@ class Provider(AddressProvider): "80056": [["Ercolano", "NA"], ["Resina", "NA"]], "80057": [["Sant'Antonio Abate", "NA"]], "80058": [["Torre Annunziata", "NA"]], - "80059": [["Torre Del Greco", "NA"], ["Leopardi", "NA"], ["Santa Maria La Bruna", "NA"]], + "80059": [ + ["Torre Del Greco", "NA"], + ["Leopardi", "NA"], + ["Santa Maria La Bruna", "NA"], + ], "80060": [["Massaquano", "NA"], ["Monte Faito", "NA"]], "80061": [ ["Massa Lubrense", "NA"], @@ -2345,9 +2736,18 @@ class Provider(AddressProvider): "80062": [["Meta", "NA"]], "80063": [["Piano Di Sorrento", "NA"]], "80065": [["Sant'Agnello", "NA"], ["Colli Di Fontanelle", "NA"]], - "80066": [["Seiano", "NA"], ["Fornacelle", "NA"], ["Montechiaro", "NA"], ["Fornacella", "NA"]], + "80066": [ + ["Seiano", "NA"], + ["Fornacelle", "NA"], + ["Montechiaro", "NA"], + ["Fornacella", "NA"], + ], "80067": [["Priora", "NA"], ["Capo Di Sorrento", "NA"], ["Sorrento", "NA"]], - "80069": [["Moiano", "NA"], ["Vico Equense", "NA"], ["Villaggio Monte Faito", "NA"]], + "80069": [ + ["Moiano", "NA"], + ["Vico Equense", "NA"], + ["Villaggio Monte Faito", "NA"], + ], "80070": [ ["Buonopane", "NA"], ["Succhivo", "NA"], @@ -2402,7 +2802,12 @@ class Provider(AddressProvider): "80127": [["Vomero", "NA"], ["Napoli", "NA"]], "80128": [["Napoli", "NA"]], "80129": [["Napoli", "NA"]], - "80131": [["Napoli", "NA"], ["Miano", "NA"], ["Arenella", "NA"], ["Cappella Cangiani", "NA"]], + "80131": [ + ["Napoli", "NA"], + ["Miano", "NA"], + ["Arenella", "NA"], + ["Cappella Cangiani", "NA"], + ], "80132": [["Napoli", "NA"]], "80133": [["Napoli", "NA"]], "80134": [["Napoli", "NA"]], @@ -2414,7 +2819,11 @@ class Provider(AddressProvider): "80141": [["Napoli", "NA"]], "80142": [["Napoli", "NA"]], "80143": [["Napoli", "NA"]], - "80144": [["Napoli", "NA"], ["San Pietro A Patierno", "NA"], ["Secondigliano", "NA"]], + "80144": [ + ["Napoli", "NA"], + ["San Pietro A Patierno", "NA"], + ["Secondigliano", "NA"], + ], "80145": [ ["Marianella", "NA"], ["Chiaiano Ed Uniti", "NA"], @@ -2509,7 +2918,12 @@ class Provider(AddressProvider): ["Centro Urbano", "SA"], ], "84021": [["Tufariello", "SA"], ["Buccino", "SA"], ["Buccino Stazione", "SA"]], - "84022": [["Serradarce", "SA"], ["Puglietta", "SA"], ["Quadrivio", "SA"], ["Campagna", "SA"]], + "84022": [ + ["Serradarce", "SA"], + ["Puglietta", "SA"], + ["Quadrivio", "SA"], + ["Campagna", "SA"], + ], "84023": [["Persano", "SA"]], "84024": [["Bagni Di Contursi", "SA"], ["Contursi Terme", "SA"]], "84025": [ @@ -2586,7 +3000,12 @@ class Provider(AddressProvider): "84042": [["Acerno", "SA"]], "84043": [["Agropoli Stazione", "SA"], ["Agropoli", "SA"]], "84044": [["Matinella", "SA"], ["Albanella", "SA"]], - "84045": [["Borgo Carillia", "SA"], ["Carillia", "SA"], ["Altavilla Silentina", "SA"], ["Cerrelli", "SA"]], + "84045": [ + ["Borgo Carillia", "SA"], + ["Carillia", "SA"], + ["Altavilla Silentina", "SA"], + ["Cerrelli", "SA"], + ], "84046": [ ["Marina Di Ascea", "SA"], ["Terradura Di Ascea", "SA"], @@ -2656,7 +3075,12 @@ class Provider(AddressProvider): "84055": [["Felitto", "SA"]], "84056": [["Cardile", "SA"], ["Gioi", "SA"]], "84057": [["Villa Littorio", "SA"], ["Laurino", "SA"]], - "84059": [["Lentiscosa", "SA"], ["Camerota", "SA"], ["Licusati", "SA"], ["Marina Di Camerota", "SA"]], + "84059": [ + ["Lentiscosa", "SA"], + ["Camerota", "SA"], + ["Licusati", "SA"], + ["Marina Di Camerota", "SA"], + ], "84060": [ ["Vatolla", "SA"], ["Montecorice", "SA"], @@ -2693,7 +3117,12 @@ class Provider(AddressProvider): ["Valle", "SA"], ], "84065": [["Piaggine", "SA"]], - "84066": [["Pisciotta", "SA"], ["Marina Di Pisciotta", "SA"], ["Rodio", "SA"], ["Caprioli", "SA"]], + "84066": [ + ["Pisciotta", "SA"], + ["Marina Di Pisciotta", "SA"], + ["Rodio", "SA"], + ["Caprioli", "SA"], + ], "84067": [["Santa Marina", "SA"], ["Policastro Bussentino", "SA"]], "84068": [ ["Galdo Cilento", "SA"], @@ -2704,7 +3133,13 @@ class Provider(AddressProvider): ["Galdo", "SA"], ["Cannicchio", "SA"], ], - "84069": [["Acquaviva", "SA"], ["Carratiello", "SA"], ["Fonte", "SA"], ["Roccadaspide", "SA"], ["Serra", "SA"]], + "84069": [ + ["Acquaviva", "SA"], + ["Carratiello", "SA"], + ["Fonte", "SA"], + ["Roccadaspide", "SA"], + ["Serra", "SA"], + ], "84070": [ ["San Mauro La Bruca", "SA"], ["Scario", "SA"], @@ -2729,9 +3164,18 @@ class Provider(AddressProvider): ["Sessa Cilento", "SA"], ], "84075": [["Gorga", "SA"], ["Stio", "SA"]], - "84076": [["Copersito", "SA"], ["Copersito Cilento", "SA"], ["Torchiara", "SA"]], + "84076": [ + ["Copersito", "SA"], + ["Copersito Cilento", "SA"], + ["Torchiara", "SA"], + ], "84077": [["Torre Orsaia", "SA"], ["Castel Ruggero", "SA"]], - "84078": [["Pattano", "SA"], ["Angellara", "SA"], ["Massa Della Lucania", "SA"], ["Vallo Della Lucania", "SA"]], + "84078": [ + ["Pattano", "SA"], + ["Angellara", "SA"], + ["Massa Della Lucania", "SA"], + ["Vallo Della Lucania", "SA"], + ], "84079": [["Vibonati", "SA"], ["Villammare", "SA"]], "84080": [ ["Capezzano Inferiore", "SA"], @@ -2753,7 +3197,12 @@ class Provider(AddressProvider): ["Sava", "SA"], ], "84082": [["Manzi", "SA"], ["Bracigliano", "SA"], ["San Nazario", "SA"]], - "84083": [["Castelluccio", "SA"], ["Fimiani", "SA"], ["Castel San Giorgio", "SA"], ["Lanzara", "SA"]], + "84083": [ + ["Castelluccio", "SA"], + ["Fimiani", "SA"], + ["Castel San Giorgio", "SA"], + ["Lanzara", "SA"], + ], "84084": [ ["Villa", "SA"], ["Pizzolano", "SA"], @@ -2779,7 +3228,11 @@ class Provider(AddressProvider): ["Acquarola", "SA"], ["Mercato San Severino", "SA"], ], - "84086": [["Casali Di Roccapiemonte", "SA"], ["Casali San Potito", "SA"], ["Roccapiemonte", "SA"]], + "84086": [ + ["Casali Di Roccapiemonte", "SA"], + ["Casali San Potito", "SA"], + ["Roccapiemonte", "SA"], + ], "84087": [["Lavorate", "SA"], ["Episcopio", "SA"], ["Sarno", "SA"]], "84088": [["Siano", "SA"]], "84090": [ @@ -2842,11 +3295,21 @@ class Provider(AddressProvider): "84127": [["Salerno", "SA"], ["Torrione Di Salerno", "SA"]], "84128": [["Pastena Di Salerno", "SA"], ["Salerno", "SA"]], "84129": [["Salerno", "SA"]], - "84131": [["Salerno", "SA"], ["San Leonardo", "SA"], ["Fuorni", "SA"], ["Mercatello Di Salerno", "SA"]], + "84131": [ + ["Salerno", "SA"], + ["San Leonardo", "SA"], + ["Fuorni", "SA"], + ["Mercatello Di Salerno", "SA"], + ], "84132": [["Salerno", "SA"]], "84133": [["Salerno", "SA"]], "84134": [["Giovi", "SA"], ["Salerno", "SA"]], - "84135": [["Fratte", "SA"], ["Salerno", "SA"], ["Ogliara", "SA"], ["Matierno", "SA"]], + "84135": [ + ["Fratte", "SA"], + ["Salerno", "SA"], + ["Ogliara", "SA"], + ["Matierno", "SA"], + ], "40010": [ ["Bentivoglio", "BO"], ["Osteria Nuova", "BO"], @@ -2936,17 +3399,37 @@ class Provider(AddressProvider): ["Suviana", "BO"], ], "40032": [["Ponte Di Verzuno", "BO"], ["Bargi", "BO"], ["Camugnano", "BO"]], - "40033": [["Casalecchio Di Reno", "BO"], ["Ceretolo", "BO"], ["Cantagallo", "BO"]], + "40033": [ + ["Casalecchio Di Reno", "BO"], + ["Ceretolo", "BO"], + ["Cantagallo", "BO"], + ], "40034": [ ["Santa Maria Di Labante", "BO"], ["Castel D'Aiano", "BO"], ["Villa D'Aiano", "BO"], ["Rocca Di Roffeno", "BO"], ], - "40035": [["Castiglione Dei Pepoli", "BO"], ["Baragazza", "BO"], ["Lagaro", "BO"], ["Creda", "BO"]], + "40035": [ + ["Castiglione Dei Pepoli", "BO"], + ["Baragazza", "BO"], + ["Lagaro", "BO"], + ["Creda", "BO"], + ], "40036": [["Rioveggio", "BO"], ["Monzuno", "BO"], ["Vado", "BO"]], - "40037": [["Sasso Marconi", "BO"], ["Pontecchio Marconi", "BO"], ["Fontana", "BO"], ["Borgonuovo", "BO"]], - "40038": [["Susano", "BO"], ["Tole'", "BO"], ["Vergato", "BO"], ["Cereglio", "BO"], ["Riola", "BO"]], + "40037": [ + ["Sasso Marconi", "BO"], + ["Pontecchio Marconi", "BO"], + ["Fontana", "BO"], + ["Borgonuovo", "BO"], + ], + "40038": [ + ["Susano", "BO"], + ["Tole'", "BO"], + ["Vergato", "BO"], + ["Cereglio", "BO"], + ["Riola", "BO"], + ], "40041": [ ["Marano", "BO"], ["Santa Maria Villiana", "BO"], @@ -2963,7 +3446,12 @@ class Provider(AddressProvider): ["Rocca Corneta", "BO"], ["Lizzano In Belvedere", "BO"], ], - "40043": [["Lama Di Reno", "BO"], ["Lama Di Setta", "BO"], ["Marzabotto", "BO"], ["Pian Di Venola", "BO"]], + "40043": [ + ["Lama Di Reno", "BO"], + ["Lama Di Setta", "BO"], + ["Marzabotto", "BO"], + ["Pian Di Venola", "BO"], + ], "40046": [ ["Capugnano", "BO"], ["Porretta Terme", "BO"], @@ -3005,12 +3493,33 @@ class Provider(AddressProvider): ["Savazza", "BO"], ["Venezzano", "BO"], ], - "40051": [["Altedo", "BO"], ["Casoni", "BO"], ["Malalbergo", "BO"], ["Pegola", "BO"]], - "40052": [["Boschi", "BO"], ["Baricella", "BO"], ["Mondonuovo", "BO"], ["San Gabriele", "BO"]], + "40051": [ + ["Altedo", "BO"], + ["Casoni", "BO"], + ["Malalbergo", "BO"], + ["Pegola", "BO"], + ], + "40052": [ + ["Boschi", "BO"], + ["Baricella", "BO"], + ["Mondonuovo", "BO"], + ["San Gabriele", "BO"], + ], "40053": [["Valsamoggia", "BO"], ["Bazzano", "BO"]], - "40054": [["Vedrana", "BO"], ["Bagnarola", "BO"], ["Riccardina", "BO"], ["Budrio", "BO"], ["Mezzolara", "BO"]], + "40054": [ + ["Vedrana", "BO"], + ["Bagnarola", "BO"], + ["Riccardina", "BO"], + ["Budrio", "BO"], + ["Mezzolara", "BO"], + ], "40055": [["Fiesso", "BO"], ["Villanova", "BO"], ["Castenaso", "BO"]], - "40056": [["Muffa", "BO"], ["Pragatto", "BO"], ["Crespellano", "BO"], ["Calcara", "BO"]], + "40056": [ + ["Muffa", "BO"], + ["Pragatto", "BO"], + ["Crespellano", "BO"], + ["Calcara", "BO"], + ], "40057": [ ["Granarolo Dell'Emilia", "BO"], ["Fabbreria Di Cadriana", "BO"], @@ -3055,7 +3564,12 @@ class Provider(AddressProvider): ["Martiri Di Pizzocalvo", "BO"], ["Pulce", "BO"], ], - "40069": [["Ponte Ronca", "BO"], ["Riale", "BO"], ["Zola Predosa", "BO"], ["Zola", "BO"]], + "40069": [ + ["Ponte Ronca", "BO"], + ["Riale", "BO"], + ["Zola Predosa", "BO"], + ["Zola", "BO"], + ], "40100": [["Bologna", "BO"]], "40121": [["Bologna", "BO"]], "40122": [["Bologna", "BO"]], @@ -3071,7 +3585,12 @@ class Provider(AddressProvider): "40133": [["Bologna", "BO"]], "40134": [["Bologna", "BO"]], "40135": [["Bologna", "BO"], ["Casaglia", "BO"]], - "40136": [["Roncrio", "BO"], ["Gaibola", "BO"], ["Bologna", "BO"], ["Paderno", "BO"]], + "40136": [ + ["Roncrio", "BO"], + ["Gaibola", "BO"], + ["Bologna", "BO"], + ["Paderno", "BO"], + ], "40137": [["Bologna", "BO"]], "40138": [["Bologna", "BO"], ["Roveri", "BO"]], "40139": [["Bologna", "BO"]], @@ -3085,8 +3604,17 @@ class Provider(AddressProvider): ["Galeata", "FC"], ["Premilcuore", "FC"], ], - "47011": [["Terra Del Sole", "FC"], ["Castrocaro Terme E Terra Del Sole", "FC"], ["Pieve Salutare", "FC"]], - "47012": [["Cusercoli", "FC"], ["Voltre", "FC"], ["Nespoli", "FC"], ["Civitella Di Romagna", "FC"]], + "47011": [ + ["Terra Del Sole", "FC"], + ["Castrocaro Terme E Terra Del Sole", "FC"], + ["Pieve Salutare", "FC"], + ], + "47012": [ + ["Cusercoli", "FC"], + ["Voltre", "FC"], + ["Nespoli", "FC"], + ["Civitella Di Romagna", "FC"], + ], "47013": [["San Ruffillo", "FC"], ["Dovadola", "FC"]], "47014": [ ["Teodorano", "FC"], @@ -3108,7 +3636,13 @@ class Provider(AddressProvider): "47017": [["Rocca San Casciano", "FC"], ["Calbola", "FC"]], "47018": [["Biserno", "FC"], ["Corniolo", "FC"], ["Santa Sofia", "FC"]], "47019": [["Tredozio", "FC"]], - "47020": [["Budrio", "FC"], ["Longiano", "FC"], ["Roncofreddo", "FC"], ["Montiano", "FC"], ["Oriola", "FC"]], + "47020": [ + ["Budrio", "FC"], + ["Longiano", "FC"], + ["Roncofreddo", "FC"], + ["Montiano", "FC"], + ["Oriola", "FC"], + ], "47021": [ ["Monte Guidi", "FC"], ["Vessa", "FC"], @@ -3191,8 +3725,17 @@ class Provider(AddressProvider): "47034": [["Forlimpopoli", "FC"], ["Selbagnone", "FC"]], "47035": [["Gambettola", "FC"]], "47039": [["Savignano Sul Rubicone", "FC"], ["Fiumicino Di Savignano", "FC"]], - "47042": [["Bagnarola", "FC"], ["Cesenatico", "FC"], ["Villalta", "FC"], ["Sala", "FC"]], - "47043": [["Gatteo", "FC"], ["Sant'Angelo In Salute", "FC"], ["Gatteo A Mare", "FC"]], + "47042": [ + ["Bagnarola", "FC"], + ["Cesenatico", "FC"], + ["Villalta", "FC"], + ["Sala", "FC"], + ], + "47043": [ + ["Gatteo", "FC"], + ["Sant'Angelo In Salute", "FC"], + ["Gatteo A Mare", "FC"], + ], "47100": [ ["Villanova", "FC"], ["Pianta", "FC"], @@ -3268,7 +3811,12 @@ class Provider(AddressProvider): ["Mezzogoro", "FE"], ["Pontelangorino", "FE"], ], - "44022": [["San Giuseppe", "FE"], ["Volania", "FE"], ["Comacchio", "FE"], ["Vaccolino", "FE"]], + "44022": [ + ["San Giuseppe", "FE"], + ["Volania", "FE"], + ["Comacchio", "FE"], + ["Vaccolino", "FE"], + ], "44023": [["Marozzo", "FE"], ["Lagosanto", "FE"]], "44026": [ ["Bosco", "FE"], @@ -3279,9 +3827,23 @@ class Provider(AddressProvider): ["Ariano Ferrarese", "FE"], ["Ariano", "FE"], ], - "44027": [["Migliaro", "FE"], ["Massa Fiscaglia", "FE"], ["Migliarino", "FE"], ["Fiscaglia", "FE"]], - "44028": [["Poggio Renatico", "FE"], ["Coronella", "FE"], ["Gallo", "FE"], ["Chiesa Nuova", "FE"]], - "44029": [["Lido Di Spina", "FE"], ["Lido Degli Estensi", "FE"], ["Porto Garibaldi", "FE"]], + "44027": [ + ["Migliaro", "FE"], + ["Massa Fiscaglia", "FE"], + ["Migliarino", "FE"], + ["Fiscaglia", "FE"], + ], + "44028": [ + ["Poggio Renatico", "FE"], + ["Coronella", "FE"], + ["Gallo", "FE"], + ["Chiesa Nuova", "FE"], + ], + "44029": [ + ["Lido Di Spina", "FE"], + ["Lido Degli Estensi", "FE"], + ["Porto Garibaldi", "FE"], + ], "44030": [ ["Alberone Di Ro", "FE"], ["Guarda", "FE"], @@ -3289,7 +3851,12 @@ class Provider(AddressProvider): ["Guarda Ferrarese", "FE"], ["Alberone Di Guarda", "FE"], ], - "44033": [["Ro", "FE"], ["Cologna", "FE"], ["Serravalle", "FE"], ["Berra", "FE"]], + "44033": [ + ["Ro", "FE"], + ["Cologna", "FE"], + ["Serravalle", "FE"], + ["Berra", "FE"], + ], "44034": [ ["Tamara", "FE"], ["Fossalta", "FE"], @@ -3305,7 +3872,12 @@ class Provider(AddressProvider): ], "44035": [["Brazzolo", "FE"]], "44037": [["Jolanda Di Savoia", "FE"]], - "44039": [["Formignana", "FE"], ["Tresigallo", "FE"], ["Rero", "FE"], ["Final Di Rero", "FE"]], + "44039": [ + ["Formignana", "FE"], + ["Tresigallo", "FE"], + ["Rero", "FE"], + ["Final Di Rero", "FE"], + ], "44041": [["Casumaro", "FE"], ["Reno Centese", "FE"], ["Buonacompra", "FE"]], "44042": [ ["Penzale", "FE"], @@ -3323,7 +3895,11 @@ class Provider(AddressProvider): "44122": [["Ferrara", "FE"]], "44123": [["Ferrara", "FE"]], "44124": [["Ferrara", "FE"]], - "41011": [["Panzano", "MO"], ["Saliceto Buzzalino", "MO"], ["Campogalliano", "MO"]], + "41011": [ + ["Panzano", "MO"], + ["Saliceto Buzzalino", "MO"], + ["Campogalliano", "MO"], + ], "41012": [ ["Gargallo", "MO"], ["Budrione", "MO"], @@ -3359,10 +3935,19 @@ class Provider(AddressProvider): ["Campazzo", "MO"], ["Redu'", "MO"], ], - "41016": [["Rovereto Sulla Secchia", "MO"], ["Sant'Antonio In Mercadello", "MO"], ["Novi Di Modena", "MO"]], + "41016": [ + ["Rovereto Sulla Secchia", "MO"], + ["Sant'Antonio In Mercadello", "MO"], + ["Novi Di Modena", "MO"], + ], "41017": [["Ravarino", "MO"], ["Stuffione", "MO"]], "41018": [["San Cesario Sul Panaro", "MO"]], - "41019": [["Soliera", "MO"], ["Sozzigalli", "MO"], ["Appalto", "MO"], ["Limidi", "MO"]], + "41019": [ + ["Soliera", "MO"], + ["Sozzigalli", "MO"], + ["Appalto", "MO"], + ["Limidi", "MO"], + ], "41020": [ ["Castellino Brocco", "MO"], ["Serpiano", "MO"], @@ -3471,7 +4056,12 @@ class Provider(AddressProvider): ["Staggia", "MO"], ], "41031": [["Camposanto", "MO"]], - "41032": [["Cavezzo", "MO"], ["Motta Sulla Secchia", "MO"], ["Motta", "MO"], ["Villa Motta", "MO"]], + "41032": [ + ["Cavezzo", "MO"], + ["Motta Sulla Secchia", "MO"], + ["Motta", "MO"], + ["Villa Motta", "MO"], + ], "41033": [ ["Concordia Sulla Secchia", "MO"], ["Santa Caterina", "MO"], @@ -3482,7 +4072,12 @@ class Provider(AddressProvider): ], "41034": [["Finale Emilia", "MO"], ["Reno Finalese", "MO"]], "41035": [["Massa Finalese", "MO"]], - "41036": [["Villafranca", "MO"], ["Medolla", "MO"], ["Villafranca Di Medolla", "MO"], ["Camurana", "MO"]], + "41036": [ + ["Villafranca", "MO"], + ["Medolla", "MO"], + ["Villafranca Di Medolla", "MO"], + ["Camurana", "MO"], + ], "41037": [ ["Gavello", "MO"], ["Cividale", "MO"], @@ -3563,8 +4158,16 @@ class Provider(AddressProvider): ["Saltino", "MO"], ["Montebaranzone", "MO"], ], - "41049": [["Sassuolo", "MO"], ["San Michele Dei Mucchietti", "MO"], ["Montegibbio", "MO"]], - "41051": [["Montale", "MO"], ["Montale Rangone", "MO"], ["Castelnuovo Rangone", "MO"]], + "41049": [ + ["Sassuolo", "MO"], + ["San Michele Dei Mucchietti", "MO"], + ["Montegibbio", "MO"], + ], + "41051": [ + ["Montale", "MO"], + ["Montale Rangone", "MO"], + ["Castelnuovo Rangone", "MO"], + ], "41052": [ ["Guiglia", "MO"], ["Samone", "MO"], @@ -3576,8 +4179,18 @@ class Provider(AddressProvider): ["Pieve Di Trebbio", "MO"], ["Pieve Trebbio", "MO"], ], - "41053": [["Torre Maina", "MO"], ["Gorzano", "MO"], ["Maranello", "MO"], ["Pozza", "MO"]], - "41054": [["Marano Sul Panaro", "MO"], ["Ospitaletto", "MO"], ["Villa Bianca", "MO"], ["Festa'", "MO"]], + "41053": [ + ["Torre Maina", "MO"], + ["Gorzano", "MO"], + ["Maranello", "MO"], + ["Pozza", "MO"], + ], + "41054": [ + ["Marano Sul Panaro", "MO"], + ["Ospitaletto", "MO"], + ["Villa Bianca", "MO"], + ["Festa'", "MO"], + ], "41055": [ ["Iola", "MO"], ["Iola Di Montese", "MO"], @@ -3682,15 +4295,36 @@ class Provider(AddressProvider): ["Rezzanello", "PC"], ["Alseno", "PC"], ], - "29011": [["Borgonovo Val Tidone", "PC"], ["Castelnovo Val Tidone", "PC"], ["Castelnuovo", "PC"]], + "29011": [ + ["Borgonovo Val Tidone", "PC"], + ["Castelnovo Val Tidone", "PC"], + ["Castelnuovo", "PC"], + ], "29012": [["Caorso", "PC"]], "29013": [["Rezzano", "PC"], ["Carpaneto Piacentino", "PC"]], "29014": [["Castell'Arquato", "PC"], ["Vigolo Marchese", "PC"]], - "29015": [["Fontana Pradosa", "PC"], ["Castel San Giovanni", "PC"], ["Creta", "PC"], ["Ganaghello", "PC"]], + "29015": [ + ["Fontana Pradosa", "PC"], + ["Castel San Giovanni", "PC"], + ["Creta", "PC"], + ["Ganaghello", "PC"], + ], "29016": [["Cortemaggiore", "PC"]], - "29017": [["San Protaso", "PC"], ["Baselicaduce", "PC"], ["Fiorenzuola D'Arda", "PC"]], - "29018": [["Chiavenna Rocchetta", "PC"], ["Rustigazzo", "PC"], ["Lugagnano Val D'Arda", "PC"]], - "29019": [["San Damiano", "PC"], ["San Giorgio Piacentino", "PC"], ["Godi", "PC"]], + "29017": [ + ["San Protaso", "PC"], + ["Baselicaduce", "PC"], + ["Fiorenzuola D'Arda", "PC"], + ], + "29018": [ + ["Chiavenna Rocchetta", "PC"], + ["Rustigazzo", "PC"], + ["Lugagnano Val D'Arda", "PC"], + ], + "29019": [ + ["San Damiano", "PC"], + ["San Giorgio Piacentino", "PC"], + ["Godi", "PC"], + ], "29020": [ ["Quadrelli", "PC"], ["Perino", "PC"], @@ -3729,7 +4363,12 @@ class Provider(AddressProvider): ["Mezzano Scotti", "PC"], ["Ceci", "PC"], ], - "29023": [["Mareto", "PC"], ["Groppallo", "PC"], ["Le Moline", "PC"], ["Farini", "PC"]], + "29023": [ + ["Mareto", "PC"], + ["Groppallo", "PC"], + ["Le Moline", "PC"], + ["Farini", "PC"], + ], "29024": [ ["Centenaro Castello", "PC"], ["Centenaro", "PC"], @@ -3795,8 +4434,16 @@ class Provider(AddressProvider): ["Torrechiara", "PR"], ], "43014": [["Ramiola", "PR"], ["Felegara", "PR"], ["Medesano", "PR"]], - "43015": [["Cella Di Costamezzana", "PR"], ["Costamezzana", "PR"], ["Noceto", "PR"]], - "43016": [["Polesine Parmense", "PR"], ["Pieveottoville", "PR"], ["Zibello", "PR"]], + "43015": [ + ["Cella Di Costamezzana", "PR"], + ["Costamezzana", "PR"], + ["Noceto", "PR"], + ], + "43016": [ + ["Polesine Parmense", "PR"], + ["Pieveottoville", "PR"], + ["Zibello", "PR"], + ], "43017": [["San Secondo Parmense", "PR"]], "43018": [ ["Coltaro", "PR"], @@ -3854,8 +4501,18 @@ class Provider(AddressProvider): ["Capriglio", "PR"], ["Musiara Inferiore", "PR"], ], - "43029": [["Traversetolo", "PR"], ["Vignale", "PR"], ["Mamiano", "PR"], ["Castione De' Baratti", "PR"]], - "43030": [["Marzolara", "PR"], ["Bore", "PR"], ["Calestano", "PR"], ["Ravarano", "PR"]], + "43029": [ + ["Traversetolo", "PR"], + ["Vignale", "PR"], + ["Mamiano", "PR"], + ["Castione De' Baratti", "PR"], + ], + "43030": [ + ["Marzolara", "PR"], + ["Bore", "PR"], + ["Calestano", "PR"], + ["Ravarano", "PR"], + ], "43032": [ ["Bardi", "PR"], ["Santa Giustina", "PR"], @@ -3863,7 +4520,11 @@ class Provider(AddressProvider): ["Santa Giustina Val Di Lecca", "PR"], ["Gravago", "PR"], ], - "43035": [["Sant'Ilario Di Baganza", "PR"], ["San Michele Di Tiorre", "PR"], ["Felino", "PR"]], + "43035": [ + ["Sant'Ilario Di Baganza", "PR"], + ["San Michele Di Tiorre", "PR"], + ["Felino", "PR"], + ], "43036": [ ["Fidenza", "PR"], ["Chiusa Ferranda", "PR"], @@ -3879,7 +4540,12 @@ class Provider(AddressProvider): ["Lesignano De' Bagni", "PR"], ["Santa Maria Del Piano", "PR"], ], - "43038": [["San Vitale", "PR"], ["Sala Baganza", "PR"], ["San Vitale Di Baganza", "PR"], ["Talignano", "PR"]], + "43038": [ + ["San Vitale", "PR"], + ["Sala Baganza", "PR"], + ["San Vitale Di Baganza", "PR"], + ["Talignano", "PR"], + ], "43039": [ ["Tabiano", "PR"], ["Congelasio", "PR"], @@ -3946,8 +4612,17 @@ class Provider(AddressProvider): ["Piantonia", "PR"], ["Fornovo Di Taro", "PR"], ], - "43047": [["Pellegrino Parmense", "PR"], ["Grotta", "PR"], ["Mariano", "PR"], ["Iggio", "PR"]], - "43048": [["Sant'Andrea Bagni", "PR"], ["Varano Marchesi", "PR"], ["Varano Dei Marchesi", "PR"]], + "43047": [ + ["Pellegrino Parmense", "PR"], + ["Grotta", "PR"], + ["Mariano", "PR"], + ["Iggio", "PR"], + ], + "43048": [ + ["Sant'Andrea Bagni", "PR"], + ["Varano Marchesi", "PR"], + ["Varano Dei Marchesi", "PR"], + ], "43049": [["Pessola", "PR"], ["Carpadasco", "PR"], ["Varsi", "PR"]], "43050": [ ["Valmozzola Stazione", "PR"], @@ -3956,7 +4631,12 @@ class Provider(AddressProvider): ["Mormorola", "PR"], ["San Martino Di Valmozzola", "PR"], ], - "43051": [["Albareto", "PR"], ["San Quirico", "PR"], ["San Quirico D'Albareto", "PR"], ["Bertorella", "PR"]], + "43051": [ + ["Albareto", "PR"], + ["San Quirico", "PR"], + ["San Quirico D'Albareto", "PR"], + ["Bertorella", "PR"], + ], "43052": [["Colorno", "PR"]], "43053": [["Compiano", "PR"], ["Strela", "PR"], ["Cereseto", "PR"]], "43055": [ @@ -3967,7 +4647,12 @@ class Provider(AddressProvider): ], "43056": [["Torrile", "PR"], ["San Polo", "PR"]], "43058": [["Sorbolo", "PR"], ["Chiozzola", "PR"], ["Mezzani", "PR"]], - "43059": [["Casale Di Tornolo", "PR"], ["Tornolo", "PR"], ["Santa Maria Del Taro", "PR"], ["Tarsogno", "PR"]], + "43059": [ + ["Casale Di Tornolo", "PR"], + ["Tornolo", "PR"], + ["Santa Maria Del Taro", "PR"], + ["Tarsogno", "PR"], + ], "43100": [ ["Vicomero", "PR"], ["Botteghino", "PR"], @@ -4046,7 +4731,11 @@ class Provider(AddressProvider): ["Reda", "RA"], ["Granarolo", "RA"], ], - "48020": [["Savarna", "RA"], ["Sant'Alberto", "RA"], ["Sant'Agata Sul Santerno", "RA"]], + "48020": [ + ["Savarna", "RA"], + ["Sant'Alberto", "RA"], + ["Sant'Agata Sul Santerno", "RA"], + ], "48022": [ ["Santa Maria In Fabriago", "RA"], ["San Bernardino", "RA"], @@ -4116,9 +4805,20 @@ class Provider(AddressProvider): ], "42011": [["Bagnolo In Piano", "RE"]], "42012": [["Campagnola Emilia", "RE"]], - "42013": [["Villalunga", "RE"], ["Veggia", "RE"], ["Casalgrande", "RE"], ["Salvaterra", "RE"]], + "42013": [ + ["Villalunga", "RE"], + ["Veggia", "RE"], + ["Casalgrande", "RE"], + ["Salvaterra", "RE"], + ], "42014": [["Cadiroggio", "RE"], ["Castellarano", "RE"], ["Roteglia", "RE"]], - "42015": [["Prato", "RE"], ["San Martino", "RE"], ["Fosdondo", "RE"], ["Correggio", "RE"], ["Budrio", "RE"]], + "42015": [ + ["Prato", "RE"], + ["San Martino", "RE"], + ["Fosdondo", "RE"], + ["Correggio", "RE"], + ["Budrio", "RE"], + ], "42016": [["San Girolamo", "RE"], ["Pieve", "RE"], ["Guastalla", "RE"]], "42017": [ ["Novellara", "RE"], @@ -4154,7 +4854,11 @@ class Provider(AddressProvider): ], "42021": [["Bibbiano", "RE"], ["Barco", "RE"]], "42022": [["Boretto", "RE"]], - "42023": [["Cadelbosco Di Sopra", "RE"], ["Argine", "RE"], ["Cadelbosco Di Sotto", "RE"]], + "42023": [ + ["Cadelbosco Di Sopra", "RE"], + ["Argine", "RE"], + ["Cadelbosco Di Sotto", "RE"], + ], "42024": [["Meletole", "RE"], ["Castelnovo Di Sotto", "RE"]], "42025": [["Cavriago", "RE"]], "42026": [["Canossa", "RE"], ["Ciano D'Enza", "RE"], ["Compiano D'Enza", "RE"]], @@ -4189,7 +4893,13 @@ class Provider(AddressProvider): ["Collagna", "RE"], ["Cerreto Alpi", "RE"], ], - "42033": [["Carpineti", "RE"], ["Pantano", "RE"], ["Savognatica", "RE"], ["Valestra", "RE"], ["Marola", "RE"]], + "42033": [ + ["Carpineti", "RE"], + ["Pantano", "RE"], + ["Savognatica", "RE"], + ["Valestra", "RE"], + ["Marola", "RE"], + ], "42034": [["Casina", "RE"], ["Paullo Di Casina", "RE"], ["Trinita'", "RE"]], "42035": [ ["Casale", "RE"], @@ -4214,7 +4924,12 @@ class Provider(AddressProvider): ["Santa Vittoria", "RE"], ["Pieve Saliceto", "RE"], ], - "42045": [["Villarotta", "RE"], ["Casoni", "RE"], ["Luzzara", "RE"], ["Codisotto", "RE"]], + "42045": [ + ["Villarotta", "RE"], + ["Casoni", "RE"], + ["Luzzara", "RE"], + ["Codisotto", "RE"], + ], "42046": [["Reggiolo", "RE"], ["Brugneto", "RE"]], "42047": [["Rolo", "RE"]], "42048": [["Rubiera", "RE"]], @@ -4247,7 +4962,11 @@ class Provider(AddressProvider): ["Corticella", "RE"], ["Gavasseto", "RE"], ], - "47814": [["Igea Marina", "RN"], ["Bellaria Igea Marina", "RN"], ["Bellaria", "RN"]], + "47814": [ + ["Igea Marina", "RN"], + ["Bellaria Igea Marina", "RN"], + ["Bellaria", "RN"], + ], "47822": [ ["Santarcangelo Di Romagna", "RN"], ["Santa Giustina Di Santarcangelo", "RN"], @@ -4274,7 +4993,11 @@ class Provider(AddressProvider): "47837": [["Montegridolfo", "RN"]], "47838": [["Riccione", "RN"]], "47841": [["Cattolica", "RN"]], - "47842": [["Pianventena", "RN"], ["Montalbano", "RN"], ["San Giovanni In Marignano", "RN"]], + "47842": [ + ["Pianventena", "RN"], + ["Montalbano", "RN"], + ["San Giovanni In Marignano", "RN"], + ], "47843": [ ["Misano Monte", "RN"], ["Misano Adriatico", "RN"], @@ -4382,10 +5105,24 @@ class Provider(AddressProvider): ["Grado Pineta", "GO"], ], "34074": [["Monfalcone", "GO"], ["Marina Julia", "GO"]], - "34075": [["Isola Morosini", "GO"], ["Pieris", "GO"], ["San Canzian D'Isonzo", "GO"], ["Begliano", "GO"]], - "34076": [["Medea", "GO"], ["Versa", "GO"], ["Romans D'Isonzo", "GO"], ["Fratta", "GO"]], + "34075": [ + ["Isola Morosini", "GO"], + ["Pieris", "GO"], + ["San Canzian D'Isonzo", "GO"], + ["Begliano", "GO"], + ], + "34076": [ + ["Medea", "GO"], + ["Versa", "GO"], + ["Romans D'Isonzo", "GO"], + ["Fratta", "GO"], + ], "34077": [["Ronchi Dei Legionari", "GO"], ["Vermegliano", "GO"]], - "34078": [["Poggio Terzarmata", "GO"], ["San Martino Del Carso", "GO"], ["Sagrado", "GO"]], + "34078": [ + ["Poggio Terzarmata", "GO"], + ["San Martino Del Carso", "GO"], + ["Sagrado", "GO"], + ], "34079": [["Bistrigna", "GO"], ["Staranzano", "GO"]], "34170": [ ["Oslavia", "GO"], @@ -4408,12 +5145,35 @@ class Provider(AddressProvider): ["Budoia", "PN"], ], "33072": [["San Giovanni Di Casarsa", "PN"], ["Casarsa Della Delizia", "PN"]], - "33074": [["Vigonovo", "PN"], ["Fontanafredda", "PN"], ["Nave", "PN"], ["Ceolini", "PN"]], - "33075": [["Morsano Al Tagliamento", "PN"], ["Mussons", "PN"], ["Cordovado", "PN"]], + "33074": [ + ["Vigonovo", "PN"], + ["Fontanafredda", "PN"], + ["Nave", "PN"], + ["Ceolini", "PN"], + ], + "33075": [ + ["Morsano Al Tagliamento", "PN"], + ["Mussons", "PN"], + ["Cordovado", "PN"], + ], "33076": [["Pravisdomini", "PN"], ["Barco", "PN"]], - "33077": [["Cavolano", "PN"], ["Schiavoi", "PN"], ["Sacile", "PN"], ["San Giovanni Di Livenza", "PN"]], - "33078": [["San Vito Al Tagliamento", "PN"], ["Gleris", "PN"], ["Savorgnano", "PN"]], - "33079": [["Ramuscello", "PN"], ["Bagnarola", "PN"], ["Sesto Al Reghena", "PN"], ["Casette", "PN"]], + "33077": [ + ["Cavolano", "PN"], + ["Schiavoi", "PN"], + ["Sacile", "PN"], + ["San Giovanni Di Livenza", "PN"], + ], + "33078": [ + ["San Vito Al Tagliamento", "PN"], + ["Gleris", "PN"], + ["Savorgnano", "PN"], + ], + "33079": [ + ["Ramuscello", "PN"], + ["Bagnarola", "PN"], + ["Sesto Al Reghena", "PN"], + ["Casette", "PN"], + ], "33080": [ ["Fiume Veneto", "PN"], ["Palse", "PN"], @@ -4451,7 +5211,12 @@ class Provider(AddressProvider): ["Marsure", "PN"], ["San Martino Di Campagna", "PN"], ], - "33082": [["Corva", "PN"], ["Fagnigola", "PN"], ["Tiezzo", "PN"], ["Azzano Decimo", "PN"]], + "33082": [ + ["Corva", "PN"], + ["Fagnigola", "PN"], + ["Tiezzo", "PN"], + ["Azzano Decimo", "PN"], + ], "33083": [["Chions", "PN"], ["Villotta", "PN"], ["Taiedo", "PN"]], "33084": [["Musil", "PN"], ["Cordenons", "PN"], ["Villa D'Arco", "PN"]], "33085": [["Campagna", "PN"], ["Maniago", "PN"]], @@ -4491,8 +5256,19 @@ class Provider(AddressProvider): ], "33092": [["Fanna", "PN"], ["Meduno", "PN"], ["Cavasso Nuovo", "PN"]], "33094": [["Valeriano", "PN"], ["Pinzano Al Tagliamento", "PN"]], - "33095": [["Domanins", "PN"], ["Rauscedo", "PN"], ["Provesano", "PN"], ["San Giorgio Della Richinvelda", "PN"]], - "33097": [["Tauriano", "PN"], ["Barbeano", "PN"], ["Spilimbergo", "PN"], ["Istrago", "PN"], ["Vacile", "PN"]], + "33095": [ + ["Domanins", "PN"], + ["Rauscedo", "PN"], + ["Provesano", "PN"], + ["San Giorgio Della Richinvelda", "PN"], + ], + "33097": [ + ["Tauriano", "PN"], + ["Barbeano", "PN"], + ["Spilimbergo", "PN"], + ["Istrago", "PN"], + ["Vacile", "PN"], + ], "33098": [ ["San Lorenzo", "PN"], ["Valvasone Arzene", "PN"], @@ -4519,8 +5295,17 @@ class Provider(AddressProvider): ["Visogliano", "TS"], ], "34012": [["Basovizza", "TS"]], - "34014": [["Grignano", "TS"], ["Santa Croce", "TS"], ["Santa Croce Di Trieste", "TS"]], - "34015": [["Muggia", "TS"], ["San Rocco", "TS"], ["Stramare", "TS"], ["Aquilinia", "TS"]], + "34014": [ + ["Grignano", "TS"], + ["Santa Croce", "TS"], + ["Santa Croce Di Trieste", "TS"], + ], + "34015": [ + ["Muggia", "TS"], + ["San Rocco", "TS"], + ["Stramare", "TS"], + ["Aquilinia", "TS"], + ], "34016": [["Monrupino", "TS"]], "34017": [["Prosecco", "TS"]], "34018": [ @@ -4603,8 +5388,16 @@ class Provider(AddressProvider): ["Malborghetto Valbruna", "UD"], ], "33011": [["Artegna", "UD"]], - "33013": [["Gemona Piovega", "UD"], ["Ospedaletto Di Gemona", "UD"], ["Gemona Del Friuli", "UD"]], - "33015": [["Moggio Di Sotto", "UD"], ["Moggio Di Sopra", "UD"], ["Moggio Udinese", "UD"]], + "33013": [ + ["Gemona Piovega", "UD"], + ["Ospedaletto Di Gemona", "UD"], + ["Gemona Del Friuli", "UD"], + ], + "33015": [ + ["Moggio Di Sotto", "UD"], + ["Moggio Di Sopra", "UD"], + ["Moggio Udinese", "UD"], + ], "33016": [["Pontebba", "UD"]], "33017": [["Collalto", "UD"], ["Tarcento", "UD"], ["Bulfons", "UD"]], "33018": [ @@ -4724,7 +5517,11 @@ class Provider(AddressProvider): ["Lonca", "UD"], ], "33034": [["Fagagna", "UD"], ["Madrisio", "UD"], ["Ciconicco", "UD"]], - "33035": [["Torreano Di Martignacco", "UD"], ["Nogaredo Di Prato", "UD"], ["Martignacco", "UD"]], + "33035": [ + ["Torreano Di Martignacco", "UD"], + ["Nogaredo Di Prato", "UD"], + ["Martignacco", "UD"], + ], "33036": [ ["Mereto Di Tomba", "UD"], ["Tomba", "UD"], @@ -4732,8 +5529,16 @@ class Provider(AddressProvider): ["San Marco", "UD"], ["Pantianicco", "UD"], ], - "33037": [["Pasian Di Prato", "UD"], ["Colloredo Di Prato", "UD"], ["Passons", "UD"]], - "33038": [["Villanova", "UD"], ["Villanova Di San Daniele", "UD"], ["San Daniele Del Friuli", "UD"]], + "33037": [ + ["Pasian Di Prato", "UD"], + ["Colloredo Di Prato", "UD"], + ["Passons", "UD"], + ], + "33038": [ + ["Villanova", "UD"], + ["Villanova Di San Daniele", "UD"], + ["San Daniele Del Friuli", "UD"], + ], "33039": [ ["Sedegliano", "UD"], ["Coderno", "UD"], @@ -4777,11 +5582,20 @@ class Provider(AddressProvider): ], "33041": [["Aiello Del Friuli", "UD"], ["Joannis", "UD"]], "33042": [["Buttrio", "UD"]], - "33043": [["Purgessimo", "UD"], ["Sanguarzo", "UD"], ["Cividale Del Friuli", "UD"]], + "33043": [ + ["Purgessimo", "UD"], + ["Sanguarzo", "UD"], + ["Cividale Del Friuli", "UD"], + ], "33044": [["Manzano", "UD"]], "33045": [["Nimis", "UD"]], "33046": [["Pulfero", "UD"]], - "33047": [["Orzano", "UD"], ["Cerneglons", "UD"], ["Ziracco", "UD"], ["Remanzacco", "UD"]], + "33047": [ + ["Orzano", "UD"], + ["Cerneglons", "UD"], + ["Ziracco", "UD"], + ["Remanzacco", "UD"], + ], "33048": [ ["San Giovanni Al Natisone", "UD"], ["Chiopris", "UD"], @@ -4844,16 +5658,30 @@ class Provider(AddressProvider): ["Ronchis", "UD"], ["Santa Maria La Longa", "UD"], ], - "33051": [["Belvedere Di Aquileia", "UD"], ["Belvedere", "UD"], ["Aquileia", "UD"]], + "33051": [ + ["Belvedere Di Aquileia", "UD"], + ["Belvedere", "UD"], + ["Aquileia", "UD"], + ], "33052": [["Cervignano Del Friuli", "UD"], ["Strassoldo", "UD"]], "33053": [["Pertegada", "UD"], ["Latisana", "UD"], ["Gorgo", "UD"]], "33054": [["Lignano Sabbiadoro", "UD"], ["Lignano Pineta", "UD"]], "33055": [["Muzzana Del Turgnano", "UD"]], "33056": [["Palazzolo Dello Stella", "UD"]], - "33057": [["Sottoselva", "UD"], ["Ialmicco", "UD"], ["Jalmicco", "UD"], ["Palmanova", "UD"]], + "33057": [ + ["Sottoselva", "UD"], + ["Ialmicco", "UD"], + ["Jalmicco", "UD"], + ["Palmanova", "UD"], + ], "33058": [["San Giorgio Di Nogaro", "UD"]], "33059": [["Villa Vicentina", "UD"]], - "33061": [["Teor", "UD"], ["Rivignano Teor", "UD"], ["Rivarotta", "UD"], ["Rivignano", "UD"]], + "33061": [ + ["Teor", "UD"], + ["Rivignano Teor", "UD"], + ["Rivarotta", "UD"], + ["Rivignano", "UD"], + ], "33100": [ ["Cussignacco", "UD"], ["Laipacco", "UD"], @@ -4883,9 +5711,19 @@ class Provider(AddressProvider): ["San Giovanni", "FR"], ["Acuto", "FR"], ], - "03011": [["Monte San Marino", "FR"], ["Tecchiena", "FR"], ["Collelavena", "FR"], ["Alatri", "FR"]], + "03011": [ + ["Monte San Marino", "FR"], + ["Tecchiena", "FR"], + ["Collelavena", "FR"], + ["Alatri", "FR"], + ], "03012": [["Osteria Della Fontana", "FR"], ["Anagni", "FR"]], - "03013": [["Tofe", "FR"], ["Porciano", "FR"], ["Ferentino", "FR"], ["Ferentino Stazione", "FR"]], + "03013": [ + ["Tofe", "FR"], + ["Porciano", "FR"], + ["Ferentino", "FR"], + ["Ferentino Stazione", "FR"], + ], "03014": [["Fiuggi", "FR"], ["Fiuggi Fonte", "FR"]], "03016": [["Guarcino", "FR"], ["Campocatino", "FR"]], "03017": [["Morolo", "FR"], ["Cerquotti Madonna Del Piano", "FR"]], @@ -4980,7 +5818,11 @@ class Provider(AddressProvider): ["Sant'Oliva", "FR"], ["Pastine Di Pontecorvo", "FR"], ], - "03038": [["Roccasecca", "FR"], ["Roccasecca Stazione", "FR"], ["Caprile", "FR"]], + "03038": [ + ["Roccasecca", "FR"], + ["Roccasecca Stazione", "FR"], + ["Caprile", "FR"], + ], "03039": [["Sora", "FR"], ["Carnello", "FR"], ["Selva Di Sora", "FR"]], "03040": [ ["Selvacava", "FR"], @@ -5008,7 +5850,11 @@ class Provider(AddressProvider): ["Settefrati", "FR"], ["Vallerotonda", "FR"], ], - "03041": [["Castello D'Alvito", "FR"], ["Sant'Onofrio", "FR"], ["Alvito", "FR"]], + "03041": [ + ["Castello D'Alvito", "FR"], + ["Sant'Onofrio", "FR"], + ["Alvito", "FR"], + ], "03042": [["Atina", "FR"], ["Casino Pica", "FR"], ["Atina Inferiore", "FR"]], "03043": [ ["Sant'Angelo In Theodice", "FR"], @@ -5029,7 +5875,12 @@ class Provider(AddressProvider): "03046": [["San Donato Val Di Comino", "FR"]], "03047": [["San Giorgio A Liri", "FR"]], "03048": [["Sant'Apollinare", "FR"]], - "03049": [["Olivella", "FR"], ["Valleluce", "FR"], ["Sant'Elia Fiumerapido", "FR"], ["Portella", "FR"]], + "03049": [ + ["Olivella", "FR"], + ["Valleluce", "FR"], + ["Sant'Elia Fiumerapido", "FR"], + ["Portella", "FR"], + ], "03100": [ ["Frosinone", "FR"], ["De Matteis", "FR"], @@ -5066,7 +5917,11 @@ class Provider(AddressProvider): ["Campo Di Carne", "LT"], ["Cogna", "LT"], ], - "04012": [["Le Castella", "LT"], ["Borgo Flora", "LT"], ["Cisterna Di Latina", "LT"]], + "04012": [ + ["Le Castella", "LT"], + ["Borgo Flora", "LT"], + ["Cisterna Di Latina", "LT"], + ], "04013": [ ["Sermoneta", "LT"], ["Monticchio", "LT"], @@ -5077,11 +5932,25 @@ class Provider(AddressProvider): ["Sermoneta Scalo", "LT"], ], "04014": [["Pontinia", "LT"], ["Borgo Pasubio", "LT"]], - "04015": [["Abbazia Di Fossanova", "LT"], ["Fossanova", "LT"], ["Priverno", "LT"]], - "04016": [["Borgo Vodice", "LT"], ["Sabaudia", "LT"], ["Borgo San Donato", "LT"], ["Baia D'Argento", "LT"]], + "04015": [ + ["Abbazia Di Fossanova", "LT"], + ["Fossanova", "LT"], + ["Priverno", "LT"], + ], + "04016": [ + ["Borgo Vodice", "LT"], + ["Sabaudia", "LT"], + ["Borgo San Donato", "LT"], + ["Baia D'Argento", "LT"], + ], "04017": [["San Felice Circeo", "LT"], ["Borgo Montenero", "LT"]], "04018": [["Colli Di Suso", "LT"], ["Sezze", "LT"]], - "04019": [["Badino", "LT"], ["Borgo Hermada", "LT"], ["Terracina", "LT"], ["La Fiora", "LT"]], + "04019": [ + ["Badino", "LT"], + ["Borgo Hermada", "LT"], + ["Terracina", "LT"], + ["La Fiora", "LT"], + ], "04020": [ ["Ventotene", "LT"], ["Santi Cosma E Damiano", "LT"], @@ -5096,7 +5965,12 @@ class Provider(AddressProvider): ["Spigno Saturnia Inferiore", "LT"], ["Grunuovo Di Santi Cosma E Damiano", "LT"], ], - "04021": [["Suio Terme", "LT"], ["San Cataldo", "LT"], ["Castelforte", "LT"], ["Forme Di Suio", "LT"]], + "04021": [ + ["Suio Terme", "LT"], + ["San Cataldo", "LT"], + ["Castelforte", "LT"], + ["Forme Di Suio", "LT"], + ], "04022": [["Salto Di Fondi", "LT"], ["San Magno", "LT"], ["Fondi", "LT"]], "04023": [ ["Acquatraversa Di Formia", "LT"], @@ -5167,7 +6041,12 @@ class Provider(AddressProvider): ], "02013": [["Antrodoco", "RI"]], "02014": [["Fantauzzi", "RI"], ["Cantalice", "RI"], ["San Liberato", "RI"]], - "02015": [["Cittaducale", "RI"], ["Grotti", "RI"], ["Santa Rufina", "RI"], ["Grotti Di Cittaducale", "RI"]], + "02015": [ + ["Cittaducale", "RI"], + ["Grotti", "RI"], + ["Santa Rufina", "RI"], + ["Grotti Di Cittaducale", "RI"], + ], "02016": [ ["San Clemente Di Leonessa", "RI"], ["Leonessa", "RI"], @@ -5178,7 +6057,12 @@ class Provider(AddressProvider): ["Terzone", "RI"], ], "02018": [["Poggio Bustone", "RI"]], - "02019": [["Picciame", "RI"], ["Sigillo Di Posta", "RI"], ["Posta", "RI"], ["Favischio", "RI"]], + "02019": [ + ["Picciame", "RI"], + ["Sigillo Di Posta", "RI"], + ["Posta", "RI"], + ["Favischio", "RI"], + ], "02020": [ ["Longone Sabino", "RI"], ["Colle Di Tora", "RI"], @@ -5262,7 +6146,12 @@ class Provider(AddressProvider): "02033": [["Ginestra Sabina", "RI"], ["Monteleone Sabino", "RI"]], "02034": [["Bocchignano", "RI"], ["Montopoli Di Sabina", "RI"]], "02035": [["Orvinio", "RI"]], - "02037": [["Fiacchini", "RI"], ["Osteria Nuova", "RI"], ["Cerdomare", "RI"], ["Poggio Moiano", "RI"]], + "02037": [ + ["Fiacchini", "RI"], + ["Osteria Nuova", "RI"], + ["Cerdomare", "RI"], + ["Poggio Moiano", "RI"], + ], "02038": [["Scandriglia", "RI"], ["Ponticelli", "RI"]], "02039": [["Toffia", "RI"]], "02040": [ @@ -5301,7 +6190,11 @@ class Provider(AddressProvider): ["Poggio Mirteto", "RI"], ["Poggio Mirteto Stazione", "RI"], ], - "02048": [["Stimigliano Stazione", "RI"], ["Stimigliano", "RI"], ["Stimigliano Scalo", "RI"]], + "02048": [ + ["Stimigliano Stazione", "RI"], + ["Stimigliano", "RI"], + ["Stimigliano Scalo", "RI"], + ], "02049": [["Torri In Sabina", "RI"]], "02100": [ ["Poggio Fidoni", "RI"], @@ -5416,7 +6309,11 @@ class Provider(AddressProvider): "00031": [["Artena", "RM"], ["Macere", "RM"], ["Colubro", "RM"]], "00032": [["Carpineto Romano", "RM"]], "00033": [["San Bartolomeo", "RM"], ["Cave", "RM"]], - "00034": [["Colleferro Scalo", "RM"], ["Colleferro Stazione", "RM"], ["Colleferro", "RM"]], + "00034": [ + ["Colleferro Scalo", "RM"], + ["Colleferro Stazione", "RM"], + ["Colleferro", "RM"], + ], "00035": [["Olevano Romano", "RM"]], "00036": [["Palestrina", "RM"], ["Carchitti", "RM"]], "00037": [["Segni", "RM"]], @@ -5438,8 +6335,17 @@ class Provider(AddressProvider): ["Albano Laziale", "RM"], ["Pavona", "RM"], ], - "00042": [["Lido Dei Pini", "RM"], ["Anzio", "RM"], ["Lavinio Lido Di Enea", "RM"], ["Colonia Di Anzio", "RM"]], - "00043": [["Casabianca", "RM"], ["Ciampino Aeroporto", "RM"], ["Ciampino", "RM"]], + "00042": [ + ["Lido Dei Pini", "RM"], + ["Anzio", "RM"], + ["Lavinio Lido Di Enea", "RM"], + ["Colonia Di Anzio", "RM"], + ], + "00043": [ + ["Casabianca", "RM"], + ["Ciampino Aeroporto", "RM"], + ["Ciampino", "RM"], + ], "00044": [["Frascati", "RM"], ["Vermicino", "RM"]], "00045": [["Landi", "RM"], ["Pedica", "RM"], ["Genzano Di Roma", "RM"]], "00046": [["Poggio Tulliano", "RM"], ["Grottaferrata", "RM"]], @@ -5457,7 +6363,11 @@ class Provider(AddressProvider): ["Furbara Cerenova", "RM"], ["Borgo San Martino Di Cerveteri", "RM"], ], - "00053": [["Civitavecchia", "RM"], ["Aurelia", "RM"], ["Aurelia Di Civitavecchia", "RM"]], + "00053": [ + ["Civitavecchia", "RM"], + ["Aurelia", "RM"], + ["Aurelia Di Civitavecchia", "RM"], + ], "00054": [ ["Maccarese", "RM"], ["Fregene", "RM"], @@ -5502,32 +6412,56 @@ class Provider(AddressProvider): ["Sacrofano", "RM"], ], "00061": [["Anguillara Sabazia", "RM"]], - "00062": [["Bracciano", "RM"], ["Rinascente", "RM"], ["Castel Giuliano", "RM"], ["Vigna Di Valle", "RM"]], + "00062": [ + ["Bracciano", "RM"], + ["Rinascente", "RM"], + ["Castel Giuliano", "RM"], + ["Vigna Di Valle", "RM"], + ], "00063": [["Campagnano Di Roma", "RM"]], "00065": [["Feronia", "RM"], ["Fiano Romano", "RM"]], "00066": [["Manziana", "RM"], ["Quadroni", "RM"]], "00067": [["Morlupo", "RM"]], "00068": [["Rignano Flaminio", "RM"]], "00069": [["Vicarello", "RM"], ["Trevignano Romano", "RM"]], - "00071": [["Pratica Di Mare", "RM"], ["Santa Palomba", "RM"], ["Pomezia", "RM"], ["Torvaianica", "RM"]], + "00071": [ + ["Pratica Di Mare", "RM"], + ["Santa Palomba", "RM"], + ["Pomezia", "RM"], + ["Torvaianica", "RM"], + ], "00072": [["Ariccia", "RM"], ["Galloro", "RM"]], "00073": [["Laghetto Di Castel Gandolfo", "RM"], ["Castel Gandolfo", "RM"]], "00074": [["Nemi", "RM"]], "00075": [["Pascolare", "RM"], ["Lanuvio", "RM"]], "00076": [["Lariano", "RM"]], - "00077": [["Laghetto Di Montecompatri", "RM"], ["Molara", "RM"], ["Montecompatri", "RM"]], + "00077": [ + ["Laghetto Di Montecompatri", "RM"], + ["Molara", "RM"], + ["Montecompatri", "RM"], + ], "00078": [["Monte Porzio Catone", "RM"], ["Armetta", "RM"]], "00079": [["Rocca Priora", "RM"], ["Colle Di Fuori", "RM"]], "00118": [["Roma", "RM"]], "00119": [["Roma", "RM"], ["Ostia Antica", "RM"]], "00120": [["Roma", "RM"]], "00121": [["Roma", "RM"], ["Lido Di Ostia Ponente", "RM"]], - "00122": [["Roma", "RM"], ["Lido Di Ostia Levante", "RM"], ["Castel Fusano", "RM"], ["Castel Porziano", "RM"]], + "00122": [ + ["Roma", "RM"], + ["Lido Di Ostia Levante", "RM"], + ["Castel Fusano", "RM"], + ["Castel Porziano", "RM"], + ], "00123": [["La Storta", "RM"], ["Roma", "RM"], ["Isola Farnese", "RM"]], "00124": [["Casal Palocco", "RM"], ["Roma", "RM"]], "00125": [["Acilia", "RM"], ["Roma", "RM"]], "00126": [["Roma", "RM"]], - "00127": [["Risaro", "RM"], ["Roma", "RM"], ["Mezzocammino", "RM"], ["Vitinia", "RM"]], + "00127": [ + ["Risaro", "RM"], + ["Roma", "RM"], + ["Mezzocammino", "RM"], + ["Vitinia", "RM"], + ], "00128": [ ["Roma", "RM"], ["Castel Di Decima", "RM"], @@ -5542,7 +6476,12 @@ class Provider(AddressProvider): ["Colle Della Valentina", "RM"], ["Borgata Borghesiana", "RM"], ], - "00133": [["Torre Gaia", "RM"], ["Torre Angela", "RM"], ["Roma", "RM"], ["Torrenova", "RM"]], + "00133": [ + ["Torre Gaia", "RM"], + ["Torre Angela", "RM"], + ["Roma", "RM"], + ["Torrenova", "RM"], + ], "00134": [["Castel Di Leva", "RM"], ["Divino Amore", "RM"], ["Roma", "RM"]], "00135": [["Roma", "RM"], ["Borgata Ottavia", "RM"], ["La Giustiniana", "RM"]], "00136": [["Roma", "RM"]], @@ -5562,7 +6501,11 @@ class Provider(AddressProvider): "00145": [["Roma", "RM"]], "00146": [["Roma", "RM"]], "00147": [["Roma", "RM"]], - "00148": [["Borgata Corviale", "RM"], ["Roma", "RM"], ["Magliana Trullo", "RM"]], + "00148": [ + ["Borgata Corviale", "RM"], + ["Roma", "RM"], + ["Magliana Trullo", "RM"], + ], "00149": [["Roma", "RM"]], "00151": [["Roma", "RM"]], "00152": [["Roma", "RM"]], @@ -5633,7 +6576,11 @@ class Provider(AddressProvider): "01012": [["Vico Matrino", "VT"], ["Capranica", "VT"]], "01014": [["Montalto Di Castro", "VT"], ["Pescia Romana", "VT"]], "01015": [["Sutri", "VT"]], - "01016": [["Tarquinia", "VT"], ["Lido Di Tarquinia", "VT"], ["Marina Velca", "VT"]], + "01016": [ + ["Tarquinia", "VT"], + ["Lido Di Tarquinia", "VT"], + ["Marina Velca", "VT"], + ], "01017": [["Tuscania", "VT"]], "01018": [["Valentano", "VT"]], "01019": [ @@ -5658,7 +6605,12 @@ class Provider(AddressProvider): ["Graffignano", "VT"], ], "01021": [["Acquapendente", "VT"], ["Torre Alfina", "VT"], ["Trevinano", "VT"]], - "01022": [["Civita", "VT"], ["Bagnoregio", "VT"], ["Vetriolo", "VT"], ["Castel Cellesi", "VT"]], + "01022": [ + ["Civita", "VT"], + ["Bagnoregio", "VT"], + ["Vetriolo", "VT"], + ["Castel Cellesi", "VT"], + ], "01023": [["Bolsena", "VT"]], "01024": [["Castiglione In Teverina", "VT"], ["Sermugnano", "VT"]], "01025": [["Grotte Di Castro", "VT"]], @@ -5746,10 +6698,25 @@ class Provider(AddressProvider): "16017": [["Isola Del Cantone", "GE"]], "16018": [["Giovi", "GE"], ["Mignanego", "GE"]], "16019": [["Pieve", "GE"], ["Ronco Scrivia", "GE"], ["Borgo Fornari", "GE"]], - "16020": [["Fascia", "GE"], ["Cassingheno", "GE"], ["Gorreto", "GE"], ["Fontanarossa", "GE"]], + "16020": [ + ["Fascia", "GE"], + ["Cassingheno", "GE"], + ["Gorreto", "GE"], + ["Fontanarossa", "GE"], + ], "16021": [["Bargagli", "GE"]], - "16022": [["Davagna", "GE"], ["Moranego", "GE"], ["Scoffera", "GE"], ["Meco", "GE"]], - "16023": [["Canale Fontanigorda", "GE"], ["Canale", "GE"], ["Fontanigorda", "GE"], ["Casoni", "GE"]], + "16022": [ + ["Davagna", "GE"], + ["Moranego", "GE"], + ["Scoffera", "GE"], + ["Meco", "GE"], + ], + "16023": [ + ["Canale Fontanigorda", "GE"], + ["Canale", "GE"], + ["Fontanigorda", "GE"], + ["Casoni", "GE"], + ], "16024": [["Lumarzo", "GE"]], "16025": [["Rondanina", "GE"], ["Ponte Trebbia", "GE"], ["Montebruno", "GE"]], "16026": [["Trefontane", "GE"], ["Montoggio", "GE"]], @@ -5787,9 +6754,17 @@ class Provider(AddressProvider): ], "16033": [["Lavagna", "GE"], ["Cavi", "GE"]], "16034": [["Portofino", "GE"]], - "16035": [["San Michele Di Pagana", "GE"], ["San Massimo", "GE"], ["Rapallo", "GE"]], + "16035": [ + ["San Michele Di Pagana", "GE"], + ["San Massimo", "GE"], + ["Rapallo", "GE"], + ], "16036": [["Recco", "GE"]], - "16038": [["Santa Margherita Ligure", "GE"], ["Paraggi", "GE"], ["San Lorenzo Della Costa", "GE"]], + "16038": [ + ["Santa Margherita Ligure", "GE"], + ["Paraggi", "GE"], + ["San Lorenzo Della Costa", "GE"], + ], "16039": [ ["Sestri Levante", "GE"], ["Pila Sul Gromolo", "GE"], @@ -5823,10 +6798,19 @@ class Provider(AddressProvider): ["Brizzolara", "GE"], ], "16042": [["Carasco", "GE"], ["Rivarola", "GE"], ["Graveglia", "GE"]], - "16043": [["Sant'Andrea Di Rovereto", "GE"], ["Chiavari", "GE"], ["Caperana", "GE"]], + "16043": [ + ["Sant'Andrea Di Rovereto", "GE"], + ["Chiavari", "GE"], + ["Caperana", "GE"], + ], "16044": [["Cicagna", "GE"], ["Monleone", "GE"]], "16045": [["Lorsica", "GE"]], - "16046": [["Passo Del Bocco", "GE"], ["Borgonovo", "GE"], ["Borgonovo Ligure", "GE"], ["Mezzanego", "GE"]], + "16046": [ + ["Passo Del Bocco", "GE"], + ["Borgonovo", "GE"], + ["Borgonovo Ligure", "GE"], + ["Mezzanego", "GE"], + ], "16047": [["Moconesi", "GE"], ["Gattorna", "GE"], ["Ferrada", "GE"]], "16048": [ ["Rezzoaglio", "GE"], @@ -5836,7 +6820,11 @@ class Provider(AddressProvider): ["Cabanne", "GE"], ["Alpepiana", "GE"], ], - "16049": [["Amborzasco", "GE"], ["Allegrezze", "GE"], ["Santo Stefano D'Aveto", "GE"]], + "16049": [ + ["Amborzasco", "GE"], + ["Allegrezze", "GE"], + ["Santo Stefano D'Aveto", "GE"], + ], "16100": [["Genova", "GE"]], "16121": [["Genova", "GE"]], "16122": [["Genova", "GE"]], @@ -5849,7 +6837,12 @@ class Provider(AddressProvider): "16129": [["Genova", "GE"]], "16131": [["Genova", "GE"]], "16132": [["Genova", "GE"]], - "16133": [["Genova", "GE"], ["Apparizione", "GE"], ["Bavari", "GE"], ["San Desiderio", "GE"]], + "16133": [ + ["Genova", "GE"], + ["Apparizione", "GE"], + ["Bavari", "GE"], + ["San Desiderio", "GE"], + ], "16134": [["Genova", "GE"]], "16135": [["Genova", "GE"]], "16136": [["Genova", "GE"]], @@ -5868,12 +6861,20 @@ class Provider(AddressProvider): "16151": [["Genova", "GE"], ["Campasso", "GE"]], "16152": [["Cornigliano Ligure", "GE"], ["Coronata", "GE"], ["Genova", "GE"]], "16153": [["Genova", "GE"], ["Borzoli", "GE"]], - "16154": [["Genova", "GE"], ["Sestri Ponente", "GE"], ["San Giovanni Battista", "GE"]], + "16154": [ + ["Genova", "GE"], + ["Sestri Ponente", "GE"], + ["San Giovanni Battista", "GE"], + ], "16155": [["Pegli", "GE"], ["Multedo", "GE"], ["Genova", "GE"]], "16156": [["Genova", "GE"]], "16157": [["Genova", "GE"], ["Pra'", "GE"], ["Palmaro Di Pra'", "GE"]], "16158": [["Fabbriche", "GE"], ["Voltri", "GE"], ["Genova", "GE"]], - "16159": [["Genova", "GE"], ["Certosa Di Rivarolo Ligure", "GE"], ["Rivarolo Ligure", "GE"]], + "16159": [ + ["Genova", "GE"], + ["Certosa Di Rivarolo Ligure", "GE"], + ["Rivarolo Ligure", "GE"], + ], "16161": [["Fegino", "GE"], ["Genova", "GE"], ["Teglia", "GE"]], "16162": [["Genova", "GE"], ["Bolzaneto", "GE"]], "16163": [["San Quirico In Val Polcevera", "GE"], ["Genova", "GE"]], @@ -5938,7 +6939,12 @@ class Provider(AddressProvider): "18022": [["Arzeno D'Oneglia", "IM"], ["Cesio", "IM"], ["Cartari", "IM"]], "18023": [["Cosio Di Arroscia", "IM"]], "18024": [["Case Di Nava", "IM"], ["Nava", "IM"], ["Pornassio", "IM"]], - "18025": [["Mendatica", "IM"], ["Montegrosso Pian Latte", "IM"], ["Piaggia", "CN"], ["Briga Alta", "CN"]], + "18025": [ + ["Mendatica", "IM"], + ["Montegrosso Pian Latte", "IM"], + ["Piaggia", "CN"], + ["Briga Alta", "CN"], + ], "18026": [ ["Armo", "IM"], ["Calderara", "IM"], @@ -6073,7 +7079,11 @@ class Provider(AddressProvider): ["Fiascherino", "SP"], ["San Terenzo", "SP"], ], - "19033": [["Molicciara", "SP"], ["Colombiera", "SP"], ["Castelnuovo Magra", "SP"]], + "19033": [ + ["Molicciara", "SP"], + ["Colombiera", "SP"], + ["Castelnuovo Magra", "SP"], + ], "19034": [ ["Luni", "SP"], ["Ortonovo", "SP"], @@ -6084,7 +7094,11 @@ class Provider(AddressProvider): ["Nicola", "SP"], ["Serravalle", "SP"], ], - "19037": [["Ponzano Magra", "SP"], ["Ponzano Superiore", "SP"], ["Santo Stefano Di Magra", "SP"]], + "19037": [ + ["Ponzano Magra", "SP"], + ["Ponzano Superiore", "SP"], + ["Santo Stefano Di Magra", "SP"], + ], "19038": [ ["Sarzana", "SP"], ["Falcinello", "SP"], @@ -6097,7 +7111,12 @@ class Provider(AddressProvider): "19100": [["La Spezia", "SP"]], "19121": [["Laspezia", "SP"]], "19122": [["Laspezia", "SP"]], - "19123": [["Fabiano", "SP"], ["Chiappa", "SP"], ["Laspezia", "SP"], ["Pegazzano", "SP"]], + "19123": [ + ["Fabiano", "SP"], + ["Chiappa", "SP"], + ["Laspezia", "SP"], + ["Pegazzano", "SP"], + ], "19124": [["Laspezia", "SP"], ["La Spezia", "SP"]], "19125": [["Laspezia", "SP"], ["Migliarina", "SP"]], "19126": [["Isola", "SP"], ["Laspezia", "SP"]], @@ -6106,15 +7125,29 @@ class Provider(AddressProvider): "19133": [["Biassa", "SP"], ["Laspezia", "SP"]], "19134": [["Laspezia", "SP"], ["Marinasco", "SP"], ["La Foce", "SP"]], "19135": [["Laspezia", "SP"], ["San Venerio", "SP"]], - "19136": [["Termo", "SP"], ["Laspezia", "SP"], ["Melara", "SP"], ["Limone", "SP"]], + "19136": [ + ["Termo", "SP"], + ["Laspezia", "SP"], + ["Melara", "SP"], + ["Limone", "SP"], + ], "19137": [["Laspezia", "SP"], ["Pitelli", "SP"]], "19138": [["Laspezia", "SP"], ["San Bartolomeo", "SP"]], "19139": [["Muggiano", "SP"], ["Laspezia", "SP"]], "12071": [["Massimino", "SV"], ["Bagnasco", "CN"]], "17010": [["Osiglia", "SV"], ["Giusvalla", "SV"]], - "17011": [["Albisola Superiore", "SV"], ["Albisola Capo", "SV"], ["Ellera", "SV"]], + "17011": [ + ["Albisola Superiore", "SV"], + ["Albisola Capo", "SV"], + ["Ellera", "SV"], + ], "17012": [["Albissola Marina", "SV"]], - "17013": [["Murialdo", "SV"], ["Valle", "SV"], ["Valle Di Murialdo", "SV"], ["Piano", "SV"]], + "17013": [ + ["Murialdo", "SV"], + ["Valle", "SV"], + ["Valle Di Murialdo", "SV"], + ["Piano", "SV"], + ], "17014": [ ["San Giuseppe Di Cairo", "SV"], ["Bragno", "SV"], @@ -6125,7 +7158,13 @@ class Provider(AddressProvider): ], "17015": [["Celle Ligure", "SV"]], "17017": [["Roccavignale", "SV"], ["Millesimo", "SV"], ["Cosseria", "SV"]], - "17019": [["Alpicella", "SV"], ["Casanova", "SV"], ["Varazze", "SV"], ["Faie", "SV"], ["Pero", "SV"]], + "17019": [ + ["Alpicella", "SV"], + ["Casanova", "SV"], + ["Varazze", "SV"], + ["Faie", "SV"], + ["Pero", "SV"], + ], "17020": [ ["Bardino Nuovo", "SV"], ["Stellanello", "SV"], @@ -6162,7 +7201,11 @@ class Provider(AddressProvider): ["Campochiesa", "SV"], ], "17032": [["Arnasco", "SV"], ["Vendone", "SV"]], - "17033": [["Villafranca", "SV"], ["Garlenda", "SV"], ["Casanova Lerrone", "SV"]], + "17033": [ + ["Villafranca", "SV"], + ["Garlenda", "SV"], + ["Casanova Lerrone", "SV"], + ], "17034": [["Castelvecchio Di Rocca Barbena", "SV"]], "17035": [["Cisano Sul Neva", "SV"]], "17037": [["Pogli", "SV"], ["Onzo", "SV"], ["Ortovero", "SV"]], @@ -6171,7 +7214,12 @@ class Provider(AddressProvider): "17040": [["Mioglia", "SV"]], "17041": [["Altare", "SV"], ["Cadibona", "SV"]], "17042": [["Giovo Ligure", "SV"], ["Giovo", "SV"], ["Pontinvrea", "SV"]], - "17043": [["Plodio", "SV"], ["Pallare", "SV"], ["Piani", "SV"], ["Carcare", "SV"]], + "17043": [ + ["Plodio", "SV"], + ["Pallare", "SV"], + ["Piani", "SV"], + ["Carcare", "SV"], + ], "17044": [ ["Santa Giustina", "SV"], ["San Martino Stella", "SV"], @@ -6265,7 +7313,12 @@ class Provider(AddressProvider): "24016": [["Santa Croce", "BG"], ["San Pellegrino Terme", "BG"]], "24017": [["Cornalba", "BG"], ["Serina", "BG"]], "24018": [["Villa D'Alme'", "BG"]], - "24019": [["Poscante", "BG"], ["Spino", "BG"], ["Zogno", "BG"], ["Ambria", "BG"]], + "24019": [ + ["Poscante", "BG"], + ["Spino", "BG"], + ["Zogno", "BG"], + ["Ambria", "BG"], + ], "24020": [ ["Selvino", "BG"], ["Bondione", "BG"], @@ -6379,8 +7432,18 @@ class Provider(AddressProvider): "24034": [["Cisano Bergamasco", "BG"]], "24035": [["Curno", "BG"]], "24036": [["Ponte San Pietro", "BG"]], - "24037": [["Rota D'Imagna", "BG"], ["Brumano", "BG"], ["Frontale", "BG"], ["Calchera", "BG"]], - "24038": [["Mazzoleni", "BG"], ["Selino Basso", "BG"], ["Valsecca", "BG"], ["Sant'Omobono Terme", "BG"]], + "24037": [ + ["Rota D'Imagna", "BG"], + ["Brumano", "BG"], + ["Frontale", "BG"], + ["Calchera", "BG"], + ], + "24038": [ + ["Mazzoleni", "BG"], + ["Selino Basso", "BG"], + ["Valsecca", "BG"], + ["Sant'Omobono Terme", "BG"], + ], "24039": [["Sotto Il Monte Giovanni Xxiii", "BG"], ["Piazza Caduti", "BG"]], "24040": [ ["Suisio", "BG"], @@ -6416,7 +7479,11 @@ class Provider(AddressProvider): ["Barbata", "BG"], ], "24041": [["Brembate", "BG"], ["Grignano", "BG"]], - "24042": [["Capriate San Gervasio", "BG"], ["San Gervasio D'Adda", "BG"], ["Crespi D'Adda", "BG"]], + "24042": [ + ["Capriate San Gervasio", "BG"], + ["San Gervasio D'Adda", "BG"], + ["Crespi D'Adda", "BG"], + ], "24043": [["Vidalengo", "BG"], ["Caravaggio", "BG"], ["Masano", "BG"]], "24044": [["Dalmine", "BG"], ["Sforzatica", "BG"], ["Sabbio Bergamasco", "BG"]], "24045": [["Badalasco", "BG"], ["Fara Gera D'Adda", "BG"]], @@ -6521,14 +7588,24 @@ class Provider(AddressProvider): "24066": [["Pedrengo", "BG"]], "24067": [["Sarnico", "BG"]], "24068": [["Seriate", "BG"], ["Cassinone", "BG"]], - "24069": [["Cenate Di Sotto", "BG"], ["Luzzana", "BG"], ["Cenate Sotto", "BG"], ["Trescore Balneario", "BG"]], + "24069": [ + ["Cenate Di Sotto", "BG"], + ["Luzzana", "BG"], + ["Cenate Sotto", "BG"], + ["Trescore Balneario", "BG"], + ], "24100": [["Bergamo", "BG"]], "24121": [["Bergamo", "BG"]], "24122": [["Bergamo", "BG"]], "24123": [["Bergamo", "BG"], ["Valtesse", "BG"]], "24124": [["Redona", "BG"], ["Bergamo", "BG"]], "24125": [["Boccaleone", "BG"], ["Bergamo", "BG"]], - "24126": [["Colognola Al Piano", "BG"], ["Malpensata", "BG"], ["Campagnola", "BG"], ["Bergamo", "BG"]], + "24126": [ + ["Colognola Al Piano", "BG"], + ["Malpensata", "BG"], + ["Campagnola", "BG"], + ["Bergamo", "BG"], + ], "24127": [["Bergamo", "BG"]], "24128": [["Bergamo", "BG"], ["Loreto", "BG"]], "24129": [["Bergamo", "BG"], ["Longuelo", "BG"]], @@ -6552,14 +7629,33 @@ class Provider(AddressProvider): ["Vesio", "BS"], ["Borgosatollo", "BS"], ], - "25011": [["Calcinatello", "BS"], ["Calcinato", "BS"], ["Ponte San Marco", "BS"]], - "25012": [["Viadana", "BS"], ["Calvisano", "BS"], ["Malpaga", "BS"], ["Mezzane", "BS"]], + "25011": [ + ["Calcinatello", "BS"], + ["Calcinato", "BS"], + ["Ponte San Marco", "BS"], + ], + "25012": [ + ["Viadana", "BS"], + ["Calvisano", "BS"], + ["Malpaga", "BS"], + ["Mezzane", "BS"], + ], "25013": [["Carpenedolo", "BS"]], "25014": [["Capodimonte", "BS"], ["Castenedolo", "BS"]], "25015": [["Desenzano Del Garda", "BS"]], "25016": [["Ghedi", "BS"]], - "25017": [["Lonato", "BS"], ["Sedena", "BS"], ["Centenaro", "BS"], ["Esenta", "BS"]], - "25018": [["Vighizzolo", "BS"], ["Sant'Antonio", "BS"], ["Montichiari", "BS"], ["Novagli", "BS"]], + "25017": [ + ["Lonato", "BS"], + ["Sedena", "BS"], + ["Centenaro", "BS"], + ["Esenta", "BS"], + ], + "25018": [ + ["Vighizzolo", "BS"], + ["Sant'Antonio", "BS"], + ["Montichiari", "BS"], + ["Novagli", "BS"], + ], "25019": [["Colombare Di Sirmione", "BS"], ["Sirmione", "BS"]], "25020": [ ["Scarpizzolo", "BS"], @@ -6586,9 +7682,19 @@ class Provider(AddressProvider): ["Dello", "BS"], ], "25021": [["Bagnolo Mella", "BS"]], - "25022": [["Borgo San Giacomo", "BS"], ["Motella", "BS"], ["Farfengo", "BS"], ["Padernello", "BS"]], + "25022": [ + ["Borgo San Giacomo", "BS"], + ["Motella", "BS"], + ["Farfengo", "BS"], + ["Padernello", "BS"], + ], "25023": [["Gottolengo", "BS"]], - "25024": [["Castelletto", "BS"], ["Castelletto Di Leno", "BS"], ["Porzano", "BS"], ["Leno", "BS"]], + "25024": [ + ["Castelletto", "BS"], + ["Castelletto Di Leno", "BS"], + ["Porzano", "BS"], + ["Leno", "BS"], + ], "25025": [["Manerbio", "BS"]], "25026": [["Pontevico", "BS"]], "25027": [["Quinzano D'Oglio", "BS"]], @@ -6636,7 +7742,13 @@ class Provider(AddressProvider): "25035": [["Ospitaletto", "BS"]], "25036": [["Palazzolo Sull'Oglio", "BS"], ["San Pancrazio", "BS"]], "25037": [["Pontoglio", "BS"]], - "25038": [["Duomo", "BS"], ["Sant'Andrea", "BS"], ["Rovato", "BS"], ["Lodetto", "BS"], ["Sant'Anna", "BS"]], + "25038": [ + ["Duomo", "BS"], + ["Sant'Andrea", "BS"], + ["Rovato", "BS"], + ["Lodetto", "BS"], + ["Sant'Anna", "BS"], + ], "25039": [["Travagliato", "BS"]], "25040": [ ["Forno D'Allione", "BS"], @@ -6680,7 +7792,12 @@ class Provider(AddressProvider): "25043": [["Astrio", "BS"], ["Pescarzo", "BS"], ["Breno", "BS"]], "25044": [["Capo Di Ponte", "BS"]], "25045": [["Castegnato", "BS"]], - "25046": [["Bornato", "BS"], ["Cazzago San Martino", "BS"], ["Calino", "BS"], ["Pedrocca", "BS"]], + "25046": [ + ["Bornato", "BS"], + ["Cazzago San Martino", "BS"], + ["Calino", "BS"], + ["Pedrocca", "BS"], + ], "25047": [["Gorzone", "BS"], ["Darfo Boario Terme", "BS"], ["Darfo", "BS"]], "25048": [["Cortenedolo", "BS"], ["Edolo", "BS"], ["Sonico", "BS"]], "25049": [["Pilzone", "BS"], ["Iseo", "BS"], ["Clusane", "BS"]], @@ -6720,7 +7837,12 @@ class Provider(AddressProvider): ["Losine", "BS"], ], "25051": [["Cedegolo", "BS"]], - "25052": [["Pian Di Borno", "BS"], ["Cogno", "BS"], ["Annunciata", "BS"], ["Piancogno", "BS"]], + "25052": [ + ["Pian Di Borno", "BS"], + ["Cogno", "BS"], + ["Annunciata", "BS"], + ["Piancogno", "BS"], + ], "25053": [["Malegno", "BS"]], "25054": [["Marone", "BS"]], "25055": [["Pisogne", "BS"], ["Toline", "BS"], ["Gratacasolo", "BS"]], @@ -6750,7 +7872,12 @@ class Provider(AddressProvider): "25061": [["Irma", "BS"], ["Bovegno", "BS"]], "25062": [["San Vigilio", "BS"], ["Concesio", "BS"]], "25063": [["Gardone Val Trompia", "BS"], ["Magno", "BS"]], - "25064": [["Piazza", "BS"], ["Ronco", "BS"], ["Mandolossa", "BS"], ["Gussago", "BS"]], + "25064": [ + ["Piazza", "BS"], + ["Ronco", "BS"], + ["Mandolossa", "BS"], + ["Gussago", "BS"], + ], "25065": [ ["Lumezzane Pieve", "BS"], ["Lumezzane Sant'Apollonio", "BS"], @@ -6788,8 +7915,18 @@ class Provider(AddressProvider): "25075": [["Nave", "BS"]], "25076": [["Odolo", "BS"]], "25077": [["Roe' Volciano", "BS"], ["Roe'", "BS"]], - "25078": [["Forno D'Ono", "BS"], ["Pertica Bassa", "BS"], ["Vestone", "BS"], ["Nozza", "BS"]], - "25079": [["Vobarno", "BS"], ["Carpeneda", "BS"], ["Pompegnino", "BS"], ["Degagna", "BS"]], + "25078": [ + ["Forno D'Ono", "BS"], + ["Pertica Bassa", "BS"], + ["Vestone", "BS"], + ["Nozza", "BS"], + ], + "25079": [ + ["Vobarno", "BS"], + ["Carpeneda", "BS"], + ["Pompegnino", "BS"], + ["Degagna", "BS"], + ], "25080": [ ["Padenghe Sul Garda", "BS"], ["Valvestino", "BS"], @@ -6823,10 +7960,25 @@ class Provider(AddressProvider): ["Raffa", "BS"], ], "25081": [["Bedizzole", "BS"], ["Campagnola", "BS"]], - "25082": [["Botticino Sera", "BS"], ["Botticino Mattina", "BS"], ["Botticino", "BS"], ["San Gallo", "BS"]], - "25083": [["San Michele", "BS"], ["Gardone Riviera", "BS"], ["Fasano Del Garda", "BS"], ["Montecucco", "BS"]], + "25082": [ + ["Botticino Sera", "BS"], + ["Botticino Mattina", "BS"], + ["Botticino", "BS"], + ["San Gallo", "BS"], + ], + "25083": [ + ["San Michele", "BS"], + ["Gardone Riviera", "BS"], + ["Fasano Del Garda", "BS"], + ["Montecucco", "BS"], + ], "25084": [["Gargnano", "BS"], ["Bogliaco", "BS"], ["Navazzo", "BS"]], - "25085": [["San Giacomo", "BS"], ["San Biagio", "BS"], ["Sopraponte", "BS"], ["Gavardo", "BS"]], + "25085": [ + ["San Giacomo", "BS"], + ["San Biagio", "BS"], + ["Sopraponte", "BS"], + ["Gavardo", "BS"], + ], "25086": [["Rezzato", "BS"], ["Virle Treponti", "BS"]], "25087": [["Barbarano", "BS"], ["Campoverde", "BS"], ["Salo'", "BS"]], "25088": [["Toscolano Maderno", "BS"], ["Maderno", "BS"]], @@ -6845,7 +7997,11 @@ class Provider(AddressProvider): "25132": [["Brescia", "BS"], ["Mandolossa Di Brescia", "BS"]], "25133": [["Brescia", "BS"], ["Mompiano", "BS"]], "25134": [["San Polo", "BS"], ["Brescia", "BS"]], - "25135": [["Brescia", "BS"], ["Caionvico", "BS"], ["Sant'Eufemia Della Fonte", "BS"]], + "25135": [ + ["Brescia", "BS"], + ["Caionvico", "BS"], + ["Sant'Eufemia Della Fonte", "BS"], + ], "25136": [["Stocchetta", "BS"], ["Brescia", "BS"]], "22010": [ ["San Nazzaro Val Cavargna", "CO"], @@ -7135,7 +8291,12 @@ class Provider(AddressProvider): "26014": [["Casaletto Di Sopra", "CR"], ["Romanengo", "CR"]], "26015": [["Soresina", "CR"]], "26016": [["Spino D'Adda", "CR"]], - "26017": [["Torlino Vimercati", "CR"], ["Quintano", "CR"], ["Trescore Cremasco", "CR"], ["Pieranica", "CR"]], + "26017": [ + ["Torlino Vimercati", "CR"], + ["Quintano", "CR"], + ["Trescore Cremasco", "CR"], + ["Pieranica", "CR"], + ], "26018": [["Trigolo", "CR"]], "26019": [["Vailate", "CR"]], "26020": [ @@ -7162,13 +8323,25 @@ class Provider(AddressProvider): ["San Bassano", "CR"], ], "26021": [["Barzaniga", "CR"], ["Annicco", "CR"]], - "26022": [["San Martino In Beliseto", "CR"], ["Castelverde", "CR"], ["Costa Sant'Abramo", "CR"]], - "26023": [["Farfengo", "CR"], ["Grumello Cremonese Ed Uniti", "CR"], ["Grumello Cremonese", "CR"]], + "26022": [ + ["San Martino In Beliseto", "CR"], + ["Castelverde", "CR"], + ["Costa Sant'Abramo", "CR"], + ], + "26023": [ + ["Farfengo", "CR"], + ["Grumello Cremonese Ed Uniti", "CR"], + ["Grumello Cremonese", "CR"], + ], "26024": [["Paderno Ponchielli", "CR"]], "26025": [["Pandino", "CR"], ["Nosadello", "CR"]], "26026": [["Pizzighettone", "CR"], ["Roggione", "CR"], ["Regona", "CR"]], "26027": [["Rivolta D'Adda", "CR"]], - "26028": [["Casanova Del Morbasco", "CR"], ["Sesto Cremonese", "CR"], ["Sesto Ed Uniti", "CR"]], + "26028": [ + ["Casanova Del Morbasco", "CR"], + ["Sesto Cremonese", "CR"], + ["Sesto Ed Uniti", "CR"], + ], "26029": [["Gallignano", "CR"], ["Soncino", "CR"]], "26030": [ ["Spineda", "CR"], @@ -7191,12 +8364,20 @@ class Provider(AddressProvider): ], "26031": [["Isola Dovarese", "CR"]], "26032": [["Ostiano", "CR"]], - "26033": [["Pieve Terzagni", "CR"], ["Pescarolo Ed Uniti", "CR"], ["Pescarolo", "CR"]], + "26033": [ + ["Pieve Terzagni", "CR"], + ["Pescarolo Ed Uniti", "CR"], + ["Pescarolo", "CR"], + ], "26034": [["Piadena", "CR"], ["Drizzona", "CR"]], "26035": [["Pieve San Giacomo", "CR"]], "26036": [["Rivarolo Del Re Ed Uniti", "CR"], ["Rivarolo Del Re", "CR"]], "26037": [["San Giovanni In Croce", "CR"]], - "26038": [["Torre De' Picenardi", "CR"], ["Ca' D'Andrea", "CR"], ["San Lorenzo De' Picenardi", "CR"]], + "26038": [ + ["Torre De' Picenardi", "CR"], + ["Ca' D'Andrea", "CR"], + ["San Lorenzo De' Picenardi", "CR"], + ], "26039": [["Ca' De' Stefani", "CR"], ["Vescovato", "CR"]], "26040": [ ["Gussola", "CR"], @@ -7241,7 +8422,12 @@ class Provider(AddressProvider): "23802": [["Carenno", "LC"]], "23804": [["Monte Marenzo", "LC"]], "23805": [["Erve", "LC"]], - "23806": [["Torre De' Busi", "LC"], ["San Gottardo", "LC"], ["Valcava", "LC"], ["Favirano", "LC"]], + "23806": [ + ["Torre De' Busi", "LC"], + ["San Gottardo", "LC"], + ["Valcava", "LC"], + ["Favirano", "LC"], + ], "23807": [["Merate", "LC"], ["Cassina Fra Martino", "LC"]], "23808": [["Vercurago", "LC"]], "23811": [["Ballabio", "LC"], ["Morterone", "LC"]], @@ -7309,7 +8495,11 @@ class Provider(AddressProvider): ], "23881": [["Airuno", "LC"]], "23883": [["Beverate", "LC"], ["Brivio", "LC"]], - "23884": [["Caraverio", "LC"], ["Cologna", "LC"], ["Castello Di Brianza", "LC"]], + "23884": [ + ["Caraverio", "LC"], + ["Cologna", "LC"], + ["Castello Di Brianza", "LC"], + ], "23885": [["Calco", "LC"], ["Arlate", "LC"]], "23886": [["Colle Brianza", "LC"], ["Nava", "LC"]], "23887": [["Monticello", "LC"], ["Canova", "LC"], ["Olgiate Molgora", "LC"]], @@ -7345,15 +8535,28 @@ class Provider(AddressProvider): "26831": [["Cologno", "LO"], ["Casalmaiocco", "LO"]], "26832": [["Cervignano D'Adda", "LO"], ["Galgagnano", "LO"]], "26833": [["Comazzo", "LO"], ["Merlino", "LO"]], - "26834": [["Cadilana", "LO"], ["Corte Palasio", "LO"], ["Abbadia Cerreto", "LO"], ["Terraverde", "LO"]], + "26834": [ + ["Cadilana", "LO"], + ["Corte Palasio", "LO"], + ["Abbadia Cerreto", "LO"], + ["Terraverde", "LO"], + ], "26835": [["Crespiatica", "LO"]], "26836": [["Montanaso Lombardo", "LO"]], "26837": [["Mulazzano", "LO"], ["Cassino D'Alberi", "LO"], ["Quartiano", "LO"]], - "26838": [["Tavazzano Con Villavesco", "LO"], ["Villavesco", "LO"], ["Tavazzano", "LO"]], + "26838": [ + ["Tavazzano Con Villavesco", "LO"], + ["Villavesco", "LO"], + ["Tavazzano", "LO"], + ], "26839": [["Zelo Buon Persico", "LO"]], "26841": [["Casalpusterlengo", "LO"], ["Zorlesco", "LO"]], "26842": [["Cornovecchio", "LO"], ["Caselle Landi", "LO"]], - "26843": [["Maccastorna", "LO"], ["Castelnuovo Bocca D'Adda", "LO"], ["Meleti", "LO"]], + "26843": [ + ["Maccastorna", "LO"], + ["Castelnuovo Bocca D'Adda", "LO"], + ["Meleti", "LO"], + ], "26844": [["Cavacurta", "LO"]], "26845": [["Codogno", "LO"]], "26846": [["Corno Giovine", "LO"]], @@ -7363,7 +8566,11 @@ class Provider(AddressProvider): "26851": [["Borgo San Giovanni", "LO"]], "26852": [["Casaletto Lodigiano", "LO"], ["Mairano", "LO"]], "26853": [["Caselle Lurani", "LO"]], - "26854": [["Cornegliano Laudense", "LO"], ["Muzza Sant'Angelo", "LO"], ["Pieve Fissiraga", "LO"]], + "26854": [ + ["Cornegliano Laudense", "LO"], + ["Muzza Sant'Angelo", "LO"], + ["Pieve Fissiraga", "LO"], + ], "26855": [["Lodi Vecchio", "LO"]], "26856": [["Senna Lodigiana", "LO"], ["Mirabello", "LO"]], "26857": [["Salerano Sul Lambro", "LO"]], @@ -7374,11 +8581,26 @@ class Provider(AddressProvider): "26863": [["Orio Litta", "LO"]], "26864": [["Ospedaletto Lodigiano", "LO"]], "26865": [["San Rocco Al Porto", "LO"]], - "26866": [["Sant'Angelo Lodigiano", "LO"], ["Marudo", "LO"], ["Castiraga Vidardo", "LO"], ["Vidardo", "LO"]], + "26866": [ + ["Sant'Angelo Lodigiano", "LO"], + ["Marudo", "LO"], + ["Castiraga Vidardo", "LO"], + ["Vidardo", "LO"], + ], "26867": [["Somaglia", "LO"], ["San Martino Pizzolano", "LO"]], "26900": [["San Grato", "LO"], ["Lodi", "LO"]], - "20811": [["Binzago", "MB"], ["Villaggio Snia", "MB"], ["Cassina Savina", "MB"], ["Cesano Maderno", "MB"]], - "20812": [["Villaggio Dei Giovi", "MB"], ["Villaggio Del Sole", "MB"], ["Mombello", "MB"], ["Limbiate", "MB"]], + "20811": [ + ["Binzago", "MB"], + ["Villaggio Snia", "MB"], + ["Cassina Savina", "MB"], + ["Cesano Maderno", "MB"], + ], + "20812": [ + ["Villaggio Dei Giovi", "MB"], + ["Villaggio Del Sole", "MB"], + ["Mombello", "MB"], + ["Limbiate", "MB"], + ], "20813": [["Masciago", "MB"], ["Bovisio-Masciago", "MB"], ["Bovisio", "MB"]], "20814": [["Valera", "MB"], ["Varedo", "MB"]], "20815": [["Cogliate", "MB"]], @@ -7398,7 +8620,11 @@ class Provider(AddressProvider): "20837": [["Veduggio Con Colzano", "MB"]], "20838": [["Renate", "MB"]], "20841": [["Carate Brianza", "MB"], ["Agliate", "MB"]], - "20842": [["Villa Raverio", "MB"], ["Besana In Brianza", "MB"], ["Zoccorino", "MB"]], + "20842": [ + ["Villa Raverio", "MB"], + ["Besana In Brianza", "MB"], + ["Zoccorino", "MB"], + ], "20843": [["Verano Brianza", "MB"]], "20844": [["Tregasio", "MB"], ["Triuggio", "MB"], ["Canonica", "MB"]], "20845": [["Sovico", "MB"]], @@ -7500,7 +8726,11 @@ class Provider(AddressProvider): "20037": [["Paderno Dugnano", "MI"], ["Palazzolo Milanese", "MI"]], "20038": [["Busto Garolfo", "MI"]], "20039": [["Canegrate", "MI"]], - "20040": [["Velate Milanese", "MI"], ["Torrazza Dei Mandelli", "MI"], ["Cambiago", "MI"]], + "20040": [ + ["Velate Milanese", "MI"], + ["Torrazza Dei Mandelli", "MI"], + ["Cambiago", "MI"], + ], "20041": [["Bussero", "MI"]], "20042": [["Pessano Con Bornago", "MI"]], "20043": [["Vanzago", "MI"]], @@ -7543,7 +8773,11 @@ class Provider(AddressProvider): ["Balbiano", "MI"], ], "20061": [["Carugate", "MI"]], - "20062": [["Cassano D'Adda", "MI"], ["Cascine San Pietro", "MI"], ["Groppello D'Adda", "MI"]], + "20062": [ + ["Cassano D'Adda", "MI"], + ["Cascine San Pietro", "MI"], + ["Groppello D'Adda", "MI"], + ], "20063": [["Cernusco Sul Naviglio", "MI"]], "20064": [["Gorgonzola", "MI"]], "20065": [["Inzago", "MI"]], @@ -7591,13 +8825,21 @@ class Provider(AddressProvider): ["Badile", "MI"], ["Vernate", "MI"], ], - "20081": [["Cassinetta Di Lugagnano", "MI"], ["Abbiategrasso", "MI"], ["Morimondo", "MI"]], + "20081": [ + ["Cassinetta Di Lugagnano", "MI"], + ["Abbiategrasso", "MI"], + ["Morimondo", "MI"], + ], "20082": [["Noviglio", "MI"], ["Binasco", "MI"], ["Santa Corinna", "MI"]], "20083": [["San Vito", "MI"], ["Gaggiano", "MI"], ["Vigano", "MI"]], "20084": [["Lacchiarella", "MI"]], "20085": [["Locate Di Triulzi", "MI"]], "20086": [["Motta Visconti", "MI"]], - "20087": [["Castellazzo De' Barzi", "MI"], ["Robecco Sul Naviglio", "MI"], ["Casterno", "MI"]], + "20087": [ + ["Castellazzo De' Barzi", "MI"], + ["Robecco Sul Naviglio", "MI"], + ["Casterno", "MI"], + ], "20088": [["Rosate", "MI"], ["Gudo Visconti", "MI"]], "20089": [["Rozzano", "MI"], ["Quinto De Stampi", "MI"]], "20090": [ @@ -7626,14 +8868,28 @@ class Provider(AddressProvider): "20094": [["Corsico", "MI"]], "20095": [["Milanino", "MI"], ["Cusano Milanino", "MI"]], "20096": [["Pioltello", "MI"], ["Limito", "MI"], ["Seggiano", "MI"]], - "20097": [["San Donato Milanese", "MI"], ["Poasco", "MI"], ["Metanopoli", "MI"], ["Sorigherio", "MI"]], - "20098": [["Borgo Lombardo", "MI"], ["San Giuliano Milanese", "MI"], ["Sesto Ulteriano", "MI"]], + "20097": [ + ["San Donato Milanese", "MI"], + ["Poasco", "MI"], + ["Metanopoli", "MI"], + ["Sorigherio", "MI"], + ], + "20098": [ + ["Borgo Lombardo", "MI"], + ["San Giuliano Milanese", "MI"], + ["Sesto Ulteriano", "MI"], + ], "20099": [["Sesto San Giovanni", "MI"]], "20121": [["Milano", "MI"]], "20122": [["Milano", "MI"]], "20123": [["Milano", "MI"]], "20124": [["Milano", "MI"]], - "20125": [["Milano", "MI"], ["Greco", "MI"], ["Gorla", "MI"], ["Precotto", "MI"]], + "20125": [ + ["Milano", "MI"], + ["Greco", "MI"], + ["Gorla", "MI"], + ["Precotto", "MI"], + ], "20126": [["Milano", "MI"]], "20127": [["Milano", "MI"], ["Crescenzago", "MI"]], "20128": [["Milano", "MI"]], @@ -7693,9 +8949,18 @@ class Provider(AddressProvider): "46011": [["Acquanegra Sul Chiese", "MN"], ["Mosio", "MN"]], "46012": [["Bozzolo", "MN"]], "46013": [["Canneto Sull'Oglio", "MN"]], - "46014": [["Sarginesco", "MN"], ["Ospitaletto Mantovano", "MN"], ["Castellucchio", "MN"]], + "46014": [ + ["Sarginesco", "MN"], + ["Ospitaletto Mantovano", "MN"], + ["Castellucchio", "MN"], + ], "46017": [["Cividale Mantovano", "MN"], ["Rivarolo Mantovano", "MN"]], - "46018": [["Breda Cisoni", "MN"], ["Ponteterra", "MN"], ["Villa Pasquali", "MN"], ["Sabbioneta", "MN"]], + "46018": [ + ["Breda Cisoni", "MN"], + ["Ponteterra", "MN"], + ["Villa Pasquali", "MN"], + ["Sabbioneta", "MN"], + ], "46019": [ ["Cogozzo", "MN"], ["Cicognara", "MN"], @@ -7724,7 +8989,12 @@ class Provider(AddressProvider): "46024": [["Bondanello", "MN"], ["Moglia", "MN"]], "46025": [["Poggio Rusco", "MN"]], "46026": [["Quistello", "MN"], ["Nuvolato", "MN"]], - "46027": [["Portiolo", "MN"], ["San Benedetto Po", "MN"], ["Mirasole", "MN"], ["San Siro", "MN"]], + "46027": [ + ["Portiolo", "MN"], + ["San Benedetto Po", "MN"], + ["Mirasole", "MN"], + ["San Siro", "MN"], + ], "46028": [ ["Santa Croce", "MN"], ["Sermide", "MN"], @@ -7756,7 +9026,11 @@ class Provider(AddressProvider): ["Ca' Vecchia", "MN"], ["Libiola", "MN"], ], - "46031": [["San Nicolo' Po", "MN"], ["San Biagio", "MN"], ["Bagnolo San Vito", "MN"]], + "46031": [ + ["San Nicolo' Po", "MN"], + ["San Biagio", "MN"], + ["Bagnolo San Vito", "MN"], + ], "46032": [["Castelbelforte", "MN"]], "46033": [["Castel D'Ario", "MN"]], "46034": [ @@ -7800,13 +9074,23 @@ class Provider(AddressProvider): ["Piubega", "MN"], ["Casaloldo", "MN"], ], - "46041": [["Castelnuovo Asolano", "MN"], ["Asola", "MN"], ["Castelnuovo", "MN"], ["Barchi Di Asola", "MN"]], + "46041": [ + ["Castelnuovo Asolano", "MN"], + ["Asola", "MN"], + ["Castelnuovo", "MN"], + ["Barchi Di Asola", "MN"], + ], "46042": [["Castel Goffredo", "MN"]], "46043": [["Gozzolina", "MN"], ["Castiglione Delle Stiviere", "MN"]], "46044": [["Goito", "MN"], ["Cerlongo", "MN"], ["Solarolo", "MN"]], "46045": [["Pozzolo", "MN"], ["Marengo", "MN"], ["Marmirolo", "MN"]], "46046": [["Medole", "MN"]], - "46047": [["Soave", "MN"], ["Porto Mantovano", "MN"], ["Sant'Antonio", "MN"], ["Soave Mantovano", "MN"]], + "46047": [ + ["Soave", "MN"], + ["Porto Mantovano", "MN"], + ["Sant'Antonio", "MN"], + ["Soave Mantovano", "MN"], + ], "46048": [ ["Roverbella", "MN"], ["Malavicina", "MN"], @@ -7867,7 +9151,11 @@ class Provider(AddressProvider): ["Miradolo Terme", "PV"], ], "27011": [["Belgioioso", "PV"], ["Torre De' Negri", "PV"]], - "27012": [["Torriano", "PV"], ["Certosa Di Pavia", "PV"], ["Torre Del Mangano", "PV"]], + "27012": [ + ["Torriano", "PV"], + ["Certosa Di Pavia", "PV"], + ["Torre Del Mangano", "PV"], + ], "27013": [["Lambrinia", "PV"], ["Chignolo Po", "PV"]], "27014": [["Genzone", "PV"], ["Corteolona", "PV"]], "27015": [["Landriano", "PV"]], @@ -7911,7 +9199,11 @@ class Provider(AddressProvider): "27023": [["Cassolnovo", "PV"]], "27024": [["Cilavegna", "PV"]], "27025": [["Gambolo'", "PV"]], - "27026": [["San Biagio", "PV"], ["Garlasco", "PV"], ["Madonna Delle Bozzole", "PV"]], + "27026": [ + ["San Biagio", "PV"], + ["Garlasco", "PV"], + ["Madonna Delle Bozzole", "PV"], + ], "27027": [["Gropello Cairoli", "PV"]], "27028": [["Bivio Cava Manara", "PV"], ["San Martino Siccomario", "PV"]], "27029": [["Vigevano", "PV"], ["Sforzesca", "PV"]], @@ -7988,7 +9280,12 @@ class Provider(AddressProvider): ["Cigognola", "PV"], ], "27041": [["Barbianello", "PV"], ["Casanova Lonati", "PV"]], - "27042": [["Robecco Pavese", "PV"], ["Bressana Bottarone", "PV"], ["Bressana", "PV"], ["Bottarone", "PV"]], + "27042": [ + ["Robecco Pavese", "PV"], + ["Bressana Bottarone", "PV"], + ["Bressana", "PV"], + ["Bottarone", "PV"], + ], "27043": [["Broni", "PV"], ["San Cipriano Po", "PV"]], "27044": [["Canneto Pavese", "PV"], ["Canneto", "PV"]], "27045": [["Casteggio", "PV"]], @@ -8031,16 +9328,30 @@ class Provider(AddressProvider): ["Bastida Pancarana", "PV"], ], "27051": [["Mezzana Corti", "PV"], ["Tre Re", "PV"], ["Cava Manara", "PV"]], - "27052": [["Montesegale", "PV"], ["Godiasco", "PV"], ["Rocca Susella", "PV"], ["Salice Terme", "PV"]], + "27052": [ + ["Montesegale", "PV"], + ["Godiasco", "PV"], + ["Rocca Susella", "PV"], + ["Salice Terme", "PV"], + ], "27053": [["Verretto", "PV"], ["Lungavilla", "PV"]], "27054": [["Montebello Della Battaglia", "PV"]], "27055": [["Rivanazzano", "PV"]], - "27056": [["Cornale E Bastida", "PV"], ["Bastida De' Dossi", "PV"], ["Cornale", "PV"]], + "27056": [ + ["Cornale E Bastida", "PV"], + ["Bastida De' Dossi", "PV"], + ["Cornale", "PV"], + ], "27057": [["Pietragavina", "PV"], ["Varzi", "PV"]], "27058": [["Oriolo", "PV"], ["Voghera", "PV"]], "27059": [["Zavattarello", "PV"]], "27061": [["Ruino", "PV"], ["Canevino", "PV"]], - "27100": [["Mirabello Di Pavia", "PV"], ["Ca' Della Terra", "PV"], ["Pavia", "PV"], ["Fossarmato", "PV"]], + "27100": [ + ["Mirabello Di Pavia", "PV"], + ["Ca' Della Terra", "PV"], + ["Pavia", "PV"], + ["Fossarmato", "PV"], + ], "23010": [ ["Cedrasco", "SO"], ["Rogolo", "SO"], @@ -8079,7 +9390,12 @@ class Provider(AddressProvider): ], "23011": [["Ardenno", "SO"]], "23012": [["Castione Andevenno", "SO"]], - "23013": [["Regoledo", "SO"], ["Sacco", "SO"], ["Cosio Stazione", "SO"], ["Cosio Valtellino", "SO"]], + "23013": [ + ["Regoledo", "SO"], + ["Sacco", "SO"], + ["Cosio Stazione", "SO"], + ["Cosio Valtellino", "SO"], + ], "23014": [["Andalo Valtellino", "SO"], ["Delebio", "SO"]], "23015": [["Dubino", "SO"], ["Nuova Olonio", "SO"]], "23016": [["Cercino", "SO"], ["Mantello", "SO"]], @@ -8115,8 +9431,17 @@ class Provider(AddressProvider): ], "23021": [["Campodolcino", "SO"], ["Fraciscio", "SO"]], "23022": [["Bette", "SO"], ["Chiavenna", "SO"]], - "23023": [["Primolo", "SO"], ["Chiareggio", "SO"], ["Chiesa In Valmalenco", "SO"]], - "23024": [["Isola", "SO"], ["Pianazzo", "SO"], ["Madesimo", "SO"], ["Montespluga", "SO"]], + "23023": [ + ["Primolo", "SO"], + ["Chiareggio", "SO"], + ["Chiesa In Valmalenco", "SO"], + ], + "23024": [ + ["Isola", "SO"], + ["Pianazzo", "SO"], + ["Madesimo", "SO"], + ["Montespluga", "SO"], + ], "23025": [["Novate Mezzola", "SO"], ["Campo", "SO"]], "23026": [["Ponte In Valtellina", "SO"], ["Arigna", "SO"]], "23027": [ @@ -8127,7 +9452,11 @@ class Provider(AddressProvider): ["San Pietro", "SO"], ["Samolaco", "SO"], ], - "23029": [["Dogana Di Villa Chiavenna", "SO"], ["Dogana", "SO"], ["Villa Di Chiavenna", "SO"]], + "23029": [ + ["Dogana Di Villa Chiavenna", "SO"], + ["Dogana", "SO"], + ["Villa Di Chiavenna", "SO"], + ], "23030": [ ["Castello Dell'Acqua", "SO"], ["Cepina Valdisotto", "SO"], @@ -8167,7 +9496,12 @@ class Provider(AddressProvider): ["Le Prese", "SO"], ["Pendosso", "SO"], ], - "23036": [["Teglio", "SO"], ["San Giacomo", "SO"], ["San Giacomo Di Teglio", "SO"], ["Tresenda", "SO"]], + "23036": [ + ["Teglio", "SO"], + ["San Giacomo", "SO"], + ["San Giacomo Di Teglio", "SO"], + ["Tresenda", "SO"], + ], "23037": [["Madonna Di Tirano", "SO"], ["Tirano", "SO"]], "23038": [ ["Isolaccia", "SO"], @@ -8216,9 +9550,23 @@ class Provider(AddressProvider): "21012": [["Cassano Magnago", "VA"]], "21013": [["Gallarate", "VA"], ["Crenna", "VA"], ["Cedrate", "VA"]], "21014": [["Laveno Mombello", "VA"], ["Mombello", "VA"], ["Laveno", "VA"]], - "21015": [["Lonate Pozzolo", "VA"], ["Tornavento", "VA"], ["Sant'Antonino Ticino", "VA"]], - "21016": [["Voldomino", "VA"], ["Poppino", "VA"], ["Creva", "VA"], ["Luino", "VA"]], - "21017": [["Cascina Elisa", "VA"], ["Verghera", "VA"], ["Cascina Costa", "VA"], ["Samarate", "VA"]], + "21015": [ + ["Lonate Pozzolo", "VA"], + ["Tornavento", "VA"], + ["Sant'Antonino Ticino", "VA"], + ], + "21016": [ + ["Voldomino", "VA"], + ["Poppino", "VA"], + ["Creva", "VA"], + ["Luino", "VA"], + ], + "21017": [ + ["Cascina Elisa", "VA"], + ["Verghera", "VA"], + ["Cascina Costa", "VA"], + ["Samarate", "VA"], + ], "21018": [["Sesto Calende", "VA"], ["Lisanza", "VA"]], "21019": [ ["Malpensa Aeroporto", "VA"], @@ -8267,7 +9615,12 @@ class Provider(AddressProvider): "21026": [["Oltrona Al Lago", "VA"], ["Gavirate", "VA"]], "21027": [["Ispra", "VA"], ["Ispra Centro Euratom", "VA"], ["Barza", "VA"]], "21028": [["Travedona Monate", "VA"]], - "21029": [["Cimbro", "VA"], ["Cuirone", "VA"], ["Corgeno", "VA"], ["Vergiate", "VA"]], + "21029": [ + ["Cimbro", "VA"], + ["Cuirone", "VA"], + ["Corgeno", "VA"], + ["Vergiate", "VA"], + ], "21030": [ ["Castello Cabiaglio", "VA"], ["Brenta", "VA"], @@ -8292,15 +9645,29 @@ class Provider(AddressProvider): ["Cuvio", "VA"], ["Rancio Valcuvia", "VA"], ], - "21031": [["Cadegliano Viconago", "VA"], ["Viconago", "VA"], ["Cadegliano", "VA"]], + "21031": [ + ["Cadegliano Viconago", "VA"], + ["Viconago", "VA"], + ["Cadegliano", "VA"], + ], "21032": [["Caravate", "VA"]], "21033": [["Cittiglio", "VA"]], - "21034": [["Caldana", "VA"], ["Trevisago", "VA"], ["Cocquio Trevisago", "VA"], ["Cocquio", "VA"]], + "21034": [ + ["Caldana", "VA"], + ["Trevisago", "VA"], + ["Cocquio Trevisago", "VA"], + ["Cocquio", "VA"], + ], "21035": [["Cunardo", "VA"]], "21036": [["Gemonio", "VA"]], "21037": [["Lavena Ponte Tresa", "VA"], ["Ponte Tresa", "VA"]], "21038": [["Leggiuno", "VA"], ["Sangiano", "VA"]], - "21039": [["Bedero Valcuvia", "VA"], ["Valganna", "VA"], ["Ganna", "VA"], ["Ghirla", "VA"]], + "21039": [ + ["Bedero Valcuvia", "VA"], + ["Valganna", "VA"], + ["Ganna", "VA"], + ["Ghirla", "VA"], + ], "21040": [ ["Caronno Varesino", "VA"], ["Cascine Maggio", "VA"], @@ -8409,9 +9776,17 @@ class Provider(AddressProvider): ["Castel Colonna", "AN"], ["Passo Di Ripe", "AN"], ], - "60013": [["Corinaldo", "AN"]], - "60015": [["Castelferretti", "AN"], ["Falconara Alta", "AN"], ["Falconara Marittima", "AN"]], - "60018": [["Marina Di Montemarciano", "AN"], ["Lungomare", "AN"], ["Montemarciano", "AN"]], + "60013": [["Corinaldo", "AN"]], + "60015": [ + ["Castelferretti", "AN"], + ["Falconara Alta", "AN"], + ["Falconara Marittima", "AN"], + ], + "60018": [ + ["Marina Di Montemarciano", "AN"], + ["Lungomare", "AN"], + ["Montemarciano", "AN"], + ], "60019": [ ["Sant'Angelo Di Senigallia", "AN"], ["Marzocca Di Senigallia", "AN"], @@ -8433,7 +9808,11 @@ class Provider(AddressProvider): ["Castel D'Emilio", "AN"], ], "60021": [["Camerano", "AN"], ["Aspio Terme", "AN"]], - "60022": [["Acquaviva Villa Musone", "AN"], ["San Rocchetto", "AN"], ["Castelfidardo", "AN"]], + "60022": [ + ["Acquaviva Villa Musone", "AN"], + ["San Rocchetto", "AN"], + ["Castelfidardo", "AN"], + ], "60024": [["Montoro", "AN"], ["Filottrano", "AN"]], "60025": [["Villa Musone", "AN"], ["Loreto Stazione", "AN"], ["Loreto", "AN"]], "60026": [["Numana", "AN"], ["Marcelli", "AN"], ["Numana Lido", "AN"]], @@ -8469,7 +9848,12 @@ class Provider(AddressProvider): ["Maiolati Spontini", "AN"], ["Moie", "AN"], ], - "60031": [["Castelplanio", "AN"], ["Castelplanio Stazione", "AN"], ["Macine", "AN"], ["Borgo Loreto", "AN"]], + "60031": [ + ["Castelplanio", "AN"], + ["Castelplanio Stazione", "AN"], + ["Macine", "AN"], + ["Borgo Loreto", "AN"], + ], "60033": [["Chiaravalle", "AN"], ["Grancetta", "AN"]], "60034": [["Cupramontana", "AN"]], "60035": [["Jesi", "AN"]], @@ -8530,7 +9914,12 @@ class Provider(AddressProvider): "60126": [["Ancona", "AN"]], "60127": [["Ancona", "AN"], ["Pinocchio", "AN"]], "60128": [["Ancona", "AN"]], - "60129": [["Ancona", "AN"], ["Varano", "AN"], ["Pietralacroce", "AN"], ["Poggio", "AN"]], + "60129": [ + ["Ancona", "AN"], + ["Varano", "AN"], + ["Pietralacroce", "AN"], + ["Poggio", "AN"], + ], "60131": [["Ancona", "AN"], ["Montesicuro", "AN"]], "63020": [["Piane Di Falerone", "AP"]], "63031": [["Castel Di Lama Stazione", "AP"]], @@ -8541,7 +9930,11 @@ class Provider(AddressProvider): "63065": [["San Savino", "AP"], ["Ripatransone", "AP"]], "63066": [["Ischia", "AP"], ["Grottammare", "AP"]], "63067": [["Cossignano", "AP"]], - "63068": [["Porchia", "AP"], ["Patrignone", "AP"], ["Montalto Delle Marche", "AP"]], + "63068": [ + ["Porchia", "AP"], + ["Patrignone", "AP"], + ["Montalto Delle Marche", "AP"], + ], "63069": [["Montedinove", "AP"]], "63071": [["Rotella", "AP"], ["Castel Di Croce", "AP"]], "63072": [["Castignano", "AP"], ["Ripaberarda", "AP"]], @@ -8560,7 +9953,12 @@ class Provider(AddressProvider): ["Castel Di Lama", "AP"], ], "63083": [["Appignano Del Tronto", "AP"]], - "63084": [["Folignano", "AP"], ["Piane Di Morro", "AP"], ["Villa Pigna", "AP"], ["Pigna Bassa", "AP"]], + "63084": [ + ["Folignano", "AP"], + ["Piane Di Morro", "AP"], + ["Villa Pigna", "AP"], + ["Pigna Bassa", "AP"], + ], "63085": [["Caselle", "AP"], ["Maltignano", "AP"]], "63086": [["Force", "AP"]], "63087": [["Comunanza", "AP"], ["Croce Di Casale", "AP"]], @@ -8624,7 +10022,11 @@ class Provider(AddressProvider): "63828": [["Campofilone", "FM"]], "63831": [["Contrada Tenna", "FM"], ["Rapagnano", "FM"]], "63832": [["Magliano Di Tenna", "FM"]], - "63833": [["Montegiorgio", "FM"], ["Piane Di Montegiorgio", "FM"], ["Alteta", "FM"]], + "63833": [ + ["Montegiorgio", "FM"], + ["Piane Di Montegiorgio", "FM"], + ["Alteta", "FM"], + ], "63834": [["Massa Fermana", "FM"]], "63835": [["Montappone", "FM"]], "63836": [["Monte Vidon Corrado", "FM"]], @@ -8635,7 +10037,11 @@ class Provider(AddressProvider): "63842": [["Monsampietro Morico", "FM"], ["Sant'Elpidio Morico", "FM"]], "63843": [["Montottone", "FM"]], "63844": [["Grottazzolina", "FM"]], - "63845": [["Capparuccia", "FM"], ["Ponzano Di Fermo", "FM"], ["Torchiaro", "FM"]], + "63845": [ + ["Capparuccia", "FM"], + ["Ponzano Di Fermo", "FM"], + ["Torchiaro", "FM"], + ], "63846": [["Monte Giberto", "FM"]], "63847": [["Monte Vidon Combatte", "FM"]], "63848": [["Moregnano", "FM"], ["Petritoli", "FM"]], @@ -8741,8 +10147,16 @@ class Provider(AddressProvider): ["Fonte Di Brescia", "MC"], ["Pioraco", "MC"], ], - "62026": [["San Ginesio", "MC"], ["Passo San Ginesio", "MC"], ["Pian Di Pieca", "MC"]], - "62027": [["Castel San Pietro", "MC"], ["Cesolo", "MC"], ["San Severino Marche", "MC"]], + "62026": [ + ["San Ginesio", "MC"], + ["Passo San Ginesio", "MC"], + ["Pian Di Pieca", "MC"], + ], + "62027": [ + ["Castel San Pietro", "MC"], + ["Cesolo", "MC"], + ["San Severino Marche", "MC"], + ], "62028": [["Sarnano", "MC"]], "62029": [["Tolentino", "MC"]], "62032": [ @@ -8769,8 +10183,17 @@ class Provider(AddressProvider): ["Pieve Torina", "MC"], ["Appennino", "MC"], ], - "62038": [["Serravalle Di Chienti", "MC"], ["Cesi", "MC"], ["Cesi Di Macerata", "MC"]], - "62039": [["Visso", "MC"], ["Ussita", "MC"], ["Castelsantangelo Sul Nera", "MC"], ["Fematre", "MC"]], + "62038": [ + ["Serravalle Di Chienti", "MC"], + ["Cesi", "MC"], + ["Cesi Di Macerata", "MC"], + ], + "62039": [ + ["Visso", "MC"], + ["Ussita", "MC"], + ["Castelsantangelo Sul Nera", "MC"], + ["Fematre", "MC"], + ], "62100": [ ["Madonna Del Monte", "MC"], ["Villa Potenza", "MC"], @@ -8800,7 +10223,11 @@ class Provider(AddressProvider): ["Fratte Di Sassofeltrio", "PU"], ["Sassofeltrio", "PU"], ], - "61014": [["Madonna Di Pugliano", "PU"], ["Montecopiolo", "PU"], ["Villagrande", "PU"]], + "61014": [ + ["Madonna Di Pugliano", "PU"], + ["Montecopiolo", "PU"], + ["Villagrande", "PU"], + ], "61020": [ ["Casinina", "PU"], ["Borgo Massano", "PU"], @@ -8830,7 +10257,12 @@ class Provider(AddressProvider): ["Piandimeleto", "PU"], ["San Sisto", "PU"], ], - "61028": [["Caprazzino", "PU"], ["Mercatale", "PU"], ["Sassocorvaro", "PU"], ["Auditore", "PU"]], + "61028": [ + ["Caprazzino", "PU"], + ["Mercatale", "PU"], + ["Sassocorvaro", "PU"], + ["Auditore", "PU"], + ], "61029": [ ["Ponte In Foglia", "PU"], ["Schieti", "PU"], @@ -8858,7 +10290,12 @@ class Provider(AddressProvider): ["Montefelcino", "PU"], ["Lucrezia", "PU"], ], - "61032": [["Fenile", "PU"], ["Cuccurano", "PU"], ["Bellocchi", "PU"], ["Fano", "PU"]], + "61032": [ + ["Fenile", "PU"], + ["Cuccurano", "PU"], + ["Bellocchi", "PU"], + ["Fano", "PU"], + ], "61033": [["Fermignano", "PU"]], "61034": [["Isola Di Fano", "PU"], ["Calmazzo", "PU"], ["Fossombrone", "PU"]], "61037": [["Marotta", "PU"], ["Mondolfo", "PU"], ["Centocroci", "PU"]], @@ -9018,7 +10455,11 @@ class Provider(AddressProvider): ["Rotello", "CB"], ], "86041": [["Bonefro", "CB"]], - "86042": [["Nuova Cliternia", "CB"], ["Campomarino", "CB"], ["Lido Di Campomarino", "CB"]], + "86042": [ + ["Nuova Cliternia", "CB"], + ["Campomarino", "CB"], + ["Lido Di Campomarino", "CB"], + ], "86043": [["Casacalenda", "CB"]], "86044": [["Colletorto", "CB"]], "86045": [["Portocannone", "CB"]], @@ -9026,7 +10467,11 @@ class Provider(AddressProvider): "86047": [["Santa Croce Di Magliano", "CB"]], "86048": [["Sant'Elia A Pianisi", "CB"]], "86049": [["Ururi", "CB"]], - "86100": [["Santo Stefano Di Campobasso", "CB"], ["Campobasso", "CB"], ["Santo Stefano", "CB"]], + "86100": [ + ["Santo Stefano Di Campobasso", "CB"], + ["Campobasso", "CB"], + ["Santo Stefano", "CB"], + ], "86070": [ ["Castelnuovo Al Volturno", "IS"], ["Scapoli", "IS"], @@ -9075,7 +10520,11 @@ class Provider(AddressProvider): "86086": [["Poggio Sannita", "IS"]], "86087": [["Rionero Sannitico", "IS"]], "86088": [["San Pietro Avellana", "IS"]], - "86089": [["Vastogirardi", "IS"], ["Cerreto", "IS"], ["Villa San Michele", "IS"]], + "86089": [ + ["Vastogirardi", "IS"], + ["Cerreto", "IS"], + ["Villa San Michele", "IS"], + ], "86090": [ ["Pettoranello Del Molise", "IS"], ["Pastena", "IS"], @@ -9090,14 +10539,22 @@ class Provider(AddressProvider): "86092": [["Roccamandolfi", "IS"], ["Cantalupo Nel Sannio", "IS"]], "86093": [["Carpinone", "IS"]], "86094": [["Civitanova Del Sannio", "IS"]], - "86095": [["Frosolone", "IS"], ["San Pietro In Valle", "IS"], ["Sant'Elena Sannita", "IS"]], + "86095": [ + ["Frosolone", "IS"], + ["San Pietro In Valle", "IS"], + ["Sant'Elena Sannita", "IS"], + ], "86096": [ ["Santa Maria Del Molise", "IS"], ["Macchiagodena", "IS"], ["Incoronata", "IS"], ["Sant'Angelo In Grotte", "IS"], ], - "86097": [["Sessano Del Molise", "IS"], ["Pescolanciano", "IS"], ["Chiauci", "IS"]], + "86097": [ + ["Sessano Del Molise", "IS"], + ["Pescolanciano", "IS"], + ["Chiauci", "IS"], + ], "86170": [["Miranda", "IS"], ["Castelromano", "IS"], ["Isernia", "IS"]], "15010": [ ["Grognardo", "AL"], @@ -9270,7 +10727,11 @@ class Provider(AddressProvider): "15053": [["Castelnuovo Scrivia", "AL"]], "15054": [["Fabbrica Curone", "AL"], ["Caldirola", "AL"], ["Garadassi", "AL"]], "15055": [["Pontecurone", "AL"]], - "15056": [["San Sebastiano Curone", "AL"], ["Gremiasco", "AL"], ["Dernice", "AL"]], + "15056": [ + ["San Sebastiano Curone", "AL"], + ["Gremiasco", "AL"], + ["Dernice", "AL"], + ], "15057": [ ["Passalacqua", "AL"], ["Tortona", "AL"], @@ -9445,11 +10906,19 @@ class Provider(AddressProvider): ], "14031": [["San Desiderio", "AT"], ["Calliano", "AT"], ["Grana", "AT"]], "14032": [["Casorzo", "AT"]], - "14033": [["Callianetto", "AT"], ["Castell'Alfero Stazione", "AT"], ["Castell'Alfero", "AT"]], + "14033": [ + ["Callianetto", "AT"], + ["Castell'Alfero Stazione", "AT"], + ["Castell'Alfero", "AT"], + ], "14034": [["Castello Di Annone", "AT"], ["Monfallito", "AT"]], "14035": [["Grazzano Badoglio", "AT"]], "14036": [["Moncalvo", "AT"]], - "14037": [["Castiglione D'Asti", "AT"], ["Portacomaro", "AT"], ["Migliandolo", "AT"]], + "14037": [ + ["Castiglione D'Asti", "AT"], + ["Portacomaro", "AT"], + ["Migliandolo", "AT"], + ], "14039": [["Tonco", "AT"]], "14040": [ ["Cortiglione", "AT"], @@ -9471,7 +10940,11 @@ class Provider(AddressProvider): "14045": [["Ghiare", "AT"], ["Incisa Scapaccino", "AT"], ["Madonna", "AT"]], "14046": [["Bazzana", "AT"], ["Bruno", "AT"], ["Mombaruzzo", "AT"]], "14047": [["Mombercelli", "AT"]], - "14048": [["Montegrosso D'Asti", "AT"], ["Montaldo Scarampi", "AT"], ["Montegrosso D'Asti Stazione", "AT"]], + "14048": [ + ["Montegrosso D'Asti", "AT"], + ["Montaldo Scarampi", "AT"], + ["Montegrosso D'Asti Stazione", "AT"], + ], "14049": [["Vaglio Serra", "AT"], ["Nizza Monferrato", "AT"]], "14050": [ ["Cessole", "AT"], @@ -9560,7 +11033,12 @@ class Provider(AddressProvider): ["Pratrivero", "BI"], ["Giardino", "BI"], ], - "13836": [["Ponte Guelpa", "BI"], ["Castellengo", "BI"], ["Aglietti", "BI"], ["Cossato", "BI"]], + "13836": [ + ["Ponte Guelpa", "BI"], + ["Castellengo", "BI"], + ["Aglietti", "BI"], + ["Cossato", "BI"], + ], "13841": [["Selve Marcone", "BI"], ["Bioglio", "BI"]], "13843": [["Pettinengo", "BI"], ["Vaglio", "BI"]], "13844": [["Piatto", "BI"], ["Ternengo", "BI"]], @@ -9568,7 +11046,12 @@ class Provider(AddressProvider): "13847": [["Vallanzengo", "BI"], ["Valle San Nicolao", "BI"]], "13848": [["Zumaglia", "BI"]], "13851": [["Castelletto Cervo", "BI"]], - "13853": [["Capovilla", "BI"], ["Castello", "BI"], ["Lessona", "BI"], ["Crosa", "BI"]], + "13853": [ + ["Capovilla", "BI"], + ["Castello", "BI"], + ["Lessona", "BI"], + ["Crosa", "BI"], + ], "13854": [["Cerreto Castello", "BI"], ["Quaregna", "BI"]], "13855": [["Valdengo", "BI"]], "13856": [["Vigliano Biellese", "BI"], ["Villaggi", "BI"]], @@ -9595,11 +11078,21 @@ class Provider(AddressProvider): "13885": [["Brianco", "BI"], ["Salussola", "BI"], ["Vigellio", "BI"]], "13886": [["Viverone", "BI"]], "13887": [["Zimone", "BI"], ["Magnano", "BI"]], - "13888": [["Mongrando", "BI"], ["Ceresane", "BI"], ["Curanuova", "BI"], ["Zubiena", "BI"]], + "13888": [ + ["Mongrando", "BI"], + ["Ceresane", "BI"], + ["Curanuova", "BI"], + ["Zubiena", "BI"], + ], "13891": [["Camburzano", "BI"]], "13893": [["Donato", "BI"]], "13894": [["Gaglianico", "BI"]], - "13895": [["Graglia", "BI"], ["Muzzano", "BI"], ["Graglia Santuario", "BI"], ["Graglia Bagni", "BI"]], + "13895": [ + ["Graglia", "BI"], + ["Muzzano", "BI"], + ["Graglia Santuario", "BI"], + ["Graglia Bagni", "BI"], + ], "13896": [["Netro", "BI"]], "13897": [["Occhieppo Inferiore", "BI"]], "13898": [["Occhieppo Superiore", "BI"]], @@ -9642,7 +11135,11 @@ class Provider(AddressProvider): ["Sambuco", "CN"], ["San Rocco Di Bernezzo", "CN"], ], - "12011": [["Martinetto Del Rame", "CN"], ["Aradolo La Bruna", "CN"], ["Borgo San Dalmazzo", "CN"]], + "12011": [ + ["Martinetto Del Rame", "CN"], + ["Aradolo La Bruna", "CN"], + ["Borgo San Dalmazzo", "CN"], + ], "12012": [ ["Boves", "CN"], ["Cerati", "CN"], @@ -9655,7 +11152,11 @@ class Provider(AddressProvider): "12013": [["Chiusa Di Pesio", "CN"], ["San Bartolomeo", "CN"]], "12014": [["Festiona", "CN"], ["Demonte", "CN"]], "12015": [["Limone Piemonte", "CN"]], - "12016": [["Peveragno", "CN"], ["Santa Margherita", "CN"], ["San Lorenzo Peveragno", "CN"]], + "12016": [ + ["Peveragno", "CN"], + ["Santa Margherita", "CN"], + ["San Lorenzo Peveragno", "CN"], + ], "12017": [["Robilante", "CN"]], "12018": [["Brignola", "CN"], ["Roccavione", "CN"], ["Brignola Sottana", "CN"]], "12019": [["Vernante", "CN"]], @@ -9694,7 +11195,12 @@ class Provider(AddressProvider): ["Tarantasca", "CN"], ], "12021": [["Acceglio", "CN"]], - "12022": [["San Chiaffredo", "CN"], ["Valmala", "CN"], ["Busca", "CN"], ["Castelletto Busca", "CN"]], + "12022": [ + ["San Chiaffredo", "CN"], + ["Valmala", "CN"], + ["Busca", "CN"], + ["Castelletto Busca", "CN"], + ], "12023": [["Caraglio", "CN"]], "12024": [["Costigliole Saluzzo", "CN"]], "12025": [["Montemale Di Cuneo", "CN"], ["Dronero", "CN"]], @@ -9774,7 +11280,11 @@ class Provider(AddressProvider): ["Baldissero D'Alba", "CN"], ["Salmour", "CN"], ], - "12041": [["Isola Di Bene Vagienna", "CN"], ["Isola", "CN"], ["Bene Vagienna", "CN"]], + "12041": [ + ["Isola Di Bene Vagienna", "CN"], + ["Isola", "CN"], + ["Bene Vagienna", "CN"], + ], "12042": [["Bandito", "CN"], ["Bra", "CN"], ["Pollenzo", "CN"]], "12043": [["Canale", "CN"], ["Valpone", "CN"]], "12044": [["Roata Chiusani", "CN"], ["San Biagio", "CN"], ["Centallo", "CN"]], @@ -9833,7 +11343,12 @@ class Provider(AddressProvider): "12052": [["Neive", "CN"], ["Borgonuovo Di Neive", "CN"], ["Borgonovo", "CN"]], "12053": [["Santuario Tinella", "CN"], ["Castiglione Tinella", "CN"]], "12054": [["Cossano Belbo", "CN"], ["Santa Libera", "CN"]], - "12055": [["Diano D'Alba", "CN"], ["Valle Talloria", "CN"], ["San Rocco Cherasca", "CN"], ["Ricca", "CN"]], + "12055": [ + ["Diano D'Alba", "CN"], + ["Valle Talloria", "CN"], + ["San Rocco Cherasca", "CN"], + ["Ricca", "CN"], + ], "12056": [["San Donato", "CN"], ["San Donato Di Mango", "CN"], ["Mango", "CN"]], "12058": [["Camo", "CN"], ["Valdivilla", "CN"], ["Santo Stefano Belbo", "CN"]], "12060": [ @@ -9941,8 +11456,17 @@ class Provider(AddressProvider): ["Pra' Di Roburent", "CN"], ], "12081": [["Beinette", "CN"]], - "12082": [["Frabosa Soprana", "CN"], ["Bossea", "CN"], ["Fontane", "CN"], ["Corsaglia", "CN"]], - "12083": [["Gosi Pianvignale", "CN"], ["Gosi", "CN"], ["Frabosa Sottana", "CN"]], + "12082": [ + ["Frabosa Soprana", "CN"], + ["Bossea", "CN"], + ["Fontane", "CN"], + ["Corsaglia", "CN"], + ], + "12083": [ + ["Gosi Pianvignale", "CN"], + ["Gosi", "CN"], + ["Frabosa Sottana", "CN"], + ], "12084": [ ["Pogliola", "CN"], ["Breo", "CN"], @@ -9954,8 +11478,18 @@ class Provider(AddressProvider): ["Pascomonti", "CN"], ["Mondovi'", "CN"], ], - "12087": [["Valcasotto", "CN"], ["Pamparato", "CN"], ["Serra", "CN"], ["Serra Pamparato", "CN"]], - "12088": [["Roccaforte Mondovi'", "CN"], ["Lurisia", "CN"], ["Prea", "CN"], ["Prea Di Roccaforte", "CN"]], + "12087": [ + ["Valcasotto", "CN"], + ["Pamparato", "CN"], + ["Serra", "CN"], + ["Serra Pamparato", "CN"], + ], + "12088": [ + ["Roccaforte Mondovi'", "CN"], + ["Lurisia", "CN"], + ["Prea", "CN"], + ["Prea Di Roccaforte", "CN"], + ], "12089": [["Villanova Mondovi'", "CN"]], "12100": [ ["Madonna Delle Grazie", "CN"], @@ -10003,7 +11537,11 @@ class Provider(AddressProvider): "28013": [["Veruno", "NO"], ["Gattico", "NO"]], "28014": [["Maggiora", "NO"]], "28015": [["Momo", "NO"]], - "28016": [["Orta Novarese", "NO"], ["Isola San Giulio", "NO"], ["Orta San Giulio", "NO"]], + "28016": [ + ["Orta Novarese", "NO"], + ["Isola San Giulio", "NO"], + ["Orta San Giulio", "NO"], + ], "28017": [["San Maurizio D'Opaglio", "NO"]], "28019": [["Suno", "NO"], ["Baraggia", "NO"]], "28021": [ @@ -10134,8 +11672,18 @@ class Provider(AddressProvider): "10011": [["Aglie'", "TO"]], "10012": [["Bollengo", "TO"]], "10013": [["Baio Dora", "TO"], ["Borgofranco D'Ivrea", "TO"]], - "10014": [["Caluso", "TO"], ["Vallo Di Caluso", "TO"], ["Vallo", "TO"], ["Are'", "TO"], ["Rodallo", "TO"]], - "10015": [["San Bernardo D'Ivrea", "TO"], ["Torre Balfredo", "TO"], ["Ivrea", "TO"]], + "10014": [ + ["Caluso", "TO"], + ["Vallo Di Caluso", "TO"], + ["Vallo", "TO"], + ["Are'", "TO"], + ["Rodallo", "TO"], + ], + "10015": [ + ["San Bernardo D'Ivrea", "TO"], + ["Torre Balfredo", "TO"], + ["Ivrea", "TO"], + ], "10016": [["Montalto Dora", "TO"]], "10017": [["Montanaro", "TO"]], "10018": [["Pavone Canavese", "TO"]], @@ -10199,7 +11747,12 @@ class Provider(AddressProvider): ], "10031": [["Borgomasino", "TO"]], "10032": [["Brandizzo", "TO"]], - "10034": [["Boschetto", "TO"], ["Chivasso", "TO"], ["Torassi", "TO"], ["Castelrosso", "TO"]], + "10034": [ + ["Boschetto", "TO"], + ["Chivasso", "TO"], + ["Torassi", "TO"], + ["Castelrosso", "TO"], + ], "10035": [["Casale", "TO"], ["Mazze'", "TO"], ["Tonengo Di Mazze'", "TO"]], "10036": [["Olimpia", "TO"], ["Settimo Torinese", "TO"]], "10037": [["Torrazza Piemonte", "TO"]], @@ -10237,12 +11790,22 @@ class Provider(AddressProvider): ["Lombriasco", "TO"], ["Volvera", "TO"], ], - "10041": [["Carignano", "TO"], ["Ceretto Di Carignano", "TO"], ["Ceretto", "TO"]], + "10041": [ + ["Carignano", "TO"], + ["Ceretto Di Carignano", "TO"], + ["Ceretto", "TO"], + ], "10042": [["Stupinigi", "TO"], ["Nichelino", "TO"]], "10043": [["Orbassano", "TO"]], "10044": [["Pianezza", "TO"]], "10045": [["Piossasco", "TO"], ["Garola", "TO"]], - "10046": [["Marocchi", "TO"], ["Avatanei", "TO"], ["Isolabella", "TO"], ["Poirino", "TO"], ["Favari", "TO"]], + "10046": [ + ["Marocchi", "TO"], + ["Avatanei", "TO"], + ["Isolabella", "TO"], + ["Poirino", "TO"], + ["Favari", "TO"], + ], "10048": [["Vinovo", "TO"], ["Garino", "TO"]], "10050": [ ["Sauze D'Oulx", "TO"], @@ -10276,7 +11839,12 @@ class Provider(AddressProvider): "10051": [["Drubiaglio", "TO"], ["Grangia", "TO"], ["Avigliana", "TO"]], "10052": [["Bardonecchia", "TO"], ["Borgonovo Bardonecchia", "TO"]], "10053": [["Foresto", "TO"], ["Bussoleno", "TO"]], - "10054": [["Bousson", "TO"], ["Cesana Torinese", "TO"], ["Solomiac", "TO"], ["Sauze Di Cesana", "TO"]], + "10054": [ + ["Bousson", "TO"], + ["Cesana Torinese", "TO"], + ["Solomiac", "TO"], + ["Sauze Di Cesana", "TO"], + ], "10055": [["Condove", "TO"]], "10056": [["Beaulard", "TO"], ["Oulx", "TO"]], "10057": [["Sant'Ambrogio Di Torino", "TO"]], @@ -10339,7 +11907,12 @@ class Provider(AddressProvider): "10061": [["Cavour", "TO"]], "10062": [["Airali", "TO"], ["Luserna", "TO"], ["Luserna San Giovanni", "TO"]], "10063": [["Perosa Argentina", "TO"], ["Pomaretto", "TO"]], - "10064": [["Abbadia Alpina", "TO"], ["Riva Di Pinerolo", "TO"], ["Pinerolo", "TO"], ["Baudenasca", "TO"]], + "10064": [ + ["Abbadia Alpina", "TO"], + ["Riva Di Pinerolo", "TO"], + ["Pinerolo", "TO"], + ["Baudenasca", "TO"], + ], "10065": [["San Germano Chisone", "TO"], ["Pramollo", "TO"]], "10066": [["Torre Pellice", "TO"]], "10067": [["Vigone", "TO"]], @@ -10395,7 +11968,11 @@ class Provider(AddressProvider): "10074": [["Lanzo Torinese", "TO"]], "10075": [["Mathi", "TO"]], "10076": [["San Giovanni", "TO"], ["Nole", "TO"]], - "10077": [["Malanghero", "TO"], ["Ceretta Di San Maurizio Canavese", "TO"], ["San Maurizio Canavese", "TO"]], + "10077": [ + ["Malanghero", "TO"], + ["Ceretta Di San Maurizio Canavese", "TO"], + ["San Maurizio Canavese", "TO"], + ], "10078": [["Venaria Reale", "TO"], ["Altessano", "TO"]], "10080": [ ["Rosone", "TO"], @@ -10493,9 +12070,19 @@ class Provider(AddressProvider): ["Borgata Paradiso Di Collegno", "TO"], ["Regina Margherita", "TO"], ], - "10094": [["Valgioie", "TO"], ["Pontepietra", "TO"], ["Giaveno", "TO"], ["Selvaggio", "TO"]], + "10094": [ + ["Valgioie", "TO"], + ["Pontepietra", "TO"], + ["Giaveno", "TO"], + ["Selvaggio", "TO"], + ], "10095": [["Gerbido", "TO"], ["Lesna", "TO"], ["Grugliasco", "TO"]], - "10098": [["Tetti Neirotti", "TO"], ["Rivoli", "TO"], ["Bruere", "TO"], ["Cascine Vica", "TO"]], + "10098": [ + ["Tetti Neirotti", "TO"], + ["Rivoli", "TO"], + ["Bruere", "TO"], + ["Cascine Vica", "TO"], + ], "10099": [["San Mauro Torinese", "TO"]], "10100": [["Torino", "TO"]], "10121": [["Torino", "TO"]], @@ -10551,7 +12138,12 @@ class Provider(AddressProvider): "28824": [["Gonte", "VB"], ["Oggebbio", "VB"]], "28825": [["Ponte Di Falmenta", "VB"]], "28826": [["Trarego Viggiona", "VB"]], - "28827": [["Cursolo Orasso", "VB"], ["Cavaglio Spoccia", "VB"], ["Falmenta", "VB"], ["Airetta", "VB"]], + "28827": [ + ["Cursolo Orasso", "VB"], + ["Cavaglio Spoccia", "VB"], + ["Falmenta", "VB"], + ["Airetta", "VB"], + ], "28828": [["Gurro", "VB"]], "28831": [["Feriolo Baveno", "VB"], ["Feriolo", "VB"], ["Baveno", "VB"]], "28832": [["Belgirate", "VB"]], @@ -10588,9 +12180,18 @@ class Provider(AddressProvider): "28866": [["Premia", "VB"], ["San Rocco", "VB"]], "28868": [["Iselle", "VB"], ["Trasquera", "VB"], ["Varzo", "VB"]], "28871": [["Bannio Anzino", "VB"]], - "28873": [["Calasca Castiglione", "VB"], ["Castiglione D'Ossola", "VB"], ["Castiglione", "VB"]], + "28873": [ + ["Calasca Castiglione", "VB"], + ["Castiglione D'Ossola", "VB"], + ["Castiglione", "VB"], + ], "28875": [["Ceppo Morelli", "VB"]], - "28876": [["Pestarena", "VB"], ["Borca", "VB"], ["Borca Di Macugnaga", "VB"], ["Macugnaga", "VB"]], + "28876": [ + ["Pestarena", "VB"], + ["Borca", "VB"], + ["Borca Di Macugnaga", "VB"], + ["Macugnaga", "VB"], + ], "28877": [["Anzola D'Ossola", "VB"], ["Ornavasso", "VB"]], "28879": [["San Carlo", "VB"], ["Vanzone Con San Carlo", "VB"]], "28881": [ @@ -10618,7 +12219,12 @@ class Provider(AddressProvider): "28894": [["Madonna Del Sasso", "VB"]], "28895": [["Forno Di Omegna", "VB"], ["Massiola", "VB"]], "28896": [["Quarna Sotto", "VB"]], - "28897": [["Fornero", "VB"], ["Luzzogno", "VB"], ["Valstrona", "VB"], ["Sambughetto", "VB"]], + "28897": [ + ["Fornero", "VB"], + ["Luzzogno", "VB"], + ["Valstrona", "VB"], + ["Sambughetto", "VB"], + ], "28898": [["Quarna Sopra", "VB"]], "28899": [["Arola", "VB"]], "28922": [["Verbania", "VB"]], @@ -10636,7 +12242,12 @@ class Provider(AddressProvider): "13012": [["Borgo Vercelli", "VC"], ["Prarolo", "VC"]], "13017": [["Quarona", "VC"], ["Doccio", "VC"]], "13018": [["Valduggia", "VC"], ["Zuccaro", "VC"]], - "13019": [["Morca", "VC"], ["Valmaggia", "VC"], ["Varallo", "VC"], ["Roccapietra", "VC"]], + "13019": [ + ["Morca", "VC"], + ["Valmaggia", "VC"], + ["Varallo", "VC"], + ["Roccapietra", "VC"], + ], "13020": [ ["Sabbia", "VC"], ["Mollia", "VC"], @@ -10681,7 +12292,11 @@ class Provider(AddressProvider): "13034": [["Desana", "VC"], ["Lignana", "VC"]], "13035": [["Lenta", "VC"]], "13036": [["Ronsecco", "VC"]], - "13037": [["Bornate Sesia", "VC"], ["Vintebbio", "VC"], ["Serravalle Sesia", "VC"]], + "13037": [ + ["Bornate Sesia", "VC"], + ["Vintebbio", "VC"], + ["Serravalle Sesia", "VC"], + ], "13038": [["Tricerro", "VC"]], "13039": [["Trino", "VC"]], "13040": [ @@ -10703,7 +12318,11 @@ class Provider(AddressProvider): ], "13041": [["Bianze'", "VC"]], "13043": [["Cigliano", "VC"]], - "13044": [["Crescentino", "VC"], ["San Silvestro", "VC"], ["San Genuario", "VC"]], + "13044": [ + ["Crescentino", "VC"], + ["San Silvestro", "VC"], + ["San Genuario", "VC"], + ], "13045": [["Lozzolo", "VC"], ["Gattinara", "VC"]], "13046": [["Lamporo", "VC"], ["Livorno Ferraris", "VC"]], "13047": [["Olcenengo", "VC"], ["San Germano Vercellese", "VC"]], @@ -10739,7 +12358,11 @@ class Provider(AddressProvider): "70014": [["Triggianello", "BA"], ["Conversano", "BA"]], "70015": [["Lamadacqua", "BA"], ["Noci", "BA"]], "70016": [["Parchitello", "BA"], ["Noicattaro", "BA"], ["Parco Scizzo", "BA"]], - "70017": [["San Michele In Monte Laureto", "BA"], ["Putignano", "BA"], ["San Pietro Piturno", "BA"]], + "70017": [ + ["San Michele In Monte Laureto", "BA"], + ["Putignano", "BA"], + ["San Pietro Piturno", "BA"], + ], "70018": [["Rutigliano", "BA"]], "70019": [["Triggiano", "BA"]], "70020": [ @@ -10753,7 +12376,12 @@ class Provider(AddressProvider): "70021": [["Acquaviva Delle Fonti", "BA"]], "70022": [["Altamura", "BA"], ["Curtaniello", "BA"], ["Parisi", "BA"]], "70023": [["Murgia", "BA"], ["Gioia Del Colle", "BA"]], - "70024": [["Gravina In Puglia", "BA"], ["Murgetta", "BA"], ["Dolcecanto", "BA"], ["La Murgetta", "BA"]], + "70024": [ + ["Gravina In Puglia", "BA"], + ["Murgetta", "BA"], + ["Dolcecanto", "BA"], + ["La Murgetta", "BA"], + ], "70025": [["Grumo Appula", "BA"]], "70026": [["Modugno", "BA"]], "70027": [["Palo Del Colle", "BA"]], @@ -10791,12 +12419,21 @@ class Provider(AddressProvider): ], "70124": [["Picone", "BA"], ["Poggio Franco", "BA"], ["Bari", "BA"]], "70125": [["Bari", "BA"], ["San Pasquale", "BA"], ["Carrassi", "BA"]], - "70126": [["Mungivacca", "BA"], ["Japigia", "BA"], ["Bari", "BA"], ["Torre A Mare", "BA"]], + "70126": [ + ["Mungivacca", "BA"], + ["Japigia", "BA"], + ["Bari", "BA"], + ["Torre A Mare", "BA"], + ], "70127": [["Santo Spirito", "BA"]], "70128": [["Palese", "BA"]], "70129": [["Loseto", "BA"], ["Ceglie Del Campo", "BA"]], "70131": [["Carbonara Di Bari", "BA"]], - "72012": [["Carovigno", "BR"], ["Serranova Di Carovigno", "BR"], ["Serranova", "BR"]], + "72012": [ + ["Carovigno", "BR"], + ["Serranova Di Carovigno", "BR"], + ["Serranova", "BR"], + ], "72013": [["Ceglie Messapica", "BR"]], "72014": [["Cisternino", "BR"], ["Caranna", "BR"], ["Casalini", "BR"]], "72015": [ @@ -10816,11 +12453,24 @@ class Provider(AddressProvider): "72017": [["Ostuni", "BR"]], "72018": [["San Michele Salentino", "BR"]], "72019": [["San Vito Dei Normanni", "BR"]], - "72020": [["Cellino San Marco", "BR"], ["Torchiarolo", "BR"], ["Erchie", "BR"], ["Tuturano", "BR"]], - "72021": [["Capece Bax", "BR"], ["Francavilla Fontana", "BR"], ["Capece", "BR"]], + "72020": [ + ["Cellino San Marco", "BR"], + ["Torchiarolo", "BR"], + ["Erchie", "BR"], + ["Tuturano", "BR"], + ], + "72021": [ + ["Capece Bax", "BR"], + ["Francavilla Fontana", "BR"], + ["Capece", "BR"], + ], "72022": [["Latiano", "BR"]], "72023": [["Mesagne", "BR"]], - "72024": [["Oria", "BR"], ["San Cosimo Alla Macchia", "BR"], ["San Cosimo", "BR"]], + "72024": [ + ["Oria", "BR"], + ["San Cosimo Alla Macchia", "BR"], + ["San Cosimo", "BR"], + ], "72025": [["San Donaci", "BR"]], "72026": [["San Pancrazio Salentino", "BR"]], "72027": [["San Pietro Vernotico", "BR"]], @@ -10873,7 +12523,11 @@ class Provider(AddressProvider): ["Celle Di San Vito", "FG"], ], "71021": [["Accadia", "FG"]], - "71022": [["San Carlo", "FG"], ["San Carlo D'Ascoli", "FG"], ["Ascoli Satriano", "FG"]], + "71022": [ + ["San Carlo", "FG"], + ["San Carlo D'Ascoli", "FG"], + ["Ascoli Satriano", "FG"], + ], "71023": [["Bovino", "FG"]], "71024": [["Candela", "FG"]], "71025": [["Castelluccio Dei Sauri", "FG"]], @@ -10957,11 +12611,21 @@ class Provider(AddressProvider): ], "73011": [["Alezio", "LE"]], "73012": [["Campi Salentina", "LE"]], - "73013": [["Collemeto", "LE"], ["Galatina", "LE"], ["Noha", "LE"], ["Santa Barbara", "LE"]], + "73013": [ + ["Collemeto", "LE"], + ["Galatina", "LE"], + ["Noha", "LE"], + ["Santa Barbara", "LE"], + ], "73014": [["Gallipoli", "LE"]], "73015": [["Salice Salentino", "LE"]], "73016": [["San Cesario Di Lecce", "LE"]], - "73017": [["Lido Conchiglie", "LE"], ["San Simone", "LE"], ["Sannicola", "LE"], ["Chiesanuova", "LE"]], + "73017": [ + ["Lido Conchiglie", "LE"], + ["San Simone", "LE"], + ["Sannicola", "LE"], + ["Chiesanuova", "LE"], + ], "73018": [["Squinzano", "LE"]], "73019": [["Trepuzzi", "LE"]], "73020": [ @@ -11002,7 +12666,11 @@ class Provider(AddressProvider): ["Borgagne", "LE"], ["Melendugno", "LE"], ], - "73027": [["Minervino Di Lecce", "LE"], ["Cocumola", "LE"], ["Specchia Gallone", "LE"]], + "73027": [ + ["Minervino Di Lecce", "LE"], + ["Cocumola", "LE"], + ["Specchia Gallone", "LE"], + ], "73028": [["Otranto", "LE"]], "73029": [ ["Struda'", "LE"], @@ -11088,7 +12756,12 @@ class Provider(AddressProvider): "73057": [["Taviano", "LE"]], "73058": [["Tuglie", "LE"]], "73059": [["Gemini", "LE"], ["Ugento", "LE"]], - "73100": [["Frigole", "LE"], ["Lecce", "LE"], ["Torre Chianca", "LE"], ["San Cataldo", "LE"]], + "73100": [ + ["Frigole", "LE"], + ["Lecce", "LE"], + ["Torre Chianca", "LE"], + ["San Cataldo", "LE"], + ], "74010": [["Statte", "TA"]], "74011": [ ["Case Perrone", "TA"], @@ -11134,10 +12807,21 @@ class Provider(AddressProvider): ["Specchiarica", "TA"], ], "74025": [["Marina Di Ginosa", "TA"]], - "74026": [["Lido Silvana", "TA"], ["Pulsano", "TA"], ["Bosco Caggione", "TA"], ["Monti D'Arena", "TA"]], + "74026": [ + ["Lido Silvana", "TA"], + ["Pulsano", "TA"], + ["Bosco Caggione", "TA"], + ["Monti D'Arena", "TA"], + ], "74027": [["San Giorgio Ionico", "TA"]], "74028": [["Sava", "TA"]], - "74100": [["Paolo Vi", "TA"], ["Talsano", "TA"], ["San Vito Taranto", "TA"], ["Taranto", "TA"], ["Lama", "TA"]], + "74100": [ + ["Paolo Vi", "TA"], + ["Talsano", "TA"], + ["San Vito Taranto", "TA"], + ["Taranto", "TA"], + ["Lama", "TA"], + ], "74121": [["Taranto", "TA"]], "74122": [["Taranto", "TA"]], "74123": [["Taranto", "TA"]], @@ -11202,7 +12886,12 @@ class Provider(AddressProvider): ["Nuxis", "SU"], ["Santadi", "SU"], ], - "09012": [["San Leone", "CA"], ["Capoterra", "CA"], ["Poggio Dei Pini", "CA"], ["La Maddalena", "CA"]], + "09012": [ + ["San Leone", "CA"], + ["Capoterra", "CA"], + ["Poggio Dei Pini", "CA"], + ["La Maddalena", "CA"], + ], "09018": [["Villa D'Orri", "CA"], ["Sarroch", "CA"]], "09019": [["Teulada", "CA"]], "09020": [ @@ -11225,7 +12914,13 @@ class Provider(AddressProvider): "09024": [["Villagreca", "CA"], ["Nuraminis", "CA"]], "09026": [["San Sperate", "CA"]], "09028": [["Sestu", "CA"]], - "09030": [["Elmas", "CA"], ["Pabillonis", "SU"], ["Sardara", "SU"], ["Montevecchio", "SU"], ["Samassi", "SU"]], + "09030": [ + ["Elmas", "CA"], + ["Pabillonis", "SU"], + ["Sardara", "SU"], + ["Montevecchio", "SU"], + ["Samassi", "SU"], + ], "09032": [["Assemini", "CA"], ["Macchiareddu", "CA"]], "09033": [["Decimomannu", "CA"]], "09034": [["Villasor", "CA"]], @@ -11481,10 +13176,21 @@ class Provider(AddressProvider): ["Is Murdegus", "NU"], ], "08049": [["Villanova Strisaili", "NU"], ["Villagrande Strisaili", "NU"]], - "08100": [["Nuoro", "NU"], ["Monte Ortobene", "NU"], ["Manasuddas", "NU"], ["Lollove", "NU"]], + "08100": [ + ["Nuoro", "NU"], + ["Monte Ortobene", "NU"], + ["Manasuddas", "NU"], + ["Lollove", "NU"], + ], "08013": [["Turas", "OR"], ["Bosa Marina", "OR"], ["Bosa", "OR"]], "08019": [["Modolo", "OR"]], - "08034": [["Santa Sofia", "OR"], ["Crastu", "OR"], ["Su Lau", "OR"], ["Traidodini", "OR"], ["Laconi", "OR"]], + "08034": [ + ["Santa Sofia", "OR"], + ["Crastu", "OR"], + ["Su Lau", "OR"], + ["Traidodini", "OR"], + ["Laconi", "OR"], + ], "09070": [ ["Sa Rocca Tunda", "OR"], ["Bauladu", "OR"], @@ -11612,7 +13318,13 @@ class Provider(AddressProvider): "07011": [["Bono", "SS"]], "07012": [["Rebeccu", "SS"], ["Santa Lucia", "SS"], ["Bonorva", "SS"]], "07013": [["Mores", "SS"]], - "07014": [["San Nicola", "SS"], ["Chilivani", "SS"], ["Ozieri", "SS"], ["Vigne", "SS"], ["Fraigas", "SS"]], + "07014": [ + ["San Nicola", "SS"], + ["Chilivani", "SS"], + ["Ozieri", "SS"], + ["Vigne", "SS"], + ["Fraigas", "SS"], + ], "07015": [["Padria", "SS"]], "07016": [["Pattada", "SS"]], "07017": [["Ploaghe", "SS"]], @@ -11650,7 +13362,12 @@ class Provider(AddressProvider): "07023": [["Calangianus", "SS"]], "07024": [["Moneta", "SS"], ["Isola Di Caprera", "SS"], ["La Maddalena", "SS"]], "07025": [["Luras", "SS"]], - "07026": [["San Pantaleo", "SS"], ["Porto Rotondo", "SS"], ["Olbia", "SS"], ["Berchiddeddu", "SS"]], + "07026": [ + ["San Pantaleo", "SS"], + ["Porto Rotondo", "SS"], + ["Olbia", "SS"], + ["Berchiddeddu", "SS"], + ], "07027": [["Oschiri", "SS"]], "07028": [["San Pasquale", "SS"], ["Santa Teresa Gallura", "SS"]], "07029": [["Tempio Pausania", "SS"], ["Nuchis", "SS"], ["Bassacutena", "SS"]], @@ -11740,14 +13457,25 @@ class Provider(AddressProvider): ], "09014": [["Carloforte", "SU"]], "09015": [["Domusnovas", "SU"]], - "09016": [["Nebida", "SU"], ["Iglesias", "SU"], ["San Benedetto", "SU"], ["Bindua", "SU"], ["Monteponi", "SU"]], + "09016": [ + ["Nebida", "SU"], + ["Iglesias", "SU"], + ["San Benedetto", "SU"], + ["Bindua", "SU"], + ["Monteponi", "SU"], + ], "09017": [["Sant'Antioco", "SU"]], "09021": [["Barumini", "SU"]], "09022": [["Lunamatrona", "SU"]], "09025": [["Sanluri Stato", "SU"], ["Sanluri", "SU"]], "09027": [["Serrenti", "SU"]], "09029": [["Tuili", "SU"], ["Setzu", "SU"]], - "09031": [["Gennamari", "SU"], ["Sant'Antonio Di Santadi", "SU"], ["Arbus", "SU"], ["Ingurtosu", "SU"]], + "09031": [ + ["Gennamari", "SU"], + ["Sant'Antonio Di Santadi", "SU"], + ["Arbus", "SU"], + ["Ingurtosu", "SU"], + ], "09035": [["Gonnosfanadiga", "SU"]], "09036": [["Guspini", "SU"]], "09037": [["San Gavino Monreale", "SU"]], @@ -11798,7 +13526,11 @@ class Provider(AddressProvider): "92022": [["Borgo Callea", "AG"], ["Cammarata", "AG"]], "92023": [["Campobello Di Licata", "AG"]], "92024": [["Canicatti'", "AG"]], - "92025": [["Zolfare", "AG"], ["Casteltermini Zolfare", "AG"], ["Casteltermini", "AG"]], + "92025": [ + ["Zolfare", "AG"], + ["Casteltermini Zolfare", "AG"], + ["Casteltermini", "AG"], + ], "92026": [["Favara", "AG"]], "92027": [["Licata", "AG"]], "92028": [["Naro", "AG"]], @@ -11879,9 +13611,19 @@ class Provider(AddressProvider): ], "95017": [["Presa", "CT"], ["Vena", "CT"], ["Piedimonte Etneo", "CT"]], "95018": [["Torre Archirafi", "CT"], ["Riposto", "CT"]], - "95019": [["Pisano Etneo", "CT"], ["Fleri", "CT"], ["Sarro", "CT"], ["Zafferana Etnea", "CT"]], + "95019": [ + ["Pisano Etneo", "CT"], + ["Fleri", "CT"], + ["Sarro", "CT"], + ["Zafferana Etnea", "CT"], + ], "95020": [["Aci Bonaccorsi", "CT"]], - "95021": [["Ficarazzi", "CT"], ["Aci Trezza", "CT"], ["Cannizzaro", "CT"], ["Aci Castello", "CT"]], + "95021": [ + ["Ficarazzi", "CT"], + ["Aci Trezza", "CT"], + ["Cannizzaro", "CT"], + ["Aci Castello", "CT"], + ], "95022": [ ["Vampolieri", "CT"], ["Nizzeti", "CT"], @@ -11983,10 +13725,19 @@ class Provider(AddressProvider): ["Santa Maria Goretti", "CT"], ["Fontanarossa Aereoporto", "CT"], ], - "95122": [["Nesima Inferiore", "CT"], ["Acquicella", "CT"], ["Nesima Superiore", "CT"], ["Catania", "CT"]], + "95122": [ + ["Nesima Inferiore", "CT"], + ["Acquicella", "CT"], + ["Nesima Superiore", "CT"], + ["Catania", "CT"], + ], "95123": [["Catania", "CT"], ["San Nullo", "CT"], ["Cibali", "CT"]], "95124": [["Catania", "CT"]], - "95125": [["Catania", "CT"], ["Canalicchio", "CT"], ["Barriera Del Bosco", "CT"]], + "95125": [ + ["Catania", "CT"], + ["Canalicchio", "CT"], + ["Barriera Del Bosco", "CT"], + ], "95126": [["Ognina", "CT"], ["Catania", "CT"]], "95127": [["Catania", "CT"], ["Picanello", "CT"]], "95128": [["Catania", "CT"]], @@ -12018,14 +13769,24 @@ class Provider(AddressProvider): "94018": [["Troina", "EN"]], "94019": [["Valguarnera Caropepe", "EN"]], "94100": [["Enna", "EN"], ["Pergusa", "EN"], ["Borgo Cascino", "EN"]], - "98020": [["Rocchenere", "ME"], ["Pagliara", "ME"], ["Mandanici", "ME"], ["Ali'", "ME"], ["Locadi", "ME"]], + "98020": [ + ["Rocchenere", "ME"], + ["Pagliara", "ME"], + ["Mandanici", "ME"], + ["Ali'", "ME"], + ["Locadi", "ME"], + ], "98021": [["Ali' Terme", "ME"]], "98022": [["Fiumedinisi", "ME"]], "98023": [["Furci Siculo", "ME"]], "98025": [["Itala", "ME"], ["Itala Marina", "ME"]], "98026": [["Nizza Di Sicilia", "ME"]], "98027": [["Sciglio", "ME"], ["Roccalumera", "ME"], ["Allume", "ME"]], - "98028": [["Misserio", "ME"], ["Santa Teresa Di Riva", "ME"], ["Barracca", "ME"]], + "98028": [ + ["Misserio", "ME"], + ["Santa Teresa Di Riva", "ME"], + ["Barracca", "ME"], + ], "98029": [ ["Guidomandri Marina", "ME"], ["Guidomandri Superiore", "ME"], @@ -12086,9 +13847,18 @@ class Provider(AddressProvider): ["Scala Di Torregrotta", "ME"], ["Meri'", "ME"], ], - "98041": [["Monforte San Giorgio", "ME"], ["Pellegrino", "ME"], ["Monforte Marina", "ME"]], + "98041": [ + ["Monforte San Giorgio", "ME"], + ["Pellegrino", "ME"], + ["Monforte Marina", "ME"], + ], "98042": [["Giammoro", "ME"], ["Pace Del Mela", "ME"]], - "98043": [["Rometta", "ME"], ["Rometta Marea", "ME"], ["Gimello", "ME"], ["Sant'Andrea", "ME"]], + "98043": [ + ["Rometta", "ME"], + ["Rometta Marea", "ME"], + ["Gimello", "ME"], + ["Sant'Andrea", "ME"], + ], "98044": [ ["San Filippo Del Mela", "ME"], ["Archi", "ME"], @@ -12098,9 +13868,23 @@ class Provider(AddressProvider): ], "98045": [["San Pier Marina", "ME"], ["San Pier Niceto", "ME"]], "98046": [["Santa Lucia Del Mela", "ME"]], - "98047": [["Saponara Marittima", "ME"], ["Saponara", "ME"], ["Cavaliere", "ME"], ["Scarcelli", "ME"]], - "98048": [["Spadafora", "ME"], ["San Martino Spadafora", "ME"], ["San Martino", "ME"]], - "98049": [["Villafranca Tirrena", "ME"], ["Divieto", "ME"], ["Calvaruso", "ME"], ["Serro", "ME"]], + "98047": [ + ["Saponara Marittima", "ME"], + ["Saponara", "ME"], + ["Cavaliere", "ME"], + ["Scarcelli", "ME"], + ], + "98048": [ + ["Spadafora", "ME"], + ["San Martino Spadafora", "ME"], + ["San Martino", "ME"], + ], + "98049": [ + ["Villafranca Tirrena", "ME"], + ["Divieto", "ME"], + ["Calvaruso", "ME"], + ["Serro", "ME"], + ], "98050": [ ["Filicudi", "ME"], ["Alicudi Porto", "ME"], @@ -12149,8 +13933,15 @@ class Provider(AddressProvider): ["Quattropani", "ME"], ], "98056": [["Mazzarra' Sant'Andrea", "ME"]], - "98057": [["Santa Marina Di Milazzo", "ME"], ["Milazzo", "ME"], ["San Pietro Di Milazzo", "ME"]], - "98058": [["Novara Di Sicilia", "ME"], ["San Basilio Di Novara Di Sicilia", "ME"]], + "98057": [ + ["Santa Marina Di Milazzo", "ME"], + ["Milazzo", "ME"], + ["San Pietro Di Milazzo", "ME"], + ], + "98058": [ + ["Novara Di Sicilia", "ME"], + ["San Basilio Di Novara Di Sicilia", "ME"], + ], "98059": [["Rodi' Milici", "ME"], ["Milici", "ME"]], "98060": [ ["Tripi", "ME"], @@ -12175,7 +13966,11 @@ class Provider(AddressProvider): "98062": [["Ficarra", "ME"]], "98063": [["Magaro", "ME"], ["Gioiosa Marea", "ME"], ["San Giorgio", "ME"]], "98064": [["Nasidi", "ME"], ["Librizzi", "ME"], ["Colla Maffone", "ME"]], - "98065": [["Santa Barbara", "ME"], ["Montalbano Elicona", "ME"], ["Braidi", "ME"]], + "98065": [ + ["Santa Barbara", "ME"], + ["Montalbano Elicona", "ME"], + ["Braidi", "ME"], + ], "98066": [ ["Scala", "ME"], ["Mongiove", "ME"], @@ -12210,12 +14005,24 @@ class Provider(AddressProvider): ["Longi", "ME"], ["Torremuzza", "ME"], ], - "98071": [["Piana Di Capo D'Orlando", "ME"], ["Scafa", "ME"], ["Capo D'Orlando", "ME"]], - "98072": [["Marina Di Caronia", "ME"], ["Canneto Di Caronia", "ME"], ["Caronia", "ME"]], + "98071": [ + ["Piana Di Capo D'Orlando", "ME"], + ["Scafa", "ME"], + ["Capo D'Orlando", "ME"], + ], + "98072": [ + ["Marina Di Caronia", "ME"], + ["Canneto Di Caronia", "ME"], + ["Caronia", "ME"], + ], "98073": [["Mistretta", "ME"]], "98074": [["Malo'", "ME"], ["Cresta", "ME"], ["Naso", "ME"]], "98075": [["San Fratello", "ME"]], - "98076": [["Sant'Agata Di Militello", "ME"], ["Vallebruca", "ME"], ["Torrecandele", "ME"]], + "98076": [ + ["Sant'Agata Di Militello", "ME"], + ["Vallebruca", "ME"], + ["Torrecandele", "ME"], + ], "98077": [["Santo Stefano Di Camastra", "ME"]], "98078": [ ["Moira", "ME"], @@ -12240,27 +14047,53 @@ class Provider(AddressProvider): "98132": [["Mili Marina", "ME"], ["Mili San Marco", "ME"], ["Messina", "ME"]], "98133": [["Messina", "ME"], ["Mili Superiore", "ME"]], "98134": [["Messina", "ME"], ["Galati Marina", "ME"]], - "98135": [["Messina", "ME"], ["Santo Stefano Medio", "ME"], ["Santa Margherita", "ME"]], + "98135": [ + ["Messina", "ME"], + ["Santo Stefano Medio", "ME"], + ["Santa Margherita", "ME"], + ], "98136": [["Santo Stefano Medio", "ME"], ["Messina", "ME"]], "98137": [["Santo Stefano Di Briga", "ME"], ["Messina", "ME"]], "98138": [["Messina", "ME"], ["Pezzolo", "ME"]], - "98139": [["San Placido Calonero'", "ME"], ["Briga Marina", "ME"], ["Briga", "ME"], ["Messina", "ME"]], + "98139": [ + ["San Placido Calonero'", "ME"], + ["Briga Marina", "ME"], + ["Briga", "ME"], + ["Messina", "ME"], + ], "98141": [["Messina", "ME"], ["Giampilieri Marina", "ME"]], - "98142": [["Giampilieri", "ME"], ["San Filippo Inferiore", "ME"], ["Messina", "ME"]], + "98142": [ + ["Giampilieri", "ME"], + ["San Filippo Inferiore", "ME"], + ["Messina", "ME"], + ], "98143": [["Messina", "ME"], ["Altolia", "ME"], ["Molino", "ME"]], "98144": [["Messina", "ME"], ["San Filippo", "ME"]], "98145": [["Messina", "ME"], ["Bordonaro", "ME"], ["San Filippo", "ME"]], "98146": [["Cumia", "ME"], ["Santo", "ME"], ["Messina", "ME"]], "98147": [["Messina", "ME"], ["Villaggio Aldisio", "ME"]], "98148": [["Santo", "ME"], ["Messina", "ME"]], - "98149": [["Messina", "ME"], ["Camaro", "ME"], ["Camaro Inferiore", "ME"], ["Cataratti", "ME"]], + "98149": [ + ["Messina", "ME"], + ["Camaro", "ME"], + ["Camaro Inferiore", "ME"], + ["Cataratti", "ME"], + ], "98151": [["Camaro", "ME"], ["Messina", "ME"]], "98152": [["Messina", "ME"], ["Scala Ritiro", "ME"], ["San Michele", "ME"]], "98153": [["Gesso", "ME"], ["Messina", "ME"]], "98154": [["Messina", "ME"], ["Salice Calabro", "ME"], ["Salice", "ME"]], - "98155": [["Castanea", "ME"], ["Castanea Delle Furie", "ME"], ["Messina", "ME"]], + "98155": [ + ["Castanea", "ME"], + ["Castanea Delle Furie", "ME"], + ["Messina", "ME"], + ], "98156": [["Massa San Giorgio", "ME"], ["Messina", "ME"]], - "98157": [["Messina", "ME"], ["Massa Santa Lucia", "ME"], ["Massa San Giovanni", "ME"]], + "98157": [ + ["Messina", "ME"], + ["Massa Santa Lucia", "ME"], + ["Massa San Giovanni", "ME"], + ], "98158": [["Faro Superiore", "ME"], ["Messina", "ME"]], "98159": [["Messina", "ME"], ["Liuzzo Orto", "ME"]], "98161": [["Messina", "ME"], ["Rodia", "ME"]], @@ -12295,7 +14128,11 @@ class Provider(AddressProvider): ["Lascari Scalo", "PA"], ], "90011": [["Aspra", "PA"], ["Bagheria", "PA"]], - "90012": [["Sambuchi", "PA"], ["San Giovanni Li Greci", "PA"], ["Caccamo", "PA"]], + "90012": [ + ["Sambuchi", "PA"], + ["San Giovanni Li Greci", "PA"], + ["Caccamo", "PA"], + ], "90013": [["Castelbuono", "PA"]], "90014": [["Casteldaccia", "PA"]], "90015": [["Gibilmanna", "PA"], ["Sant'Ambrogio", "PA"], ["Cefalu'", "PA"]], @@ -12425,7 +14262,11 @@ class Provider(AddressProvider): "90138": [["Palermo", "PA"], ["Zisa", "PA"]], "90139": [["Palermo", "PA"]], "90141": [["Palermo", "PA"]], - "90142": [["Palermo", "PA"], ["Montepellegrino", "PA"], ["Arenella Vergine Maria", "PA"]], + "90142": [ + ["Palermo", "PA"], + ["Montepellegrino", "PA"], + ["Arenella Vergine Maria", "PA"], + ], "90143": [["Palermo", "PA"]], "90144": [["Palermo", "PA"]], "90145": [["Palermo", "PA"]], @@ -12438,7 +14279,12 @@ class Provider(AddressProvider): ["Resuttana San Lorenzo", "PA"], ], "90147": [["Tommaso Natale Sferracavallo", "PA"], ["Palermo", "PA"]], - "90148": [["Palermo", "PA"], ["Sferracavallo", "PA"], ["Villagrazia", "PA"], ["Tommaso Natale", "PA"]], + "90148": [ + ["Palermo", "PA"], + ["Sferracavallo", "PA"], + ["Villagrazia", "PA"], + ["Tommaso Natale", "PA"], + ], "90149": [["Palermo", "PA"]], "90151": [["Palermo", "PA"], ["Partanna Mondello", "PA"], ["Mondello", "PA"]], "97010": [ @@ -12462,7 +14308,13 @@ class Provider(AddressProvider): ], "97016": [["Pozzallo", "RG"]], "97017": [["Santa Croce Camerina", "RG"], ["Donnafugata", "RG"]], - "97018": [["Donnalucata", "RG"], ["Jungi", "RG"], ["Cava D'Aliga", "RG"], ["Scicli", "RG"], ["Sampieri", "RG"]], + "97018": [ + ["Donnalucata", "RG"], + ["Jungi", "RG"], + ["Cava D'Aliga", "RG"], + ["Scicli", "RG"], + ["Sampieri", "RG"], + ], "97019": [["Scoglitti", "RG"], ["Vittoria", "RG"]], "97100": [["Ragusa", "RG"], ["Ragusa Ibla", "RG"]], "96010": [ @@ -12524,7 +14376,11 @@ class Provider(AddressProvider): ["Balata Di Baida", "TP"], ["Castello Inici", "TP"], ], - "91015": [["Sperone Di Custonaci", "TP"], ["Purgatorio", "TP"], ["Custonaci", "TP"]], + "91015": [ + ["Sperone Di Custonaci", "TP"], + ["Purgatorio", "TP"], + ["Custonaci", "TP"], + ], "91016": [ ["Napola", "TP"], ["Ballata", "TP"], @@ -12541,7 +14397,13 @@ class Provider(AddressProvider): ["Pantelleria Aeroporto", "TP"], ["Pantelleria", "TP"], ], - "91018": [["Ulmi", "TP"], ["Filci", "TP"], ["San Ciro", "TP"], ["Salemi", "TP"], ["Gorgazzo", "TP"]], + "91018": [ + ["Ulmi", "TP"], + ["Filci", "TP"], + ["San Ciro", "TP"], + ["Salemi", "TP"], + ["Gorgazzo", "TP"], + ], "91019": [ ["Valderice", "TP"], ["Sant'Andrea Bonagia", "TP"], @@ -12559,8 +14421,17 @@ class Provider(AddressProvider): ["Costiera Di Mazara", "TP"], ["Petrosino", "TP"], ], - "91021": [["Tre Fontane", "TP"], ["Granitola Torretta", "TP"], ["Campobello Di Mazara", "TP"]], - "91022": [["Castelvetrano", "TP"], ["Marinella Di Selinunte", "TP"], ["Marinella", "TP"], ["Triscina", "TP"]], + "91021": [ + ["Tre Fontane", "TP"], + ["Granitola Torretta", "TP"], + ["Campobello Di Mazara", "TP"], + ], + "91022": [ + ["Castelvetrano", "TP"], + ["Marinella Di Selinunte", "TP"], + ["Marinella", "TP"], + ["Triscina", "TP"], + ], "91023": [["Favignana", "TP"], ["Levanzo", "TP"]], "91024": [["Gibellina", "TP"], ["Villaggio Madonna Delle Grazie", "TP"]], "91025": [ @@ -12635,9 +14506,18 @@ class Provider(AddressProvider): ["Moggiona", "AR"], ], "52015": [["Pratovecchio", "AR"], ["Pratovecchio Stia", "AR"]], - "52016": [["Castel Focognano", "AR"], ["Rassina", "AR"], ["Salutio", "AR"], ["Pieve A Socana", "AR"]], + "52016": [ + ["Castel Focognano", "AR"], + ["Rassina", "AR"], + ["Salutio", "AR"], + ["Pieve A Socana", "AR"], + ], "52017": [["Papiano", "AR"], ["Stia", "AR"]], - "52018": [["Borgo Alla Collina", "AR"], ["Strada", "AR"], ["Castel San Niccolo'", "AR"]], + "52018": [ + ["Borgo Alla Collina", "AR"], + ["Strada", "AR"], + ["Castel San Niccolo'", "AR"], + ], "52020": [ ["Castelfranco Di Sopra", "AR"], ["Laterina", "AR"], @@ -12669,8 +14549,18 @@ class Provider(AddressProvider): ["Montegonzi", "AR"], ], "52024": [["Loro Ciuffenna", "AR"], ["San Giustino Valdarno", "AR"]], - "52025": [["Levane", "AR"], ["Montevarchi", "AR"], ["Moncioni", "AR"], ["Mercatale Valdarno", "AR"]], - "52026": [["Castelfranco Piandiscò", "AR"], ["Pian Di Sco", "AR"], ["Vaggio", "AR"], ["Faella", "AR"]], + "52025": [ + ["Levane", "AR"], + ["Montevarchi", "AR"], + ["Moncioni", "AR"], + ["Mercatale Valdarno", "AR"], + ], + "52026": [ + ["Castelfranco Piandiscò", "AR"], + ["Pian Di Sco", "AR"], + ["Vaggio", "AR"], + ["Faella", "AR"], + ], "52027": [["San Giovanni Valdarno", "AR"]], "52028": [ ["Penna", "AR"], @@ -12682,7 +14572,11 @@ class Provider(AddressProvider): ], "52029": [["Castiglion Fibocchi", "AR"]], "52031": [["San Leo Di Anghiari", "AR"], ["Anghiari", "AR"]], - "52032": [["Badia Tedalda", "AR"], ["Ca' Raffaello", "AR"], ["Fresciano", "AR"]], + "52032": [ + ["Badia Tedalda", "AR"], + ["Ca' Raffaello", "AR"], + ["Fresciano", "AR"], + ], "52033": [["Caprese Michelangelo", "AR"]], "52035": [["Le Ville", "AR"], ["Monterchi", "AR"]], "52036": [["Madonnuccia", "AR"], ["Pieve Santo Stefano", "AR"]], @@ -12696,7 +14590,11 @@ class Provider(AddressProvider): ["Tegoleto", "AR"], ["Civitella In Val Di Chiana", "AR"], ], - "52043": [["Castiglion Fiorentino", "AR"], ["Montecchio", "AR"], ["Manciano", "AR"]], + "52043": [ + ["Castiglion Fiorentino", "AR"], + ["Montecchio", "AR"], + ["Manciano", "AR"], + ], "52044": [ ["Mercatale Di Cortona", "AR"], ["Cortona", "AR"], @@ -12770,7 +14668,12 @@ class Provider(AddressProvider): ["Sant'Angelo A Lecore", "FI"], ["Campi Bisenzio", "FI"], ], - "50014": [["Caldine", "FI"], ["San Domenico Di Fiesole", "FI"], ["Fiesole", "FI"], ["Pian Di Mugnone", "FI"]], + "50014": [ + ["Caldine", "FI"], + ["San Domenico Di Fiesole", "FI"], + ["Fiesole", "FI"], + ["Pian Di Mugnone", "FI"], + ], "50018": [ ["San Vincenzo A Torri", "FI"], ["Casellina", "FI"], @@ -12820,7 +14723,11 @@ class Provider(AddressProvider): ["Montefiridolfi", "FI"], ["Spedaletto", "FI"], ], - "50027": [["Chiocchio", "FI"], ["Strada In Chianti", "FI"], ["Passo Dei Pecorai", "FI"]], + "50027": [ + ["Chiocchio", "FI"], + ["Strada In Chianti", "FI"], + ["Passo Dei Pecorai", "FI"], + ], "50028": [ ["San Donato In Poggio", "FI"], ["Barberino Val D'Elsa", "FI"], @@ -12855,9 +14762,19 @@ class Provider(AddressProvider): ["Covigliaio", "FI"], ["Piancaldoli", "FI"], ], - "50034": [["Crespino Del Lamone", "FI"], ["Casaglia", "FI"], ["Lutirano", "FI"], ["Marradi", "FI"]], + "50034": [ + ["Crespino Del Lamone", "FI"], + ["Casaglia", "FI"], + ["Lutirano", "FI"], + ["Marradi", "FI"], + ], "50035": [["Misileo", "FI"], ["Palazzuolo Sul Senio", "FI"]], - "50036": [["Bivigliano", "FI"], ["Pratolino", "FI"], ["Vaglia", "FI"], ["Fontebuona", "FI"]], + "50036": [ + ["Bivigliano", "FI"], + ["Pratolino", "FI"], + ["Vaglia", "FI"], + ["Fontebuona", "FI"], + ], "50037": [["San Piero A Sieve", "FI"]], "50038": [ ["Sant'Agata Mugello", "FI"], @@ -12865,7 +14782,13 @@ class Provider(AddressProvider): ["Sant'Agata", "FI"], ["Scarperia E San Piero", "FI"], ], - "50039": [["Cistio", "FI"], ["Rupecanina", "FI"], ["Villore", "FI"], ["Gattaia", "FI"], ["Vicchio", "FI"]], + "50039": [ + ["Cistio", "FI"], + ["Rupecanina", "FI"], + ["Villore", "FI"], + ["Gattaia", "FI"], + ["Vicchio", "FI"], + ], "50041": [ ["Calenzano", "FI"], ["Carraia", "FI"], @@ -12983,14 +14906,24 @@ class Provider(AddressProvider): ["Vallombrosa", "FI"], ["San Donato Fronzano", "FI"], ], - "50067": [["Troghi", "FI"], ["San Donato In Collina", "FI"], ["Rignano Sull'Arno", "FI"], ["Rosano", "FI"]], + "50067": [ + ["Troghi", "FI"], + ["San Donato In Collina", "FI"], + ["Rignano Sull'Arno", "FI"], + ["Rosano", "FI"], + ], "50068": [["Pomino", "FI"], ["Rufina", "FI"], ["Contea", "FI"]], "50100": [["Firenze", "FI"]], "50121": [["Firenze", "FI"]], "50122": [["Firenze", "FI"]], "50123": [["Firenze", "FI"]], "50124": [["Firenze", "FI"], ["Galluzzo", "FI"]], - "50125": [["Arcetri", "FI"], ["Poggio Imperiale", "FI"], ["San Felice A Ema", "FI"], ["Firenze", "FI"]], + "50125": [ + ["Arcetri", "FI"], + ["Poggio Imperiale", "FI"], + ["San Felice A Ema", "FI"], + ["Firenze", "FI"], + ], "50126": [ ["Firenze", "FI"], ["Ponte A Ema", "FI"], @@ -13005,7 +14938,12 @@ class Provider(AddressProvider): "50132": [["Firenze", "FI"]], "50133": [["Firenze", "FI"]], "50134": [["Firenze", "FI"], ["Careggi", "FI"]], - "50135": [["Montalbano", "FI"], ["Settignano", "FI"], ["Coverciano", "FI"], ["Firenze", "FI"]], + "50135": [ + ["Montalbano", "FI"], + ["Settignano", "FI"], + ["Coverciano", "FI"], + ["Firenze", "FI"], + ], "50136": [["Firenze", "FI"], ["Rovezzano", "FI"], ["Varlungo", "FI"]], "50137": [["Firenze", "FI"]], "50139": [["Firenze", "FI"]], @@ -13028,7 +14966,12 @@ class Provider(AddressProvider): ["Montevitozzo", "GR"], ["San Giovanni Delle Contee", "GR"], ], - "58011": [["Capalbio Stazione", "GR"], ["Borgo Carige", "GR"], ["Chiarone", "GR"], ["Capalbio", "GR"]], + "58011": [ + ["Capalbio Stazione", "GR"], + ["Borgo Carige", "GR"], + ["Chiarone", "GR"], + ["Capalbio", "GR"], + ], "58012": [ ["Giglio Castello", "GR"], ["Isola Del Giglio", "GR"], @@ -13057,8 +15000,17 @@ class Provider(AddressProvider): ], "58017": [["Il Casone", "GR"], ["Casone", "GR"], ["Pitigliano", "GR"]], "58018": [["Porto Ercole", "GR"]], - "58019": [["Porto Santo Stefano", "GR"], ["Monte Argentario", "GR"], ["Giannutri", "GR"]], - "58020": [["Puntone", "GR"], ["Scarlino Stazione", "GR"], ["Scarlino Scalo", "GR"], ["Scarlino", "GR"]], + "58019": [ + ["Porto Santo Stefano", "GR"], + ["Monte Argentario", "GR"], + ["Giannutri", "GR"], + ], + "58020": [ + ["Puntone", "GR"], + ["Scarlino Stazione", "GR"], + ["Scarlino Scalo", "GR"], + ["Scarlino", "GR"], + ], "58022": [["Prato Ranieri", "GR"], ["Follonica", "GR"]], "58023": [ ["Castel Di Pietra", "GR"], @@ -13085,8 +15037,17 @@ class Provider(AddressProvider): ["Ghirlanda", "GR"], ["Valpiana", "GR"], ], - "58025": [["Lago Boracifero", "GR"], ["Monterotondo Marittimo", "GR"], ["Frassine", "GR"]], - "58026": [["Travale", "GR"], ["Montieri", "GR"], ["Boccheggiano", "GR"], ["Gerfalco", "GR"]], + "58025": [ + ["Lago Boracifero", "GR"], + ["Monterotondo Marittimo", "GR"], + ["Frassine", "GR"], + ], + "58026": [ + ["Travale", "GR"], + ["Montieri", "GR"], + ["Boccheggiano", "GR"], + ["Gerfalco", "GR"], + ], "58027": [["Ribolla", "GR"], ["Montemassi", "GR"]], "58031": [ ["Bagnoli", "GR"], @@ -13096,7 +15057,11 @@ class Provider(AddressProvider): ["Zancona", "GR"], ["Stribugliano", "GR"], ], - "58033": [["Montegiovi", "GR"], ["Castel Del Piano", "GR"], ["Montenero", "GR"]], + "58033": [ + ["Montegiovi", "GR"], + ["Castel Del Piano", "GR"], + ["Montenero", "GR"], + ], "58034": [["Castell'Azzara", "GR"], ["Selvena", "GR"]], "58036": [ ["Sticciano Stazione", "GR"], @@ -13107,9 +15072,20 @@ class Provider(AddressProvider): ["Torniella", "GR"], ["Sticciano Scalo", "GR"], ], - "58037": [["Bagnolo", "GR"], ["Selva", "GR"], ["Santa Fiora", "GR"], ["Marroneto", "GR"], ["Bagnore", "GR"]], + "58037": [ + ["Bagnolo", "GR"], + ["Selva", "GR"], + ["Santa Fiora", "GR"], + ["Marroneto", "GR"], + ["Bagnore", "GR"], + ], "58038": [["Seggiano", "GR"]], - "58042": [["Montorsaio", "GR"], ["Campagnatico", "GR"], ["Arcille", "GR"], ["Arcille Di Campagnatico", "GR"]], + "58042": [ + ["Montorsaio", "GR"], + ["Campagnatico", "GR"], + ["Arcille", "GR"], + ["Arcille Di Campagnatico", "GR"], + ], "58043": [ ["Buriano", "GR"], ["Vetulonia", "GR"], @@ -13155,7 +15131,12 @@ class Provider(AddressProvider): ["Preselle", "GR"], ["Poggioferro", "GR"], ], - "58055": [["Semproniano", "GR"], ["Petricci", "GR"], ["Catabbio", "GR"], ["Cellena", "GR"]], + "58055": [ + ["Semproniano", "GR"], + ["Petricci", "GR"], + ["Catabbio", "GR"], + ["Cellena", "GR"], + ], "58100": [ ["Marina Di Grosseto", "GR"], ["Santa Maria Di Rispescia", "GR"], @@ -13191,7 +15172,12 @@ class Provider(AddressProvider): ["Vada", "LI"], ["Castelnuovo Misericordia", "LI"], ], - "57017": [["Stagno", "LI"], ["Nugola Nuova", "LI"], ["Nugola", "LI"], ["Guasticce", "LI"]], + "57017": [ + ["Stagno", "LI"], + ["Nugola Nuova", "LI"], + ["Nugola", "LI"], + ["Guasticce", "LI"], + ], "57020": [["Sassetta", "LI"], ["La California", "LI"], ["Bibbona", "LI"]], "57021": [ ["Stazione Di Campiglia Marittima", "LI"], @@ -13207,7 +15193,11 @@ class Provider(AddressProvider): ["San Guido", "LI"], ["Bolgheri", "LI"], ], - "57023": [["San Pietro In Palazzi", "LI"], ["Cecina", "LI"], ["Cecina Marina", "LI"]], + "57023": [ + ["San Pietro In Palazzi", "LI"], + ["Cecina", "LI"], + ["Cecina Marina", "LI"], + ], "57025": [ ["Piombino", "LI"], ["Vignale Riotorto", "LI"], @@ -13221,7 +15211,12 @@ class Provider(AddressProvider): ], "57027": [["San Vincenzo", "LI"], ["San Carlo", "LI"]], "57028": [["Montioni", "LI"], ["Suvereto", "LI"]], - "57030": [["Procchio", "LI"], ["Poggio", "LI"], ["Marciana", "LI"], ["Pomonte", "LI"]], + "57030": [ + ["Procchio", "LI"], + ["Poggio", "LI"], + ["Marciana", "LI"], + ["Pomonte", "LI"], + ], "57031": [["Capoliveri", "LI"]], "57032": [["Capraia Isola", "LI"]], "57033": [["Marciana Marina", "LI"]], @@ -13237,7 +15232,12 @@ class Provider(AddressProvider): ["La Pila", "LI"], ], "57036": [["Porto Azzurro", "LI"]], - "57037": [["Portoferraio", "LI"], ["Magazzini", "LI"], ["Carpani", "LI"], ["San Giovanni", "LI"]], + "57037": [ + ["Portoferraio", "LI"], + ["Magazzini", "LI"], + ["Carpani", "LI"], + ["San Giovanni", "LI"], + ], "57038": [["Rio Marina", "LI"], ["Cavo", "LI"]], "57039": [["Rio Nell'Elba", "LI"]], "57100": [["Livorno", "LI"]], @@ -13248,10 +15248,30 @@ class Provider(AddressProvider): "57125": [["Livorno", "LI"]], "57126": [["Livorno", "LI"]], "57127": [["Livorno", "LI"]], - "57128": [["Antignano", "LI"], ["Livorno", "LI"], ["Montenero", "LI"], ["Ardenza", "LI"]], - "55010": [["Camigliano Santa Gemma", "LU"], ["Gragnano", "LU"], ["San Gennaro", "LU"], ["Lappato", "LU"]], - "55011": [["Marginone", "LU"], ["Altopascio", "LU"], ["Badia Pozzeveri", "LU"], ["Spianate", "LU"]], - "55012": [["Capannori", "LU"], ["Zone", "LU"], ["Lunata", "LU"], ["Pieve San Paolo", "LU"]], + "57128": [ + ["Antignano", "LI"], + ["Livorno", "LI"], + ["Montenero", "LI"], + ["Ardenza", "LI"], + ], + "55010": [ + ["Camigliano Santa Gemma", "LU"], + ["Gragnano", "LU"], + ["San Gennaro", "LU"], + ["Lappato", "LU"], + ], + "55011": [ + ["Marginone", "LU"], + ["Altopascio", "LU"], + ["Badia Pozzeveri", "LU"], + ["Spianate", "LU"], + ], + "55012": [ + ["Capannori", "LU"], + ["Zone", "LU"], + ["Lunata", "LU"], + ["Pieve San Paolo", "LU"], + ], "55013": [["Lammari", "LU"]], "55014": [["Marlia", "LU"]], "55015": [ @@ -13309,7 +15329,12 @@ class Provider(AddressProvider): ["Piano Di Coreglia", "LU"], ["Coreglia Antelminelli", "LU"], ], - "55027": [["Gallicano", "LU"], ["Fiattone", "LU"], ["Turritecava", "LU"], ["Trassilico", "LU"]], + "55027": [ + ["Gallicano", "LU"], + ["Fiattone", "LU"], + ["Turritecava", "LU"], + ["Trassilico", "LU"], + ], "55030": [ ["Villa Collemandina", "LU"], ["Vagli Sotto", "LU"], @@ -13318,7 +15343,12 @@ class Provider(AddressProvider): ["Vagli Sopra", "LU"], ["Magliano", "LU"], ], - "55031": [["Poggio", "LU"], ["Poggio Garfagnana", "LU"], ["Camporgiano", "LU"], ["Filicaia", "LU"]], + "55031": [ + ["Poggio", "LU"], + ["Poggio Garfagnana", "LU"], + ["Camporgiano", "LU"], + ["Filicaia", "LU"], + ], "55032": [["Palleroso", "LU"], ["Castelnuovo Di Garfagnana", "LU"]], "55033": [ ["Chiozza", "LU"], @@ -13335,11 +15365,24 @@ class Provider(AddressProvider): ["Casone Carpinelli", "LU"], ["Pieve San Lorenzo", "LU"], ], - "55035": [["Sant'Anastasio", "LU"], ["San Michele", "LU"], ["Piazza Al Serchio", "LU"]], + "55035": [ + ["Sant'Anastasio", "LU"], + ["San Michele", "LU"], + ["Piazza Al Serchio", "LU"], + ], "55036": [["Pieve Fosciana", "LU"]], "55038": [["San Romano In Garfagnana", "LU"]], - "55039": [["Giuncugnano", "LU"], ["Sillano Giuncugnano", "LU"], ["Sillano", "LU"]], - "55040": [["Stazzema", "LU"], ["Ruosina", "LU"], ["Pontestazzemese", "LU"], ["Terrinca", "LU"]], + "55039": [ + ["Giuncugnano", "LU"], + ["Sillano Giuncugnano", "LU"], + ["Sillano", "LU"], + ], + "55040": [ + ["Stazzema", "LU"], + ["Ruosina", "LU"], + ["Pontestazzemese", "LU"], + ["Terrinca", "LU"], + ], "55041": [ ["Nocchi", "LU"], ["Pieve", "LU"], @@ -13409,7 +15452,11 @@ class Provider(AddressProvider): ["Badia Cantignano", "LU"], ], "55061": [["Carraia", "LU"], ["San Ginese", "LU"]], - "55062": [["Ruota", "LU"], ["Colle Di Compito", "LU"], ["Pieve Di Compito", "LU"]], + "55062": [ + ["Ruota", "LU"], + ["Colle Di Compito", "LU"], + ["Pieve Di Compito", "LU"], + ], "55064": [ ["Pascoso", "LU"], ["Villa A Roggio", "LU"], @@ -13490,8 +15537,18 @@ class Provider(AddressProvider): ["Monti", "MS"], ["Terrarossa", "MS"], ], - "54021": [["Treschietto", "MS"], ["Gabbiana", "MS"], ["Bagnone", "MS"], ["Corlaga", "MS"]], - "54023": [["Filattiera", "MS"], ["Cantiere", "MS"], ["Ponticello", "MS"], ["Scorcetoli", "MS"]], + "54021": [ + ["Treschietto", "MS"], + ["Gabbiana", "MS"], + ["Bagnone", "MS"], + ["Corlaga", "MS"], + ], + "54023": [ + ["Filattiera", "MS"], + ["Cantiere", "MS"], + ["Ponticello", "MS"], + ["Scorcetoli", "MS"], + ], "54026": [ ["Montereggio Di Mulazzo", "MS"], ["Montereggio", "MS"], @@ -13508,7 +15565,12 @@ class Provider(AddressProvider): ["Cervara", "MS"], ["Vignola", "MS"], ], - "54028": [["Filetto", "MS"], ["Villafranca In Lunigiana", "MS"], ["Virgoletta", "MS"], ["Merizzo", "MS"]], + "54028": [ + ["Filetto", "MS"], + ["Villafranca In Lunigiana", "MS"], + ["Virgoletta", "MS"], + ["Merizzo", "MS"], + ], "54029": [["Zeri", "MS"], ["Chiesa Di Rossano", "MS"]], "54033": [ ["Castelpoggio", "MS"], @@ -13564,7 +15626,12 @@ class Provider(AddressProvider): ["Mezzana", "PI"], ["Vicopisano", "PI"], ], - "56011": [["Gabella", "PI"], ["Castelmaggiore", "PI"], ["Calci", "PI"], ["Montemagno", "PI"]], + "56011": [ + ["Gabella", "PI"], + ["Castelmaggiore", "PI"], + ["Calci", "PI"], + ["Montemagno", "PI"], + ], "56012": [["Calcinaia", "PI"], ["Fornacette", "PI"]], "56017": [ ["Gello", "PI"], @@ -13579,7 +15646,13 @@ class Provider(AddressProvider): ["Asciano", "PI"], ["Pappiana", "PI"], ], - "56019": [["Vecchiano", "PI"], ["Avane", "PI"], ["Filettole", "PI"], ["Migliarino", "PI"], ["Nodica", "PI"]], + "56019": [ + ["Vecchiano", "PI"], + ["Avane", "PI"], + ["Filettole", "PI"], + ["Migliarino", "PI"], + ["Nodica", "PI"], + ], "56020": [ ["Cerretti", "PI"], ["Montecalvoli", "PI"], @@ -13600,7 +15673,11 @@ class Provider(AddressProvider): ["San Benedetto A Settimo", "PI"], ["Latignano", "PI"], ], - "56022": [["Castelfranco Di Sotto", "PI"], ["Villa Campanile", "PI"], ["Orentano", "PI"]], + "56022": [ + ["Castelfranco Di Sotto", "PI"], + ["Villa Campanile", "PI"], + ["Orentano", "PI"], + ], "56023": [ ["Navacchio", "PI"], ["San Lorenzo Alle Corti", "PI"], @@ -13688,10 +15765,19 @@ class Provider(AddressProvider): ["Pomaia", "PI"], ["Santa Luce", "PI"], ], - "56041": [["Sasso Pisano", "PI"], ["Castelnuovo Di Val Di Cecina", "PI"], ["Montecastelli Pisano", "PI"]], + "56041": [ + ["Sasso Pisano", "PI"], + ["Castelnuovo Di Val Di Cecina", "PI"], + ["Montecastelli Pisano", "PI"], + ], "56042": [["Crespina Lorenzana", "PI"], ["Lorenzana", "PI"]], "56043": [["Luciana", "PI"], ["Fauglia", "PI"]], - "56044": [["Lustignano", "PI"], ["Larderello", "PI"], ["Serrazzano", "PI"], ["Montecerboli", "PI"]], + "56044": [ + ["Lustignano", "PI"], + ["Larderello", "PI"], + ["Serrazzano", "PI"], + ["Montecerboli", "PI"], + ], "56045": [ ["San Dalmazio", "PI"], ["Montegemoli", "PI"], @@ -13710,7 +15796,12 @@ class Provider(AddressProvider): ["Saline", "PI"], ], "56100": [["Pisa", "PI"]], - "56121": [["Putignano", "PI"], ["Pisa", "PI"], ["Riglione", "PI"], ["Coltano", "PI"]], + "56121": [ + ["Putignano", "PI"], + ["Pisa", "PI"], + ["Riglione", "PI"], + ["Coltano", "PI"], + ], "56122": [["San Piero A Grado", "PI"], ["Pisa", "PI"]], "56123": [["Pisa", "PI"]], "56124": [["Pisa", "PI"]], @@ -13779,8 +15870,17 @@ class Provider(AddressProvider): ["Massa E Cozzile", "PT"], ], "51011": [["Buggiano", "PT"], ["Borgo A Buggiano", "PT"]], - "51012": [["Veneri", "PT"], ["Ponte All'Abate", "PT"], ["Castellare Di Pescia", "PT"], ["Collodi", "PT"]], - "51013": [["Chiesina Uzzanese", "PT"], ["Chiesanuova", "PT"], ["Chiesanuova Uzzanese", "PT"]], + "51012": [ + ["Veneri", "PT"], + ["Ponte All'Abate", "PT"], + ["Castellare Di Pescia", "PT"], + ["Collodi", "PT"], + ], + "51013": [ + ["Chiesina Uzzanese", "PT"], + ["Chiesanuova", "PT"], + ["Chiesanuova Uzzanese", "PT"], + ], "51015": [ ["Cintolese", "PT"], ["Montevettolini", "PT"], @@ -13828,7 +15928,11 @@ class Provider(AddressProvider): ["Sambuca Pistoiese", "PT"], ], "51021": [["Abetone", "PT"], ["Le Regine", "PT"]], - "51024": [["Pianosinatico", "PT"], ["Pian Degli Ontani", "PT"], ["Cutigliano", "PT"]], + "51024": [ + ["Pianosinatico", "PT"], + ["Pian Degli Ontani", "PT"], + ["Cutigliano", "PT"], + ], "51028": [ ["San Marcello Pistoiese", "PT"], ["Pontepetri", "PT"], @@ -13901,7 +16005,12 @@ class Provider(AddressProvider): ["Santomato", "PT"], ], "53011": [["Fonterutoli", "SI"], ["Castellina In Chianti", "SI"]], - "53012": [["Chiusdino", "SI"], ["Ciciano", "SI"], ["Frosini", "SI"], ["Montalcinello", "SI"]], + "53012": [ + ["Chiusdino", "SI"], + ["Ciciano", "SI"], + ["Frosini", "SI"], + ["Montalcinello", "SI"], + ], "53013": [ ["Lecchi", "SI"], ["Nusenna", "SI"], @@ -14011,7 +16120,12 @@ class Provider(AddressProvider): ["Monte Oliveto Maggiore", "SI"], ], "53042": [["Chianciano Terme", "SI"]], - "53043": [["Chiusi Stazione", "SI"], ["Chiusi", "SI"], ["Montallese", "SI"], ["Chiusi Scalo", "SI"]], + "53043": [ + ["Chiusi Stazione", "SI"], + ["Chiusi", "SI"], + ["Montallese", "SI"], + ["Chiusi Scalo", "SI"], + ], "53045": [ ["Montepulciano Stazione", "SI"], ["Abbadia", "SI"], @@ -14032,7 +16146,11 @@ class Provider(AddressProvider): ["Sinalunga", "SI"], ["Scrofiano", "SI"], ], - "53049": [["Montefollonico", "SI"], ["Torrita Stazione", "SI"], ["Torrita Di Siena", "SI"]], + "53049": [ + ["Montefollonico", "SI"], + ["Torrita Stazione", "SI"], + ["Torrita Di Siena", "SI"], + ], "53100": [ ["Costalpino", "SI"], ["Sant'Andrea A Montecchio", "SI"], @@ -14151,7 +16269,13 @@ class Provider(AddressProvider): ["St. Walburg/Ulten", "BZ"], ["Santa Gertrude", "BZ"], ], - "39017": [["Verdins", "BZ"], ["Videgg", "BZ"], ["Schenna", "BZ"], ["Tall", "BZ"], ["Scena", "BZ"]], + "39017": [ + ["Verdins", "BZ"], + ["Videgg", "BZ"], + ["Schenna", "BZ"], + ["Tall", "BZ"], + ["Scena", "BZ"], + ], "39018": [ ["Vilpiano", "BZ"], ["Siebeneich", "BZ"], @@ -14271,7 +16395,13 @@ class Provider(AddressProvider): ["Malles Venosta", "BZ"], ["Mals", "BZ"], ], - "39025": [["Plaus", "BZ"], ["Stabe", "BZ"], ["Stava", "BZ"], ["Naturno", "BZ"], ["Naturns", "BZ"]], + "39025": [ + ["Plaus", "BZ"], + ["Stabe", "BZ"], + ["Stava", "BZ"], + ["Naturno", "BZ"], + ["Naturns", "BZ"], + ], "39026": [ ["Agums", "BZ"], ["Montechiaro", "BZ"], @@ -14279,7 +16409,12 @@ class Provider(AddressProvider): ["Lichtenber", "BZ"], ["Prato Allo Stelvio", "BZ"], ], - "39027": [["Resia", "BZ"], ["Reschen", "BZ"], ["San Valentino Alla Muta", "BZ"], ["Curon Venosta", "BZ"]], + "39027": [ + ["Resia", "BZ"], + ["Reschen", "BZ"], + ["San Valentino Alla Muta", "BZ"], + ["Curon Venosta", "BZ"], + ], "39028": [ ["Silandro", "BZ"], ["Covelano", "BZ"], @@ -14451,9 +16586,24 @@ class Provider(AddressProvider): ["Acereto", "BZ"], ["Molini Di Tures", "BZ"], ], - "39033": [["Kolfusch", "BZ"], ["Colfosco", "BZ"], ["Corvara In Badia", "BZ"], ["Corvara", "BZ"]], - "39034": [["Toblach", "BZ"], ["Dobbiaco", "BZ"], ["Aufkirchen", "BZ"], ["Wahlen", "BZ"]], - "39035": [["Monguelfo", "BZ"], ["Taisten", "BZ"], ["Tesido", "BZ"], ["Welsberg", "BZ"]], + "39033": [ + ["Kolfusch", "BZ"], + ["Colfosco", "BZ"], + ["Corvara In Badia", "BZ"], + ["Corvara", "BZ"], + ], + "39034": [ + ["Toblach", "BZ"], + ["Dobbiaco", "BZ"], + ["Aufkirchen", "BZ"], + ["Wahlen", "BZ"], + ], + "39035": [ + ["Monguelfo", "BZ"], + ["Taisten", "BZ"], + ["Tesido", "BZ"], + ["Welsberg", "BZ"], + ], "39036": [ ["St. Kassian", "BZ"], ["San Cassiano", "BZ"], @@ -14617,7 +16767,12 @@ class Provider(AddressProvider): ["Viums", "BZ"], ["Schalders", "BZ"], ], - "39041": [["Gossensas", "BZ"], ["Brennero", "BZ"], ["Brenner", "BZ"], ["Colle Isarco", "BZ"]], + "39041": [ + ["Gossensas", "BZ"], + ["Brennero", "BZ"], + ["Brenner", "BZ"], + ["Colle Isarco", "BZ"], + ], "39042": [ ["Sant'Andrea In Monte", "BZ"], ["Albes", "BZ"], @@ -14648,7 +16803,12 @@ class Provider(AddressProvider): ["Klausen", "BZ"], ["Lazfons", "BZ"], ], - "39044": [["Laghetti", "BZ"], ["Mazon", "BZ"], ["Neumarkt", "BZ"], ["Egna", "BZ"]], + "39044": [ + ["Laghetti", "BZ"], + ["Mazon", "BZ"], + ["Neumarkt", "BZ"], + ["Egna", "BZ"], + ], "39045": [ ["Oberau", "BZ"], ["Mittewald", "BZ"], @@ -14656,9 +16816,21 @@ class Provider(AddressProvider): ["Fortezza", "BZ"], ["Franzensfeste", "BZ"], ], - "39046": [["St. Ulrich/Urtijei", "BZ"], ["Ortisei", "BZ"], ["Pufels", "BZ"], ["St. Jakob", "BZ"]], - "39047": [["Santa Cristina Val Gardena", "BZ"], ["St. Christina/S. Crestina -Gherdeina", "BZ"]], - "39048": [["Selva Di Val Gardena", "BZ"], ["Selva", "BZ"], ["Wolkenstein/Selva", "BZ"]], + "39046": [ + ["St. Ulrich/Urtijei", "BZ"], + ["Ortisei", "BZ"], + ["Pufels", "BZ"], + ["St. Jakob", "BZ"], + ], + "39047": [ + ["Santa Cristina Val Gardena", "BZ"], + ["St. Christina/S. Crestina -Gherdeina", "BZ"], + ], + "39048": [ + ["Selva Di Val Gardena", "BZ"], + ["Selva", "BZ"], + ["Wolkenstein/Selva", "BZ"], + ], "39049": [ ["Flains", "BZ"], ["Steckholz", "BZ"], @@ -14725,7 +16897,12 @@ class Provider(AddressProvider): ["Aica Di Fie'", "BZ"], ["Tires", "BZ"], ], - "39051": [["Branzoll", "BZ"], ["Bronzolo", "BZ"], ["Pfatten", "BZ"], ["Vadena", "BZ"]], + "39051": [ + ["Branzoll", "BZ"], + ["Bronzolo", "BZ"], + ["Pfatten", "BZ"], + ["Vadena", "BZ"], + ], "39052": [ ["St. Josef am See", "BZ"], ["St. Nikolaus/Kaltern", "BZ"], @@ -14853,7 +17030,13 @@ class Provider(AddressProvider): ["Vigo Anaunia", "TN"], ["Tavon", "TN"], ], - "38011": [["Seio", "TN"], ["Amblar", "TN"], ["Don", "TN"], ["Sarnonico", "TN"], ["Cavareno", "TN"]], + "38011": [ + ["Seio", "TN"], + ["Amblar", "TN"], + ["Don", "TN"], + ["Sarnonico", "TN"], + ["Cavareno", "TN"], + ], "38012": [ ["Segno", "TN"], ["Coredo", "TN"], @@ -14898,9 +17081,19 @@ class Provider(AddressProvider): ["Peio", "TN"], ], "38025": [["Monclassico", "TN"], ["Dimaro", "TN"]], - "38026": [["Fucine Di Ossana", "TN"], ["Ossana", "TN"], ["Cusiano", "TN"], ["Fucine", "TN"]], + "38026": [ + ["Fucine Di Ossana", "TN"], + ["Ossana", "TN"], + ["Cusiano", "TN"], + ["Fucine", "TN"], + ], "38027": [["Male'", "TN"], ["Terzolas", "TN"], ["Croviana", "TN"]], - "38028": [["Tregiovo", "TN"], ["Romallo", "TN"], ["Revo'", "TN"], ["Cagno'", "TN"]], + "38028": [ + ["Tregiovo", "TN"], + ["Romallo", "TN"], + ["Revo'", "TN"], + ["Cagno'", "TN"], + ], "38029": [["Passo Del Tonale", "TN"], ["Fraviano", "TN"], ["Vermiglio", "TN"]], "38030": [ ["Soraga", "TN"], @@ -14923,14 +17116,28 @@ class Provider(AddressProvider): ["Mazzin", "TN"], ], "38031": [["Campitello Di Fassa", "TN"]], - "38032": [["Sass Pordoi", "TN"], ["Alba Di Canazei", "TN"], ["Penia", "TN"], ["Canazei", "TN"]], + "38032": [ + ["Sass Pordoi", "TN"], + ["Alba Di Canazei", "TN"], + ["Penia", "TN"], + ["Canazei", "TN"], + ], "38033": [["Carano", "TN"], ["Cavalese", "TN"], ["Masi Di Cavalese", "TN"]], "38034": [["Lisignago", "TN"], ["Cembra", "TN"]], "38035": [["Forno Di Fiemme", "TN"], ["Moena", "TN"], ["Forno", "TN"]], "38036": [["Pera", "TN"], ["Pera Di Fassa", "TN"], ["Pozza Di Fassa", "TN"]], - "38037": [["Paneveggio", "TN"], ["Predazzo", "TN"], ["Passo Rolle", "TN"], ["Bellamonte", "TN"]], + "38037": [ + ["Paneveggio", "TN"], + ["Predazzo", "TN"], + ["Passo Rolle", "TN"], + ["Bellamonte", "TN"], + ], "38038": [["Tesero", "TN"]], - "38039": [["Passo Costalunga", "TN"], ["Costalunga", "TN"], ["Vigo Di Fassa", "TN"]], + "38039": [ + ["Passo Costalunga", "TN"], + ["Costalunga", "TN"], + ["Vigo Di Fassa", "TN"], + ], "38040": [ ["Fornace", "TN"], ["Lases", "TN"], @@ -14952,8 +17159,18 @@ class Provider(AddressProvider): ], "38043": [["Regnana", "TN"], ["Bedollo", "TN"], ["Brusago", "TN"]], "38045": [["Civezzano", "TN"], ["Seregnano", "TN"]], - "38046": [["Gionghi", "TN"], ["Lavarone Cappella", "TN"], ["Lavarone", "TN"], ["Cappella", "TN"]], - "38047": [["Valcava", "TN"], ["Sevignano", "TN"], ["Quaras", "TN"], ["Segonzano", "TN"]], + "38046": [ + ["Gionghi", "TN"], + ["Lavarone Cappella", "TN"], + ["Lavarone", "TN"], + ["Cappella", "TN"], + ], + "38047": [ + ["Valcava", "TN"], + ["Sevignano", "TN"], + ["Quaras", "TN"], + ["Segonzano", "TN"], + ], "38048": [["Sover", "TN"]], "38049": [ ["Vigolo Vattaro", "TN"], @@ -15091,7 +17308,13 @@ class Provider(AddressProvider): ["Serravalle", "TN"], ["Sega Dei Lessini", "TN"], ], - "38062": [["Oltresarca", "TN"], ["Arco", "TN"], ["Bolognano", "TN"], ["San Giorgio", "TN"], ["Vignole", "TN"]], + "38062": [ + ["Oltresarca", "TN"], + ["Arco", "TN"], + ["Bolognano", "TN"], + ["San Giorgio", "TN"], + ["Vignole", "TN"], + ], "38063": [["Sabbionara", "TN"], ["Borghetto All'Adige", "TN"], ["Avio", "TN"]], "38064": [ ["Mezzomonte Di Sotto", "TN"], @@ -15124,7 +17347,12 @@ class Provider(AddressProvider): ["Marco", "TN"], ], "38069": [["Nago Torbole", "TN"], ["Torbole", "TN"], ["Nago", "TN"]], - "38070": [["Tavodo", "TN"], ["Villa Banale", "TN"], ["Lomaso", "TN"], ["Stenico", "TN"]], + "38070": [ + ["Tavodo", "TN"], + ["Villa Banale", "TN"], + ["Lomaso", "TN"], + ["Stenico", "TN"], + ], "38071": [ ["Larido", "TN"], ["Marazzone", "TN"], @@ -15132,8 +17360,18 @@ class Provider(AddressProvider): ["Bleggio Superiore", "TN"], ["Bivedo", "TN"], ], - "38073": [["Vigo", "TN"], ["Vigo Cavedine", "TN"], ["Stravino", "TN"], ["Cavedine", "TN"]], - "38074": [["Drena", "TN"], ["Ceniga", "TN"], ["Dro", "TN"], ["Pietramurata", "TN"]], + "38073": [ + ["Vigo", "TN"], + ["Vigo Cavedine", "TN"], + ["Stravino", "TN"], + ["Cavedine", "TN"], + ], + "38074": [ + ["Drena", "TN"], + ["Ceniga", "TN"], + ["Dro", "TN"], + ["Pietramurata", "TN"], + ], "38075": [["Ballino", "TN"], ["Fiave'", "TN"]], "38076": [ ["Castel Madruzzo", "TN"], @@ -15156,7 +17394,13 @@ class Provider(AddressProvider): ["Moline Di Banale", "TN"], ["San Lorenzo Dorsino", "TN"], ], - "38079": [["Bolbeno", "TN"], ["Zuclo", "TN"], ["Tione Di Trento", "TN"], ["Pelugo", "TN"], ["Saone", "TN"]], + "38079": [ + ["Bolbeno", "TN"], + ["Zuclo", "TN"], + ["Tione Di Trento", "TN"], + ["Pelugo", "TN"], + ["Saone", "TN"], + ], "38080": [ ["Baitoni", "TN"], ["Carisolo", "TN"], @@ -15176,10 +17420,20 @@ class Provider(AddressProvider): ["Madonna Di Campiglio", "TN"], ["Giustino", "TN"], ], - "38087": [["Bondo", "TN"], ["Lardaro", "TN"], ["Roncone", "TN"], ["Breguzzo", "TN"]], + "38087": [ + ["Bondo", "TN"], + ["Lardaro", "TN"], + ["Roncone", "TN"], + ["Breguzzo", "TN"], + ], "38088": [["Spiazzo Rendena", "TN"], ["Spiazzo", "TN"]], "38089": [["Storo", "TN"], ["Darzo", "TN"], ["Lodrone", "TN"]], - "38091": [["Praso", "TN"], ["Bersone", "TN"], ["Valdaone", "TN"], ["Daone", "TN"]], + "38091": [ + ["Praso", "TN"], + ["Bersone", "TN"], + ["Valdaone", "TN"], + ["Daone", "TN"], + ], "38092": [["Grauno", "TN"], ["Grumes", "TN"], ["Valda", "TN"], ["Faver", "TN"]], "38093": [["Terres", "TN"], ["Flavon", "TN"], ["Cunevo", "TN"]], "38094": [ @@ -15190,7 +17444,13 @@ class Provider(AddressProvider): ["Dare'", "TN"], ], "38095": [["Ragoli", "TN"], ["Montagne", "TN"], ["Preore", "TN"]], - "38096": [["Vezzano", "TN"], ["Terlago", "TN"], ["Margone", "TN"], ["Ranzo", "TN"], ["Padergnone", "TN"]], + "38096": [ + ["Vezzano", "TN"], + ["Terlago", "TN"], + ["Margone", "TN"], + ["Ranzo", "TN"], + ["Padergnone", "TN"], + ], "38097": [["Zambana", "TN"], ["Nave San Rocco", "TN"]], "38100": [ ["Gardolo Di Mezzo", "TN"], @@ -15217,7 +17477,12 @@ class Provider(AddressProvider): ["Mattarello", "TN"], ], "38121": [["Trento", "TN"]], - "06010": [["Citerna", "PG"], ["Monte Santa Maria Tiberina", "PG"], ["Lippiano", "PG"], ["Fighille", "PG"]], + "06010": [ + ["Citerna", "PG"], + ["Monte Santa Maria Tiberina", "PG"], + ["Lippiano", "PG"], + ["Fighille", "PG"], + ], "06012": [ ["Riosecco", "PG"], ["Muccignano", "PG"], @@ -15255,7 +17520,11 @@ class Provider(AddressProvider): ["Umbertide", "PG"], ], "06020": [["Branca", "PG"], ["Torre Dei Calzolari", "PG"]], - "06021": [["Costacciaro", "PG"], ["Villa Col De' Canali", "PG"], ["Villa Col Dei Canali", "PG"]], + "06021": [ + ["Costacciaro", "PG"], + ["Villa Col De' Canali", "PG"], + ["Villa Col Dei Canali", "PG"], + ], "06022": [ ["Fossato Di Vico Stazione", "PG"], ["Purello", "PG"], @@ -15290,7 +17559,12 @@ class Provider(AddressProvider): ], "06025": [["Gaifana", "PG"], ["Nocera Umbra", "PG"], ["Molinaccio", "PG"]], "06026": [["Pietralunga", "PG"]], - "06027": [["Scheggia E Pascelupo", "PG"], ["Scheggia", "PG"], ["Isola Fossara", "PG"], ["Pascelupo", "PG"]], + "06027": [ + ["Scheggia E Pascelupo", "PG"], + ["Scheggia", "PG"], + ["Isola Fossara", "PG"], + ["Pascelupo", "PG"], + ], "06028": [["Sigillo", "PG"]], "06029": [["Casa Castalda", "PG"], ["Valfabbrica", "PG"]], "06030": [ @@ -15332,7 +17606,11 @@ class Provider(AddressProvider): ["Gualdo Cattaneo", "PG"], ["Marcellano", "PG"], ], - "06036": [["Montefalco", "PG"], ["Madonna Della Stella", "PG"], ["San Marco Di Montefalco", "PG"]], + "06036": [ + ["Montefalco", "PG"], + ["Madonna Della Stella", "PG"], + ["San Marco Di Montefalco", "PG"], + ], "06038": [["Spello", "PG"], ["Capitan Loreto", "PG"]], "06039": [ ["Trevi", "PG"], @@ -15351,7 +17629,12 @@ class Provider(AddressProvider): ["Poggiodomo", "PG"], ["Vallo Di Nera", "PG"], ], - "06041": [["Borgo Cerreto", "PG"], ["Triponzo", "PG"], ["Cerreto Di Spoleto", "PG"], ["Bugiano", "PG"]], + "06041": [ + ["Borgo Cerreto", "PG"], + ["Triponzo", "PG"], + ["Cerreto Di Spoleto", "PG"], + ["Bugiano", "PG"], + ], "06042": [["Campello Sul Clitunno", "PG"]], "06043": [["Cascia", "PG"], ["Chiavano", "PG"], ["Maltignano Di Cascia", "PG"]], "06044": [["Castel Ritaldi", "PG"], ["Bruna", "PG"]], @@ -15395,7 +17678,12 @@ class Provider(AddressProvider): ["San Giacomo", "PG"], ["Strettura", "PG"], ], - "06050": [["Collazzone", "PG"], ["Collepepe", "PG"], ["Piedicolle", "PG"], ["Casalalta", "PG"]], + "06050": [ + ["Collazzone", "PG"], + ["Collepepe", "PG"], + ["Piedicolle", "PG"], + ["Casalalta", "PG"], + ], "06051": [["Ripabianca", "PG"], ["Casalina", "PG"]], "06053": [ ["San Nicolo' Di Celle", "PG"], @@ -15411,7 +17699,12 @@ class Provider(AddressProvider): ["Marsciano", "PG"], ["San Valentino", "PG"], ], - "06056": [["Colpetrazzo", "PG"], ["Villa San Faustino", "PG"], ["Viepri", "PG"], ["Massa Martana", "PG"]], + "06056": [ + ["Colpetrazzo", "PG"], + ["Villa San Faustino", "PG"], + ["Viepri", "PG"], + ["Massa Martana", "PG"], + ], "06057": [["Monte Castello Di Vibio", "PG"]], "06059": [ ["Todi", "PG"], @@ -15428,7 +17721,11 @@ class Provider(AddressProvider): ["Pian Di San Martino", "PG"], ["Monticello", "PG"], ], - "06060": [["Villastrada Umbra", "PG"], ["Lisciano Niccone", "PG"], ["Paciano", "PG"]], + "06060": [ + ["Villastrada Umbra", "PG"], + ["Lisciano Niccone", "PG"], + ["Paciano", "PG"], + ], "06061": [ ["Pozzuolo", "PG"], ["Villastrada", "PG"], @@ -15462,7 +17759,11 @@ class Provider(AddressProvider): "06065": [["Castel Rigone", "PG"], ["Passignano Sul Trasimeno", "PG"]], "06066": [["Pietrafitta", "PG"], ["Piegaro", "PG"], ["Castiglion Fosco", "PG"]], "06068": [["Tavernelle", "PG"]], - "06069": [["Tuoro Sul Trasimeno", "PG"], ["Borghetto Di Tuoro", "PG"], ["Isola Maggiore", "PG"]], + "06069": [ + ["Tuoro Sul Trasimeno", "PG"], + ["Borghetto Di Tuoro", "PG"], + ["Isola Maggiore", "PG"], + ], "06070": [["Ellera", "PG"], ["San Mariano", "PG"], ["Ellera Umbra", "PG"]], "06072": [ ["Mercatello", "PG"], @@ -15497,8 +17798,17 @@ class Provider(AddressProvider): ["Ospedalicchio", "PG"], ["Bastia", "PG"], ], - "06084": [["Bettona", "PG"], ["Passaggio Di Bettona", "PG"], ["Passaggio", "PG"]], - "06089": [["Torgiano", "PG"], ["Ponte Nuovo", "PG"], ["Brufa", "PG"], ["Fornaci", "PG"]], + "06084": [ + ["Bettona", "PG"], + ["Passaggio Di Bettona", "PG"], + ["Passaggio", "PG"], + ], + "06089": [ + ["Torgiano", "PG"], + ["Ponte Nuovo", "PG"], + ["Brufa", "PG"], + ["Fornaci", "PG"], + ], "06100": [["Perugia", "PG"]], "06121": [["Perugia", "PG"]], "06122": [["Perugia", "PG"]], @@ -15524,10 +17834,18 @@ class Provider(AddressProvider): ["Collelungo", "TR"], ["Ripalvella", "TR"], ], - "05011": [["Allerona Stazione", "TR"], ["Stazione Di Allerona", "TR"], ["Allerona", "TR"]], + "05011": [ + ["Allerona Stazione", "TR"], + ["Stazione Di Allerona", "TR"], + ["Allerona", "TR"], + ], "05012": [["Attigliano", "TR"]], "05013": [["Castel Giorgio", "TR"]], - "05014": [["Castel Viscardo", "TR"], ["Monterubiaglio", "TR"], ["Pianlungo", "TR"]], + "05014": [ + ["Castel Viscardo", "TR"], + ["Monterubiaglio", "TR"], + ["Pianlungo", "TR"], + ], "05015": [["Fabro Scalo", "TR"], ["Fabro", "TR"], ["Carnaiola", "TR"]], "05016": [["Sala", "TR"], ["Ficulle", "TR"]], "05017": [["Santa Maria", "TR"], ["Monteleone D'Orvieto", "TR"]], @@ -15569,7 +17887,12 @@ class Provider(AddressProvider): ["Macchie", "TR"], ["Fornole", "TR"], ], - "05023": [["Civitella Del Lago", "TR"], ["Acqualoreto", "TR"], ["Baschi", "TR"], ["Morre", "TR"]], + "05023": [ + ["Civitella Del Lago", "TR"], + ["Acqualoreto", "TR"], + ["Baschi", "TR"], + ["Morre", "TR"], + ], "05024": [["Giove", "TR"]], "05025": [["Guardea", "TR"]], "05026": [ @@ -15672,7 +17995,12 @@ class Provider(AddressProvider): ], "11011": [["Leverogne", "AO"], ["Planaval", "AO"], ["Arvier", "AO"]], "11012": [["Cogne", "AO"], ["Gimillian", "AO"], ["Epinel", "AO"]], - "11013": [["Dolonne", "AO"], ["Courmayeur", "AO"], ["Entreves", "AO"], ["La Saxe", "AO"]], + "11013": [ + ["Dolonne", "AO"], + ["Courmayeur", "AO"], + ["Entreves", "AO"], + ["La Saxe", "AO"], + ], "11014": [["Etroubles", "AO"], ["Saint Oyen", "AO"]], "11015": [["La Salle", "AO"], ["Derby", "AO"]], "11016": [["La Thuile", "AO"]], @@ -15744,7 +18072,12 @@ class Provider(AddressProvider): "11021": [["Breuil", "AO"], ["Breuil Cervinia", "AO"], ["Cervinia", "AO"]], "11022": [["Arcesaz", "AO"], ["Brusson", "AO"], ["Extrepieraz", "AO"]], "11023": [["Saint Denis", "AO"], ["Chambave", "AO"]], - "11024": [["Chatillon", "AO"], ["Ussel", "AO"], ["Pontey", "AO"], ["Lassolaz", "AO"]], + "11024": [ + ["Chatillon", "AO"], + ["Ussel", "AO"], + ["Pontey", "AO"], + ["Lassolaz", "AO"], + ], "11025": [["Gressoney Saint Jean", "AO"]], "11026": [["Pont Saint Martin", "AO"]], "11027": [["Moron", "AO"], ["Saint Vincent", "AO"]], @@ -15778,7 +18111,12 @@ class Provider(AddressProvider): ["Perarolo Di Cadore", "BL"], ["Chies D'Alpago", "BL"], ], - "32012": [["Dont Di Zoldo", "BL"], ["Dont", "BL"], ["Dozza Di Zoldo", "BL"], ["Forno Di Zoldo", "BL"]], + "32012": [ + ["Dont Di Zoldo", "BL"], + ["Dont", "BL"], + ["Dozza Di Zoldo", "BL"], + ["Forno Di Zoldo", "BL"], + ], "32013": [["Igne", "BL"], ["Longarone", "BL"], ["Fortogna", "BL"]], "32014": [ ["La Secca", "BL"], @@ -15791,7 +18129,12 @@ class Provider(AddressProvider): ["Soccher", "BL"], ], "32015": [["Puos D'Alpago", "BL"], ["Cornei", "BL"]], - "32016": [["Farra D'Alpago", "BL"], ["Santa Croce", "BL"], ["Spert", "BL"], ["Santa Croce Del Lago", "BL"]], + "32016": [ + ["Farra D'Alpago", "BL"], + ["Santa Croce", "BL"], + ["Spert", "BL"], + ["Santa Croce Del Lago", "BL"], + ], "32020": [ ["Tiser", "BL"], ["Villapiana", "BL"], @@ -15818,8 +18161,17 @@ class Provider(AddressProvider): ], "32021": [["Agordo", "BL"]], "32022": [["Caprile", "BL"], ["Alleghe", "BL"]], - "32023": [["Rocca Pietore", "BL"], ["Santa Maria Delle Grazie", "BL"], ["Laste Di Rocca Pietore", "BL"]], - "32026": [["Trichiana", "BL"], ["Lentiai", "BL"], ["Villa Di Villa", "BL"], ["Mel", "BL"]], + "32023": [ + ["Rocca Pietore", "BL"], + ["Santa Maria Delle Grazie", "BL"], + ["Laste Di Rocca Pietore", "BL"], + ], + "32026": [ + ["Trichiana", "BL"], + ["Lentiai", "BL"], + ["Villa Di Villa", "BL"], + ["Mel", "BL"], + ], "32027": [["Taibon Agordino", "BL"]], "32028": [["Sant'Antonio Tortal", "BL"]], "32030": [ @@ -15851,9 +18203,19 @@ class Provider(AddressProvider): ["Villapaiera", "BL"], ], "32033": [["Lamon", "BL"], ["Arina", "BL"]], - "32034": [["Pedavena", "BL"], ["Facen", "BL"], ["Norcen", "BL"], ["Travagola", "BL"]], + "32034": [ + ["Pedavena", "BL"], + ["Facen", "BL"], + ["Norcen", "BL"], + ["Travagola", "BL"], + ], "32035": [["Meano", "BL"], ["Formegan", "BL"], ["Santa Giustina", "BL"]], - "32036": [["Mas", "BL"], ["Bribano", "BL"], ["Roe Alte", "BL"], ["Sedico", "BL"]], + "32036": [ + ["Mas", "BL"], + ["Bribano", "BL"], + ["Roe Alte", "BL"], + ["Sedico", "BL"], + ], "32037": [["Sospirolo", "BL"], ["Mis", "BL"]], "32038": [["Vas", "BL"], ["Quero Vas", "BL"], ["Quero", "BL"]], "32040": [ @@ -15884,11 +18246,30 @@ class Provider(AddressProvider): ["Lozzo Di Cadore", "BL"], ["Vodo Cadore", "BL"], ], - "32041": [["Giralba", "BL"], ["Misurina", "BL"], ["Reane", "BL"], ["Auronzo Di Cadore", "BL"]], + "32041": [ + ["Giralba", "BL"], + ["Misurina", "BL"], + ["Reane", "BL"], + ["Auronzo Di Cadore", "BL"], + ], "32042": [["Calalzo Di Cadore", "BL"]], - "32043": [["Acquabona", "BL"], ["Zuel", "BL"], ["Verocai", "BL"], ["Cortina D'Ampezzo", "BL"]], - "32044": [["Pozzale", "BL"], ["Tai Di Cadore", "BL"], ["Sottocastello", "BL"], ["Pieve Di Cadore", "BL"]], - "32045": [["Santo Stefano Di Cadore", "BL"], ["Campolongo Di Cadore", "BL"], ["Costalissoio", "BL"]], + "32043": [ + ["Acquabona", "BL"], + ["Zuel", "BL"], + ["Verocai", "BL"], + ["Cortina D'Ampezzo", "BL"], + ], + "32044": [ + ["Pozzale", "BL"], + ["Tai Di Cadore", "BL"], + ["Sottocastello", "BL"], + ["Pieve Di Cadore", "BL"], + ], + "32045": [ + ["Santo Stefano Di Cadore", "BL"], + ["Campolongo Di Cadore", "BL"], + ["Costalissoio", "BL"], + ], "32046": [["Chiapuzza", "BL"], ["San Vito Di Cadore", "BL"]], "32047": [["Granvilla", "BL"], ["Sappada", "BL"]], "32100": [ @@ -15960,11 +18341,25 @@ class Provider(AddressProvider): ], "35011": [["Sant'Andrea Di Campodarsego", "PD"], ["Campodarsego", "PD"]], "35012": [["Rustega", "PD"], ["Camposampiero", "PD"]], - "35013": [["Santa Croce Bigolina", "PD"], ["Laghi", "PD"], ["Cittadella", "PD"]], + "35013": [ + ["Santa Croce Bigolina", "PD"], + ["Laghi", "PD"], + ["Cittadella", "PD"], + ], "35014": [["Fontaniva", "PD"]], "35015": [["Galliera Veneta", "PD"]], - "35016": [["Presina", "PD"], ["Vaccarino", "PD"], ["Piazzola Sul Brenta", "PD"], ["Tremignon", "PD"]], - "35017": [["Piombino Dese", "PD"], ["Torreselle", "PD"], ["Levada", "PD"], ["Ronchi", "PD"]], + "35016": [ + ["Presina", "PD"], + ["Vaccarino", "PD"], + ["Piazzola Sul Brenta", "PD"], + ["Tremignon", "PD"], + ], + "35017": [ + ["Piombino Dese", "PD"], + ["Torreselle", "PD"], + ["Levada", "PD"], + ["Ronchi", "PD"], + ], "35018": [["San Martino Di Lupari", "PD"]], "35019": [["Onara", "PD"], ["Tombolo", "PD"]], "35020": [ @@ -16012,7 +18407,12 @@ class Provider(AddressProvider): "35025": [["Cagnola", "PD"], ["Cartura", "PD"]], "35026": [["Conselve", "PD"]], "35027": [["Oltre Brenta", "PD"], ["Noventa Padovana", "PD"]], - "35028": [["Arzerello", "PD"], ["Piove Di Sacco", "PD"], ["Piovega", "PD"], ["Corte", "PD"]], + "35028": [ + ["Arzerello", "PD"], + ["Piove Di Sacco", "PD"], + ["Piovega", "PD"], + ["Corte", "PD"], + ], "35029": [["Pontelongo", "PD"]], "35030": [ ["Cinto Euganeo", "PD"], @@ -16150,7 +18550,12 @@ class Provider(AddressProvider): ["Ariano Nel Polesine", "RO"], ["Crociara", "RO"], ], - "45014": [["Porto Viro", "RO"], ["Contarina", "RO"], ["Donada", "RO"], ["Villaregia", "RO"]], + "45014": [ + ["Porto Viro", "RO"], + ["Contarina", "RO"], + ["Donada", "RO"], + ["Villaregia", "RO"], + ], "45015": [["Corbola", "RO"]], "45017": [["Loreo", "RO"]], "45018": [ @@ -16187,7 +18592,12 @@ class Provider(AddressProvider): ["Canda", "RO"], ["Baruchella", "RO"], ], - "45021": [["Salvaterra", "RO"], ["Badia Polesine", "RO"], ["Villa D'Adige", "RO"], ["Colombano", "RO"]], + "45021": [ + ["Salvaterra", "RO"], + ["Badia Polesine", "RO"], + ["Villa D'Adige", "RO"], + ["Colombano", "RO"], + ], "45022": [["Bagnolo Di Po", "RO"]], "45023": [["Costa Di Rovigo", "RO"]], "45024": [["Fiesso Umbertiano", "RO"]], @@ -16271,14 +18681,28 @@ class Provider(AddressProvider): ["Priula", "TV"], ["Muliparte", "TV"], ], - "31011": [["Casella D'Asolo", "TV"], ["Asolo", "TV"], ["Pagnano", "TV"], ["Villa D'Asolo", "TV"]], + "31011": [ + ["Casella D'Asolo", "TV"], + ["Asolo", "TV"], + ["Pagnano", "TV"], + ["Villa D'Asolo", "TV"], + ], "31012": [["Cappella Maggiore", "TV"], ["Anzano", "TV"]], "31013": [["Roverbasso", "TV"], ["Cimetta", "TV"], ["Codogne'", "TV"]], - "31014": [["San Martino Di Colle Umberto", "TV"], ["San Martino", "TV"], ["Colle Umberto", "TV"]], + "31014": [ + ["San Martino Di Colle Umberto", "TV"], + ["San Martino", "TV"], + ["Colle Umberto", "TV"], + ], "31015": [["Conegliano", "TV"], ["Scomigo", "TV"], ["Collalbrigo", "TV"]], "31016": [["Villa Di Villa", "TV"], ["Cordignano", "TV"]], "31017": [["Crespano Del Grappa", "TV"], ["Paderno Del Grappa", "TV"]], - "31018": [["Gaiarine", "TV"], ["Campomolino", "TV"], ["Francenigo", "TV"], ["Albina", "TV"]], + "31018": [ + ["Gaiarine", "TV"], + ["Campomolino", "TV"], + ["Francenigo", "TV"], + ["Albina", "TV"], + ], "31020": [ ["Villorba", "TV"], ["Zoppe'", "TV"], @@ -16369,9 +18793,23 @@ class Provider(AddressProvider): ["Villarazzo", "TV"], ], "31034": [["Cavaso Del Tomba", "TV"]], - "31035": [["Ciano Del Montello", "TV"], ["Ciano", "TV"], ["Crocetta Del Montello", "TV"]], - "31036": [["Istrana", "TV"], ["Ospedaletto", "TV"], ["Pezzan", "TV"], ["Sala", "TV"]], - "31037": [["Ramon Campagna", "TV"], ["Loria", "TV"], ["Castione", "TV"], ["Bessica", "TV"]], + "31035": [ + ["Ciano Del Montello", "TV"], + ["Ciano", "TV"], + ["Crocetta Del Montello", "TV"], + ], + "31036": [ + ["Istrana", "TV"], + ["Ospedaletto", "TV"], + ["Pezzan", "TV"], + ["Sala", "TV"], + ], + "31037": [ + ["Ramon Campagna", "TV"], + ["Loria", "TV"], + ["Castione", "TV"], + ["Bessica", "TV"], + ], "31038": [ ["Paese", "TV"], ["Padernello", "TV"], @@ -16415,7 +18853,12 @@ class Provider(AddressProvider): "31043": [["Lutrano", "TV"], ["Fontanelle", "TV"]], "31044": [["Biadene", "TV"], ["Montebelluna", "TV"]], "31045": [["Motta Di Livenza", "TV"]], - "31046": [["Fae'", "TV"], ["Oderzo", "TV"], ["Rustigne'", "TV"], ["Piavon", "TV"]], + "31046": [ + ["Fae'", "TV"], + ["Oderzo", "TV"], + ["Rustigne'", "TV"], + ["Piavon", "TV"], + ], "31047": [["Negrisia", "TV"], ["Ponte Di Piave", "TV"], ["Levada", "TV"]], "31048": [ ["Cavrie", "TV"], @@ -16461,7 +18904,12 @@ class Provider(AddressProvider): "31053": [["Pieve Di Soligo", "TV"], ["Barbisano", "TV"], ["Solighetto", "TV"]], "31054": [["Possagno", "TV"]], "31055": [["Quinto Di Treviso", "TV"], ["Santa Cristina", "TV"]], - "31056": [["Musestre", "TV"], ["San Cipriano", "TV"], ["Roncade", "TV"], ["Biancade", "TV"]], + "31056": [ + ["Musestre", "TV"], + ["San Cipriano", "TV"], + ["Roncade", "TV"], + ["Biancade", "TV"], + ], "31057": [["Cendon", "TV"], ["Silea", "TV"], ["Sant'Elena", "TV"]], "31058": [["Susegana", "TV"]], "31059": [["Scandolara", "TV"], ["Zero Branco", "TV"], ["Sant'Alberto", "TV"]], @@ -16556,8 +19004,17 @@ class Provider(AddressProvider): ["Fratta", "VE"], ["Villanova Santa Margherita", "VE"], ], - "30026": [["Lugugnana", "VE"], ["Summaga", "VE"], ["Pradipozzo", "VE"], ["Portogruaro", "VE"]], - "30027": [["Passarella", "VE"], ["Calvecchia", "VE"], ["San Dona' Di Piave", "VE"]], + "30026": [ + ["Lugugnana", "VE"], + ["Summaga", "VE"], + ["Pradipozzo", "VE"], + ["Portogruaro", "VE"], + ], + "30027": [ + ["Passarella", "VE"], + ["Calvecchia", "VE"], + ["San Dona' Di Piave", "VE"], + ], "30028": [ ["Bibione", "VE"], ["Cesarolo", "VE"], @@ -16567,7 +19024,11 @@ class Provider(AddressProvider): ["San Michele Al Tagliamento", "VE"], ["Pozzi", "VE"], ], - "30029": [["La Salute Di Livenza", "VE"], ["Corbolone", "VE"], ["Santo Stino Di Livenza", "VE"]], + "30029": [ + ["La Salute Di Livenza", "VE"], + ["Corbolone", "VE"], + ["Santo Stino Di Livenza", "VE"], + ], "30030": [ ["Fosso'", "VE"], ["Martellago", "VE"], @@ -16586,7 +19047,12 @@ class Provider(AddressProvider): ], "30031": [["Arino", "VE"], ["Sambruson", "VE"], ["Dolo", "VE"]], "30032": [["Fiesso D'Artico", "VE"]], - "30033": [["Moniego", "VE"], ["Cappelletta", "VE"], ["Moniego Di Noale", "VE"], ["Noale", "VE"]], + "30033": [ + ["Moniego", "VE"], + ["Cappelletta", "VE"], + ["Moniego Di Noale", "VE"], + ["Noale", "VE"], + ], "30034": [ ["Gambarare", "VE"], ["Marano", "VE"], @@ -16597,7 +19063,13 @@ class Provider(AddressProvider): ["Mira Taglio", "VE"], ["Mira", "VE"], ], - "30035": [["Ballo'", "VE"], ["Zianigo", "VE"], ["Mirano", "VE"], ["Vetrego", "VE"], ["Scaltenigo", "VE"]], + "30035": [ + ["Ballo'", "VE"], + ["Zianigo", "VE"], + ["Mirano", "VE"], + ["Vetrego", "VE"], + ["Scaltenigo", "VE"], + ], "30036": [ ["Caltana", "VE"], ["Santa Maria Di Sala", "VE"], @@ -16644,9 +19116,19 @@ class Provider(AddressProvider): "30170": [["Venezia Mestre", "VE"]], "30171": [["Mestre", "VE"]], "30172": [["Mestre", "VE"]], - "30173": [["Campalto", "VE"], ["Mestre", "VE"], ["Venezia", "VE"], ["Villaggio San Marco", "VE"]], + "30173": [ + ["Campalto", "VE"], + ["Mestre", "VE"], + ["Venezia", "VE"], + ["Villaggio San Marco", "VE"], + ], "30174": [["Zelarino", "VE"], ["Gazzera", "VE"], ["Mestre", "VE"]], - "30175": [["Mestre", "VE"], ["Ca' Emiliani", "VE"], ["Carpenedo", "VE"], ["Marghera", "VE"]], + "30175": [ + ["Mestre", "VE"], + ["Ca' Emiliani", "VE"], + ["Carpenedo", "VE"], + ["Marghera", "VE"], + ], "36010": [ ["Camporovere", "VI"], ["Chiuppano", "VI"], @@ -16671,7 +19153,12 @@ class Provider(AddressProvider): ["Velo D'Astico", "VI"], ], "36011": [["Arsiero", "VI"], ["Castana", "VI"]], - "36012": [["Rigoni", "VI"], ["Rodeghieri", "VI"], ["Asiago", "VI"], ["Sasso", "VI"]], + "36012": [ + ["Rigoni", "VI"], + ["Rodeghieri", "VI"], + ["Asiago", "VI"], + ["Sasso", "VI"], + ], "36013": [["Piovene Rocchette", "VI"]], "36014": [["Santorso", "VI"]], "36015": [ @@ -16699,8 +19186,17 @@ class Provider(AddressProvider): ["Castegnero", "VI"], ["Carpane'", "VI"], ], - "36021": [["Villaga", "VI"], ["Ponte Di Barbarano", "VI"], ["Barbarano Vicentino", "VI"]], - "36022": [["San Giuseppe", "VI"], ["San Zeno", "VI"], ["San Giuseppe Di Cassola", "VI"], ["Cassola", "VI"]], + "36021": [ + ["Villaga", "VI"], + ["Ponte Di Barbarano", "VI"], + ["Barbarano Vicentino", "VI"], + ], + "36022": [ + ["San Giuseppe", "VI"], + ["San Zeno", "VI"], + ["San Giuseppe Di Cassola", "VI"], + ["Cassola", "VI"], + ], "36023": [["Longare", "VI"], ["Lumignano", "VI"], ["Bugano", "VI"]], "36024": [["Mossano", "VI"], ["Nanto", "VI"], ["Ponte Di Nanto", "VI"]], "36025": [["Noventa Vicentina", "VI"]], @@ -16830,7 +19326,12 @@ class Provider(AddressProvider): ], "36061": [["Valrovina", "VI"], ["Bassano Del Grappa", "VI"], ["Campese", "VI"]], "36062": [["Fontanelle", "VI"]], - "36063": [["Valle San Floriano", "VI"], ["Marostica", "VI"], ["Vallonara", "VI"], ["Crosara", "VI"]], + "36063": [ + ["Valle San Floriano", "VI"], + ["Marostica", "VI"], + ["Vallonara", "VI"], + ["Crosara", "VI"], + ], "36064": [["Molvena", "VI"], ["Mason Vicentino", "VI"], ["Villaraspa", "VI"]], "36065": [["Mussolente", "VI"], ["Casoni", "VI"]], "36066": [["Sandrigo", "VI"]], @@ -16858,7 +19359,11 @@ class Provider(AddressProvider): ["Sant'Urbano", "VI"], ], "36076": [["Rovegliana", "VI"], ["Recoaro Terme", "VI"]], - "36077": [["Valmarana", "VI"], ["Altavilla Vicentina", "VI"], ["Tavernelle Vicentina", "VI"]], + "36077": [ + ["Valmarana", "VI"], + ["Altavilla Vicentina", "VI"], + ["Tavernelle Vicentina", "VI"], + ], "36078": [ ["Maglio Di Sopra", "VI"], ["Novale", "VI"], @@ -16896,11 +19401,31 @@ class Provider(AddressProvider): ], "37011": [["Cisano", "VR"], ["Calmasino", "VR"], ["Bardolino", "VR"]], "37012": [["Bussolengo", "VR"], ["San Vito Al Mantico", "VR"]], - "37013": [["Pesina", "VR"], ["Spiazzi", "VR"], ["Caprino Veronese", "VR"], ["Boi", "VR"]], - "37014": [["Oliosi", "VR"], ["Castelnuovo Del Garda", "VR"], ["Sandra'", "VR"], ["Cavalcaselle", "VR"]], - "37015": [["Gargagnago", "VR"], ["Domegliara", "VR"], ["Monte", "VR"], ["Sant'Ambrogio Di Valpolicella", "VR"]], + "37013": [ + ["Pesina", "VR"], + ["Spiazzi", "VR"], + ["Caprino Veronese", "VR"], + ["Boi", "VR"], + ], + "37014": [ + ["Oliosi", "VR"], + ["Castelnuovo Del Garda", "VR"], + ["Sandra'", "VR"], + ["Cavalcaselle", "VR"], + ], + "37015": [ + ["Gargagnago", "VR"], + ["Domegliara", "VR"], + ["Monte", "VR"], + ["Sant'Ambrogio Di Valpolicella", "VR"], + ], "37016": [["Garda", "VR"]], - "37017": [["Lazise", "VR"], ["Cola' Di Lazise", "VR"], ["Cola'", "VR"], ["Pacengo", "VR"]], + "37017": [ + ["Lazise", "VR"], + ["Cola' Di Lazise", "VR"], + ["Cola'", "VR"], + ["Pacengo", "VR"], + ], "37018": [["Cassone", "VR"], ["Malcesine", "VR"]], "37019": [["Peschiera Del Garda", "VR"], ["San Benedetto Di Lugana", "VR"]], "37020": [ @@ -16921,7 +19446,11 @@ class Provider(AddressProvider): ["Dolce'", "VR"], ["Volargne", "VR"], ], - "37021": [["Bosco Chiesanuova", "VR"], ["Corbiolo", "VR"], ["Lughezzano", "VR"]], + "37021": [ + ["Bosco Chiesanuova", "VR"], + ["Corbiolo", "VR"], + ["Lughezzano", "VR"], + ], "37022": [["Fumane", "VR"], ["Cavalo", "VR"], ["Breonio", "VR"]], "37023": [ ["Stallavena", "VR"], @@ -16969,9 +19498,18 @@ class Provider(AddressProvider): ["Badia Calavena", "VR"], ], "37031": [["Cellore", "VR"], ["Illasi", "VR"]], - "37032": [["Monteforte D'Alpone", "VR"], ["Brognoligo", "VR"], ["Costalunga", "VR"]], + "37032": [ + ["Monteforte D'Alpone", "VR"], + ["Brognoligo", "VR"], + ["Costalunga", "VR"], + ], "37035": [["San Giovanni Ilarione", "VR"]], - "37036": [["Ferrazze", "VR"], ["Marcellise", "VR"], ["San Martino Buon Albergo", "VR"], ["Mambrotta", "VR"]], + "37036": [ + ["Ferrazze", "VR"], + ["Marcellise", "VR"], + ["San Martino Buon Albergo", "VR"], + ["Mambrotta", "VR"], + ], "37038": [["Soave", "VR"], ["Castelletto", "VR"]], "37039": [["Tregnago", "VR"], ["Cogollo", "VR"], ["Centro", "VR"]], "37040": [ @@ -16995,10 +19533,20 @@ class Provider(AddressProvider): ["Gazzolo", "VR"], ["Orti", "VR"], ], - "37041": [["Presina", "VR"], ["Albaredo D'Adige", "VR"], ["Michellorie", "VR"], ["Coriano Veronese", "VR"]], + "37041": [ + ["Presina", "VR"], + ["Albaredo D'Adige", "VR"], + ["Michellorie", "VR"], + ["Coriano Veronese", "VR"], + ], "37042": [["Caldiero", "VR"], ["Caldierino", "VR"]], "37043": [["Castagnaro", "VR"], ["Mena'", "VR"], ["Mena' Vallestrema", "VR"]], - "37044": [["Cologna Veneta", "VR"], ["San Sebastiano", "VR"], ["Sule'", "VR"], ["Baldaria", "VR"]], + "37044": [ + ["Cologna Veneta", "VR"], + ["San Sebastiano", "VR"], + ["Sule'", "VR"], + ["Baldaria", "VR"], + ], "37045": [ ["San Pietro Di Legnago", "VR"], ["Casette", "VR"], @@ -17008,8 +19556,17 @@ class Provider(AddressProvider): ["Terranegra", "VR"], ], "37046": [["Minerbe", "VR"]], - "37047": [["Locara", "VR"], ["San Bonifacio", "VR"], ["Prova", "VR"], ["Villabella", "VR"]], - "37049": [["Spinimbecco", "VR"], ["Carpi Di Villa Bartolomea", "VR"], ["Villa Bartolomea", "VR"]], + "37047": [ + ["Locara", "VR"], + ["San Bonifacio", "VR"], + ["Prova", "VR"], + ["Villabella", "VR"], + ], + "37049": [ + ["Spinimbecco", "VR"], + ["Carpi Di Villa Bartolomea", "VR"], + ["Villa Bartolomea", "VR"], + ], "37050": [ ["Belfiore", "VR"], ["Concamarise", "VR"], @@ -17030,8 +19587,18 @@ class Provider(AddressProvider): "37053": [["Cherubine", "VR"], ["Asparetto", "VR"], ["Cerea", "VR"]], "37054": [["Nogara", "VR"]], "37055": [["Tombazosana", "VR"], ["Albaro", "VR"], ["Ronco All'Adige", "VR"]], - "37056": [["Crosarol", "VR"], ["Valmorsel", "VR"], ["Salizzole", "VR"], ["Bionde", "VR"], ["Engazza'", "VR"]], - "37057": [["Raldon", "VR"], ["San Giovanni Lupatoto", "VR"], ["Pozzo Camacici", "VR"]], + "37056": [ + ["Crosarol", "VR"], + ["Valmorsel", "VR"], + ["Salizzole", "VR"], + ["Bionde", "VR"], + ["Engazza'", "VR"], + ], + "37057": [ + ["Raldon", "VR"], + ["San Giovanni Lupatoto", "VR"], + ["Pozzo Camacici", "VR"], + ], "37058": [["Sanguinetto", "VR"]], "37059": [ ["Zevio", "VR"], @@ -17068,9 +19635,17 @@ class Provider(AddressProvider): ["Gazzo Veronese", "VR"], ], "37062": [["Dossobuono", "VR"], ["Alpo", "VR"]], - "37063": [["Pellegrina", "VR"], ["Tarmassia", "VR"], ["Isola Della Scala", "VR"]], + "37063": [ + ["Pellegrina", "VR"], + ["Tarmassia", "VR"], + ["Isola Della Scala", "VR"], + ], "37064": [["Povegliano Veronese", "VR"]], - "37066": [["Custoza", "VR"], ["Sommacampagna", "VR"], ["Caselle Di Sommacampagna", "VR"]], + "37066": [ + ["Custoza", "VR"], + ["Sommacampagna", "VR"], + ["Caselle Di Sommacampagna", "VR"], + ], "37067": [["Salionze", "VR"], ["Valeggio Sul Mincio", "VR"]], "37068": [["Forette", "VR"], ["Vigasio", "VR"], ["Isolalta", "VR"]], "37069": [ diff --git a/faker/providers/address/ne_NP/__init__.py b/faker/providers/address/ne_NP/__init__.py index 206b40c63b..3149d38e0f 100644 --- a/faker/providers/address/ne_NP/__init__.py +++ b/faker/providers/address/ne_NP/__init__.py @@ -9,7 +9,9 @@ class Provider(AddressProvider): # http://www.nepalpost.gov.np/index.php/postal-codes-of-nepal postcode_formats = ("#####",) - address_formats = ("{{street_name}} {{building_prefix}} {{building_number}} \n{{city}}\n{{district}} {{postcode}}",) + address_formats = ( + "{{street_name}} {{building_prefix}} {{building_number}} \n{{city}}\n{{district}} {{postcode}}", + ) street_suffixes = ( "मार्ग", diff --git a/faker/providers/address/no_NO/__init__.py b/faker/providers/address/no_NO/__init__.py index 170cba5f52..10dc8f5098 100644 --- a/faker/providers/address/no_NO/__init__.py +++ b/faker/providers/address/no_NO/__init__.py @@ -105,7 +105,9 @@ class Provider(AddressProvider): def building_number(self) -> str: suffix: str = self.random_element(self.building_number_suffixes) - return self.numerify(self.random_element(self.building_number_formats)).replace("?", suffix) + return self.numerify(self.random_element(self.building_number_formats)).replace( + "?", suffix + ) def city_suffix(self) -> str: return self.random_element(self.city_suffixes) diff --git a/faker/providers/address/pl_PL/__init__.py b/faker/providers/address/pl_PL/__init__.py index 84ac931aa0..8bdc16d80e 100644 --- a/faker/providers/address/pl_PL/__init__.py +++ b/faker/providers/address/pl_PL/__init__.py @@ -679,7 +679,10 @@ def postcode(self) -> str: """ :example: '62-200' """ - return "%02d-%03d" % (self.generator.random.randint(1, 99), self.generator.random.randint(1, 999)) + return "%02d-%03d" % ( + self.generator.random.randint(1, 99), + self.generator.random.randint(1, 999), + ) def zipcode(self) -> str: """ diff --git a/faker/providers/address/pt_BR/__init__.py b/faker/providers/address/pt_BR/__init__.py index 69ca1ebeb4..2c66618772 100644 --- a/faker/providers/address/pt_BR/__init__.py +++ b/faker/providers/address/pt_BR/__init__.py @@ -98,7 +98,9 @@ class Provider(AddressProvider): "{{street_name}}, {{building_number}}", ) - address_formats = ("{{street_address}}\n{{bairro}}\n{{postcode}} {{city}} / {{estado_sigla}}",) + address_formats = ( + "{{street_address}}\n{{bairro}}\n{{postcode}} {{city}} / {{estado_sigla}}", + ) building_number_formats = ("%", "%#", "%#", "%#", "%##") diff --git a/faker/providers/address/ru_RU/__init__.py b/faker/providers/address/ru_RU/__init__.py index 9b3ac39c11..20076ebb9e 100644 --- a/faker/providers/address/ru_RU/__init__.py +++ b/faker/providers/address/ru_RU/__init__.py @@ -1580,7 +1580,10 @@ def street_name(self) -> str: street = self.street_title() stem = street[:-2] result = street - if street not in self.street_titles_noflex and suffix not in self.street_suffixes_fem: + if ( + street not in self.street_titles_noflex + and suffix not in self.street_suffixes_fem + ): if suffix in self.street_suffixes_masc: if street in self.street_titles_irregular_masc.keys(): result = self.street_titles_irregular_masc[street] diff --git a/faker/providers/address/vi_VN/__init__.py b/faker/providers/address/vi_VN/__init__.py index 64bade2fcf..0108cc5e45 100644 --- a/faker/providers/address/vi_VN/__init__.py +++ b/faker/providers/address/vi_VN/__init__.py @@ -291,7 +291,8 @@ def postcode_in_state(self, state_abbr: Optional[str] = None) -> str: if state_abbr in self.provinces_abbr: postcode = str( self.generator.random.randint( - self.provinces_postcode[state_abbr][0], self.provinces_postcode[state_abbr][1] + self.provinces_postcode[state_abbr][0], + self.provinces_postcode[state_abbr][1], ) ) diff --git a/faker/providers/address/zh_CN/__init__.py b/faker/providers/address/zh_CN/__init__.py index 726aeea24c..690df363bf 100644 --- a/faker/providers/address/zh_CN/__init__.py +++ b/faker/providers/address/zh_CN/__init__.py @@ -17,7 +17,9 @@ class Provider(AddressProvider): ) street_address_formats = ("{{street_name}}{{building_number}}",) - address_formats = ("{{province}}{{city}}{{district}}{{street_address}} {{postcode}}",) + address_formats = ( + "{{province}}{{city}}{{district}}{{street_address}} {{postcode}}", + ) provinces = ( "北京市", diff --git a/faker/providers/address/zh_TW/__init__.py b/faker/providers/address/zh_TW/__init__.py index 7f2decb3cd..b63dc9fc5c 100644 --- a/faker/providers/address/zh_TW/__init__.py +++ b/faker/providers/address/zh_TW/__init__.py @@ -6,7 +6,9 @@ class Provider(AddressProvider): building_number_formats = ("%號", "%#號", "%##號") postcode_formats = ("%####", "%##") section_formats = ("", "", "", "", "%段") - street_address_formats = ("{{street_name}}{{street_name_suffix}}{{section_number}}{{building_number}}",) + street_address_formats = ( + "{{street_name}}{{street_name_suffix}}{{section_number}}{{building_number}}", + ) address_formats = ("{{postcode}} {{city}}{{street_address}}{{secondary_address}}",) secondary_address_formats = ("#樓", "之#") diff --git a/faker/providers/automotive/__init__.py b/faker/providers/automotive/__init__.py index cb87a7f9cc..75fa3aa887 100644 --- a/faker/providers/automotive/__init__.py +++ b/faker/providers/automotive/__init__.py @@ -56,7 +56,9 @@ def vin(self) -> str: vin_chars = "1234567890ABCDEFGHJKLMNPRSTUVWXYZ" # I, O, Q are restricted front_part = self.bothify("????????", letters=vin_chars) rear_part = self.bothify("????####", letters=vin_chars) - front_part_weight = calculate_vin_str_weight(front_part, [8, 7, 6, 5, 4, 3, 2, 10]) + front_part_weight = calculate_vin_str_weight( + front_part, [8, 7, 6, 5, 4, 3, 2, 10] + ) rear_part_weight = calculate_vin_str_weight(rear_part, [9, 8, 7, 6, 5, 4, 3, 2]) checksum = (front_part_weight + rear_part_weight) % 11 checksum_char = "X" if checksum == 10 else str(checksum) diff --git a/faker/providers/automotive/az_AZ/__init__.py b/faker/providers/automotive/az_AZ/__init__.py index a866f36edc..e44cbc4067 100644 --- a/faker/providers/automotive/az_AZ/__init__.py +++ b/faker/providers/automotive/az_AZ/__init__.py @@ -92,6 +92,8 @@ def license_plate(self) -> str: lambda x: self.random_element(self.ascii_uppercase_azerbaijan), self.random_element(self.license_formats), ) - temp = temp.replace("##", self.random_element(self.license_plate_initial_numbers), 1) + temp = temp.replace( + "##", self.random_element(self.license_plate_initial_numbers), 1 + ) # temp = temp.format(self.random_element(range(1, 999))) return self.numerify(temp) diff --git a/faker/providers/automotive/bn_BD/__init__.py b/faker/providers/automotive/bn_BD/__init__.py index 807b1b611c..76da7d69fb 100644 --- a/faker/providers/automotive/bn_BD/__init__.py +++ b/faker/providers/automotive/bn_BD/__init__.py @@ -242,7 +242,9 @@ def vehicle_serial_number(self) -> str: Generate a 4 digits vehicle serial number. :example: '৫৪৩২' """ - return translate_to_bengali_digits(self.numerify(self.random_element(self.vehicle_serial_number_formats))) + return translate_to_bengali_digits( + self.numerify(self.random_element(self.vehicle_serial_number_formats)) + ) def license_plate(self) -> str: """ diff --git a/faker/providers/automotive/de_AT/__init__.py b/faker/providers/automotive/de_AT/__init__.py index 184bc148ee..18e38e8597 100644 --- a/faker/providers/automotive/de_AT/__init__.py +++ b/faker/providers/automotive/de_AT/__init__.py @@ -148,7 +148,14 @@ class Provider(AutomotiveProvider): "ZW", ) - license_plate_suffix_for_one_starting_letter = ("-%# ???", "-%## ???", "-%## ??", "-%### ??", "-%### ?", "-%#### ?") + license_plate_suffix_for_one_starting_letter = ( + "-%# ???", + "-%## ???", + "-%## ??", + "-%### ??", + "-%### ?", + "-%#### ?", + ) license_plate_suffix_for_two_starting_letters = ( "-% ???", diff --git a/faker/providers/automotive/es_AR/__init__.py b/faker/providers/automotive/es_AR/__init__.py index 3177e64dc1..6255d33fb3 100644 --- a/faker/providers/automotive/es_AR/__init__.py +++ b/faker/providers/automotive/es_AR/__init__.py @@ -67,7 +67,9 @@ def license_plate_old(self) -> str: """Generate an old format license plate. Since 1995 to 2016""" format = "??###" - first_letter: str = self.random_element(self.license_plate_old_format_first_letter) + first_letter: str = self.random_element( + self.license_plate_old_format_first_letter + ) return self.bothify(first_letter + format).upper() @@ -84,4 +86,6 @@ def license_plate_mercosur(self) -> str: def license_plate(self) -> str: """Generate a license plate.""" - return self.numerify(self.generator.parse(self.random_element(self.license_formats))) + return self.numerify( + self.generator.parse(self.random_element(self.license_formats)) + ) diff --git a/faker/providers/automotive/es_CL/__init__.py b/faker/providers/automotive/es_CL/__init__.py index 713f50d3c4..8537a9445f 100644 --- a/faker/providers/automotive/es_CL/__init__.py +++ b/faker/providers/automotive/es_CL/__init__.py @@ -44,7 +44,11 @@ def license_plate_old(self) -> str: def license_plate_new(self) -> str: format = "????-##" - temp = re.sub(r"\?", lambda x: self.random_element(self.license_plate_new_format_letters), format) + temp = re.sub( + r"\?", + lambda x: self.random_element(self.license_plate_new_format_letters), + format, + ) return self.numerify(temp) def license_plate_police(self) -> str: @@ -61,4 +65,6 @@ def license_plate_diplomatic(self) -> str: def license_plate(self) -> str: """Generate a license plate.""" - return self.numerify(self.generator.parse(self.random_element(self.license_formats))) + return self.numerify( + self.generator.parse(self.random_element(self.license_formats)) + ) diff --git a/faker/providers/automotive/es_ES/__init__.py b/faker/providers/automotive/es_ES/__init__.py index 3bb7969ccc..d9ef30a31c 100644 --- a/faker/providers/automotive/es_ES/__init__.py +++ b/faker/providers/automotive/es_ES/__init__.py @@ -105,7 +105,11 @@ def license_plate_by_province(self, province_prefix: Optional[str] = None) -> st as the prefix regardless of validity. If ``None``, then a valid prefix will be selected at random. """ - province_prefix = province_prefix if province_prefix is not None else self.random_element(self.province_prefix) + province_prefix = ( + province_prefix + if province_prefix is not None + else self.random_element(self.province_prefix) + ) temp = re.sub( r"\?", lambda x: self.random_element(self.license_plate_old_format_suffix_letters), diff --git a/faker/providers/automotive/ja_JP/__init__.py b/faker/providers/automotive/ja_JP/__init__.py index a408cbab46..dab678bf25 100644 --- a/faker/providers/automotive/ja_JP/__init__.py +++ b/faker/providers/automotive/ja_JP/__init__.py @@ -82,7 +82,9 @@ class Provider(AutomotiveProvider): MIDDLE_DOT = "・" DELIMITER = "-" - license_plate_formats = ("{{area_name}} {{classification_number}} {{kana}} {{serial_number}}",) + license_plate_formats = ( + "{{area_name}} {{classification_number}} {{kana}} {{serial_number}}", + ) def license_plate(self) -> str: """Generate a Japanese license plate.""" diff --git a/faker/providers/automotive/nl_NL/__init__.py b/faker/providers/automotive/nl_NL/__init__.py index 0dbab37f2d..7ac36a7d64 100644 --- a/faker/providers/automotive/nl_NL/__init__.py +++ b/faker/providers/automotive/nl_NL/__init__.py @@ -63,7 +63,9 @@ def license_plate_car(self) -> str: ) # Replace @ with license_plate_prefix_letters_format_8 - temp = re.sub(r"\@", self.random_element(self.license_plate_prefix_letters_format_8), temp) + temp = re.sub( + r"\@", self.random_element(self.license_plate_prefix_letters_format_8), temp + ) return self.bothify(temp, letters=string.ascii_uppercase) diff --git a/faker/providers/automotive/pl_PL/__init__.py b/faker/providers/automotive/pl_PL/__init__.py index 0ecd733a5f..1b585e7e33 100644 --- a/faker/providers/automotive/pl_PL/__init__.py +++ b/faker/providers/automotive/pl_PL/__init__.py @@ -36,4 +36,7 @@ def license_plate_regex_formats(self) -> List[str]: should not be part of the public API. User should refrain from using this method. """ - return [plate.replace("?", "[A-Z]").replace("#", "[0-9]") for plate in self.license_formats] + return [ + plate.replace("?", "[A-Z]").replace("#", "[0-9]") + for plate in self.license_formats + ] diff --git a/faker/providers/automotive/uk_UA/__init__.py b/faker/providers/automotive/uk_UA/__init__.py index 19938fcdd5..d46b769dd4 100644 --- a/faker/providers/automotive/uk_UA/__init__.py +++ b/faker/providers/automotive/uk_UA/__init__.py @@ -197,9 +197,26 @@ class Provider(AutomotiveProvider): "TZ", ) - vehicle_categories = ("A1", "A", "B1", "B", "C1", "C", "D1", "D", "BE", "C1E", "CE", "D1E", "DE", "T") + vehicle_categories = ( + "A1", + "A", + "B1", + "B", + "C1", + "C", + "D1", + "D", + "BE", + "C1E", + "CE", + "D1E", + "DE", + "T", + ) - def __get_random_region_code(self, region_name: Optional[str] = None) -> Tuple[str, str]: + def __get_random_region_code( + self, region_name: Optional[str] = None + ) -> Tuple[str, str]: try: if region_name is None: region_name, _ = random.choice(list(self.license_region_data.items())) @@ -210,7 +227,9 @@ def __get_random_region_code(self, region_name: Optional[str] = None) -> Tuple[s region_names = ", ".join(self.license_region_data.keys()) raise KeyError(f"Keys name must be only {region_names}") - def license_plate(self, region_name: Optional[str] = None, temporary_plate: bool = False) -> str: + def license_plate( + self, region_name: Optional[str] = None, temporary_plate: bool = False + ) -> str: """Generate a license plate. - If ``region_name`` is ``None`` (default), its value will be set to a random. diff --git a/faker/providers/automotive/zh_CN/__init__.py b/faker/providers/automotive/zh_CN/__init__.py index 1982959fa1..8c2bdd3f57 100644 --- a/faker/providers/automotive/zh_CN/__init__.py +++ b/faker/providers/automotive/zh_CN/__init__.py @@ -43,5 +43,9 @@ class Provider(AutomotiveProvider): def license_plate(self) -> str: """Generate a license plate.""" - pattern: str = str(self.random_element(self.province_code)) + self.random_uppercase_letter() + "-#####" + pattern: str = ( + str(self.random_element(self.province_code)) + + self.random_uppercase_letter() + + "-#####" + ) return self.numerify(self.generator.parse(pattern)) diff --git a/faker/providers/bank/__init__.py b/faker/providers/bank/__init__.py index fdb49a3247..61260d9fd2 100644 --- a/faker/providers/bank/__init__.py +++ b/faker/providers/bank/__init__.py @@ -60,7 +60,9 @@ def bank(self) -> str: def bban(self) -> str: """Generate a Basic Bank Account Number (BBAN).""" - temp = re.sub(r"\?", lambda x: self.random_element(ascii_uppercase), self.bban_format) + temp = re.sub( + r"\?", lambda x: self.random_element(ascii_uppercase), self.bban_format + ) return self.numerify(temp) def iban(self) -> str: @@ -150,7 +152,9 @@ def swift( if use_dataset and hasattr(self, "swift_location_codes"): location_code: str = self.random_element(self.swift_location_codes) # type: ignore[attr-defined] else: - location_code = self.lexify("??", letters=string.ascii_uppercase + string.digits) + location_code = self.lexify( + "??", letters=string.ascii_uppercase + string.digits + ) if length == 8: return bank_code + self.country_code + location_code @@ -160,6 +164,8 @@ def swift( elif use_dataset and hasattr(self, "swift_branch_codes"): branch_code = self.random_element(self.swift_branch_codes) # type: ignore[attr-defined] else: - branch_code = self.lexify("???", letters=string.ascii_uppercase + string.digits) + branch_code = self.lexify( + "???", letters=string.ascii_uppercase + string.digits + ) return bank_code + self.country_code + location_code + branch_code diff --git a/faker/providers/bank/bn_BD/__init__.py b/faker/providers/bank/bn_BD/__init__.py index d73e733905..375135c201 100644 --- a/faker/providers/bank/bn_BD/__init__.py +++ b/faker/providers/bank/bn_BD/__init__.py @@ -77,7 +77,16 @@ def swift8(self, use_dataset: bool = True) -> str: return super(self.__class__, self).swift8(use_dataset=use_dataset) def swift11(self, primary: bool = False, use_dataset: bool = True) -> str: - return super(self.__class__, self).swift11(primary=primary, use_dataset=use_dataset) + return super(self.__class__, self).swift11( + primary=primary, use_dataset=use_dataset + ) - def swift(self, length: Optional[int] = None, primary: bool = False, use_dataset: bool = True) -> str: - return super(self.__class__, self).swift(length=length, primary=primary, use_dataset=use_dataset) + def swift( + self, + length: Optional[int] = None, + primary: bool = False, + use_dataset: bool = True, + ) -> str: + return super(self.__class__, self).swift( + length=length, primary=primary, use_dataset=use_dataset + ) diff --git a/faker/providers/bank/nl_BE/__init__.py b/faker/providers/bank/nl_BE/__init__.py index 636b2bf534..52f22d9867 100644 --- a/faker/providers/bank/nl_BE/__init__.py +++ b/faker/providers/bank/nl_BE/__init__.py @@ -87,6 +87,8 @@ def _calculate_mod97(self, account_number: str) -> str: def _calculate_iban_check_digits(self, bban: str) -> str: """Calculate the IBAN check digits using mod 97 algorithm.""" raw_iban = f"{bban}{self.country_code}00" - numeric_iban = "".join(str(ord(char) - 55) if char.isalpha() else char for char in raw_iban) + numeric_iban = "".join( + str(ord(char) - 55) if char.isalpha() else char for char in raw_iban + ) check_digits = 98 - (int(numeric_iban) % 97) return str(check_digits).zfill(2) diff --git a/faker/providers/bank/ru_RU/__init__.py b/faker/providers/bank/ru_RU/__init__.py index c5c6788a51..512958a45f 100644 --- a/faker/providers/bank/ru_RU/__init__.py +++ b/faker/providers/bank/ru_RU/__init__.py @@ -728,8 +728,12 @@ def bic(self) -> str: See https://ru.wikipedia.org/wiki/Банковский_идентификационный_код. """ region: str = self.random_element(self.region_codes) - department_code: str = self.numerify(self.random_element(self.department_code_formats)) - credit_organization_code: str = self.numerify(self.random_element(self.credit_organization_code_formats)) + department_code: str = self.numerify( + self.random_element(self.department_code_formats) + ) + credit_organization_code: str = self.numerify( + self.random_element(self.credit_organization_code_formats) + ) return "04" + region + department_code + credit_organization_code def correspondent_account(self) -> str: @@ -739,7 +743,9 @@ def correspondent_account(self) -> str: operations between financial institutions. See https://ru.wikipedia.org/wiki/Корреспондентский_счёт. """ - credit_organization_code = self.numerify(self.random_element(self.credit_organization_code_formats)) + credit_organization_code = self.numerify( + self.random_element(self.credit_organization_code_formats) + ) return "301" + self.numerify("#" * 14) + credit_organization_code def checking_account(self) -> str: diff --git a/faker/providers/barcode/en_US/__init__.py b/faker/providers/barcode/en_US/__init__.py index e009dfc6c6..045e164710 100644 --- a/faker/providers/barcode/en_US/__init__.py +++ b/faker/providers/barcode/en_US/__init__.py @@ -45,7 +45,9 @@ class Provider(BarcodeProvider): r"(?P\d)$", # and finally a check digit. ) - def ean13(self, prefixes: PrefixType = (), leading_zero: Optional[bool] = None) -> str: + def ean13( + self, prefixes: PrefixType = (), leading_zero: Optional[bool] = None + ) -> str: """Generate an EAN-13 barcode. If ``leading_zero`` is ``True``, the leftmost digit of the barcode will @@ -97,7 +99,9 @@ def _convert_upc_a2e(self, upc_a: str) -> str: m3 = self.upc_ae_pattern3.match(upc_a) if not any([m1, m2, m3]): raise ValueError("`upc_a` has an invalid value") - upc_e_template = "{number_system_digit}{mfr_code}{product_code}{extra}{check_digit}" + upc_e_template = ( + "{number_system_digit}{mfr_code}{product_code}{extra}{check_digit}" + ) if m1: upc_e = upc_e_template.format(**m1.groupdict()) elif m2: @@ -111,7 +115,9 @@ def _convert_upc_a2e(self, upc_a: str) -> str: upc_e = upc_e_template.format(**groupdict) return upc_e - def _upc_ae(self, base: Optional[str] = None, number_system_digit: Optional[int] = None) -> str: + def _upc_ae( + self, base: Optional[str] = None, number_system_digit: Optional[int] = None + ) -> str: """Create a 12-digit UPC-A barcode that can be converted to UPC-E. The expected value of ``base`` is a 6-digit string. If any other value diff --git a/faker/providers/color/color.py b/faker/providers/color/color.py index 756942bfb0..acc1ac6a60 100644 --- a/faker/providers/color/color.py +++ b/faker/providers/color/color.py @@ -136,7 +136,9 @@ class RandomColor: :meth:`color() ` method. """ - def __init__(self, generator: Optional["Generator"] = None, seed: Optional[SeedType] = None) -> None: + def __init__( + self, generator: Optional["Generator"] = None, seed: Optional[SeedType] = None + ) -> None: self.colormap = COLOR_MAP # Option to specify a seed was not removed so this class @@ -217,7 +219,9 @@ def pick_hue(self, hue: Optional[HueType]) -> int: return hue_ - def pick_saturation(self, hue: int, hue_name: Optional[HueType], luminosity: Optional[str]) -> int: + def pick_saturation( + self, hue: int, hue_name: Optional[HueType], luminosity: Optional[str] + ) -> int: """Return a numerical saturation value.""" if luminosity is None: luminosity = "" @@ -297,7 +301,9 @@ def _validate_color_input(self, color_input: HueType) -> Tuple[int, int]: or len(color_input) != 2 or any(not isinstance(c, (float, int)) for c in color_input) ): - raise TypeError("Hue must be a valid string, numeric type, or a tuple/list of 2 numeric types.") + raise TypeError( + "Hue must be a valid string, numeric type, or a tuple/list of 2 numeric types." + ) return color_input[0], color_input[1] diff --git a/faker/providers/color/de_CH/__init__.py b/faker/providers/color/de_CH/__init__.py index acbcdda37e..b38e6cd1ec 100644 --- a/faker/providers/color/de_CH/__init__.py +++ b/faker/providers/color/de_CH/__init__.py @@ -7,5 +7,6 @@ class Provider(BaseProvider): all_colors: OrderedDictType[str, str] = OrderedDict( - (color_name.replace("ß", "ss"), color_hexcode) for color_name, color_hexcode in BaseProvider.all_colors.items() + (color_name.replace("ß", "ss"), color_hexcode) + for color_name, color_hexcode in BaseProvider.all_colors.items() ) diff --git a/faker/providers/company/__init__.py b/faker/providers/company/__init__.py index cadb4a204f..33e1d62988 100644 --- a/faker/providers/company/__init__.py +++ b/faker/providers/company/__init__.py @@ -12,7 +12,14 @@ class Provider(BaseProvider): "{{last_name}}, {{last_name}} and {{last_name}}", ) - company_suffixes: ElementsType[str] = ("Inc", "and Sons", "LLC", "Group", "PLC", "Ltd") + company_suffixes: ElementsType[str] = ( + "Inc", + "and Sons", + "LLC", + "Group", + "PLC", + "Ltd", + ) catch_phrase_words: Tuple[ElementsType[str], ...] = ( ( @@ -522,7 +529,9 @@ def catch_phrase(self) -> str: """ :example: 'Robust full-range hub' """ - return " ".join([self.random_element(word_list) for word_list in self.catch_phrase_words]) + return " ".join( + [self.random_element(word_list) for word_list in self.catch_phrase_words] + ) def bs(self) -> str: """ diff --git a/faker/providers/company/en_PH/__init__.py b/faker/providers/company/en_PH/__init__.py index c92ddd5ddb..075acc4a8a 100644 --- a/faker/providers/company/en_PH/__init__.py +++ b/faker/providers/company/en_PH/__init__.py @@ -137,7 +137,11 @@ def random_company_adjective(self) -> str: return self.random_element(self.company_adjectives) def random_company_noun_chain(self) -> str: - return " ".join(self.random_elements(self.company_nouns, length=self.random_int(1, 2), unique=True)) + return " ".join( + self.random_elements( + self.company_nouns, length=self.random_int(1, 2), unique=True + ) + ) def random_company_product(self) -> str: return self.random_element(self.company_products) diff --git a/faker/providers/company/fil_PH/__init__.py b/faker/providers/company/fil_PH/__init__.py index 01319b35bf..7080110d04 100644 --- a/faker/providers/company/fil_PH/__init__.py +++ b/faker/providers/company/fil_PH/__init__.py @@ -81,7 +81,9 @@ def random_good_service_adjective(self) -> str: return self.random_element(self.good_service_adjectives) def random_good_service_adjective_chain(self) -> str: - adjectives: Sequence[str] = self.random_elements(self.good_service_adjectives, length=2, unique=True) + adjectives: Sequence[str] = self.random_elements( + self.good_service_adjectives, length=2, unique=True + ) return " at ".join(adjectives) def random_object_of_concern(self) -> str: diff --git a/faker/providers/company/fr_FR/__init__.py b/faker/providers/company/fr_FR/__init__.py index 60bc0043aa..abb1fbf168 100644 --- a/faker/providers/company/fr_FR/__init__.py +++ b/faker/providers/company/fr_FR/__init__.py @@ -13,7 +13,9 @@ class Provider(CompanyProvider): "{{last_name}}", ) - catch_phrase_formats = ("{{catch_phrase_noun}} {{catch_phrase_verb}} {{catch_phrase_attribute}}",) + catch_phrase_formats = ( + "{{catch_phrase_noun}} {{catch_phrase_verb}} {{catch_phrase_attribute}}", + ) nouns = ( "la sécurité", @@ -419,4 +421,6 @@ def ape_code(self, version: Optional[str] = "naf-2003") -> str: return self.random_element(self.ape_codes_naf_2003) if version == "naf-2025": return self.random_element(self.ape_codes_naf_2025) - raise ValueError("Unsupported NAF version. Set version=None to a truly random number.") + raise ValueError( + "Unsupported NAF version. Set version=None to a truly random number." + ) diff --git a/faker/providers/company/pt_BR/__init__.py b/faker/providers/company/pt_BR/__init__.py index fb07207776..68294bb662 100644 --- a/faker/providers/company/pt_BR/__init__.py +++ b/faker/providers/company/pt_BR/__init__.py @@ -28,7 +28,9 @@ class Provider(CompanyProvider): "{{last_name}}", ) - catch_phrase_formats = ("{{catch_phrase_noun}} {{catch_phrase_verb}} {{catch_phrase_attribute}}",) + catch_phrase_formats = ( + "{{catch_phrase_noun}} {{catch_phrase_verb}} {{catch_phrase_attribute}}", + ) nouns = ( "a segurança", diff --git a/faker/providers/company/ru_RU/__init__.py b/faker/providers/company/ru_RU/__init__.py index ca2a574e60..e8cb92e043 100644 --- a/faker/providers/company/ru_RU/__init__.py +++ b/faker/providers/company/ru_RU/__init__.py @@ -1089,7 +1089,9 @@ def catch_phrase(self) -> str: :example: 'Адаптивный и масштабируемый графический интерфейс' """ noun: str = self.random_element( - self.catch_phrase_nouns_masc + self.catch_phrase_nouns_fem + self.catch_phrase_nouns_neu + self.catch_phrase_nouns_masc + + self.catch_phrase_nouns_fem + + self.catch_phrase_nouns_neu ) adj_first: str = self.random_element(self.catch_phrase_adj[0]) adj_second: str = self.random_element(self.catch_phrase_adj[1]) diff --git a/faker/providers/credit_card/fa_IR/__init__.py b/faker/providers/credit_card/fa_IR/__init__.py index 192a4e8788..d32bd176d6 100644 --- a/faker/providers/credit_card/fa_IR/__init__.py +++ b/faker/providers/credit_card/fa_IR/__init__.py @@ -81,7 +81,9 @@ class Provider(CreditCardProvider): ("tose", CreditCard("توسعه", prefix_tose, 16, security_code="CVV2")), ( "eghtesad_novin", - CreditCard("اقتصاد نوین", prefix_eghtesad_novin, 16, security_code="CVV2"), + CreditCard( + "اقتصاد نوین", prefix_eghtesad_novin, 16, security_code="CVV2" + ), ), ("meli", CreditCard("ملی", prefix_meli, 16, security_code="CVV2")), ( diff --git a/faker/providers/credit_card/uk_UA/__init__.py b/faker/providers/credit_card/uk_UA/__init__.py index 99bc9ebf06..8d950973d5 100644 --- a/faker/providers/credit_card/uk_UA/__init__.py +++ b/faker/providers/credit_card/uk_UA/__init__.py @@ -20,7 +20,10 @@ class Provider(CreditCardProvider): credit_card_types = OrderedDict( ( ("visa", CreditCard("Visa", prefix_visa, security_code="CVV2")), - ("mastercard", CreditCard("Mastercard", prefix_mastercard, security_code="CVC2")), + ( + "mastercard", + CreditCard("Mastercard", prefix_mastercard, security_code="CVC2"), + ), ("prostir", CreditCard("ПРОСТІР", prefix_prostir, security_code="CVC2")), ("maestro", CreditCard("Maestro", prefix_maestro, security_code="CVV")), ) diff --git a/faker/providers/credit_card/zh_CN/__init__.py b/faker/providers/credit_card/zh_CN/__init__.py index 8bde0794de..5c339b8e46 100644 --- a/faker/providers/credit_card/zh_CN/__init__.py +++ b/faker/providers/credit_card/zh_CN/__init__.py @@ -16,7 +16,10 @@ class Provider(CreditCardProvider): ( ("unionpay", CreditCard("UnionPay", prefix_unionpay, security_code="CVN2")), ("visa", CreditCard("Visa", prefix_visa, security_code="CVV2")), - ("mastercard", CreditCard("Mastercard", prefix_mastercard, security_code="CVC2")), + ( + "mastercard", + CreditCard("Mastercard", prefix_mastercard, security_code="CVC2"), + ), ) ) diff --git a/faker/providers/currency/__init__.py b/faker/providers/currency/__init__.py index c101f7ace2..f1052b8fd7 100644 --- a/faker/providers/currency/__init__.py +++ b/faker/providers/currency/__init__.py @@ -390,7 +390,13 @@ class Provider(BaseProvider): "ZWD": "\u0024", } - price_formats: ElementsType[str] = ["#.##", "%#.##", "%##.##", "%,###.##", "%#,###.##"] + price_formats: ElementsType[str] = [ + "#.##", + "%#.##", + "%##.##", + "%,###.##", + "%#,###.##", + ] def currency(self) -> Tuple[str, str]: return self.random_element(self.currencies) @@ -422,4 +428,8 @@ def cryptocurrency_name(self) -> str: def pricetag(self) -> str: currency: Tuple[str, str] = self.random_element(self.currencies) - return currency[0] + "\N{NO-BREAK SPACE}" + self.numerify(self.random_element(self.price_formats)) + return ( + currency[0] + + "\N{NO-BREAK SPACE}" + + self.numerify(self.random_element(self.price_formats)) + ) diff --git a/faker/providers/currency/az_AZ/__init__.py b/faker/providers/currency/az_AZ/__init__.py index 4a4638cb7b..975c2610f2 100644 --- a/faker/providers/currency/az_AZ/__init__.py +++ b/faker/providers/currency/az_AZ/__init__.py @@ -175,4 +175,7 @@ class Provider(CurrencyProvider): price_formats = ["#,##", "%#,##", "%##,##", "%.###,##", "%#.###,##"] def pricetag(self): - return self.numerify(self.random_element(self.price_formats)) + "\N{NO-BREAK SPACE}AZN" + return ( + self.numerify(self.random_element(self.price_formats)) + + "\N{NO-BREAK SPACE}AZN" + ) diff --git a/faker/providers/currency/cs_CZ/__init__.py b/faker/providers/currency/cs_CZ/__init__.py index 5af4f01b81..3440fcca43 100644 --- a/faker/providers/currency/cs_CZ/__init__.py +++ b/faker/providers/currency/cs_CZ/__init__.py @@ -5,4 +5,7 @@ class Provider(CurrencyProvider): price_formats = ["#,#0", "%#,#0", "%##,#0", "%.###,#0", "%#.###,#0"] def pricetag(self) -> str: - return self.numerify(self.random_element(self.price_formats)) + "\N{NO-BREAK SPACE}Kč" + return ( + self.numerify(self.random_element(self.price_formats)) + + "\N{NO-BREAK SPACE}Kč" + ) diff --git a/faker/providers/currency/de_AT/__init__.py b/faker/providers/currency/de_AT/__init__.py index 2a6bccb544..c841610330 100644 --- a/faker/providers/currency/de_AT/__init__.py +++ b/faker/providers/currency/de_AT/__init__.py @@ -5,4 +5,7 @@ class Provider(CurrencyProvider): price_formats = ["#,##", "%#,##", "%##,##", "%.###,##", "%#.###,##"] def pricetag(self) -> str: - return self.numerify(self.random_element(self.price_formats)) + "\N{NO-BREAK SPACE}\N{EURO SIGN}" + return ( + self.numerify(self.random_element(self.price_formats)) + + "\N{NO-BREAK SPACE}\N{EURO SIGN}" + ) diff --git a/faker/providers/currency/de_CH/__init__.py b/faker/providers/currency/de_CH/__init__.py index a453ec6c2f..8a865433bf 100644 --- a/faker/providers/currency/de_CH/__init__.py +++ b/faker/providers/currency/de_CH/__init__.py @@ -3,7 +3,16 @@ class Provider(CurrencyProvider): # source: https://de.wikipedia.org/wiki/Schreibweise_von_Zahlen#Dezimaltrennzeichen_2 - price_formats = ["\N{FIGURE DASH}.##", "%.##", "%#.##", "%##.##", "% ###.##", "%# ###.##"] + price_formats = [ + "\N{FIGURE DASH}.##", + "%.##", + "%#.##", + "%##.##", + "% ###.##", + "%# ###.##", + ] def pricetag(self): - return "Fr.\N{NO-BREAK SPACE}" + self.numerify(self.random_element(self.price_formats)) + return "Fr.\N{NO-BREAK SPACE}" + self.numerify( + self.random_element(self.price_formats) + ) diff --git a/faker/providers/currency/de_DE/__init__.py b/faker/providers/currency/de_DE/__init__.py index a49621b8bf..4efd29babd 100644 --- a/faker/providers/currency/de_DE/__init__.py +++ b/faker/providers/currency/de_DE/__init__.py @@ -5,4 +5,7 @@ class Provider(CurrencyProvider): price_formats = ["#,##", "%#,##", "%##,##", "%.###,##", "%#.###,##"] def pricetag(self): - return self.numerify(self.random_element(self.price_formats)) + "\N{NO-BREAK SPACE}\N{EURO SIGN}" + return ( + self.numerify(self.random_element(self.price_formats)) + + "\N{NO-BREAK SPACE}\N{EURO SIGN}" + ) diff --git a/faker/providers/currency/el_GR/__init__.py b/faker/providers/currency/el_GR/__init__.py index a24bf25028..b52082e17e 100644 --- a/faker/providers/currency/el_GR/__init__.py +++ b/faker/providers/currency/el_GR/__init__.py @@ -155,4 +155,7 @@ class Provider(CurrencyProvider): price_formats = ["#,##", "%#,##", "%##,##", "%.###,##", "%#.###,##"] def pricetag(self) -> str: - return self.numerify(self.random_element(self.price_formats)) + "\N{NO-BREAK SPACE}\N{EURO SIGN}" + return ( + self.numerify(self.random_element(self.price_formats)) + + "\N{NO-BREAK SPACE}\N{EURO SIGN}" + ) diff --git a/faker/providers/currency/en_AU/__init__.py b/faker/providers/currency/en_AU/__init__.py index 6735f0a28e..7e32450f6d 100644 --- a/faker/providers/currency/en_AU/__init__.py +++ b/faker/providers/currency/en_AU/__init__.py @@ -5,4 +5,6 @@ class Provider(CurrencyProvider): price_formats = ["#.##", "%#.##", "%##.##", "%,###.##", "%#,###.##"] def pricetag(self) -> str: - return "$\N{NO-BREAK SPACE}" + self.numerify(self.random_element(self.price_formats)) + return "$\N{NO-BREAK SPACE}" + self.numerify( + self.random_element(self.price_formats) + ) diff --git a/faker/providers/currency/en_CA/__init__.py b/faker/providers/currency/en_CA/__init__.py index 3171b0aa93..5c97e69ee2 100644 --- a/faker/providers/currency/en_CA/__init__.py +++ b/faker/providers/currency/en_CA/__init__.py @@ -5,4 +5,6 @@ class Provider(CurrencyProvider): price_formats = ["#.##", "%#.##", "%##.##", "%,###.##", "%#,###.##"] def pricetag(self): - return "$\N{NO-BREAK SPACE}" + self.numerify(self.random_element(self.price_formats)) + return "$\N{NO-BREAK SPACE}" + self.numerify( + self.random_element(self.price_formats) + ) diff --git a/faker/providers/currency/es_AR/__init__.py b/faker/providers/currency/es_AR/__init__.py index 8ca962bdc8..44a07b9571 100644 --- a/faker/providers/currency/es_AR/__init__.py +++ b/faker/providers/currency/es_AR/__init__.py @@ -2,7 +2,15 @@ class Provider(CurrencyProvider): - price_formats = ["%##", "%.###", "%#.##0", "%##.##0", "%##.##0", "%.###.##0", "%#,##"] + price_formats = [ + "%##", + "%.###", + "%#.##0", + "%##.##0", + "%##.##0", + "%.###.##0", + "%#,##", + ] def pricetag(self) -> str: return "$" + self.numerify(self.random_element(self.price_formats)) diff --git a/faker/providers/currency/es_CL/__init__.py b/faker/providers/currency/es_CL/__init__.py index 084b74462e..62a8b05d79 100644 --- a/faker/providers/currency/es_CL/__init__.py +++ b/faker/providers/currency/es_CL/__init__.py @@ -5,4 +5,6 @@ class Provider(CurrencyProvider): price_formats = ["%##", "%.###", "%#.##0", "%##.##0", "%##.##0", "%.###.##0"] def pricetag(self) -> str: - return "\N{DOLLAR SIGN}\N{NO-BREAK SPACE}" + self.numerify(self.random_element(self.price_formats)) + return "\N{DOLLAR SIGN}\N{NO-BREAK SPACE}" + self.numerify( + self.random_element(self.price_formats) + ) diff --git a/faker/providers/currency/es_ES/__init__.py b/faker/providers/currency/es_ES/__init__.py index 5781a991d7..ce87589362 100644 --- a/faker/providers/currency/es_ES/__init__.py +++ b/faker/providers/currency/es_ES/__init__.py @@ -5,4 +5,7 @@ class Provider(CurrencyProvider): price_formats = ["#,##", "%#,##", "%##,##", "%.###,##", "%#.###,##"] def pricetag(self) -> str: - return self.numerify(self.random_element(self.price_formats)) + "\N{NO-BREAK SPACE}\N{EURO SIGN}" + return ( + self.numerify(self.random_element(self.price_formats)) + + "\N{NO-BREAK SPACE}\N{EURO SIGN}" + ) diff --git a/faker/providers/currency/fa_IR/__init__.py b/faker/providers/currency/fa_IR/__init__.py index 95de6dae9b..ae47598117 100644 --- a/faker/providers/currency/fa_IR/__init__.py +++ b/faker/providers/currency/fa_IR/__init__.py @@ -2,7 +2,12 @@ class Provider(CurrencyProvider): - price_formats = ["###,###,000", "#,###,000,000", "%,###,###,###,###", "%,###,###,###,000,000"] + price_formats = [ + "###,###,000", + "#,###,000,000", + "%,###,###,###,###", + "%,###,###,###,000,000", + ] def pricetag(self) -> str: return self.numerify(self.random_element(self.price_formats)) + "\ufdfc" diff --git a/faker/providers/currency/fr_CA/__init__.py b/faker/providers/currency/fr_CA/__init__.py index d570e23895..ef3bb9e5ca 100644 --- a/faker/providers/currency/fr_CA/__init__.py +++ b/faker/providers/currency/fr_CA/__init__.py @@ -5,4 +5,7 @@ class Provider(CurrencyProvider): price_formats = ["#,##", "%#,##", "%##,##", "%.###,##", "%#.###,##"] def pricetag(self) -> str: - return self.numerify(self.random_element(self.price_formats)) + "\N{NO-BREAK SPACE}$" + return ( + self.numerify(self.random_element(self.price_formats)) + + "\N{NO-BREAK SPACE}$" + ) diff --git a/faker/providers/currency/fr_FR/__init__.py b/faker/providers/currency/fr_FR/__init__.py index 61971648e9..5bad631c02 100644 --- a/faker/providers/currency/fr_FR/__init__.py +++ b/faker/providers/currency/fr_FR/__init__.py @@ -5,4 +5,7 @@ class Provider(CurrencyProvider): price_formats = ["#,##", "%#,##", "%##,##", "%.###,##", "%#.###,##"] def pricetag(self): - return self.numerify(self.random_element(self.price_formats)) + "\N{NO-BREAK SPACE}\N{EURO SIGN}" + return ( + self.numerify(self.random_element(self.price_formats)) + + "\N{NO-BREAK SPACE}\N{EURO SIGN}" + ) diff --git a/faker/providers/currency/it_IT/__init__.py b/faker/providers/currency/it_IT/__init__.py index 61971648e9..5bad631c02 100644 --- a/faker/providers/currency/it_IT/__init__.py +++ b/faker/providers/currency/it_IT/__init__.py @@ -5,4 +5,7 @@ class Provider(CurrencyProvider): price_formats = ["#,##", "%#,##", "%##,##", "%.###,##", "%#.###,##"] def pricetag(self): - return self.numerify(self.random_element(self.price_formats)) + "\N{NO-BREAK SPACE}\N{EURO SIGN}" + return ( + self.numerify(self.random_element(self.price_formats)) + + "\N{NO-BREAK SPACE}\N{EURO SIGN}" + ) diff --git a/faker/providers/currency/ng_NG/__init__.py b/faker/providers/currency/ng_NG/__init__.py index 38e839b606..1e84bc077c 100644 --- a/faker/providers/currency/ng_NG/__init__.py +++ b/faker/providers/currency/ng_NG/__init__.py @@ -5,4 +5,8 @@ class Provider(CurrencyProvider): price_formats = ["#.##", "%#.##", "%##.##", "%,###.##"] def pricetag(self) -> str: - return "\N{NAIRA SIGN}" + "\N{NO-BREAK SPACE}" + self.numerify(self.random_element(self.price_formats)) + return ( + "\N{NAIRA SIGN}" + + "\N{NO-BREAK SPACE}" + + self.numerify(self.random_element(self.price_formats)) + ) diff --git a/faker/providers/currency/pl_PL/__init__.py b/faker/providers/currency/pl_PL/__init__.py index 82d4db2932..240f69a5c2 100644 --- a/faker/providers/currency/pl_PL/__init__.py +++ b/faker/providers/currency/pl_PL/__init__.py @@ -5,4 +5,7 @@ class Provider(CurrencyProvider): price_formats = ["#,##", "%#,##", "%##,##", "%.###,##", "%#.###,##"] def pricetag(self) -> str: - return self.numerify(self.random_element(self.price_formats)) + "\N{NO-BREAK SPACE}zł" + return ( + self.numerify(self.random_element(self.price_formats)) + + "\N{NO-BREAK SPACE}zł" + ) diff --git a/faker/providers/currency/ro_RO/__init__.py b/faker/providers/currency/ro_RO/__init__.py index 8cbe045121..b503c3c530 100644 --- a/faker/providers/currency/ro_RO/__init__.py +++ b/faker/providers/currency/ro_RO/__init__.py @@ -5,4 +5,7 @@ class Provider(CurrencyProvider): price_formats = ["#,##", "%#,##", "%##,##", "%.###,##", "%#.###,##"] def pricetag(self) -> str: - return self.numerify(self.random_element(self.price_formats)) + "\N{NO-BREAK SPACE}Lei" + return ( + self.numerify(self.random_element(self.price_formats)) + + "\N{NO-BREAK SPACE}Lei" + ) diff --git a/faker/providers/currency/ru_RU/__init__.py b/faker/providers/currency/ru_RU/__init__.py index 00dd5d0858..121d24e9b6 100644 --- a/faker/providers/currency/ru_RU/__init__.py +++ b/faker/providers/currency/ru_RU/__init__.py @@ -175,5 +175,6 @@ class Provider(CurrencyProvider): def pricetag(self) -> str: return ( - self.numerify(self.random_element(self.price_formats)) + "\N{NO-BREAK SPACE}\N{CYRILLIC SMALL LETTER ER}." + self.numerify(self.random_element(self.price_formats)) + + "\N{NO-BREAK SPACE}\N{CYRILLIC SMALL LETTER ER}." ) diff --git a/faker/providers/currency/sk_SK/__init__.py b/faker/providers/currency/sk_SK/__init__.py index 61971648e9..5bad631c02 100644 --- a/faker/providers/currency/sk_SK/__init__.py +++ b/faker/providers/currency/sk_SK/__init__.py @@ -5,4 +5,7 @@ class Provider(CurrencyProvider): price_formats = ["#,##", "%#,##", "%##,##", "%.###,##", "%#.###,##"] def pricetag(self): - return self.numerify(self.random_element(self.price_formats)) + "\N{NO-BREAK SPACE}\N{EURO SIGN}" + return ( + self.numerify(self.random_element(self.price_formats)) + + "\N{NO-BREAK SPACE}\N{EURO SIGN}" + ) diff --git a/faker/providers/currency/uk_UA/__init__.py b/faker/providers/currency/uk_UA/__init__.py index 07fc175bdf..2a5b30b8ae 100644 --- a/faker/providers/currency/uk_UA/__init__.py +++ b/faker/providers/currency/uk_UA/__init__.py @@ -170,4 +170,7 @@ class Provider(CurrencyProvider): price_formats = ["#,##", "%#,##", "%##,##", "% ###,##", "%# ###,##"] def pricetag(self) -> str: - return self.numerify(self.random_element(self.price_formats)) + "\N{NO-BREAK SPACE}грн." + return ( + self.numerify(self.random_element(self.price_formats)) + + "\N{NO-BREAK SPACE}грн." + ) diff --git a/faker/providers/currency/uz_UZ/__init__.py b/faker/providers/currency/uz_UZ/__init__.py index 79bae34eb8..25f3578ec1 100644 --- a/faker/providers/currency/uz_UZ/__init__.py +++ b/faker/providers/currency/uz_UZ/__init__.py @@ -174,5 +174,6 @@ class Provider(CurrencyProvider): def pricetag(self) -> str: return ( - self.numerify(self.random_element(self.price_formats)) + "\N{NO-BREAK SPACE}\N{CYRILLIC SMALL LETTER ER}." + self.numerify(self.random_element(self.price_formats)) + + "\N{NO-BREAK SPACE}\N{CYRILLIC SMALL LETTER ER}." ) diff --git a/faker/providers/date_time/__init__.py b/faker/providers/date_time/__init__.py index dc9533ab7a..20c6433244 100644 --- a/faker/providers/date_time/__init__.py +++ b/faker/providers/date_time/__init__.py @@ -35,7 +35,9 @@ def datetime_to_timestamp(dt: Union[dtdate, datetime]) -> int: return timegm(dt.timetuple()) -def timestamp_to_datetime(timestamp: Union[int, float], tzinfo: Optional[TzInfo]) -> datetime: +def timestamp_to_datetime( + timestamp: Union[int, float], tzinfo: Optional[TzInfo] +) -> datetime: if tzinfo is None: pick = convert_timestamp_to_datetime(timestamp, _get_local_timezone()) return pick.astimezone(dttimezone.utc).replace(tzinfo=None) @@ -114,7 +116,9 @@ def _rand_seconds(self, start_datetime: int, end_datetime: int) -> float: def _rand_seconds(self, start_datetime: int, end_datetime: int) -> float: if start_datetime > end_datetime: - raise ValueError("empty range for _rand_seconds: start datetime must be before than end datetime") + raise ValueError( + "empty range for _rand_seconds: start datetime must be before than end datetime" + ) return self.generator.random.uniform(start_datetime, end_datetime) centuries: ElementsType[str] = [ @@ -1897,7 +1901,9 @@ def date_time( # NOTE: On windows, the lowest value you can get from windows is 86400 # on the first day. Known python issue: # https://bugs.python.org/issue30684 - return datetime(1970, 1, 1, tzinfo=tzinfo) + timedelta(seconds=self.unix_time(end_datetime=end_datetime)) + return datetime(1970, 1, 1, tzinfo=tzinfo) + timedelta( + seconds=self.unix_time(end_datetime=end_datetime) + ) def date_time_ad( self, @@ -1922,7 +1928,11 @@ def date_time_ad( # simply change that class method to use this magic number as a # default value when None is provided. - start_time = -62135596800 if start_datetime is None else self._parse_start_datetime(start_datetime) + start_time = ( + -62135596800 + if start_datetime is None + else self._parse_start_datetime(start_datetime) + ) end_datetime = self._parse_end_datetime(end_datetime) ts = self._rand_seconds(start_time, end_datetime) @@ -1952,9 +1962,13 @@ def iso8601( :sample: """ - return self.date_time(tzinfo, end_datetime=end_datetime).isoformat(sep, timespec) + return self.date_time(tzinfo, end_datetime=end_datetime).isoformat( + sep, timespec + ) - def date(self, pattern: str = "%Y-%m-%d", end_datetime: Optional[DateParseType] = None) -> str: + def date( + self, pattern: str = "%Y-%m-%d", end_datetime: Optional[DateParseType] = None + ) -> str: """ Get a date string between January 1, 1970 and now. @@ -1978,7 +1992,9 @@ def date_object(self, end_datetime: Optional[datetime] = None) -> dtdate: """ return self.date_time(end_datetime=end_datetime).date() - def time(self, pattern: str = "%H:%M:%S", end_datetime: Optional[DateParseType] = None) -> str: + def time( + self, pattern: str = "%H:%M:%S", end_datetime: Optional[DateParseType] = None + ) -> str: """ Get a time string (24h format by default) @@ -2051,7 +2067,9 @@ def _parse_timedelta(cls, value: Union[timedelta, str, float]) -> Union[float, i raise ParseError(f"Invalid format for timedelta {value!r}") @classmethod - def _parse_date_time(cls, value: DateParseType, tzinfo: Optional[TzInfo] = None) -> int: + def _parse_date_time( + cls, value: DateParseType, tzinfo: Optional[TzInfo] = None + ) -> int: if isinstance(value, (datetime, dtdate)): return datetime_to_timestamp(value) now = datetime.now(tzinfo) @@ -2109,9 +2127,13 @@ def date_time_between( if tzinfo is None: return datetime(1970, 1, 1, tzinfo=tzinfo) + timedelta(seconds=ts) else: - return (datetime(1970, 1, 1, tzinfo=dttimezone.utc) + timedelta(seconds=ts)).astimezone(tzinfo) + return ( + datetime(1970, 1, 1, tzinfo=dttimezone.utc) + timedelta(seconds=ts) + ).astimezone(tzinfo) - def date_between(self, start_date: DateParseType = "-30y", end_date: DateParseType = "today") -> dtdate: + def date_between( + self, start_date: DateParseType = "-30y", end_date: DateParseType = "today" + ) -> dtdate: """ Get a Date object based on a random date between two given dates. Accepts date strings that can be recognized by strtotime(). @@ -2128,7 +2150,9 @@ def date_between(self, start_date: DateParseType = "-30y", end_date: DateParseTy end_date = self._parse_date(end_date) return self.date_between_dates(date_start=start_date, date_end=end_date) - def future_datetime(self, end_date: DateParseType = "+30d", tzinfo: Optional[TzInfo] = None) -> datetime: + def future_datetime( + self, end_date: DateParseType = "+30d", tzinfo: Optional[TzInfo] = None + ) -> datetime: """ Get a datetime object based on a random date between 1 second form now and a given date. @@ -2139,7 +2163,9 @@ def future_datetime(self, end_date: DateParseType = "+30d", tzinfo: Optional[TzI :sample: :sample: end_date='+1y' """ - return self.date_time_between(start_date="+1s", end_date=end_date, tzinfo=tzinfo) + return self.date_time_between( + start_date="+1s", end_date=end_date, tzinfo=tzinfo + ) def future_date(self, end_date: DateParseType = "+30d") -> dtdate: """ @@ -2154,7 +2180,9 @@ def future_date(self, end_date: DateParseType = "+30d") -> dtdate: """ return self.date_between(start_date="+1d", end_date=end_date) - def past_datetime(self, start_date: DateParseType = "-30d", tzinfo: Optional[TzInfo] = None) -> datetime: + def past_datetime( + self, start_date: DateParseType = "-30d", tzinfo: Optional[TzInfo] = None + ) -> datetime: """ Get a datetime object based on a random date between a given date and 1 second ago. @@ -2166,9 +2194,13 @@ def past_datetime(self, start_date: DateParseType = "-30d", tzinfo: Optional[TzI :sample: :sample: end_date='+1y' """ - return self.date_time_between(start_date=start_date, end_date="-1s", tzinfo=tzinfo) + return self.date_time_between( + start_date=start_date, end_date="-1s", tzinfo=tzinfo + ) - def past_date(self, start_date: DateParseType = "-30d", tzinfo: Optional[TzInfo] = None) -> dtdate: + def past_date( + self, start_date: DateParseType = "-30d", tzinfo: Optional[TzInfo] = None + ) -> dtdate: """ Get a Date object based on a random date between a given date and 1 day ago. @@ -2205,7 +2237,9 @@ def date_time_between_dates( else self._parse_date_time(datetime_start) ) datetime_end_ = ( - datetime_to_timestamp(datetime.now(tzinfo)) if datetime_end is None else self._parse_date_time(datetime_end) + datetime_to_timestamp(datetime.now(tzinfo)) + if datetime_end is None + else self._parse_date_time(datetime_end) ) timestamp = self._rand_seconds(datetime_start_, datetime_end_) @@ -2258,10 +2292,14 @@ def date_time_this_century( """ now = datetime.now(tzinfo) this_century_start = datetime(now.year - (now.year % 100), 1, 1, tzinfo=tzinfo) - next_century_start = datetime(min(this_century_start.year + 100, MAXYEAR), 1, 1, tzinfo=tzinfo) + next_century_start = datetime( + min(this_century_start.year + 100, MAXYEAR), 1, 1, tzinfo=tzinfo + ) if before_now and after_now: - return self.date_time_between_dates(this_century_start, next_century_start, tzinfo) + return self.date_time_between_dates( + this_century_start, next_century_start, tzinfo + ) elif not before_now and after_now: return self.date_time_between_dates(now, next_century_start, tzinfo) elif not after_now and before_now: @@ -2287,10 +2325,14 @@ def date_time_this_decade( """ now = datetime.now(tzinfo) this_decade_start = datetime(now.year - (now.year % 10), 1, 1, tzinfo=tzinfo) - next_decade_start = datetime(min(this_decade_start.year + 10, MAXYEAR), 1, 1, tzinfo=tzinfo) + next_decade_start = datetime( + min(this_decade_start.year + 10, MAXYEAR), 1, 1, tzinfo=tzinfo + ) if before_now and after_now: - return self.date_time_between_dates(this_decade_start, next_decade_start, tzinfo) + return self.date_time_between_dates( + this_decade_start, next_decade_start, tzinfo + ) elif not before_now and after_now: return self.date_time_between_dates(now, next_decade_start, tzinfo) elif not after_now and before_now: @@ -2315,11 +2357,15 @@ def date_time_this_year( :sample: before_now=False, after_now=True """ now = datetime.now(tzinfo) - this_year_start = now.replace(month=1, day=1, hour=0, minute=0, second=0, microsecond=0) + this_year_start = now.replace( + month=1, day=1, hour=0, minute=0, second=0, microsecond=0 + ) next_year_start = datetime(now.year + 1, 1, 1, tzinfo=tzinfo) if before_now and after_now: - return self.date_time_between_dates(this_year_start, next_year_start, tzinfo) + return self.date_time_between_dates( + this_year_start, next_year_start, tzinfo + ) elif not before_now and after_now: return self.date_time_between_dates(now, next_year_start, tzinfo) elif not after_now and before_now: @@ -2348,7 +2394,9 @@ def date_time_this_month( next_month_start = _get_next_month_start(this_month_start) if before_now and after_now: - return self.date_time_between_dates(this_month_start, next_month_start, tzinfo) + return self.date_time_between_dates( + this_month_start, next_month_start, tzinfo + ) elif not before_now and after_now: return self.date_time_between_dates(now, next_month_start, tzinfo) elif not after_now and before_now: @@ -2356,7 +2404,9 @@ def date_time_this_month( else: return now - def date_this_century(self, before_today: bool = True, after_today: bool = False) -> dtdate: + def date_this_century( + self, before_today: bool = True, after_today: bool = False + ) -> dtdate: """ Gets a Date object for the current century. @@ -2379,7 +2429,9 @@ def date_this_century(self, before_today: bool = True, after_today: bool = False else: return today - def date_this_decade(self, before_today: bool = True, after_today: bool = False) -> dtdate: + def date_this_decade( + self, before_today: bool = True, after_today: bool = False + ) -> dtdate: """ Gets a Date object for the decade year. @@ -2402,7 +2454,9 @@ def date_this_decade(self, before_today: bool = True, after_today: bool = False) else: return today - def date_this_year(self, before_today: bool = True, after_today: bool = False) -> dtdate: + def date_this_year( + self, before_today: bool = True, after_today: bool = False + ) -> dtdate: """ Gets a Date object for the current year. @@ -2425,7 +2479,9 @@ def date_this_year(self, before_today: bool = True, after_today: bool = False) - else: return today - def date_this_month(self, before_today: bool = True, after_today: bool = False) -> dtdate: + def date_this_month( + self, before_today: bool = True, after_today: bool = False + ) -> dtdate: """ Gets a Date object for the current month. @@ -2478,7 +2534,9 @@ def time_series( if end_date_ < start_date_: raise ValueError("`end_date` must be greater than `start_date`.") - precision_ = self._parse_timedelta((end_date_ - start_date_) / 30 if precision is None else precision) + precision_ = self._parse_timedelta( + (end_date_ - start_date_) / 30 if precision is None else precision + ) if distrib is None: def distrib(dt): @@ -2593,15 +2651,21 @@ def date_of_birth( start_date = change_year(now, -(maximum_age + 1)) end_date = change_year(now, -minimum_age) - dob = self.date_time_ad(tzinfo=tzinfo, start_datetime=start_date, end_datetime=end_date).date() + dob = self.date_time_ad( + tzinfo=tzinfo, start_datetime=start_date, end_datetime=end_date + ).date() return dob if dob != start_date else dob + timedelta(days=1) -def convert_timestamp_to_datetime(timestamp: Union[int, float], tzinfo: TzInfo) -> datetime: +def convert_timestamp_to_datetime( + timestamp: Union[int, float], tzinfo: TzInfo +) -> datetime: import datetime as dt if timestamp >= 0: return dt.datetime.fromtimestamp(timestamp, tzinfo) else: - return dt.datetime(1970, 1, 1, tzinfo=tzinfo) + dt.timedelta(seconds=int(timestamp)) + return dt.datetime(1970, 1, 1, tzinfo=tzinfo) + dt.timedelta( + seconds=int(timestamp) + ) diff --git a/faker/providers/date_time/th_TH/__init__.py b/faker/providers/date_time/th_TH/__init__.py index 8ece4b52d4..6d8d6f7575 100644 --- a/faker/providers/date_time/th_TH/__init__.py +++ b/faker/providers/date_time/th_TH/__init__.py @@ -75,7 +75,10 @@ def _std_strftime(dt_obj: datetime, fmt_char: str) -> str: # Unsupported directives may raise ValueError on Windows, # in that case just use the fmt_char warnings.warn( - (f"String format directive unknown/not support: %{fmt_char}" f"The system raises this ValueError: {err}"), + ( + f"String format directive unknown/not support: %{fmt_char}" + f"The system raises this ValueError: {err}" + ), UserWarning, ) str_ = fmt_char diff --git a/faker/providers/file/__init__.py b/faker/providers/file/__init__.py index 9634001fa1..10f0aa89db 100644 --- a/faker/providers/file/__init__.py +++ b/faker/providers/file/__init__.py @@ -229,10 +229,14 @@ def mime_type(self, category: Optional[str] = None) -> str: :sample: :sample: category='application' """ - category = category if category else self.random_element(list(self.mime_types.keys())) + category = ( + category if category else self.random_element(list(self.mime_types.keys())) + ) return self.random_element(self.mime_types[category]) - def file_name(self, category: Optional[str] = None, extension: Optional[str] = None) -> str: + def file_name( + self, category: Optional[str] = None, extension: Optional[str] = None + ) -> str: """Generate a random file name with extension. If ``extension`` is ``None``, a random extension will be created diff --git a/faker/providers/geo/__init__.py b/faker/providers/geo/__init__.py index 76f4a8069e..eea1a3779a 100644 --- a/faker/providers/geo/__init__.py +++ b/faker/providers/geo/__init__.py @@ -1002,12 +1002,16 @@ class Provider(BaseProvider): ("12.12278", "-61.62498", "Grenville", "GD", "America/Grenada"), ) - def coordinate(self, center: Optional[float] = None, radius: Union[float, int] = 0.001) -> Decimal: + def coordinate( + self, center: Optional[float] = None, radius: Union[float, int] = 0.001 + ) -> Decimal: """ Optionally center the coord and pick a point within radius. """ if center is None: - return Decimal(str(self.generator.random.randint(-180000000, 180000000) / 1000000)).quantize( + return Decimal( + str(self.generator.random.randint(-180000000, 180000000) / 1000000) + ).quantize( Decimal(".000001"), ) else: diff --git a/faker/providers/geo/bn_BD/__init__.py b/faker/providers/geo/bn_BD/__init__.py index 8ac3c19492..2f662b0607 100644 --- a/faker/providers/geo/bn_BD/__init__.py +++ b/faker/providers/geo/bn_BD/__init__.py @@ -250,7 +250,13 @@ class Provider(GeoProvider): ("53.6052", "10.03988", "বারম্বেক-নর্ড", "DE", "ইউরোপ/বার্লিন"), ("11.15583", "42.7125", "আলি সাবিহ", "DJ", "আফ্রিকা/জিবুতি"), ("55.67938", "12.53463", "ফ্রেডেরিকসবার্গ", "DK", "ইউরোপ/কোপেনহেগেন"), - ("18.20854", "-71.10077", "সান্তা ক্রুজ ডি বারাহোনা", "DO", "আমেরিকা/সান্টো_ডোমিঙ্গো"), + ( + "18.20854", + "-71.10077", + "সান্তা ক্রুজ ডি বারাহোনা", + "DO", + "আমেরিকা/সান্টো_ডোমিঙ্গো", + ), ("36.76639", "3.47717", "বউমারদাস", "DZ", "আফ্রিকা/আলজিয়ার্স"), ("36.72544", "3.55665", "থেনিয়া", "DZ", "আফ্রিকা/আলজিয়ার্স"), ("34.15429", "3.50309", "মেসাদ", "DZ", "আফ্রিকা/আলজিয়ার্স"), @@ -577,7 +583,13 @@ class Provider(GeoProvider): ("25.87972", "-97.50417", "হিরোইকা মাতামোরোস", "MX", "আমেরিকা/মাতামোরোস"), ("19.32932", "-98.1664", "কন্টলা", "MX", "আমেরিকা/মেক্সিকো_সিটি"), ("17.94979", "-94.91386", "আকাইউকান", "MX", "আমেরিকা/মেক্সিকো_সিটি"), - ("19.32889", "-99.32556", "সান লরেঞ্জো অ্যাকোপিলকো", "MX", "আমেরিকা/মেক্সিকো_সিটি"), + ( + "19.32889", + "-99.32556", + "সান লরেঞ্জো অ্যাকোপিলকো", + "MX", + "আমেরিকা/মেক্সিকো_সিটি", + ), ("20.22816", "-103.5687", "জাকোয়ালকো ডি টরেস", "MX", "আমেরিকা/মেক্সিকো_সিটি"), ("20.74122", "-100.44843", "সান্তা রোজা জাউরেগুই", "MX", "আমেরিকা/মেক্সিকো_সিটি"), ("20.21322", "-100.88023", "সালভাতিয়েরা", "MX", "আমেরিকা/মেক্সিকো_সিটি"), @@ -984,6 +996,10 @@ class Provider(GeoProvider): ("-24.19436", "29.00974", "মোকোপানে", "ZA", "আফ্রিকা/জোহানেসবার্গ"), ) - def local_latlng(self, country_code: str = "BD", coords_only: bool = False) -> Optional[Tuple[str, ...]]: + def local_latlng( + self, country_code: str = "BD", coords_only: bool = False + ) -> Optional[Tuple[str, ...]]: """Set Bangladesh BD as country code.""" - return super(self.__class__, self).local_latlng(country_code=country_code, coords_only=coords_only) + return super(self.__class__, self).local_latlng( + country_code=country_code, coords_only=coords_only + ) diff --git a/faker/providers/geo/cs_CZ/__init__.py b/faker/providers/geo/cs_CZ/__init__.py index 6dbef57827..9293213505 100644 --- a/faker/providers/geo/cs_CZ/__init__.py +++ b/faker/providers/geo/cs_CZ/__init__.py @@ -72,11 +72,23 @@ class Provider(GeoProvider): ("49.696057", "15.813706", "Ždírec nad Doubravou", "CZ", "Europe/Prague"), ("50.139886", "16.064472", "Albrechtice nad Orlicí", "CZ", "Europe/Prague"), ("49.253337", "14.302929", "Albrechtice nad Vltavou", "CZ", "Europe/Prague"), - ("50.762400", "15.275813", "Albrechtice v Jizerských horách", "CZ", "Europe/Prague"), + ( + "50.762400", + "15.275813", + "Albrechtice v Jizerských horách", + "CZ", + "Europe/Prague", + ), ("50.223983", "12.195113", "Aš", "CZ", "Europe/Prague"), ("50.482406", "14.941596", "Bakov nad Jizerou", "CZ", "Europe/Prague"), ("49.452124", "14.608319", "Balkova Lhota", "CZ", "Europe/Prague"), - ("50.164080", "16.547862", "Bartošovice v Orlických horách", "CZ", "Europe/Prague"), + ( + "50.164080", + "16.547862", + "Bartošovice v Orlických horách", + "CZ", + "Europe/Prague", + ), ("49.245527", "17.426201", "Bařice-Velké Těšany", "CZ", "Europe/Prague"), ("50.083561", "12.838429", "Bečov nad Teplou", "CZ", "Europe/Prague"), ("49.956809", "15.079916", "Bečváry", "CZ", "Europe/Prague"), diff --git a/faker/providers/geo/el_GR/__init__.py b/faker/providers/geo/el_GR/__init__.py index 95cd9d04d7..a8b4b8e1e3 100644 --- a/faker/providers/geo/el_GR/__init__.py +++ b/faker/providers/geo/el_GR/__init__.py @@ -17,12 +17,17 @@ def local_latlng(self, *args: Any, **kwargs: Any) -> Tuple[str, str]: def local_latitude(self) -> Decimal: latitudes = [int(Decimal(t[0]) * 10000000) for t in self.poly] - return Decimal(str(self.generator.random.randint(min(latitudes), max(latitudes)) / 10000000)).quantize( - Decimal(".000001") - ) + return Decimal( + str( + self.generator.random.randint(min(latitudes), max(latitudes)) / 10000000 + ) + ).quantize(Decimal(".000001")) def local_longitude(self) -> Decimal: longitudes = [int(Decimal(t[1]) * 10000000) for t in self.poly] - return Decimal(str(self.generator.random.randint(min(longitudes), max(longitudes)) / 10000000)).quantize( - Decimal(".000001") - ) + return Decimal( + str( + self.generator.random.randint(min(longitudes), max(longitudes)) + / 10000000 + ) + ).quantize(Decimal(".000001")) diff --git a/faker/providers/geo/sk_SK/__init__.py b/faker/providers/geo/sk_SK/__init__.py index 38dc71cd3d..04b81f089f 100644 --- a/faker/providers/geo/sk_SK/__init__.py +++ b/faker/providers/geo/sk_SK/__init__.py @@ -40,14 +40,26 @@ class Provider(GeoProvider): ("48.62858", "21.71954", "Trebišov", "SK", "Europe/Trebišov"), ("48.98857", "22.15099", "Snina", "SK", "Europe/Snina"), ("48.67922", "17.36697", "Senica", "SK", "Europe/Senica"), - ("48.75763", "17.8309", "Nové Mesto nad Váhom", "SK", "Europe/Nové Mesto nad Váhom"), + ( + "48.75763", + "17.8309", + "Nové Mesto nad Váhom", + "SK", + "Europe/Nové Mesto nad Váhom", + ), ("49.13571", "20.43352", "Kežmarok", "SK", "Europe/Kežmarok"), ("48.28986", "17.26664", "Pezinok", "SK", "Europe/Pezinok"), ("48.80431", "19.63631", "Brezno", "SK", "Europe/Brezno"), ("49.20983", "19.30341", "Dolný Kubín", "SK", "Europe/Dolný Kubín"), ("48.59184", "18.84958", "Žiar nad Hronom", "SK", "Europe/Žiar nad Hronom"), ("48.66009", "20.53758", "Rožňava", "SK", "Europe/Rožňava"), - ("48.7213", "18.25754", "Bánovce nad Bebravou", "SK", "Europe/Bánovce nad Bebravou"), + ( + "48.7213", + "18.25754", + "Bánovce nad Bebravou", + "SK", + "Europe/Bánovce nad Bebravou", + ), ("49.12494", "18.32597", "Púchov", "SK", "Europe/Púchov"), ("48.7276", "18.76012", "Handlová", "SK", "Europe/Handlová"), ("48.43604", "17.02188", "Malacky", "SK", "Europe/Malacky"), @@ -76,7 +88,13 @@ class Provider(GeoProvider): ("48.26757", "19.82473", "Fülek", "SK", "Europe/Fülek"), ("48.44858", "18.91003", "Banská Štiavnica", "SK", "Europe/Banská Štiavnica"), ("49.337", "19.556", "Tvrdošín", "SK", "Europe/Tvrdošín"), - ("48.61428", "20.99957", "Moldava nad Bodvou", "SK", "Europe/Moldava nad Bodvou"), + ( + "48.61428", + "20.99957", + "Moldava nad Bodvou", + "SK", + "Europe/Moldava nad Bodvou", + ), ("48.24371", "18.30846", "Vráble", "SK", "Europe/Vráble"), ("47.85798", "17.76884", "Nagymegyer", "SK", "Europe/Nagymegyer"), ("48.91447", "20.87514", "Krompachy", "SK", "Europe/Krompachy"), diff --git a/faker/providers/internet/__init__.py b/faker/providers/internet/__init__.py index d4a20a584a..b9885c6946 100644 --- a/faker/providers/internet/__init__.py +++ b/faker/providers/internet/__init__.py @@ -299,7 +299,9 @@ def hostname(self, levels: int = 1) -> str: hostname_prefix: str = self.random_element(self.hostname_prefixes) hostname_prefix_first_level: str = hostname_prefix + "-" + self.numerify("##") return ( - hostname_prefix_first_level if levels < 1 else hostname_prefix_first_level + "." + self.domain_name(levels) + hostname_prefix_first_level + if levels < 1 + else hostname_prefix_first_level + "." + self.domain_name(levels) ) @lowercase @@ -400,11 +402,15 @@ def url(self, schemes: Optional[List[str]] = None) -> str: if schemes is None: schemes = ["http", "https"] - pattern: str = f'{self.random_element(schemes) if schemes else ""}://{self.random_element(self.url_formats)}' + pattern: str = ( + f'{self.random_element(schemes) if schemes else ""}://{self.random_element(self.url_formats)}' + ) return self.generator.parse(pattern) - def _get_all_networks_and_weights(self, address_class: Optional[str] = None) -> Tuple[List[IPv4Network], List[int]]: + def _get_all_networks_and_weights( + self, address_class: Optional[str] = None + ) -> Tuple[List[IPv4Network], List[int]]: """ Produces a 2-tuple of valid IPv4 networks and corresponding relative weights @@ -447,7 +453,10 @@ def _get_private_networks_and_weights( :param address_class: IPv4 address class (a, b, or c) """ # If `address_class` has an unexpected value, choose a valid value at random - if not address_class or address_class not in _IPv4Constants._network_classes.keys(): + if ( + not address_class + or address_class not in _IPv4Constants._network_classes.keys() + ): address_class = self.ipv4_network_class() # Return cached network and weight data if available for a specific address class @@ -458,7 +467,11 @@ def _get_private_networks_and_weights( # Otherwise, compute for list of private networks (excluding special networks) supernet = _IPv4Constants._network_classes[address_class] - private_networks = [subnet for subnet in _IPv4Constants._private_networks if subnet.overlaps(supernet)] + private_networks = [ + subnet + for subnet in _IPv4Constants._private_networks + if subnet.overlaps(supernet) + ] private_networks = self._exclude_ipv4_networks( private_networks, _IPv4Constants._excluded_networks, @@ -630,10 +643,16 @@ def ipv4( elif private is False: return self.ipv4_public(address_class=address_class, network=network) else: - all_networks, weights = self._get_all_networks_and_weights(address_class=address_class) - return self._random_ipv4_address_from_subnets(all_networks, weights=weights, network=network) + all_networks, weights = self._get_all_networks_and_weights( + address_class=address_class + ) + return self._random_ipv4_address_from_subnets( + all_networks, weights=weights, network=network + ) - def ipv4_private(self, network: bool = False, address_class: Optional[str] = None) -> str: + def ipv4_private( + self, network: bool = False, address_class: Optional[str] = None + ) -> str: """ Returns a private IPv4. @@ -641,10 +660,16 @@ def ipv4_private(self, network: bool = False, address_class: Optional[str] = Non :param address_class: IPv4 address class (a, b, or c) :returns: Private IPv4 """ - private_networks, weights = self._get_private_networks_and_weights(address_class=address_class) - return self._random_ipv4_address_from_subnets(private_networks, weights=weights, network=network) + private_networks, weights = self._get_private_networks_and_weights( + address_class=address_class + ) + return self._random_ipv4_address_from_subnets( + private_networks, weights=weights, network=network + ) - def ipv4_public(self, network: bool = False, address_class: Optional[str] = None) -> str: + def ipv4_public( + self, network: bool = False, address_class: Optional[str] = None + ) -> str: """ Returns a public IPv4 excluding private blocks. @@ -652,12 +677,20 @@ def ipv4_public(self, network: bool = False, address_class: Optional[str] = None :param address_class: IPv4 address class (a, b, or c) :returns: Public IPv4 """ - public_networks, weights = self._get_public_networks_and_weights(address_class=address_class) - return self._random_ipv4_address_from_subnets(public_networks, weights=weights, network=network) + public_networks, weights = self._get_public_networks_and_weights( + address_class=address_class + ) + return self._random_ipv4_address_from_subnets( + public_networks, weights=weights, network=network + ) def ipv6(self, network: bool = False) -> str: """Produce a random IPv6 address or network with a valid CIDR""" - address = str(IPv6Address(self.generator.random.randint(2**IPV4LENGTH, (2**IPV6LENGTH) - 1))) + address = str( + IPv6Address( + self.generator.random.randint(2**IPV4LENGTH, (2**IPV6LENGTH) - 1) + ) + ) if network: address += "/" + str(self.generator.random.randint(0, IPV6LENGTH)) address = str(IPv6Network(address, strict=False)) @@ -677,7 +710,9 @@ def mac_address(self, multicast: bool = False) -> str: mac.insert(0, self.generator.random.randrange(0x00, 0xFE, 2)) return ":".join("%02x" % x for x in mac) - def port_number(self, is_system: bool = False, is_user: bool = False, is_dynamic: bool = False) -> int: + def port_number( + self, is_system: bool = False, is_user: bool = False, is_dynamic: bool = False + ) -> int: """Returns a network port number https://tools.ietf.org/html/rfc6335 @@ -708,7 +743,9 @@ def uri_path(self, deep: Optional[int] = None) -> str: def uri_extension(self) -> str: return self.random_element(self.uri_extensions) - def uri(self, schemes: Optional[List[str]] = None, deep: Optional[int] = None) -> str: + def uri( + self, schemes: Optional[List[str]] = None, deep: Optional[int] = None + ) -> str: """ :param schemes: a list of strings to use as schemes, one will chosen randomly. If None, it will generate http and https uris. @@ -719,7 +756,9 @@ def uri(self, schemes: Optional[List[str]] = None, deep: Optional[int] = None) - if schemes is None: schemes = ["http", "https"] - pattern: str = f'{self.random_element(schemes) if schemes else ""}://{self.random_element(self.url_formats)}' + pattern: str = ( + f'{self.random_element(schemes) if schemes else ""}://{self.random_element(self.url_formats)}' + ) path = self.uri_path(deep=deep) page = self.uri_page() extension = self.uri_extension() diff --git a/faker/providers/internet/az_AZ/__init__.py b/faker/providers/internet/az_AZ/__init__.py index 850de26548..17a055ef6f 100644 --- a/faker/providers/internet/az_AZ/__init__.py +++ b/faker/providers/internet/az_AZ/__init__.py @@ -14,9 +14,20 @@ class Provider(InternetProvider): "{{first_name}}_{{year}}", ) - email_formats = ("{{user_name}}@{{free_email_domain}}", "{{user_name}}@{{domain_name}}") + email_formats = ( + "{{user_name}}@{{free_email_domain}}", + "{{user_name}}@{{domain_name}}", + ) - free_email_domains = ("gmail.com", "yahoo.com", "hotmail.com", "mail.ru", "yandex.ru", "box.az", "amail.az") + free_email_domains = ( + "gmail.com", + "yahoo.com", + "hotmail.com", + "mail.ru", + "yandex.ru", + "box.az", + "amail.az", + ) tlds = ("az", "com", "biz", "info", "net", "org", "edu") diff --git a/faker/providers/isbn/__init__.py b/faker/providers/isbn/__init__.py index 7c21ae60a8..13acfd7e7d 100644 --- a/faker/providers/isbn/__init__.py +++ b/faker/providers/isbn/__init__.py @@ -39,7 +39,9 @@ def _body(self) -> List[str]: return [ean, reg_group, registrant, publication] @staticmethod - def _registrant_publication(reg_pub: str, rules: List[Tuple[str, str, int]]) -> Tuple[str, str]: + def _registrant_publication( + reg_pub: str, rules: List[Tuple[str, str, int]] + ) -> Tuple[str, str]: """Separate the registration from the publication in a given string. @@ -54,7 +56,9 @@ def _registrant_publication(reg_pub: str, rules: List[Tuple[str, str, int]]) -> reg_len = rule[2] break else: - raise Exception(f"Registrant/Publication '{reg_pub}' not found in registrant rule list.") + raise Exception( + f"Registrant/Publication '{reg_pub}' not found in registrant rule list." + ) registrant, publication = reg_pub[:reg_len], reg_pub[reg_len:] return registrant, publication diff --git a/faker/providers/isbn/isbn.py b/faker/providers/isbn/isbn.py index e593b95d32..9dcd27c341 100644 --- a/faker/providers/isbn/isbn.py +++ b/faker/providers/isbn/isbn.py @@ -33,7 +33,13 @@ def _check_digit(self) -> str: for calculation. """ weights = (1 if x % 2 == 0 else 3 for x in range(12)) - body = "".join([part for part in [self.ean, self.group, self.registrant, self.publication] if part is not None]) + body = "".join( + [ + part + for part in [self.ean, self.group, self.registrant, self.publication] + if part is not None + ] + ) remainder = sum(int(b) * w for b, w in zip(body, weights)) % 10 diff = 10 - remainder check_digit = 0 if diff == 10 else diff @@ -66,7 +72,13 @@ def _check_digit(self) -> str: for calculation. """ weights = range(1, 10) - body = "".join([part for part in [self.group, self.registrant, self.publication] if part is not None]) + body = "".join( + [ + part + for part in [self.group, self.registrant, self.publication] + if part is not None + ] + ) remainder = sum(int(b) * w for b, w in zip(body, weights)) % 11 check_digit = "X" if remainder == 10 else str(remainder) return str(check_digit) diff --git a/faker/providers/job/de_AT/__init__.py b/faker/providers/job/de_AT/__init__.py index 056e78cecc..b503235215 100644 --- a/faker/providers/job/de_AT/__init__.py +++ b/faker/providers/job/de_AT/__init__.py @@ -7,34 +7,102 @@ class Provider(BaseProvider): # https://bic.at/berufe_von_a_bis_z.php?bst=a jobs_dict: ElementsType[dict] = ( {"neutral": "3D-Artist", "female": "3D-Artist", "male": "3D-Artist"}, - {"neutral": "3D-Druck-Spezialist*in", "female": "3D-Druck-Spezialistin", "male": "3D-Druck-Spezialist"}, + { + "neutral": "3D-Druck-Spezialist*in", + "female": "3D-Druck-Spezialistin", + "male": "3D-Druck-Spezialist", + }, { "neutral": "A&R- (Artist & Repertoire) Manager*in", "female": "A&R- (Artist & Repertoire) Managerin", "male": "A&R- (Artist & Repertoire) Manager", }, - {"neutral": "AI Developer*in", "female": "AI Developerin", "male": "AI Developer"}, - {"neutral": "AI-Spezialist*in", "female": "AI-Spezialistin", "male": "AI-Spezialist"}, - {"neutral": "ASIC-Techniker*in", "female": "ASIC-Technikerin", "male": "ASIC-Techniker"}, - {"neutral": "Abfallbeauftragte*r", "female": "Abfallbeauftragte", "male": "Abfallbeauftragter"}, - {"neutral": "Abfallberater*in", "female": "Abfallberaterin", "male": "Abfallberater"}, + { + "neutral": "AI Developer*in", + "female": "AI Developerin", + "male": "AI Developer", + }, + { + "neutral": "AI-Spezialist*in", + "female": "AI-Spezialistin", + "male": "AI-Spezialist", + }, + { + "neutral": "ASIC-Techniker*in", + "female": "ASIC-Technikerin", + "male": "ASIC-Techniker", + }, + { + "neutral": "Abfallbeauftragte*r", + "female": "Abfallbeauftragte", + "male": "Abfallbeauftragter", + }, + { + "neutral": "Abfallberater*in", + "female": "Abfallberaterin", + "male": "Abfallberater", + }, { "neutral": "Abfallwirtschaftstechniker*in", "female": "Abfallwirtschaftstechnikerin", "male": "Abfallwirtschaftstechniker", }, - {"neutral": "Abnahmetechniker*in", "female": "Abnahmetechnikerin", "male": "Abnahmetechniker"}, - {"neutral": "Abteilungsleiter*in", "female": "Abteilungsleiterin", "male": "Abteilungsleiter"}, - {"neutral": "Abwassertechnik", "female": "Abwassertechnik", "male": "Abwassertechnik"}, - {"neutral": "Adressmakler*in", "female": "Adressmaklerin", "male": "Adressmakler"}, - {"neutral": "Adressvermittler*in", "female": "Adressvermittlerin", "male": "Adressvermittler"}, - {"neutral": "Aerobic-Trainer*in", "female": "Aerobic-Trainerin", "male": "Aerobic-Trainer"}, + { + "neutral": "Abnahmetechniker*in", + "female": "Abnahmetechnikerin", + "male": "Abnahmetechniker", + }, + { + "neutral": "Abteilungsleiter*in", + "female": "Abteilungsleiterin", + "male": "Abteilungsleiter", + }, + { + "neutral": "Abwassertechnik", + "female": "Abwassertechnik", + "male": "Abwassertechnik", + }, + { + "neutral": "Adressmakler*in", + "female": "Adressmaklerin", + "male": "Adressmakler", + }, + { + "neutral": "Adressvermittler*in", + "female": "Adressvermittlerin", + "male": "Adressvermittler", + }, + { + "neutral": "Aerobic-Trainer*in", + "female": "Aerobic-Trainerin", + "male": "Aerobic-Trainer", + }, {"neutral": "Afrikanist*in", "female": "Afrikanistin", "male": "Afrikanist"}, - {"neutral": "After-Sales-Betreuer*in", "female": "After-Sales-Betreuerin", "male": "After-Sales-Betreuer"}, - {"neutral": "Agraringenieur*in", "female": "Agraringenieurin", "male": "Agraringenieur"}, - {"neutral": "Agrarkaufmann / Agrarkauffrau", "female": "Agrarkauffrau", "male": "Agrarkaufmann"}, - {"neutral": "Agrarmanager*in", "female": "Agrarmanagerin", "male": "Agrarmanager"}, - {"neutral": "Agrartechniker*in", "female": "Agrartechnikerin", "male": "Agrartechniker"}, + { + "neutral": "After-Sales-Betreuer*in", + "female": "After-Sales-Betreuerin", + "male": "After-Sales-Betreuer", + }, + { + "neutral": "Agraringenieur*in", + "female": "Agraringenieurin", + "male": "Agraringenieur", + }, + { + "neutral": "Agrarkaufmann / Agrarkauffrau", + "female": "Agrarkauffrau", + "male": "Agrarkaufmann", + }, + { + "neutral": "Agrarmanager*in", + "female": "Agrarmanagerin", + "male": "Agrarmanager", + }, + { + "neutral": "Agrartechniker*in", + "female": "Agrartechnikerin", + "male": "Agrartechniker", + }, { "neutral": "Agrartechniker*in (Agrarökonomie)", "female": "Agrartechnikerin (Agrarökonomie)", @@ -60,14 +128,42 @@ class Provider(BaseProvider): "female": "Agrarwirtin - landwirtschaftliche Direktvermarktung", "male": "Agrarwirt - landwirtschaftliche Direktvermarktung", }, - {"neutral": "Agrarwissenschafter*in", "female": "Agrarwissenschafterin", "male": "Agrarwissenschafter"}, + { + "neutral": "Agrarwissenschafter*in", + "female": "Agrarwissenschafterin", + "male": "Agrarwissenschafter", + }, {"neutral": "Aktuar*in", "female": "Aktuarin", "male": "Aktuar"}, - {"neutral": "Allergologe / Allergologin", "female": "Allergologin", "male": "Allergologe"}, - {"neutral": "Alltagsbegleiter*in", "female": "Alltagsbegleiterin", "male": "Alltagsbegleiter"}, - {"neutral": "Almbewirtschafter*in", "female": "Almbewirtschafterin", "male": "Almbewirtschafter"}, - {"neutral": "Altersforscher*in", "female": "Altersforscherin", "male": "Altersforscher"}, - {"neutral": "Altwarenhändler*in", "female": "Altwarenhändlerin", "male": "Altwarenhändler"}, - {"neutral": "Amtsgehilfe / Amtsgehilfin", "female": "Amtsgehilfin", "male": "Amtsgehilfe"}, + { + "neutral": "Allergologe / Allergologin", + "female": "Allergologin", + "male": "Allergologe", + }, + { + "neutral": "Alltagsbegleiter*in", + "female": "Alltagsbegleiterin", + "male": "Alltagsbegleiter", + }, + { + "neutral": "Almbewirtschafter*in", + "female": "Almbewirtschafterin", + "male": "Almbewirtschafter", + }, + { + "neutral": "Altersforscher*in", + "female": "Altersforscherin", + "male": "Altersforscher", + }, + { + "neutral": "Altwarenhändler*in", + "female": "Altwarenhändlerin", + "male": "Altwarenhändler", + }, + { + "neutral": "Amtsgehilfe / Amtsgehilfin", + "female": "Amtsgehilfin", + "male": "Amtsgehilfe", + }, {"neutral": "Amtsvormund", "female": "Amtsvormund", "male": "Amtsvormund"}, { "neutral": "Anglist*in / Amerikanist*in", @@ -84,11 +180,31 @@ class Provider(BaseProvider): "female": "Anlage- und Vermögensberaterin", "male": "Anlage- und Vermögensberater", }, - {"neutral": "Anlageanalytiker*in", "female": "Anlageanalytikerin", "male": "Anlageanalytiker"}, - {"neutral": "Anlagenbautechniker*in", "female": "Anlagenbautechnikerin", "male": "Anlagenbautechniker"}, - {"neutral": "Anlagenelektrik", "female": "Anlagenelektrik", "male": "Anlagenelektrik"}, - {"neutral": "Anlagenmonteur*in", "female": "Anlagenmonteurin", "male": "Anlagenmonteur"}, - {"neutral": "Anthropologe / Anthropologin", "female": "Anthropologin", "male": "Anthropologe"}, + { + "neutral": "Anlageanalytiker*in", + "female": "Anlageanalytikerin", + "male": "Anlageanalytiker", + }, + { + "neutral": "Anlagenbautechniker*in", + "female": "Anlagenbautechnikerin", + "male": "Anlagenbautechniker", + }, + { + "neutral": "Anlagenelektrik", + "female": "Anlagenelektrik", + "male": "Anlagenelektrik", + }, + { + "neutral": "Anlagenmonteur*in", + "female": "Anlagenmonteurin", + "male": "Anlagenmonteur", + }, + { + "neutral": "Anthropologe / Anthropologin", + "female": "Anthropologin", + "male": "Anthropologe", + }, {"neutral": "Antiquar*in", "female": "Antiquarin", "male": "Antiquar"}, { "neutral": "Antiquitäten- und Kunstgegenständehändler*in", @@ -105,11 +221,27 @@ class Provider(BaseProvider): "female": "Anwendungsprogrammiererin", "male": "Anwendungsprogrammierer", }, - {"neutral": "Anwendungstechniker*in", "female": "Anwendungstechnikerin", "male": "Anwendungstechniker"}, - {"neutral": "Anzeigenverkäufer*in", "female": "Anzeigenverkäuferin", "male": "Anzeigenverkäufer"}, + { + "neutral": "Anwendungstechniker*in", + "female": "Anwendungstechnikerin", + "male": "Anwendungstechniker", + }, + { + "neutral": "Anzeigenverkäufer*in", + "female": "Anzeigenverkäuferin", + "male": "Anzeigenverkäufer", + }, {"neutral": "Apotheker*in", "female": "Apothekerin", "male": "Apotheker"}, - {"neutral": "App-Entwickler*in", "female": "App-Entwicklerin", "male": "App-Entwickler"}, - {"neutral": "Apparatebautechniker*in", "female": "Apparatebautechnikerin", "male": "Apparatebautechniker"}, + { + "neutral": "App-Entwickler*in", + "female": "App-Entwicklerin", + "male": "App-Entwickler", + }, + { + "neutral": "Apparatebautechniker*in", + "female": "Apparatebautechnikerin", + "male": "Apparatebautechniker", + }, { "neutral": "Applikations-Programmierer*in", "female": "Applikations-Programmiererin", @@ -120,14 +252,22 @@ class Provider(BaseProvider): "female": "Applikationsentwicklung - Coding", "male": "Applikationsentwicklung - Coding", }, - {"neutral": "Applikationstechniker*in", "female": "Applikationstechnikerin", "male": "Applikationstechniker"}, + { + "neutral": "Applikationstechniker*in", + "female": "Applikationstechnikerin", + "male": "Applikationstechniker", + }, {"neutral": "Arabist*in", "female": "Arabistin", "male": "Arabist"}, { "neutral": "Arbeits- und Organisationspsychologe / Arbeits- und Organisationspsychologin", "female": "Arbeits- und Organisationspsychologin", "male": "Arbeits- und Organisationspsychologe", }, - {"neutral": "Arbeitsmediziner*in", "female": "Arbeitsmedizinerin", "male": "Arbeitsmediziner"}, + { + "neutral": "Arbeitsmediziner*in", + "female": "Arbeitsmedizinerin", + "male": "Arbeitsmediziner", + }, { "neutral": "Arbeitsmedizinische Administrations-Assistenz", "female": "Arbeitsmedizinische Administrations-Assistenz", @@ -143,9 +283,21 @@ class Provider(BaseProvider): "female": "Arbeitsmedizinische Fach-Assistenz", "male": "Arbeitsmedizinische Fach-Assistenz", }, - {"neutral": "Arbeitsplatzbewerter*in", "female": "Arbeitsplatzbewerterin", "male": "Arbeitsplatzbewerter"}, - {"neutral": "Arbeitsvorbereiter*in", "female": "Arbeitsvorbereiterin", "male": "Arbeitsvorbereiter"}, - {"neutral": "Arbeitswissenschafter*in", "female": "Arbeitswissenschafterin", "male": "Arbeitswissenschafter"}, + { + "neutral": "Arbeitsplatzbewerter*in", + "female": "Arbeitsplatzbewerterin", + "male": "Arbeitsplatzbewerter", + }, + { + "neutral": "Arbeitsvorbereiter*in", + "female": "Arbeitsvorbereiterin", + "male": "Arbeitsvorbereiter", + }, + { + "neutral": "Arbeitswissenschafter*in", + "female": "Arbeitswissenschafterin", + "male": "Arbeitswissenschafter", + }, {"neutral": "Architekt*in", "female": "Architektin", "male": "Architekt"}, { "neutral": "Archiv-, Bibliotheks- und Informationsassistent*in", @@ -153,13 +305,21 @@ class Provider(BaseProvider): "male": "Archiv-, Bibliotheks- und Informationsassistent", }, {"neutral": "Archivar*in", "female": "Archivarin", "male": "Archivar"}, - {"neutral": "Archäologe / Archäologin", "female": "Archäologin", "male": "Archäologe"}, + { + "neutral": "Archäologe / Archäologin", + "female": "Archäologin", + "male": "Archäologe", + }, { "neutral": "Archäologe / Archäologin (Ur- und Frühgeschichte)", "female": "Archäologin (Ur- und Frühgeschichte)", "male": "Archäologe (Ur- und Frühgeschichte)", }, - {"neutral": "Area-Sales-Betreuer*in", "female": "Area-Sales-Betreuerin", "male": "Area-Sales-Betreuer"}, + { + "neutral": "Area-Sales-Betreuer*in", + "female": "Area-Sales-Betreuerin", + "male": "Area-Sales-Betreuer", + }, {"neutral": "Art Buyer", "female": "Art Buyer", "male": "Art Buyer"}, {"neutral": "Art Director", "female": "Art Director", "male": "Art Director"}, {"neutral": "Artist*in", "female": "Artistin", "male": "Artist"}, @@ -170,8 +330,16 @@ class Provider(BaseProvider): "male": "Arzt für Allgemeinmedizin", }, {"neutral": "Arzthelfer*in", "female": "Arzthelferin", "male": "Arzthelfer"}, - {"neutral": "Asphaltierer*in", "female": "Asphaltiererin", "male": "Asphaltierer"}, - {"neutral": "Asset Manager*in", "female": "Asset Managerin", "male": "Asset Manager"}, + { + "neutral": "Asphaltierer*in", + "female": "Asphaltiererin", + "male": "Asphaltierer", + }, + { + "neutral": "Asset Manager*in", + "female": "Asset Managerin", + "male": "Asset Manager", + }, { "neutral": "Assistent*in der Geschäftsführung", "female": "Assistentin der Geschäftsführung", @@ -182,8 +350,16 @@ class Provider(BaseProvider): "female": "Assistentin in der Sicherheitsverwaltung", "male": "Assistent in der Sicherheitsverwaltung", }, - {"neutral": "Assistenzhundetrainer*in", "female": "Assistenzhundetrainerin", "male": "Assistenzhundetrainer"}, - {"neutral": "Assistenzprofessor*in", "female": "Assistenzprofessorin", "male": "Assistenzprofessor"}, + { + "neutral": "Assistenzhundetrainer*in", + "female": "Assistenzhundetrainerin", + "male": "Assistenzhundetrainer", + }, + { + "neutral": "Assistenzprofessor*in", + "female": "Assistenzprofessorin", + "male": "Assistenzprofessor", + }, { "neutral": "Assistenzpädagoge / Assistenzpädagogin", "female": "Assistenzpädagogin", @@ -194,23 +370,55 @@ class Provider(BaseProvider): "female": "Assoziierte (a.o.) Professorin", "male": "Assoziierter (a.o.) Professor", }, - {"neutral": "Astrobiologe / Astrobiologin", "female": "Astrobiologin", "male": "Astrobiologe"}, - {"neutral": "Astrologe / Astrologin", "female": "Astrologin", "male": "Astrologe"}, + { + "neutral": "Astrobiologe / Astrobiologin", + "female": "Astrobiologin", + "male": "Astrobiologe", + }, + { + "neutral": "Astrologe / Astrologin", + "female": "Astrologin", + "male": "Astrologe", + }, {"neutral": "Astronaut*in", "female": "Astronautin", "male": "Astronaut"}, {"neutral": "Astronom*in", "female": "Astronomin", "male": "Astronom"}, - {"neutral": "Astrophysiker*in", "female": "Astrophysikerin", "male": "Astrophysiker"}, + { + "neutral": "Astrophysiker*in", + "female": "Astrophysikerin", + "male": "Astrophysiker", + }, { "neutral": "Atem- und Sprechtrainer*in", "female": "Atem- und Sprechtrainerin", "male": "Atem- und Sprechtrainer", }, - {"neutral": "Atomphysiker*in", "female": "Atomphysikerin", "male": "Atomphysiker"}, - {"neutral": "Audio Engineer", "female": "Audio Engineer", "male": "Audio Engineer"}, + { + "neutral": "Atomphysiker*in", + "female": "Atomphysikerin", + "male": "Atomphysiker", + }, + { + "neutral": "Audio Engineer", + "female": "Audio Engineer", + "male": "Audio Engineer", + }, {"neutral": "Auditor*in", "female": "Auditorin", "male": "Auditor"}, - {"neutral": "Aufnahmeleiter*in", "female": "Aufnahmeleiterin", "male": "Aufnahmeleiter"}, - {"neutral": "Aufnahmetechniker*in", "female": "Aufnahmetechnikerin", "male": "Aufnahmetechniker"}, + { + "neutral": "Aufnahmeleiter*in", + "female": "Aufnahmeleiterin", + "male": "Aufnahmeleiter", + }, + { + "neutral": "Aufnahmetechniker*in", + "female": "Aufnahmetechnikerin", + "male": "Aufnahmetechniker", + }, {"neutral": "Aufräumcoach", "female": "Aufräumcoach", "male": "Aufräumcoach"}, - {"neutral": "Aufsichtsökonom*in", "female": "Aufsichtsökonomin", "male": "Aufsichtsökonom"}, + { + "neutral": "Aufsichtsökonom*in", + "female": "Aufsichtsökonomin", + "male": "Aufsichtsökonom", + }, {"neutral": "Augenoptik", "female": "Augenoptik", "male": "Augenoptik"}, {"neutral": "Auktionator*in", "female": "Auktionatorin", "male": "Auktionator"}, { @@ -218,9 +426,21 @@ class Provider(BaseProvider): "female": "Ausfertigerin (Strick-, Wirkwaren)", "male": "Ausfertiger (Strick-, Wirkwaren)", }, - {"neutral": "Auslandskorrespondent*in", "female": "Auslandskorrespondentin", "male": "Auslandskorrespondent"}, - {"neutral": "Ausstellungstischler*in", "female": "Ausstellungstischlerin", "male": "Ausstellungstischler"}, - {"neutral": "Autobusfahrer*in", "female": "Autobusfahrerin", "male": "Autobusfahrer"}, + { + "neutral": "Auslandskorrespondent*in", + "female": "Auslandskorrespondentin", + "male": "Auslandskorrespondent", + }, + { + "neutral": "Ausstellungstischler*in", + "female": "Ausstellungstischlerin", + "male": "Ausstellungstischler", + }, + { + "neutral": "Autobusfahrer*in", + "female": "Autobusfahrerin", + "male": "Autobusfahrer", + }, {"neutral": "Autohändler*in", "female": "Autohändlerin", "male": "Autohändler"}, { "neutral": "Automatisierungstechniker*in", @@ -238,26 +458,54 @@ class Provider(BaseProvider): "male": "Automotive Mechatronics Engineer", }, {"neutral": "Autor*in", "female": "Autorin", "male": "Autor"}, - {"neutral": "Autoverkäufer*in", "female": "Autoverkäuferin", "male": "Autoverkäufer"}, - {"neutral": "Außenhandelssekretär*in", "female": "Außenhandelssekretärin", "male": "Außenhandelssekretär"}, - {"neutral": "Außenrequisiteur*in", "female": "Außenrequisiteurin", "male": "Außenrequisiteur"}, + { + "neutral": "Autoverkäufer*in", + "female": "Autoverkäuferin", + "male": "Autoverkäufer", + }, + { + "neutral": "Außenhandelssekretär*in", + "female": "Außenhandelssekretärin", + "male": "Außenhandelssekretär", + }, + { + "neutral": "Außenrequisiteur*in", + "female": "Außenrequisiteurin", + "male": "Außenrequisiteur", + }, {"neutral": "Babysitter*in", "female": "Babysitterin", "male": "Babysitter"}, - {"neutral": "Backtechnologie", "female": "Backtechnologie", "male": "Backtechnologie"}, + { + "neutral": "Backtechnologie", + "female": "Backtechnologie", + "male": "Backtechnologie", + }, { "neutral": "Badewärter*in und Saunawärter*in", "female": "Badewärterin und Saunawärterin", "male": "Badewärter und Saunawärter", }, - {"neutral": "Baggerfahrer*in", "female": "Baggerfahrerin", "male": "Baggerfahrer"}, + { + "neutral": "Baggerfahrer*in", + "female": "Baggerfahrerin", + "male": "Baggerfahrer", + }, { "neutral": "Bahnreise- und Mobilitätsservice", "female": "Bahnreise- und Mobilitätsservice", "male": "Bahnreise- und Mobilitätsservice", }, - {"neutral": "Balletttänzer*in", "female": "Balletttänzerin", "male": "Balletttänzer"}, + { + "neutral": "Balletttänzer*in", + "female": "Balletttänzerin", + "male": "Balletttänzer", + }, {"neutral": "Ballistiker*in", "female": "Ballistikerin", "male": "Ballistiker"}, {"neutral": "Bandagist*in", "female": "Bandagistin", "male": "Bandagist"}, - {"neutral": "Bankangestellter / Bankangestellte", "female": "Bankangestellte", "male": "Bankangestellter"}, + { + "neutral": "Bankangestellter / Bankangestellte", + "female": "Bankangestellte", + "male": "Bankangestellter", + }, { "neutral": "Bankangestellter / Bankangestellte (Auslandsreferate)", "female": "Bankangestellte (Auslandsreferate)", @@ -278,28 +526,76 @@ class Provider(BaseProvider): "female": "Bankangestellte (Zentral- und Kontrollbanken)", "male": "Bankangestellter (Zentral- und Kontrollbanken)", }, - {"neutral": "Bankettmanager*in", "female": "Bankettmanagerin", "male": "Bankettmanager"}, + { + "neutral": "Bankettmanager*in", + "female": "Bankettmanagerin", + "male": "Bankettmanager", + }, {"neutral": "Bankkassier*in", "female": "Bankkassierin", "male": "Bankkassier"}, - {"neutral": "Bankkaufmann / Bankkauffrau", "female": "Bankkauffrau", "male": "Bankkaufmann"}, - {"neutral": "Bankkundenbetreuer*in", "female": "Bankkundenbetreuerin", "male": "Bankkundenbetreuer"}, + { + "neutral": "Bankkaufmann / Bankkauffrau", + "female": "Bankkauffrau", + "male": "Bankkaufmann", + }, + { + "neutral": "Bankkundenbetreuer*in", + "female": "Bankkundenbetreuerin", + "male": "Bankkundenbetreuer", + }, {"neutral": "Barista", "female": "Barista", "male": "Barista"}, {"neutral": "Barkeeper / Barmaid", "female": "Barmaid", "male": "Barkeeper"}, {"neutral": "Barmixer*in", "female": "Barmixerin", "male": "Barmixer"}, {"neutral": "Bauarbeiter*in", "female": "Bauarbeiterin", "male": "Bauarbeiter"}, - {"neutral": "Bauingenieur*in", "female": "Bauingenieurin", "male": "Bauingenieur"}, - {"neutral": "Baukaufmann / Baukauffrau", "female": "Baukauffrau", "male": "Baukaufmann"}, + { + "neutral": "Bauingenieur*in", + "female": "Bauingenieurin", + "male": "Bauingenieur", + }, + { + "neutral": "Baukaufmann / Baukauffrau", + "female": "Baukauffrau", + "male": "Baukaufmann", + }, {"neutral": "Bauleiter*in", "female": "Bauleiterin", "male": "Bauleiter"}, - {"neutral": "Baumaschinenführer*in", "female": "Baumaschinenführerin", "male": "Baumaschinenführer"}, - {"neutral": "Baumaschinentechnik", "female": "Baumaschinentechnik", "male": "Baumaschinentechnik"}, - {"neutral": "Baumaschinist*in", "female": "Baumaschinistin", "male": "Baumaschinist"}, + { + "neutral": "Baumaschinenführer*in", + "female": "Baumaschinenführerin", + "male": "Baumaschinenführer", + }, + { + "neutral": "Baumaschinentechnik", + "female": "Baumaschinentechnik", + "male": "Baumaschinentechnik", + }, + { + "neutral": "Baumaschinist*in", + "female": "Baumaschinistin", + "male": "Baumaschinist", + }, {"neutral": "Baumeister*in", "female": "Baumeisterin", "male": "Baumeister"}, {"neutral": "Baumpfleger*in", "female": "Baumpflegerin", "male": "Baumpfleger"}, - {"neutral": "Bauschlosser*in", "female": "Bauschlosserin", "male": "Bauschlosser"}, + { + "neutral": "Bauschlosser*in", + "female": "Bauschlosserin", + "male": "Bauschlosser", + }, {"neutral": "Bauspengler*in", "female": "Bauspenglerin", "male": "Bauspengler"}, {"neutral": "Baustatiker*in", "female": "Baustatikerin", "male": "Baustatiker"}, - {"neutral": "Baustellenkoordinator*in", "female": "Baustellenkoordinatorin", "male": "Baustellenkoordinator"}, - {"neutral": "Baustofftechniker*in", "female": "Baustofftechnikerin", "male": "Baustofftechniker"}, - {"neutral": "Bautechniker*in", "female": "Bautechnikerin", "male": "Bautechniker"}, + { + "neutral": "Baustellenkoordinator*in", + "female": "Baustellenkoordinatorin", + "male": "Baustellenkoordinator", + }, + { + "neutral": "Baustofftechniker*in", + "female": "Baustofftechnikerin", + "male": "Baustofftechniker", + }, + { + "neutral": "Bautechniker*in", + "female": "Bautechnikerin", + "male": "Bautechniker", + }, { "neutral": "Bautechniker*in (Bauökologie)", "female": "Bautechnikerin (Bauökologie)", @@ -340,7 +636,11 @@ class Provider(BaseProvider): "female": "Bautechnikerin (Verkehrsinfrastruktur)", "male": "Bautechniker (Verkehrsinfrastruktur)", }, - {"neutral": "Bautechnische Assistenz", "female": "Bautechnische Assistenz", "male": "Bautechnische Assistenz"}, + { + "neutral": "Bautechnische Assistenz", + "female": "Bautechnische Assistenz", + "male": "Bautechnische Assistenz", + }, { "neutral": "Bautechnischer Zeichner / Bautechnische Zeichnerin", "female": "Bautechnische Zeichnerin", @@ -352,16 +652,36 @@ class Provider(BaseProvider): "female": "Bauwerksabdichtungstechnik", "male": "Bauwerksabdichtungstechnik", }, - {"neutral": "Bauökologe / Bauökologin", "female": "Bauökologin", "male": "Bauökologe"}, + { + "neutral": "Bauökologe / Bauökologin", + "female": "Bauökologin", + "male": "Bauökologe", + }, { "neutral": "Begleitlehrer*in / Integrationslehrer*in", "female": "Begleitlehrerin / Integrationslehrerin", "male": "Begleitlehrer / Integrationslehrer", }, - {"neutral": "Behindertenbegleiter*in", "female": "Behindertenbegleiterin", "male": "Behindertenbegleiter"}, - {"neutral": "Behindertenbetreuer*in", "female": "Behindertenbetreuerin", "male": "Behindertenbetreuer"}, - {"neutral": "Bekleidungsfertiger*in", "female": "Bekleidungsfertigerin", "male": "Bekleidungsfertiger"}, - {"neutral": "Bekleidungsgestaltung", "female": "Bekleidungsgestaltung", "male": "Bekleidungsgestaltung"}, + { + "neutral": "Behindertenbegleiter*in", + "female": "Behindertenbegleiterin", + "male": "Behindertenbegleiter", + }, + { + "neutral": "Behindertenbetreuer*in", + "female": "Behindertenbetreuerin", + "male": "Behindertenbetreuer", + }, + { + "neutral": "Bekleidungsfertiger*in", + "female": "Bekleidungsfertigerin", + "male": "Bekleidungsfertiger", + }, + { + "neutral": "Bekleidungsgestaltung", + "female": "Bekleidungsgestaltung", + "male": "Bekleidungsgestaltung", + }, { "neutral": "Bekleidungsgestaltung - Damenbekleidung", "female": "Bekleidungsgestaltung - Damenbekleidung", @@ -387,23 +707,47 @@ class Provider(BaseProvider): "female": "Bekleidungsgestaltung - Wäschewarenerzeugung", "male": "Bekleidungsgestaltung - Wäschewarenerzeugung", }, - {"neutral": "Bekleidungstechniker*in", "female": "Bekleidungstechnikerin", "male": "Bekleidungstechniker"}, + { + "neutral": "Bekleidungstechniker*in", + "female": "Bekleidungstechnikerin", + "male": "Bekleidungstechniker", + }, {"neutral": "Beleuchter*in", "female": "Beleuchterin", "male": "Beleuchter"}, - {"neutral": "Bereichsleiter*in", "female": "Bereichsleiterin", "male": "Bereichsleiter"}, + { + "neutral": "Bereichsleiter*in", + "female": "Bereichsleiterin", + "male": "Bereichsleiter", + }, { "neutral": "Bereiter*in (Spanische Hofreitschule)", "female": "Bereiterin (Spanische Hofreitschule)", "male": "Bereiter (Spanische Hofreitschule)", }, - {"neutral": "Berg- und Schiführer*in", "female": "Berg- und Schiführerin", "male": "Berg- und Schiführer"}, - {"neutral": "Bergbauingenieur*in", "female": "Bergbauingenieurin", "male": "Bergbauingenieur"}, - {"neutral": "Bergbautechniker*in", "female": "Bergbautechnikerin", "male": "Bergbautechniker"}, + { + "neutral": "Berg- und Schiführer*in", + "female": "Berg- und Schiführerin", + "male": "Berg- und Schiführer", + }, + { + "neutral": "Bergbauingenieur*in", + "female": "Bergbauingenieurin", + "male": "Bergbauingenieur", + }, + { + "neutral": "Bergbautechniker*in", + "female": "Bergbautechnikerin", + "male": "Bergbautechniker", + }, { "neutral": "Bergwerkschlosser-Maschinenhäuer*in", "female": "Bergwerkschlosser-Maschinenhäuerin", "male": "Bergwerkschlosser-Maschinenhäuer", }, - {"neutral": "Berufsdetektiv*in", "female": "Berufsdetektivin", "male": "Berufsdetektiv"}, + { + "neutral": "Berufsdetektiv*in", + "female": "Berufsdetektivin", + "male": "Berufsdetektiv", + }, { "neutral": "Berufsdetektiv-Assistent*in", "female": "Berufsdetektiv-Assistentin", @@ -414,10 +758,22 @@ class Provider(BaseProvider): "female": "Berufsfeuerwehrfrau", "male": "Berufsfeuerwehrmann", }, - {"neutral": "Berufsfotograf*in", "female": "Berufsfotografin", "male": "Berufsfotograf"}, - {"neutral": "Berufsfotografie", "female": "Berufsfotografie", "male": "Berufsfotografie"}, + { + "neutral": "Berufsfotograf*in", + "female": "Berufsfotografin", + "male": "Berufsfotograf", + }, + { + "neutral": "Berufsfotografie", + "female": "Berufsfotografie", + "male": "Berufsfotografie", + }, {"neutral": "Berufsjäger*in", "female": "Berufsjägerin", "male": "Berufsjäger"}, - {"neutral": "Berufskraftfahrer*in", "female": "Berufskraftfahrerin", "male": "Berufskraftfahrer"}, + { + "neutral": "Berufskraftfahrer*in", + "female": "Berufskraftfahrerin", + "male": "Berufskraftfahrer", + }, { "neutral": "Berufskraftfahrer*in - Güterbeförderung", "female": "Berufskraftfahrerin - Güterbeförderung", @@ -428,10 +784,26 @@ class Provider(BaseProvider): "female": "Berufskraftfahrerin - Personenbeförderung", "male": "Berufskraftfahrer - Personenbeförderung", }, - {"neutral": "Berufsoffizier*in", "female": "Berufsoffizierin", "male": "Berufsoffizier"}, - {"neutral": "Berufsschullehrer*in", "female": "Berufsschullehrerin", "male": "Berufsschullehrer"}, - {"neutral": "Berufstaucher*in", "female": "Berufstaucherin", "male": "Berufstaucher"}, - {"neutral": "Besamungstechniker*in", "female": "Besamungstechnikerin", "male": "Besamungstechniker"}, + { + "neutral": "Berufsoffizier*in", + "female": "Berufsoffizierin", + "male": "Berufsoffizier", + }, + { + "neutral": "Berufsschullehrer*in", + "female": "Berufsschullehrerin", + "male": "Berufsschullehrer", + }, + { + "neutral": "Berufstaucher*in", + "female": "Berufstaucherin", + "male": "Berufstaucher", + }, + { + "neutral": "Besamungstechniker*in", + "female": "Besamungstechnikerin", + "male": "Besamungstechniker", + }, {"neutral": "Beschließer*in", "female": "Beschließerin", "male": "Beschließer"}, { "neutral": "Beschriftungsdesign und Werbetechnik", @@ -439,9 +811,17 @@ class Provider(BaseProvider): "male": "Beschriftungsdesign und Werbetechnik", }, {"neutral": "Bestatter*in", "female": "Bestatterin", "male": "Bestatter"}, - {"neutral": "Beteiligungsmanager*in", "female": "Beteiligungsmanagerin", "male": "Beteiligungsmanager"}, + { + "neutral": "Beteiligungsmanager*in", + "female": "Beteiligungsmanagerin", + "male": "Beteiligungsmanager", + }, {"neutral": "Betonbau", "female": "Betonbau", "male": "Betonbau"}, - {"neutral": "Betonbauspezialist*in", "female": "Betonbauspezialistin", "male": "Betonbauspezialist"}, + { + "neutral": "Betonbauspezialist*in", + "female": "Betonbauspezialistin", + "male": "Betonbauspezialist", + }, { "neutral": "Betonbauspezialist*in - Konstruktiver Betonbau", "female": "Betonbauspezialistin - Konstruktiver Betonbau", @@ -467,51 +847,139 @@ class Provider(BaseProvider): "female": "Betonfertigerin - Terrazzoherstellung", "male": "Betonfertiger - Terrazzoherstellung", }, - {"neutral": "Betonfertigteiltechnik", "female": "Betonfertigteiltechnik", "male": "Betonfertigteiltechnik"}, - {"neutral": "Betonfertigungstechnik", "female": "Betonfertigungstechnik", "male": "Betonfertigungstechnik"}, - {"neutral": "Betonwarenerzeuger*in", "female": "Betonwarenerzeugerin", "male": "Betonwarenerzeuger"}, - {"neutral": "Betriebsarzt / Betriebsärztin", "female": "Betriebsärztin", "male": "Betriebsarzt"}, - {"neutral": "Betriebsdienstleister*in", "female": "Betriebsdienstleisterin", "male": "Betriebsdienstleister"}, - {"neutral": "Betriebsdienstleistung", "female": "Betriebsdienstleistung", "male": "Betriebsdienstleistung"}, - {"neutral": "Betriebselektriker*in", "female": "Betriebselektrikerin", "male": "Betriebselektriker"}, - {"neutral": "Betriebsinformatiker*in", "female": "Betriebsinformatikerin", "male": "Betriebsinformatiker"}, - {"neutral": "Betriebsleiter*in", "female": "Betriebsleiterin", "male": "Betriebsleiter"}, + { + "neutral": "Betonfertigteiltechnik", + "female": "Betonfertigteiltechnik", + "male": "Betonfertigteiltechnik", + }, + { + "neutral": "Betonfertigungstechnik", + "female": "Betonfertigungstechnik", + "male": "Betonfertigungstechnik", + }, + { + "neutral": "Betonwarenerzeuger*in", + "female": "Betonwarenerzeugerin", + "male": "Betonwarenerzeuger", + }, + { + "neutral": "Betriebsarzt / Betriebsärztin", + "female": "Betriebsärztin", + "male": "Betriebsarzt", + }, + { + "neutral": "Betriebsdienstleister*in", + "female": "Betriebsdienstleisterin", + "male": "Betriebsdienstleister", + }, + { + "neutral": "Betriebsdienstleistung", + "female": "Betriebsdienstleistung", + "male": "Betriebsdienstleistung", + }, + { + "neutral": "Betriebselektriker*in", + "female": "Betriebselektrikerin", + "male": "Betriebselektriker", + }, + { + "neutral": "Betriebsinformatiker*in", + "female": "Betriebsinformatikerin", + "male": "Betriebsinformatiker", + }, + { + "neutral": "Betriebsleiter*in", + "female": "Betriebsleiterin", + "male": "Betriebsleiter", + }, { "neutral": "Betriebslogistikkaufmann / Betriebslogistikkauffrau", "female": "Betriebslogistikkauffrau", "male": "Betriebslogistikkaufmann", }, - {"neutral": "Betriebsrat / Betriebsrätin", "female": "Betriebsrätin", "male": "Betriebsrat"}, - {"neutral": "Betriebsschlosser*in", "female": "Betriebsschlosserin", "male": "Betriebsschlosser"}, - {"neutral": "Betriebstechniker*in", "female": "Betriebstechnikerin", "male": "Betriebstechniker"}, - {"neutral": "Betriebswirt*in", "female": "Betriebswirtin", "male": "Betriebswirt"}, + { + "neutral": "Betriebsrat / Betriebsrätin", + "female": "Betriebsrätin", + "male": "Betriebsrat", + }, + { + "neutral": "Betriebsschlosser*in", + "female": "Betriebsschlosserin", + "male": "Betriebsschlosser", + }, + { + "neutral": "Betriebstechniker*in", + "female": "Betriebstechnikerin", + "male": "Betriebstechniker", + }, + { + "neutral": "Betriebswirt*in", + "female": "Betriebswirtin", + "male": "Betriebswirt", + }, {"neutral": "Bewacher*in", "female": "Bewacherin", "male": "Bewacher"}, { "neutral": "Bewegungspädagoge / Bewegungspädagogin", "female": "Bewegungspädagogin", "male": "Bewegungspädagoge", }, - {"neutral": "Bewährungshelfer*in", "female": "Bewährungshelferin", "male": "Bewährungshelfer"}, - {"neutral": "Bezirksanwalt / Bezirksanwältin", "female": "Bezirksanwältin", "male": "Bezirksanwalt"}, - {"neutral": "Bibliothekar*in", "female": "Bibliothekarin", "male": "Bibliothekar"}, + { + "neutral": "Bewährungshelfer*in", + "female": "Bewährungshelferin", + "male": "Bewährungshelfer", + }, + { + "neutral": "Bezirksanwalt / Bezirksanwältin", + "female": "Bezirksanwältin", + "male": "Bezirksanwalt", + }, + { + "neutral": "Bibliothekar*in", + "female": "Bibliothekarin", + "male": "Bibliothekar", + }, { "neutral": "Bibliothekar*in (wissenschaftl. Bibliotheken)", "female": "Bibliothekarin (wissenschaftl. Bibliotheken)", "male": "Bibliothekar (wissenschaftl. Bibliotheken)", }, - {"neutral": "Bienenwirtschaft", "female": "Bienenwirtschaft", "male": "Bienenwirtschaft"}, - {"neutral": "Bilanzbuchhalter*in", "female": "Bilanzbuchhalterin", "male": "Bilanzbuchhalter"}, + { + "neutral": "Bienenwirtschaft", + "female": "Bienenwirtschaft", + "male": "Bienenwirtschaft", + }, + { + "neutral": "Bilanzbuchhalter*in", + "female": "Bilanzbuchhalterin", + "male": "Bilanzbuchhalter", + }, {"neutral": "Bildhauer*in", "female": "Bildhauerin", "male": "Bildhauer"}, {"neutral": "Bildhauerei", "female": "Bildhauerei", "male": "Bildhauerei"}, - {"neutral": "Bildjournalist*in", "female": "Bildjournalistin", "male": "Bildjournalist"}, + { + "neutral": "Bildjournalist*in", + "female": "Bildjournalistin", + "male": "Bildjournalist", + }, { "neutral": "Bildungs- und Berufsberater*in", "female": "Bildungs- und Berufsberaterin", "male": "Bildungs- und Berufsberater", }, - {"neutral": "Bildungsberater*in", "female": "Bildungsberaterin", "male": "Bildungsberater"}, - {"neutral": "Bildungscontroller*in", "female": "Bildungscontrollerin", "male": "Bildungscontroller"}, - {"neutral": "Bildungsmanager*in", "female": "Bildungsmanagerin", "male": "Bildungsmanager"}, + { + "neutral": "Bildungsberater*in", + "female": "Bildungsberaterin", + "male": "Bildungsberater", + }, + { + "neutral": "Bildungscontroller*in", + "female": "Bildungscontrollerin", + "male": "Bildungscontroller", + }, + { + "neutral": "Bildungsmanager*in", + "female": "Bildungsmanagerin", + "male": "Bildungsmanager", + }, { "neutral": "Bildungswissenschafter*in", "female": "Bildungswissenschafterin", @@ -523,19 +991,39 @@ class Provider(BaseProvider): "male": "Billeteur (Kartenverkäufer)", }, {"neutral": "Binder*in", "female": "Binderin", "male": "Binder"}, - {"neutral": "Binnenschifffahrt", "female": "Binnenschifffahrt", "male": "Binnenschifffahrt"}, - {"neutral": "Biobauer / Biobäuerin", "female": "Biobäuerin", "male": "Biobauer"}, + { + "neutral": "Binnenschifffahrt", + "female": "Binnenschifffahrt", + "male": "Binnenschifffahrt", + }, + { + "neutral": "Biobauer / Biobäuerin", + "female": "Biobäuerin", + "male": "Biobauer", + }, {"neutral": "Biobäcker*in", "female": "Biobäckerin", "male": "Biobäcker"}, {"neutral": "Biochemiker*in", "female": "Biochemikerin", "male": "Biochemiker"}, - {"neutral": "Biofeedbacktrainer*in", "female": "Biofeedbacktrainerin", "male": "Biofeedbacktrainer"}, - {"neutral": "Bioinformatiker*in", "female": "Bioinformatikerin", "male": "Bioinformatiker"}, + { + "neutral": "Biofeedbacktrainer*in", + "female": "Biofeedbacktrainerin", + "male": "Biofeedbacktrainer", + }, + { + "neutral": "Bioinformatiker*in", + "female": "Bioinformatikerin", + "male": "Bioinformatiker", + }, {"neutral": "Biologe / Biologin", "female": "Biologin", "male": "Biologe"}, { "neutral": "Biomasseproduktion und land- und forstwirtschaftliche Bioenergiegewinnung", "female": "Biomasseproduktion und land- und forstwirtschaftliche Bioenergiegewinnung", "male": "Biomasseproduktion und land- und forstwirtschaftliche Bioenergiegewinnung", }, - {"neutral": "Biomedical Engineer", "female": "Biomedical Engineer", "male": "Biomedical Engineer"}, + { + "neutral": "Biomedical Engineer", + "female": "Biomedical Engineer", + "male": "Biomedical Engineer", + }, { "neutral": "Biomedizinische*r Analytiker*in", "female": "Biomedizinische Analytikerin", @@ -543,8 +1031,16 @@ class Provider(BaseProvider): }, {"neutral": "Bioniker*in", "female": "Bionikerin", "male": "Bioniker"}, {"neutral": "Biophysiker*in", "female": "Biophysikerin", "male": "Biophysiker"}, - {"neutral": "Biotechniker*in", "female": "Biotechnikerin", "male": "Biotechniker"}, - {"neutral": "Biotechnologe / Biotechnologin", "female": "Biotechnologin", "male": "Biotechnologe"}, + { + "neutral": "Biotechniker*in", + "female": "Biotechnikerin", + "male": "Biotechniker", + }, + { + "neutral": "Biotechnologe / Biotechnologin", + "female": "Biotechnologin", + "male": "Biotechnologe", + }, { "neutral": "Bioverfahrenstechniker*in", "female": "Bioverfahrenstechnikerin", @@ -555,8 +1051,16 @@ class Provider(BaseProvider): "female": "Blechblasinstrumentenerzeugung", "male": "Blechblasinstrumentenerzeugung", }, - {"neutral": "Blechschlosser*in", "female": "Blechschlosserin", "male": "Blechschlosser"}, - {"neutral": "Blockchain-Entwickler*in", "female": "Blockchain-Entwicklerin", "male": "Blockchain-Entwickler"}, + { + "neutral": "Blechschlosser*in", + "female": "Blechschlosserin", + "male": "Blechschlosser", + }, + { + "neutral": "Blockchain-Entwickler*in", + "female": "Blockchain-Entwicklerin", + "male": "Blockchain-Entwickler", + }, {"neutral": "Blogger*in", "female": "Bloggerin", "male": "Blogger"}, { "neutral": "Blumenbinder*in und -händler*in (Florist*in)", @@ -565,7 +1069,11 @@ class Provider(BaseProvider): }, {"neutral": "Bodenleger*in", "female": "Bodenlegerin", "male": "Bodenleger"}, {"neutral": "Bodyguard", "female": "Bodyguard", "male": "Bodyguard"}, - {"neutral": "Bohrarbeiter*in", "female": "Bohrarbeiterin", "male": "Bohrarbeiter"}, + { + "neutral": "Bohrarbeiter*in", + "female": "Bohrarbeiterin", + "male": "Bohrarbeiter", + }, { "neutral": "Bonbon- und Konfektmacher*in", "female": "Bonbon- und Konfektmacherin", @@ -573,12 +1081,24 @@ class Provider(BaseProvider): }, {"neutral": "Booker", "female": "Booker", "male": "Booker"}, {"neutral": "Bootbauer*in", "female": "Bootbauerin", "male": "Bootbauer"}, - {"neutral": "Bordtechniker*in", "female": "Bordtechnikerin", "male": "Bordtechniker"}, + { + "neutral": "Bordtechniker*in", + "female": "Bordtechnikerin", + "male": "Bordtechniker", + }, {"neutral": "Botaniker*in", "female": "Botanikerin", "male": "Botaniker"}, {"neutral": "Bote/Botin", "female": "Botin", "male": "Bote"}, {"neutral": "Botschafter*in", "female": "Botschafterin", "male": "Botschafter"}, - {"neutral": "Botschaftssekretär*in", "female": "Botschaftssekretärin", "male": "Botschaftssekretär"}, - {"neutral": "Brand Manager*in", "female": "Brand Managerin", "male": "Brand Manager"}, + { + "neutral": "Botschaftssekretär*in", + "female": "Botschaftssekretärin", + "male": "Botschaftssekretär", + }, + { + "neutral": "Brand Manager*in", + "female": "Brand Managerin", + "male": "Brand Manager", + }, { "neutral": "Brandschutzbeauftragter / Brandschutzbeauftragte", "female": "Brandschutzbeauftragte", @@ -589,7 +1109,11 @@ class Provider(BaseProvider): "female": "Brau- und Getränketechnik", "male": "Brau- und Getränketechnik", }, - {"neutral": "Brauer*in und Mälzer*in", "female": "Brauerin und Mälzerin", "male": "Brauer und Mälzer"}, + { + "neutral": "Brauer*in und Mälzer*in", + "female": "Brauerin und Mälzerin", + "male": "Brauer und Mälzer", + }, { "neutral": "Brief- und Paketzusteller*in", "female": "Brief- und Paketzustellerin", @@ -597,8 +1121,16 @@ class Provider(BaseProvider): }, {"neutral": "Briefträger*in", "female": "Briefträgerin", "male": "Briefträger"}, {"neutral": "Broker", "female": "Broker", "male": "Broker"}, - {"neutral": "Brunnen- und Grundbau", "female": "Brunnen- und Grundbau", "male": "Brunnen- und Grundbau"}, - {"neutral": "Brunnenmacher*in", "female": "Brunnenmacherin", "male": "Brunnenmacher"}, + { + "neutral": "Brunnen- und Grundbau", + "female": "Brunnen- und Grundbau", + "male": "Brunnen- und Grundbau", + }, + { + "neutral": "Brunnenmacher*in", + "female": "Brunnenmacherin", + "male": "Brunnenmacher", + }, { "neutral": "Buch- und Medienwirtschaft", "female": "Buch- und Medienwirtschaft", @@ -645,7 +1177,11 @@ class Provider(BaseProvider): {"neutral": "Buchhaltung", "female": "Buchhaltung", "male": "Buchhaltung"}, {"neutral": "Buchhändler*in", "female": "Buchhändlerin", "male": "Buchhändler"}, {"neutral": "Buchmacher*in", "female": "Buchmacherin", "male": "Buchmacher"}, - {"neutral": "Buffet- und Schankkraft", "female": "Buffet- und Schankkraft", "male": "Buffet- und Schankkraft"}, + { + "neutral": "Buffet- und Schankkraft", + "female": "Buffet- und Schankkraft", + "male": "Buffet- und Schankkraft", + }, { "neutral": "Building Information Modeling (BIM) Manager*in", "female": "Building Information Modeling (BIM) Managerin", @@ -656,23 +1192,75 @@ class Provider(BaseProvider): "female": "Burnout-Prophylaxe Trainerin", "male": "Burnout-Prophylaxe Trainer", }, - {"neutral": "Business Analyst*in", "female": "Business Analystin", "male": "Business Analyst"}, - {"neutral": "Business Developer", "female": "Business Developer", "male": "Business Developer"}, + { + "neutral": "Business Analyst*in", + "female": "Business Analystin", + "male": "Business Analyst", + }, + { + "neutral": "Business Developer", + "female": "Business Developer", + "male": "Business Developer", + }, {"neutral": "Butler / Butleress", "female": "Butleress", "male": "Butler"}, {"neutral": "Bäckerei", "female": "Bäckerei", "male": "Bäckerei"}, - {"neutral": "Börsendisponent*in", "female": "Börsendisponentin", "male": "Börsendisponent"}, - {"neutral": "Börsenhändler*in", "female": "Börsenhändlerin", "male": "Börsenhändler"}, - {"neutral": "Börsenmakler*in", "female": "Börsenmaklerin", "male": "Börsenmakler"}, - {"neutral": "Büchsenmacher*in", "female": "Büchsenmacherin", "male": "Büchsenmacher"}, + { + "neutral": "Börsendisponent*in", + "female": "Börsendisponentin", + "male": "Börsendisponent", + }, + { + "neutral": "Börsenhändler*in", + "female": "Börsenhändlerin", + "male": "Börsenhändler", + }, + { + "neutral": "Börsenmakler*in", + "female": "Börsenmaklerin", + "male": "Börsenmakler", + }, + { + "neutral": "Büchsenmacher*in", + "female": "Büchsenmacherin", + "male": "Büchsenmacher", + }, {"neutral": "Bügler*in", "female": "Büglerin", "male": "Bügler"}, - {"neutral": "Bühnenarbeiter*in", "female": "Bühnenarbeiterin", "male": "Bühnenarbeiter"}, - {"neutral": "Bühnenbildner*in", "female": "Bühnenbildnerin", "male": "Bühnenbildner"}, + { + "neutral": "Bühnenarbeiter*in", + "female": "Bühnenarbeiterin", + "male": "Bühnenarbeiter", + }, + { + "neutral": "Bühnenbildner*in", + "female": "Bühnenbildnerin", + "male": "Bühnenbildner", + }, {"neutral": "Bühnenmaler*in", "female": "Bühnenmalerin", "male": "Bühnenmaler"}, - {"neutral": "Bühnentechniker*in", "female": "Bühnentechnikerin", "male": "Bühnentechniker"}, - {"neutral": "Bühnentischler*in", "female": "Bühnentischlerin", "male": "Bühnentischler"}, - {"neutral": "Büroangestellter / Büroangestellte", "female": "Büroangestellte", "male": "Büroangestellter"}, - {"neutral": "Büroassistent*in", "female": "Büroassistentin", "male": "Büroassistent"}, - {"neutral": "Bürokaufmann / Bürokauffrau", "female": "Bürokauffrau", "male": "Bürokaufmann"}, + { + "neutral": "Bühnentechniker*in", + "female": "Bühnentechnikerin", + "male": "Bühnentechniker", + }, + { + "neutral": "Bühnentischler*in", + "female": "Bühnentischlerin", + "male": "Bühnentischler", + }, + { + "neutral": "Büroangestellter / Büroangestellte", + "female": "Büroangestellte", + "male": "Büroangestellter", + }, + { + "neutral": "Büroassistent*in", + "female": "Büroassistentin", + "male": "Büroassistent", + }, + { + "neutral": "Bürokaufmann / Bürokauffrau", + "female": "Bürokauffrau", + "male": "Bürokaufmann", + }, {"neutral": "Büroleiter*in", "female": "Büroleiterin", "male": "Büroleiter"}, { "neutral": "Büromaschinentechniker*in", @@ -684,27 +1272,107 @@ class Provider(BaseProvider): "female": "Bürsten- und Pinselmacherin", "male": "Bürsten- und Pinselmacher", }, - {"neutral": "CAD-Techniker*in", "female": "CAD-Technikerin", "male": "CAD-Techniker"}, - {"neutral": "CAM-Techniker*in", "female": "CAM-Technikerin", "male": "CAM-Techniker"}, - {"neutral": "CATIA-Techniker*in", "female": "CATIA-Technikerin", "male": "CATIA-Techniker"}, - {"neutral": "Callcenter Agent", "female": "Callcenter Agent", "male": "Callcenter Agent"}, - {"neutral": "Campaign Manager*in", "female": "Campaign Managerin", "male": "Campaign Manager"}, - {"neutral": "Campingplatzwart*in", "female": "Campingplatzwartin", "male": "Campingplatzwart"}, - {"neutral": "Canyoningführer*in", "female": "Canyoningführerin", "male": "Canyoningführer"}, - {"neutral": "Casting Director", "female": "Casting Director", "male": "Casting Director"}, - {"neutral": "Category Manager*in", "female": "Category Managerin", "male": "Category Manager"}, - {"neutral": "Catering-Spezialist*in", "female": "Catering-Spezialistin", "male": "Catering-Spezialist"}, - {"neutral": "Change Manager*in", "female": "Change Managerin", "male": "Change Manager"}, - {"neutral": "Chatbot-Entwickler*in", "female": "Chatbot-Entwicklerin", "male": "Chatbot-Entwickler"}, + { + "neutral": "CAD-Techniker*in", + "female": "CAD-Technikerin", + "male": "CAD-Techniker", + }, + { + "neutral": "CAM-Techniker*in", + "female": "CAM-Technikerin", + "male": "CAM-Techniker", + }, + { + "neutral": "CATIA-Techniker*in", + "female": "CATIA-Technikerin", + "male": "CATIA-Techniker", + }, + { + "neutral": "Callcenter Agent", + "female": "Callcenter Agent", + "male": "Callcenter Agent", + }, + { + "neutral": "Campaign Manager*in", + "female": "Campaign Managerin", + "male": "Campaign Manager", + }, + { + "neutral": "Campingplatzwart*in", + "female": "Campingplatzwartin", + "male": "Campingplatzwart", + }, + { + "neutral": "Canyoningführer*in", + "female": "Canyoningführerin", + "male": "Canyoningführer", + }, + { + "neutral": "Casting Director", + "female": "Casting Director", + "male": "Casting Director", + }, + { + "neutral": "Category Manager*in", + "female": "Category Managerin", + "male": "Category Manager", + }, + { + "neutral": "Catering-Spezialist*in", + "female": "Catering-Spezialistin", + "male": "Catering-Spezialist", + }, + { + "neutral": "Change Manager*in", + "female": "Change Managerin", + "male": "Change Manager", + }, + { + "neutral": "Chatbot-Entwickler*in", + "female": "Chatbot-Entwicklerin", + "male": "Chatbot-Entwickler", + }, {"neutral": "Chauffeur*in", "female": "Chauffeurin", "male": "Chauffeur"}, - {"neutral": "Chefredakteur*in", "female": "Chefredakteurin", "male": "Chefredakteur"}, - {"neutral": "Chemieinformatiker*in", "female": "Chemieinformatikerin", "male": "Chemieinformatiker"}, - {"neutral": "Chemieingenieur*in", "female": "Chemieingenieurin", "male": "Chemieingenieur"}, - {"neutral": "Chemielaborant*in", "female": "Chemielaborantin", "male": "Chemielaborant"}, - {"neutral": "Chemielabortechnik", "female": "Chemielabortechnik", "male": "Chemielabortechnik"}, - {"neutral": "Chemietechniker*in", "female": "Chemietechnikerin", "male": "Chemietechniker"}, - {"neutral": "Chemieverfahrenstechnik", "female": "Chemieverfahrenstechnik", "male": "Chemieverfahrenstechnik"}, - {"neutral": "Chemiewerker*in", "female": "Chemiewerkerin", "male": "Chemiewerker"}, + { + "neutral": "Chefredakteur*in", + "female": "Chefredakteurin", + "male": "Chefredakteur", + }, + { + "neutral": "Chemieinformatiker*in", + "female": "Chemieinformatikerin", + "male": "Chemieinformatiker", + }, + { + "neutral": "Chemieingenieur*in", + "female": "Chemieingenieurin", + "male": "Chemieingenieur", + }, + { + "neutral": "Chemielaborant*in", + "female": "Chemielaborantin", + "male": "Chemielaborant", + }, + { + "neutral": "Chemielabortechnik", + "female": "Chemielabortechnik", + "male": "Chemielabortechnik", + }, + { + "neutral": "Chemietechniker*in", + "female": "Chemietechnikerin", + "male": "Chemietechniker", + }, + { + "neutral": "Chemieverfahrenstechnik", + "female": "Chemieverfahrenstechnik", + "male": "Chemieverfahrenstechnik", + }, + { + "neutral": "Chemiewerker*in", + "female": "Chemiewerkerin", + "male": "Chemiewerker", + }, {"neutral": "Chemiker*in", "female": "Chemikerin", "male": "Chemiker"}, { "neutral": "Chemiker*in für Analytische Chemie", @@ -731,19 +1399,43 @@ class Provider(BaseProvider): "female": "Chemikerin für Technische Chemie", "male": "Chemiker für Technische Chemie", }, - {"neutral": "Chip-Designer*in", "female": "Chip-Designerin", "male": "Chip-Designer"}, + { + "neutral": "Chip-Designer*in", + "female": "Chip-Designerin", + "male": "Chip-Designer", + }, { "neutral": "Chirurgieinstrumentenerzeuger*in", "female": "Chirurgieinstrumentenerzeugerin", "male": "Chirurgieinstrumentenerzeuger", }, - {"neutral": "Chocolatier / Chocolatière", "female": "Chocolatière", "male": "Chocolatier"}, + { + "neutral": "Chocolatier / Chocolatière", + "female": "Chocolatière", + "male": "Chocolatier", + }, {"neutral": "Choreograf*in", "female": "Choreografin", "male": "Choreograf"}, {"neutral": "Chorsänger*in", "female": "Chorsängerin", "male": "Chorsänger"}, - {"neutral": "Clinical Engineer", "female": "Clinical Engineer", "male": "Clinical Engineer"}, - {"neutral": "Cloud Engineer", "female": "Cloud Engineer", "male": "Cloud Engineer"}, - {"neutral": "Cloud Software Engineer", "female": "Cloud Software Engineer", "male": "Cloud Software Engineer"}, - {"neutral": "Cloud-Architekt*in", "female": "Cloud-Architektin", "male": "Cloud-Architekt"}, + { + "neutral": "Clinical Engineer", + "female": "Clinical Engineer", + "male": "Clinical Engineer", + }, + { + "neutral": "Cloud Engineer", + "female": "Cloud Engineer", + "male": "Cloud Engineer", + }, + { + "neutral": "Cloud Software Engineer", + "female": "Cloud Software Engineer", + "male": "Cloud Software Engineer", + }, + { + "neutral": "Cloud-Architekt*in", + "female": "Cloud-Architektin", + "male": "Cloud-Architekt", + }, { "neutral": "Cloud-Netzwerktechniker*in", "female": "Cloud-Netzwerktechnikerin", @@ -754,49 +1446,105 @@ class Provider(BaseProvider): "female": "Cloud-Sicherheitstechnikerin", "male": "Cloud-Sicherheitstechniker", }, - {"neutral": "Cloud-Systemtechniker*in", "female": "Cloud-Systemtechnikerin", "male": "Cloud-Systemtechniker"}, + { + "neutral": "Cloud-Systemtechniker*in", + "female": "Cloud-Systemtechnikerin", + "male": "Cloud-Systemtechniker", + }, {"neutral": "Clown", "female": "Clown", "male": "Clown"}, {"neutral": "Co-Pilot*in", "female": "Co-Pilotin", "male": "Co-Pilot"}, {"neutral": "Coach", "female": "Coach", "male": "Coach"}, - {"neutral": "Cognitive Developer", "female": "Cognitive Developer", "male": "Cognitive Developer"}, + { + "neutral": "Cognitive Developer", + "female": "Cognitive Developer", + "male": "Cognitive Developer", + }, { "neutral": "Commerce Manager*in E- & M-Commerce", "female": "Commerce Managerin E- & M-Commerce", "male": "Commerce Manager E- & M-Commerce", }, - {"neutral": "Community Manager*in", "female": "Community Managerin", "male": "Community Manager"}, + { + "neutral": "Community Manager*in", + "female": "Community Managerin", + "male": "Community Manager", + }, { "neutral": "Compensation & Benefits Betreuer*in", "female": "Compensation & Benefits Betreuerin", "male": "Compensation & Benefits Betreuer", }, - {"neutral": "Compliance-Officer", "female": "Compliance-Officer", "male": "Compliance-Officer"}, - {"neutral": "Compositing Artist", "female": "Compositing Artist", "male": "Compositing Artist"}, - {"neutral": "Computer Forensiker*in", "female": "Computer Forensikerin", "male": "Computer Forensiker"}, - {"neutral": "Computer Visualist*in", "female": "Computer Visualistin", "male": "Computer Visualist"}, + { + "neutral": "Compliance-Officer", + "female": "Compliance-Officer", + "male": "Compliance-Officer", + }, + { + "neutral": "Compositing Artist", + "female": "Compositing Artist", + "male": "Compositing Artist", + }, + { + "neutral": "Computer Forensiker*in", + "female": "Computer Forensikerin", + "male": "Computer Forensiker", + }, + { + "neutral": "Computer Visualist*in", + "female": "Computer Visualistin", + "male": "Computer Visualist", + }, { "neutral": "Computer-Animationsdesigner*in", "female": "Computer-Animationsdesignerin", "male": "Computer-Animationsdesigner", }, - {"neutral": "Computeranimateur*in", "female": "Computeranimateurin", "male": "Computeranimateur"}, - {"neutral": "Computerbuch-Autor*in", "female": "Computerbuch-Autorin", "male": "Computerbuch-Autor"}, - {"neutral": "Computergrafiker*in", "female": "Computergrafikerin", "male": "Computergrafiker"}, - {"neutral": "Computerlinguist*in", "female": "Computerlinguistin", "male": "Computerlinguist"}, - {"neutral": "Computermathematiker*in", "female": "Computermathematikerin", "male": "Computermathematiker"}, + { + "neutral": "Computeranimateur*in", + "female": "Computeranimateurin", + "male": "Computeranimateur", + }, + { + "neutral": "Computerbuch-Autor*in", + "female": "Computerbuch-Autorin", + "male": "Computerbuch-Autor", + }, + { + "neutral": "Computergrafiker*in", + "female": "Computergrafikerin", + "male": "Computergrafiker", + }, + { + "neutral": "Computerlinguist*in", + "female": "Computerlinguistin", + "male": "Computerlinguist", + }, + { + "neutral": "Computermathematiker*in", + "female": "Computermathematikerin", + "male": "Computermathematiker", + }, { "neutral": "Computerspielprogrammierer*in", "female": "Computerspielprogrammiererin", "male": "Computerspielprogrammierer", }, - {"neutral": "Computertechniker*in", "female": "Computertechnikerin", "male": "Computertechniker"}, + { + "neutral": "Computertechniker*in", + "female": "Computertechnikerin", + "male": "Computertechniker", + }, {"neutral": "Concierge", "female": "Concierge", "male": "Concierge"}, { "neutral": "Concierge Service Provider", "female": "Concierge Service Provider", "male": "Concierge Service Provider", }, - {"neutral": "Content Manager*in", "female": "Content Managerin", "male": "Content Manager"}, + { + "neutral": "Content Manager*in", + "female": "Content Managerin", + "male": "Content Manager", + }, {"neutral": "Continuity", "female": "Continuity", "male": "Continuity"}, {"neutral": "Controller*in", "female": "Controllerin", "male": "Controller"}, { @@ -804,8 +1552,16 @@ class Provider(BaseProvider): "female": "Corporate-Social-Responsibility Managerin", "male": "Corporate-Social-Responsibility Manager", }, - {"neutral": "Cost Engineer", "female": "Cost Engineer", "male": "Cost Engineer"}, - {"neutral": "Creative Director", "female": "Creative Director", "male": "Creative Director"}, + { + "neutral": "Cost Engineer", + "female": "Cost Engineer", + "male": "Cost Engineer", + }, + { + "neutral": "Creative Director", + "female": "Creative Director", + "male": "Creative Director", + }, {"neutral": "Croupier/Croupière", "female": "Croupière", "male": "Croupier"}, { "neutral": "Customer Relation Manager*in", @@ -813,25 +1569,73 @@ class Provider(BaseProvider): "male": "Customer Relation Manager", }, {"neutral": "Cutter*in", "female": "Cutterin", "male": "Cutter"}, - {"neutral": "Cyber Security Analyst", "female": "Cyber Security Analyst", "male": "Cyber Security Analyst"}, + { + "neutral": "Cyber Security Analyst", + "female": "Cyber Security Analyst", + "male": "Cyber Security Analyst", + }, { "neutral": "Cyber Security Professional", "female": "Cyber Security Professional", "male": "Cyber Security Professional", }, - {"neutral": "DJ (Disc-Jockey)", "female": "DJ (Disc-Jockey)", "male": "DJ (Disc-Jockey)"}, + { + "neutral": "DJ (Disc-Jockey)", + "female": "DJ (Disc-Jockey)", + "male": "DJ (Disc-Jockey)", + }, {"neutral": "DV-Berater*in", "female": "DV-Beraterin", "male": "DV-Berater"}, {"neutral": "Dachdecker*in", "female": "Dachdeckerin", "male": "Dachdecker"}, - {"neutral": "Damenkleidermacher*in", "female": "Damenkleidermacherin", "male": "Damenkleidermacher"}, - {"neutral": "Data Scientist", "female": "Data Scientist", "male": "Data Scientist"}, - {"neutral": "Data Security Advisor", "female": "Data Security Advisor", "male": "Data Security Advisor"}, - {"neutral": "Data Warehouse Analyst", "female": "Data Warehouse Analyst", "male": "Data Warehouse Analyst"}, - {"neutral": "Database Analyst*in", "female": "Database Analystin", "male": "Database Analyst"}, - {"neutral": "Database Developer", "female": "Database Developer", "male": "Database Developer"}, - {"neutral": "Database Engineer", "female": "Database Engineer", "male": "Database Engineer"}, - {"neutral": "Database Executive", "female": "Database Executive", "male": "Database Executive"}, - {"neutral": "Database Manager*in", "female": "Database Managerin", "male": "Database Manager"}, - {"neutral": "Database Professional", "female": "Database Professional", "male": "Database Professional"}, + { + "neutral": "Damenkleidermacher*in", + "female": "Damenkleidermacherin", + "male": "Damenkleidermacher", + }, + { + "neutral": "Data Scientist", + "female": "Data Scientist", + "male": "Data Scientist", + }, + { + "neutral": "Data Security Advisor", + "female": "Data Security Advisor", + "male": "Data Security Advisor", + }, + { + "neutral": "Data Warehouse Analyst", + "female": "Data Warehouse Analyst", + "male": "Data Warehouse Analyst", + }, + { + "neutral": "Database Analyst*in", + "female": "Database Analystin", + "male": "Database Analyst", + }, + { + "neutral": "Database Developer", + "female": "Database Developer", + "male": "Database Developer", + }, + { + "neutral": "Database Engineer", + "female": "Database Engineer", + "male": "Database Engineer", + }, + { + "neutral": "Database Executive", + "female": "Database Executive", + "male": "Database Executive", + }, + { + "neutral": "Database Manager*in", + "female": "Database Managerin", + "male": "Database Manager", + }, + { + "neutral": "Database Professional", + "female": "Database Professional", + "male": "Database Professional", + }, { "neutral": "Database Systems Analyst", "female": "Database Systems Analyst", @@ -843,24 +1647,56 @@ class Provider(BaseProvider): "male": "Database-Administrator", }, {"neutral": "Datascout", "female": "Datascout", "male": "Datascout"}, - {"neutral": "Datenanalytiker*in", "female": "Datenanalytikerin", "male": "Datenanalytiker"}, - {"neutral": "Datenarchivar*in", "female": "Datenarchivarin", "male": "Datenarchivar"}, + { + "neutral": "Datenanalytiker*in", + "female": "Datenanalytikerin", + "male": "Datenanalytiker", + }, + { + "neutral": "Datenarchivar*in", + "female": "Datenarchivarin", + "male": "Datenarchivar", + }, { "neutral": "Datenbankadministrator*in", "female": "Datenbankadministratorin", "male": "Datenbankadministrator", }, - {"neutral": "Datenbankentwickler*in", "female": "Datenbankentwicklerin", "male": "Datenbankentwickler"}, + { + "neutral": "Datenbankentwickler*in", + "female": "Datenbankentwicklerin", + "male": "Datenbankentwickler", + }, { "neutral": "Datenbankprogrammierer*in", "female": "Datenbankprogrammiererin", "male": "Datenbankprogrammierer", }, - {"neutral": "Datenbankspezialist*in", "female": "Datenbankspezialistin", "male": "Datenbankspezialist"}, - {"neutral": "Datenbankverwalter*in", "female": "Datenbankverwalterin", "male": "Datenbankverwalter"}, - {"neutral": "Datenmanager*in", "female": "Datenmanagerin", "male": "Datenmanager"}, - {"neutral": "Datenmodellierer*in", "female": "Datenmodelliererin", "male": "Datenmodellierer"}, - {"neutral": "Datenschutzbeauftragte*r", "female": "Datenschutzbeauftragte", "male": "Datenschutzbeauftragter"}, + { + "neutral": "Datenbankspezialist*in", + "female": "Datenbankspezialistin", + "male": "Datenbankspezialist", + }, + { + "neutral": "Datenbankverwalter*in", + "female": "Datenbankverwalterin", + "male": "Datenbankverwalter", + }, + { + "neutral": "Datenmanager*in", + "female": "Datenmanagerin", + "male": "Datenmanager", + }, + { + "neutral": "Datenmodellierer*in", + "female": "Datenmodelliererin", + "male": "Datenmodellierer", + }, + { + "neutral": "Datenschutzbeauftragte*r", + "female": "Datenschutzbeauftragte", + "male": "Datenschutzbeauftragter", + }, { "neutral": "Datensicherheitsexpert*in", "female": "Datensicherheitsexpertin", @@ -871,7 +1707,11 @@ class Provider(BaseProvider): "female": "Datensicherheitstechnikerin", "male": "Datensicherheitstechniker", }, - {"neutral": "Deep Learning Engineer", "female": "Deep Learning Engineer", "male": "Deep Learning Engineer"}, + { + "neutral": "Deep Learning Engineer", + "female": "Deep Learning Engineer", + "male": "Deep Learning Engineer", + }, {"neutral": "Dekorateur*in", "female": "Dekorateurin", "male": "Dekorateur"}, { "neutral": "Denk- und Gedächtnistrainer*in", @@ -900,25 +1740,53 @@ class Provider(BaseProvider): "female": "Desinfektionsgehilfin", "male": "Desinfektionsgehilfe", }, - {"neutral": "Desktop Publisher", "female": "Desktop Publisher", "male": "Desktop Publisher"}, + { + "neutral": "Desktop Publisher", + "female": "Desktop Publisher", + "male": "Desktop Publisher", + }, { "neutral": "Dessinateur*in für Stoffdruck", "female": "Dessinateurin für Stoffdruck", "male": "Dessinateur für Stoffdruck", }, - {"neutral": "Destillateur*in", "female": "Destillateurin", "male": "Destillateur"}, + { + "neutral": "Destillateur*in", + "female": "Destillateurin", + "male": "Destillateur", + }, {"neutral": "Detektiv*in", "female": "Detektivin", "male": "Detektiv"}, - {"neutral": "DevOps Engineer", "female": "DevOps Engineer", "male": "DevOps Engineer"}, - {"neutral": "Devisenhändler*in", "female": "Devisenhändlerin", "male": "Devisenhändler"}, - {"neutral": "Diabetesberater*in", "female": "Diabetesberaterin", "male": "Diabetesberater"}, + { + "neutral": "DevOps Engineer", + "female": "DevOps Engineer", + "male": "DevOps Engineer", + }, + { + "neutral": "Devisenhändler*in", + "female": "Devisenhändlerin", + "male": "Devisenhändler", + }, + { + "neutral": "Diabetesberater*in", + "female": "Diabetesberaterin", + "male": "Diabetesberater", + }, {"neutral": "Diakon*in", "female": "Diakonin", "male": "Diakon"}, { "neutral": "Dienstleistungsassistent*in", "female": "Dienstleistungsassistentin", "male": "Dienstleistungsassistent", }, - {"neutral": "Digital Artist", "female": "Digital Artist", "male": "Digital Artist"}, - {"neutral": "Digital Banker", "female": "Digital Banker", "male": "Digital Banker"}, + { + "neutral": "Digital Artist", + "female": "Digital Artist", + "male": "Digital Artist", + }, + { + "neutral": "Digital Banker", + "female": "Digital Banker", + "male": "Digital Banker", + }, { "neutral": "Digital Learning Designer", "female": "Digital Learning Designer", @@ -934,7 +1802,11 @@ class Provider(BaseProvider): "female": "Digitalisierungsberaterin", "male": "Digitalisierungsberater", }, - {"neutral": "Diplom-Sozialbetreuer*in", "female": "Diplom-Sozialbetreuerin", "male": "Diplom-Sozialbetreuer"}, + { + "neutral": "Diplom-Sozialbetreuer*in", + "female": "Diplom-Sozialbetreuerin", + "male": "Diplom-Sozialbetreuer", + }, { "neutral": "Diplom-Sozialbetreuer*in für Familienarbeit", "female": "Diplom-Sozialbetreuerin für Familienarbeit", @@ -971,13 +1843,21 @@ class Provider(BaseProvider): "female": "Diplomierte psychiatrischer Gesundheits- und Krankenpflegerin", "male": "Diplomierter psychiatrischer Gesundheits- und Krankenpfleger", }, - {"neutral": "Diplomrechtspfleger*in", "female": "Diplomrechtspflegerin", "male": "Diplomrechtspfleger"}, + { + "neutral": "Diplomrechtspfleger*in", + "female": "Diplomrechtspflegerin", + "male": "Diplomrechtspfleger", + }, { "neutral": "Direct-Marketing-Manager*in", "female": "Direct-Marketing-Managerin", "male": "Direct-Marketing-Manager", }, - {"neutral": "Direktberater*in", "female": "Direktberaterin", "male": "Direktberater"}, + { + "neutral": "Direktberater*in", + "female": "Direktberaterin", + "male": "Direktberater", + }, {"neutral": "Dirigent*in", "female": "Dirigentin", "male": "Dirigent"}, { "neutral": "Dispatcher - Flugverkehr", @@ -985,9 +1865,21 @@ class Provider(BaseProvider): "male": "Dispatcher - Flugverkehr", }, {"neutral": "Disponent*in", "female": "Disponentin", "male": "Disponent"}, - {"neutral": "Diversity Manager*in", "female": "Diversity Managerin", "male": "Diversity Manager"}, - {"neutral": "Diätkoch / Diätköchin", "female": "Diätköchin", "male": "Diätkoch"}, - {"neutral": "Diätologe / Diätologin", "female": "Diätologin", "male": "Diätologe"}, + { + "neutral": "Diversity Manager*in", + "female": "Diversity Managerin", + "male": "Diversity Manager", + }, + { + "neutral": "Diätkoch / Diätköchin", + "female": "Diätköchin", + "male": "Diätkoch", + }, + { + "neutral": "Diätologe / Diätologin", + "female": "Diätologin", + "male": "Diätologe", + }, {"neutral": "Dokumentar*in", "female": "Dokumentarin", "male": "Dokumentar"}, {"neutral": "Dolmetscher*in", "female": "Dolmetscherin", "male": "Dolmetscher"}, { @@ -1009,11 +1901,23 @@ class Provider(BaseProvider): {"neutral": "Dramatiker*in", "female": "Dramatikerin", "male": "Dramatiker"}, {"neutral": "Dramaturg*in", "female": "Dramaturgin", "male": "Dramaturg"}, {"neutral": "Drechsler*in", "female": "Drechslerin", "male": "Drechsler"}, - {"neutral": "Drehbuchautor*in", "female": "Drehbuchautorin", "male": "Drehbuchautor"}, + { + "neutral": "Drehbuchautor*in", + "female": "Drehbuchautorin", + "male": "Drehbuchautor", + }, {"neutral": "Dreher*in", "female": "Dreherin", "male": "Dreher"}, {"neutral": "Drogist*in", "female": "Drogistin", "male": "Drogist"}, - {"neutral": "Drohnenfluglehrer*in", "female": "Drohnenfluglehrerin", "male": "Drohnenfluglehrer"}, - {"neutral": "Drohnenpilot*in", "female": "Drohnenpilotin", "male": "Drohnenpilot"}, + { + "neutral": "Drohnenfluglehrer*in", + "female": "Drohnenfluglehrerin", + "male": "Drohnenfluglehrer", + }, + { + "neutral": "Drohnenpilot*in", + "female": "Drohnenpilotin", + "male": "Drohnenpilot", + }, {"neutral": "Dropshipper", "female": "Dropshipper", "male": "Dropshipper"}, {"neutral": "Drucker*in", "female": "Druckerin", "male": "Drucker"}, {"neutral": "Drucktechnik", "female": "Drucktechnik", "male": "Drucktechnik"}, @@ -1037,7 +1941,11 @@ class Provider(BaseProvider): "female": "Drucktechnik - Siebdruck", "male": "Drucktechnik - Siebdruck", }, - {"neutral": "Druckvorstufentechnik", "female": "Druckvorstufentechnik", "male": "Druckvorstufentechnik"}, + { + "neutral": "Druckvorstufentechnik", + "female": "Druckvorstufentechnik", + "male": "Druckvorstufentechnik", + }, { "neutral": "E-Business-Key-Account-Manager*in", "female": "E-Business-Key-Account-Managerin", @@ -1048,26 +1956,78 @@ class Provider(BaseProvider): "female": "E-Business-Projektmanagerin", "male": "E-Business-Projektmanager", }, - {"neutral": "E-Commerce-Assistent*in", "female": "E-Commerce-Assistentin", "male": "E-Commerce-Assistent"}, - {"neutral": "E-Commerce-Consultant", "female": "E-Commerce-Consultant", "male": "E-Commerce-Consultant"}, + { + "neutral": "E-Commerce-Assistent*in", + "female": "E-Commerce-Assistentin", + "male": "E-Commerce-Assistent", + }, + { + "neutral": "E-Commerce-Consultant", + "female": "E-Commerce-Consultant", + "male": "E-Commerce-Consultant", + }, { "neutral": "E-Commerce-Kaufmann / E-Commerce-Kauffrau", "female": "E-Commerce-Kauffrau", "male": "E-Commerce-Kaufmann", }, - {"neutral": "E-Commerce-Manager*in", "female": "E-Commerce-Managerin", "male": "E-Commerce-Manager"}, + { + "neutral": "E-Commerce-Manager*in", + "female": "E-Commerce-Managerin", + "male": "E-Commerce-Manager", + }, {"neutral": "E-Jurist*in", "female": "E-Juristin", "male": "E-Jurist"}, - {"neutral": "E-Learning-Autor*in", "female": "E-Learning-Autorin", "male": "E-Learning-Autor"}, - {"neutral": "E-Logistiker*in", "female": "E-Logistikerin", "male": "E-Logistiker"}, + { + "neutral": "E-Learning-Autor*in", + "female": "E-Learning-Autorin", + "male": "E-Learning-Autor", + }, + { + "neutral": "E-Logistiker*in", + "female": "E-Logistikerin", + "male": "E-Logistiker", + }, {"neutral": "E-Sportler*in", "female": "E-Sportlerin", "male": "E-Sportler"}, - {"neutral": "EDV-Consultant", "female": "EDV-Consultant", "male": "EDV-Consultant"}, - {"neutral": "EDV-Kaufmann / EDV-Kauffrau", "female": "EDV-Kauffrau", "male": "EDV-Kaufmann"}, - {"neutral": "EDV-Servicetechniker*in", "female": "EDV-Servicetechnikerin", "male": "EDV-Servicetechniker"}, - {"neutral": "EDV-Systemtechnik", "female": "EDV-Systemtechnik", "male": "EDV-Systemtechnik"}, - {"neutral": "EDV-Techniker*in", "female": "EDV-Technikerin", "male": "EDV-Techniker"}, - {"neutral": "ERP-Consultant", "female": "ERP-Consultant", "male": "ERP-Consultant"}, - {"neutral": "EU-Beamter / EU-Beamtin", "female": "EU-Beamtin", "male": "EU-Beamter"}, - {"neutral": "Edelsteinschleifer*in", "female": "Edelsteinschleiferin", "male": "Edelsteinschleifer"}, + { + "neutral": "EDV-Consultant", + "female": "EDV-Consultant", + "male": "EDV-Consultant", + }, + { + "neutral": "EDV-Kaufmann / EDV-Kauffrau", + "female": "EDV-Kauffrau", + "male": "EDV-Kaufmann", + }, + { + "neutral": "EDV-Servicetechniker*in", + "female": "EDV-Servicetechnikerin", + "male": "EDV-Servicetechniker", + }, + { + "neutral": "EDV-Systemtechnik", + "female": "EDV-Systemtechnik", + "male": "EDV-Systemtechnik", + }, + { + "neutral": "EDV-Techniker*in", + "female": "EDV-Technikerin", + "male": "EDV-Techniker", + }, + { + "neutral": "ERP-Consultant", + "female": "ERP-Consultant", + "male": "ERP-Consultant", + }, + { + "neutral": "EU-Beamter / EU-Beamtin", + "female": "EU-Beamtin", + "male": "EU-Beamter", + }, + { + "neutral": "Edelsteinschleifer*in", + "female": "Edelsteinschleiferin", + "male": "Edelsteinschleifer", + }, { "neutral": "Ehe- und Familienberater*in", "female": "Ehe- und Familienberaterin", @@ -1079,7 +2039,11 @@ class Provider(BaseProvider): "female": "Einkäuferin (Gastgewerbe)", "male": "Einkäufer (Gastgewerbe)", }, - {"neutral": "Einrichtungsberater*in", "female": "Einrichtungsberaterin", "male": "Einrichtungsberater"}, + { + "neutral": "Einrichtungsberater*in", + "female": "Einrichtungsberaterin", + "male": "Einrichtungsberater", + }, {"neutral": "Einzelhandel", "female": "Einzelhandel", "male": "Einzelhandel"}, { "neutral": "Einzelhandel - Allgemeiner Einzelhandel", @@ -1136,7 +2100,11 @@ class Provider(BaseProvider): "female": "Einzelhandel - Parfümerie", "male": "Einzelhandel - Parfümerie", }, - {"neutral": "Einzelhandel - Schuhe", "female": "Einzelhandel - Schuhe", "male": "Einzelhandel - Schuhe"}, + { + "neutral": "Einzelhandel - Schuhe", + "female": "Einzelhandel - Schuhe", + "male": "Einzelhandel - Schuhe", + }, { "neutral": "Einzelhandel - Sportartikel", "female": "Einzelhandel - Sportartikel", @@ -1162,7 +2130,11 @@ class Provider(BaseProvider): "female": "Eisenbahnbetriebstechnik", "male": "Eisenbahnbetriebstechnik", }, - {"neutral": "Eisenbahnelektrotechnik", "female": "Eisenbahnelektrotechnik", "male": "Eisenbahnelektrotechnik"}, + { + "neutral": "Eisenbahnelektrotechnik", + "female": "Eisenbahnelektrotechnik", + "male": "Eisenbahnelektrotechnik", + }, { "neutral": "Eisenbahnfahrzeuginstandhaltungstechnik", "female": "Eisenbahnfahrzeuginstandhaltungstechnik", @@ -1194,15 +2166,31 @@ class Provider(BaseProvider): "male": "Electronic-Marketing-Manager", }, {"neutral": "Elektriker*in", "female": "Elektrikerin", "male": "Elektriker"}, - {"neutral": "Elektroanlagentechnik", "female": "Elektroanlagentechnik", "male": "Elektroanlagentechnik"}, - {"neutral": "Elektrobetriebstechnik", "female": "Elektrobetriebstechnik", "male": "Elektrobetriebstechnik"}, + { + "neutral": "Elektroanlagentechnik", + "female": "Elektroanlagentechnik", + "male": "Elektroanlagentechnik", + }, + { + "neutral": "Elektrobetriebstechnik", + "female": "Elektrobetriebstechnik", + "male": "Elektrobetriebstechnik", + }, { "neutral": "Elektrobetriebstechnik mit Schwerpunkt Prozessleittechnik", "female": "Elektrobetriebstechnik mit Schwerpunkt Prozessleittechnik", "male": "Elektrobetriebstechnik mit Schwerpunkt Prozessleittechnik", }, - {"neutral": "Elektroenergietechnik", "female": "Elektroenergietechnik", "male": "Elektroenergietechnik"}, - {"neutral": "Elektroinstallateur*in", "female": "Elektroinstallateurin", "male": "Elektroinstallateur"}, + { + "neutral": "Elektroenergietechnik", + "female": "Elektroenergietechnik", + "male": "Elektroenergietechnik", + }, + { + "neutral": "Elektroinstallateur*in", + "female": "Elektroinstallateurin", + "male": "Elektroinstallateur", + }, { "neutral": "Elektroinstallationstechnik", "female": "Elektroinstallationstechnik", @@ -1213,7 +2201,11 @@ class Provider(BaseProvider): "female": "Elektroinstallationstechnik mit Schwerpunkt Prozessleit- und Bustechnik", "male": "Elektroinstallationstechnik mit Schwerpunkt Prozessleit- und Bustechnik", }, - {"neutral": "Elektromaschinentechnik", "female": "Elektromaschinentechnik", "male": "Elektromaschinentechnik"}, + { + "neutral": "Elektromaschinentechnik", + "female": "Elektromaschinentechnik", + "male": "Elektromaschinentechnik", + }, { "neutral": "Elektromechaniker*in für Schwachstrom", "female": "Elektromechanikerin für Schwachstrom", @@ -1260,7 +2252,11 @@ class Provider(BaseProvider): "female": "Elektronik - Mikrotechnik", "male": "Elektronik - Mikrotechnik", }, - {"neutral": "Elektroniker*in", "female": "Elektronikerin", "male": "Elektroniker"}, + { + "neutral": "Elektroniker*in", + "female": "Elektronikerin", + "male": "Elektroniker", + }, { "neutral": "Elektroniker*in (Assistenztechnologien)", "female": "Elektronikerin (Assistenztechnologien)", @@ -1276,7 +2272,11 @@ class Provider(BaseProvider): "female": "Elektronikerin (Industrieelektronik)", "male": "Elektroniker (Industrieelektronik)", }, - {"neutral": "Elektrotechnik", "female": "Elektrotechnik", "male": "Elektrotechnik"}, + { + "neutral": "Elektrotechnik", + "female": "Elektrotechnik", + "male": "Elektrotechnik", + }, { "neutral": "Elektrotechnik - Anlagen- und Betriebstechnik", "female": "Elektrotechnik - Anlagen- und Betriebstechnik", @@ -1297,7 +2297,11 @@ class Provider(BaseProvider): "female": "Elektrotechnik - Energietechnik", "male": "Elektrotechnik - Energietechnik", }, - {"neutral": "Elektrotechniker*in", "female": "Elektrotechnikerin", "male": "Elektrotechniker"}, + { + "neutral": "Elektrotechniker*in", + "female": "Elektrotechnikerin", + "male": "Elektrotechniker", + }, { "neutral": "Elementarpädagoge / Elementarpädagogin", "female": "Elementarpädagogin", @@ -1310,8 +2314,16 @@ class Provider(BaseProvider): "male": "Embedded Systems Engineer", }, {"neutral": "Energetiker*in", "female": "Energetikerin", "male": "Energetiker"}, - {"neutral": "Energieberater*in", "female": "Energieberaterin", "male": "Energieberater"}, - {"neutral": "Energietechniker*in", "female": "Energietechnikerin", "male": "Energietechniker"}, + { + "neutral": "Energieberater*in", + "female": "Energieberaterin", + "male": "Energieberater", + }, + { + "neutral": "Energietechniker*in", + "female": "Energietechnikerin", + "male": "Energietechniker", + }, { "neutral": "Energietechniker*in (Nachhaltige Energiesysteme)", "female": "Energietechnikerin (Nachhaltige Energiesysteme)", @@ -1322,7 +2334,11 @@ class Provider(BaseProvider): "female": "Energietechnikerin (Windenergie)", "male": "Energietechniker (Windenergie)", }, - {"neutral": "Entlassungsmanager*in", "female": "Entlassungsmanagerin", "male": "Entlassungsmanager"}, + { + "neutral": "Entlassungsmanager*in", + "female": "Entlassungsmanagerin", + "male": "Entlassungsmanager", + }, { "neutral": "Entsorgungs- und Recyclingfachkraft", "female": "Entsorgungs- und Recyclingfachkraft", @@ -1333,23 +2349,63 @@ class Provider(BaseProvider): "female": "Entsorgungs- und Recyclingfachfrau - Abwasser", "male": "Entsorgungs- und Recyclingfachmann - Abwasser", }, - {"neutral": "Entsorgungstechniker*in", "female": "Entsorgungstechnikerin", "male": "Entsorgungstechniker"}, - {"neutral": "Entspannungstrainer*in", "female": "Entspannungstrainerin", "male": "Entspannungstrainer"}, + { + "neutral": "Entsorgungstechniker*in", + "female": "Entsorgungstechnikerin", + "male": "Entsorgungstechniker", + }, + { + "neutral": "Entspannungstrainer*in", + "female": "Entspannungstrainerin", + "male": "Entspannungstrainer", + }, { "neutral": "Entwickler*in für maschinelles Lernen", "female": "Entwicklerin für maschinelles Lernen", "male": "Entwickler für maschinelles Lernen", }, - {"neutral": "Entwicklungshelfer*in", "female": "Entwicklungshelferin", "male": "Entwicklungshelfer"}, - {"neutral": "Entwicklungsleiter*in", "female": "Entwicklungsleiterin", "male": "Entwicklungsleiter"}, - {"neutral": "Entwicklungsökonom*in", "female": "Entwicklungsökonomin", "male": "Entwicklungsökonom"}, + { + "neutral": "Entwicklungshelfer*in", + "female": "Entwicklungshelferin", + "male": "Entwicklungshelfer", + }, + { + "neutral": "Entwicklungsleiter*in", + "female": "Entwicklungsleiterin", + "male": "Entwicklungsleiter", + }, + { + "neutral": "Entwicklungsökonom*in", + "female": "Entwicklungsökonomin", + "male": "Entwicklungsökonom", + }, {"neutral": "Erdarbeiter*in", "female": "Erdarbeiterin", "male": "Erdarbeiter"}, - {"neutral": "Erdwissenschafter*in", "female": "Erdwissenschafterin", "male": "Erdwissenschafter"}, - {"neutral": "Erdölchemiker*in", "female": "Erdölchemikerin", "male": "Erdölchemiker"}, - {"neutral": "Erdölingenieur*in", "female": "Erdölingenieurin", "male": "Erdölingenieur"}, - {"neutral": "Erdöltechniker*in", "female": "Erdöltechnikerin", "male": "Erdöltechniker"}, + { + "neutral": "Erdwissenschafter*in", + "female": "Erdwissenschafterin", + "male": "Erdwissenschafter", + }, + { + "neutral": "Erdölchemiker*in", + "female": "Erdölchemikerin", + "male": "Erdölchemiker", + }, + { + "neutral": "Erdölingenieur*in", + "female": "Erdölingenieurin", + "male": "Erdölingenieur", + }, + { + "neutral": "Erdöltechniker*in", + "female": "Erdöltechnikerin", + "male": "Erdöltechniker", + }, {"neutral": "Ergonom*in", "female": "Ergonomin", "male": "Ergonom"}, - {"neutral": "Ergotherapeut*in", "female": "Ergotherapeutin", "male": "Ergotherapeut"}, + { + "neutral": "Ergotherapeut*in", + "female": "Ergotherapeutin", + "male": "Ergotherapeut", + }, { "neutral": "Ergotherapiegehilfe / Ergotherapiegehilfin", "female": "Ergotherapiegehilfin", @@ -1360,22 +2416,42 @@ class Provider(BaseProvider): "female": "Ernährungscoach (w./m./d.)", "male": "Ernährungscoach (w./m./d.)", }, - {"neutral": "Ernährungstrainer*in", "female": "Ernährungstrainerin", "male": "Ernährungstrainer"}, + { + "neutral": "Ernährungstrainer*in", + "female": "Ernährungstrainerin", + "male": "Ernährungstrainer", + }, { "neutral": "Ernährungswissenschafter*in", "female": "Ernährungswissenschafterin", "male": "Ernährungswissenschafter", }, - {"neutral": "Erwachsenenbildner*in", "female": "Erwachsenenbildnerin", "male": "Erwachsenenbildner"}, + { + "neutral": "Erwachsenenbildner*in", + "female": "Erwachsenenbildnerin", + "male": "Erwachsenenbildner", + }, {"neutral": "Erzieher*in", "female": "Erzieherin", "male": "Erzieher"}, { "neutral": "Erziehungswissenschafter*in", "female": "Erziehungswissenschafterin", "male": "Erziehungswissenschafter", }, - {"neutral": "Essenszusteller*in", "female": "Essenszustellerin", "male": "Essenszusteller"}, - {"neutral": "Essenzusteller*in", "female": "Essenzustellerin", "male": "Essenzusteller"}, - {"neutral": "Ethical Hacker", "female": "Ethical Hacker", "male": "Ethical Hacker"}, + { + "neutral": "Essenszusteller*in", + "female": "Essenszustellerin", + "male": "Essenszusteller", + }, + { + "neutral": "Essenzusteller*in", + "female": "Essenzustellerin", + "male": "Essenzusteller", + }, + { + "neutral": "Ethical Hacker", + "female": "Ethical Hacker", + "male": "Ethical Hacker", + }, { "neutral": "Ethnologe / Ethnologin (Völkerkundler*in)", "female": "Ethnologin (Völkerkundlerin)", @@ -1387,10 +2463,26 @@ class Provider(BaseProvider): "female": "Etui- und Kassettenerzeugerin", "male": "Etui- und Kassettenerzeuger", }, - {"neutral": "Europa Assistent*in", "female": "Europa Assistentin", "male": "Europa Assistent"}, - {"neutral": "Eventkaufmann / Eventkauffrau", "female": "Eventkauffrau", "male": "Eventkaufmann"}, - {"neutral": "Eventmanager*in", "female": "Eventmanagerin", "male": "Eventmanager"}, - {"neutral": "Eventveranstalter*in", "female": "Eventveranstalterin", "male": "Eventveranstalter"}, + { + "neutral": "Europa Assistent*in", + "female": "Europa Assistentin", + "male": "Europa Assistent", + }, + { + "neutral": "Eventkaufmann / Eventkauffrau", + "female": "Eventkauffrau", + "male": "Eventkaufmann", + }, + { + "neutral": "Eventmanager*in", + "female": "Eventmanagerin", + "male": "Eventmanager", + }, + { + "neutral": "Eventveranstalter*in", + "female": "Eventveranstalterin", + "male": "Eventveranstalter", + }, { "neutral": "Exekutivbedienstete*r im Justizwachdienst", "female": "Exekutivbedienstete im Justizwachdienst", @@ -1401,7 +2493,11 @@ class Provider(BaseProvider): "female": "Exekutivbedienstete im Polizeidienst", "male": "Exekutivbediensteter im Polizeidienst", }, - {"neutral": "Exportkaufmann / Exportkauffrau", "female": "Exportkauffrau", "male": "Exportkaufmann"}, + { + "neutral": "Exportkaufmann / Exportkauffrau", + "female": "Exportkauffrau", + "male": "Exportkaufmann", + }, { "neutral": "Fach- und Diplom-Sozialbetreuer*in für Altenarbeit", "female": "Fach- und Diplom-Sozialbetreuerin für Altenarbeit", @@ -1422,8 +2518,16 @@ class Provider(BaseProvider): "female": "Fach-Sozialbetreuerin / Diplom-Sozialbetreuerin", "male": "Fach-Sozialbetreuer / Diplom-Sozialbetreuer", }, - {"neutral": "Fach-Sozialhelfer*in", "female": "Fach-Sozialhelferin", "male": "Fach-Sozialhelfer"}, - {"neutral": "Facharzt / Fachärztin", "female": "Fachärztin", "male": "Facharzt"}, + { + "neutral": "Fach-Sozialhelfer*in", + "female": "Fach-Sozialhelferin", + "male": "Fach-Sozialhelfer", + }, + { + "neutral": "Facharzt / Fachärztin", + "female": "Fachärztin", + "male": "Facharzt", + }, { "neutral": "Facharzt / Fachärztin für Allgemeinchirurgie", "female": "Fachärztin für Allgemeinchirurgie", @@ -1619,43 +2723,131 @@ class Provider(BaseProvider): "female": "Fachärztin für klinische Pathologie und Neuropathologie", "male": "Facharzt für klinische Pathologie und Neuropathologie", }, - {"neutral": "Facility-Manager*in", "female": "Facility-Managerin", "male": "Facility-Manager"}, - {"neutral": "Fahrdienstleiter*in", "female": "Fahrdienstleiterin", "male": "Fahrdienstleiter"}, + { + "neutral": "Facility-Manager*in", + "female": "Facility-Managerin", + "male": "Facility-Manager", + }, + { + "neutral": "Fahrdienstleiter*in", + "female": "Fahrdienstleiterin", + "male": "Fahrdienstleiter", + }, {"neutral": "Fahrlehrer*in", "female": "Fahrlehrerin", "male": "Fahrlehrer"}, - {"neutral": "Fahrradbote/Fahrradbotin", "female": "Fahrradbotin", "male": "Fahrradbote"}, - {"neutral": "Fahrradmechaniker*in", "female": "Fahrradmechanikerin", "male": "Fahrradmechaniker"}, - {"neutral": "Fahrradmechatronik", "female": "Fahrradmechatronik", "male": "Fahrradmechatronik"}, - {"neutral": "Fahrschullehrer*in", "female": "Fahrschullehrerin", "male": "Fahrschullehrer"}, - {"neutral": "Fahrzeugbautechniker*in", "female": "Fahrzeugbautechnikerin", "male": "Fahrzeugbautechniker"}, - {"neutral": "Fahrzeugelektroniker*in", "female": "Fahrzeugelektronikerin", "male": "Fahrzeugelektroniker"}, - {"neutral": "Fahrzeugfertiger*in", "female": "Fahrzeugfertigerin", "male": "Fahrzeugfertiger"}, + { + "neutral": "Fahrradbote/Fahrradbotin", + "female": "Fahrradbotin", + "male": "Fahrradbote", + }, + { + "neutral": "Fahrradmechaniker*in", + "female": "Fahrradmechanikerin", + "male": "Fahrradmechaniker", + }, + { + "neutral": "Fahrradmechatronik", + "female": "Fahrradmechatronik", + "male": "Fahrradmechatronik", + }, + { + "neutral": "Fahrschullehrer*in", + "female": "Fahrschullehrerin", + "male": "Fahrschullehrer", + }, + { + "neutral": "Fahrzeugbautechniker*in", + "female": "Fahrzeugbautechnikerin", + "male": "Fahrzeugbautechniker", + }, + { + "neutral": "Fahrzeugelektroniker*in", + "female": "Fahrzeugelektronikerin", + "male": "Fahrzeugelektroniker", + }, + { + "neutral": "Fahrzeugfertiger*in", + "female": "Fahrzeugfertigerin", + "male": "Fahrzeugfertiger", + }, { "neutral": "Fahrzeugtapezierer*in (Fahrzeugsattler*in)", "female": "Fahrzeugtapeziererin (Fahrzeugsattlerin)", "male": "Fahrzeugtapezierer (Fahrzeugsattler)", }, {"neutral": "Fakturist*in", "female": "Fakturistin", "male": "Fakturist"}, - {"neutral": "Farb- und Typberater*in", "female": "Farb- und Typberaterin", "male": "Farb- und Typberater"}, - {"neutral": "Faserverbundtechnik", "female": "Faserverbundtechnik", "male": "Faserverbundtechnik"}, + { + "neutral": "Farb- und Typberater*in", + "female": "Farb- und Typberaterin", + "male": "Farb- und Typberater", + }, + { + "neutral": "Faserverbundtechnik", + "female": "Faserverbundtechnik", + "male": "Faserverbundtechnik", + }, {"neutral": "Fassader*in", "female": "Fassaderin", "male": "Fassader"}, {"neutral": "Fassbinder*in", "female": "Fassbinderin", "male": "Fassbinder"}, - {"neutral": "Feinmechaniker*in", "female": "Feinmechanikerin", "male": "Feinmechaniker"}, + { + "neutral": "Feinmechaniker*in", + "female": "Feinmechanikerin", + "male": "Feinmechaniker", + }, {"neutral": "Feinoptik", "female": "Feinoptik", "male": "Feinoptik"}, - {"neutral": "Feinwerktechniker*in", "female": "Feinwerktechnikerin", "male": "Feinwerktechniker"}, - {"neutral": "Feldgemüsebau", "female": "Feldgemüsebau", "male": "Feldgemüsebau"}, - {"neutral": "Feng Shui-Berater*in", "female": "Feng Shui-Beraterin", "male": "Feng Shui-Berater"}, - {"neutral": "Fensterputzer*in", "female": "Fensterputzerin", "male": "Fensterputzer"}, + { + "neutral": "Feinwerktechniker*in", + "female": "Feinwerktechnikerin", + "male": "Feinwerktechniker", + }, + { + "neutral": "Feldgemüsebau", + "female": "Feldgemüsebau", + "male": "Feldgemüsebau", + }, + { + "neutral": "Feng Shui-Berater*in", + "female": "Feng Shui-Beraterin", + "male": "Feng Shui-Berater", + }, + { + "neutral": "Fensterputzer*in", + "female": "Fensterputzerin", + "male": "Fensterputzer", + }, { "neutral": "Fermentationstechniker*in", "female": "Fermentationstechnikerin", "male": "Fermentationstechniker", }, - {"neutral": "Fernlastfahrer*in", "female": "Fernlastfahrerin", "male": "Fernlastfahrer"}, - {"neutral": "Fernmeldebaumonteur*in", "female": "Fernmeldebaumonteurin", "male": "Fernmeldebaumonteur"}, - {"neutral": "Fernsehsprecher*in", "female": "Fernsehsprecherin", "male": "Fernsehsprecher"}, - {"neutral": "Fernwärmetechnik", "female": "Fernwärmetechnik", "male": "Fernwärmetechnik"}, - {"neutral": "Fertigteilhausbau", "female": "Fertigteilhausbau", "male": "Fertigteilhausbau"}, - {"neutral": "Fertigungsmesstechnik", "female": "Fertigungsmesstechnik", "male": "Fertigungsmesstechnik"}, + { + "neutral": "Fernlastfahrer*in", + "female": "Fernlastfahrerin", + "male": "Fernlastfahrer", + }, + { + "neutral": "Fernmeldebaumonteur*in", + "female": "Fernmeldebaumonteurin", + "male": "Fernmeldebaumonteur", + }, + { + "neutral": "Fernsehsprecher*in", + "female": "Fernsehsprecherin", + "male": "Fernsehsprecher", + }, + { + "neutral": "Fernwärmetechnik", + "female": "Fernwärmetechnik", + "male": "Fernwärmetechnik", + }, + { + "neutral": "Fertigteilhausbau", + "female": "Fertigteilhausbau", + "male": "Fertigteilhausbau", + }, + { + "neutral": "Fertigungsmesstechnik", + "female": "Fertigungsmesstechnik", + "male": "Fertigungsmesstechnik", + }, { "neutral": "Fertigungsmesstechnik - Produktionssteuerung", "female": "Fertigungsmesstechnik - Produktionssteuerung", @@ -1676,23 +2868,63 @@ class Provider(BaseProvider): "female": "Fertigungstechnikerin / Produktionstechnikerin", "male": "Fertigungstechniker / Produktionstechniker", }, - {"neutral": "Fiaker*in / Kutscher*in", "female": "Fiakerin / Kutscherin", "male": "Fiaker / Kutscher"}, - {"neutral": "Field Consultant", "female": "Field Consultant", "male": "Field Consultant"}, - {"neutral": "Field Sales Trainer", "female": "Field Sales Trainer", "male": "Field Sales Trainer"}, - {"neutral": "Field Support", "female": "Field Support", "male": "Field Support"}, + { + "neutral": "Fiaker*in / Kutscher*in", + "female": "Fiakerin / Kutscherin", + "male": "Fiaker / Kutscher", + }, + { + "neutral": "Field Consultant", + "female": "Field Consultant", + "male": "Field Consultant", + }, + { + "neutral": "Field Sales Trainer", + "female": "Field Sales Trainer", + "male": "Field Sales Trainer", + }, + { + "neutral": "Field Support", + "female": "Field Support", + "male": "Field Support", + }, {"neutral": "Figurant*in", "female": "Figurantin", "male": "Figurant"}, - {"neutral": "Filialleiter*in", "female": "Filialleiterin", "male": "Filialleiter"}, - {"neutral": "Film- und Videoeditor*in", "female": "Film- und Videoeditorin", "male": "Film- und Videoeditor"}, - {"neutral": "Filmaufnahmeleiter*in", "female": "Filmaufnahmeleiterin", "male": "Filmaufnahmeleiter"}, + { + "neutral": "Filialleiter*in", + "female": "Filialleiterin", + "male": "Filialleiter", + }, + { + "neutral": "Film- und Videoeditor*in", + "female": "Film- und Videoeditorin", + "male": "Film- und Videoeditor", + }, + { + "neutral": "Filmaufnahmeleiter*in", + "female": "Filmaufnahmeleiterin", + "male": "Filmaufnahmeleiter", + }, {"neutral": "Filmemacher*in", "female": "Filmemacherin", "male": "Filmemacher"}, - {"neutral": "Filmregisseur*in", "female": "Filmregisseurin", "male": "Filmregisseur"}, + { + "neutral": "Filmregisseur*in", + "female": "Filmregisseurin", + "male": "Filmregisseur", + }, { "neutral": "Filmrestaurator*in (Archiv)", "female": "Filmrestauratorin (Archiv)", "male": "Filmrestaurator (Archiv)", }, - {"neutral": "Filmschnittmeister*in", "female": "Filmschnittmeisterin", "male": "Filmschnittmeister"}, - {"neutral": "Filmvorführer*in", "female": "Filmvorführerin", "male": "Filmvorführer"}, + { + "neutral": "Filmschnittmeister*in", + "female": "Filmschnittmeisterin", + "male": "Filmschnittmeister", + }, + { + "neutral": "Filmvorführer*in", + "female": "Filmvorführerin", + "male": "Filmvorführer", + }, { "neutral": "Finance Operations Betreuer*in", "female": "Finance Operations Betreuerin", @@ -1703,54 +2935,150 @@ class Provider(BaseProvider): "female": "Finanz- und Rechnungswesenassistenz", "male": "Finanz- und Rechnungswesenassistenz", }, - {"neutral": "Finanzanalyst*in", "female": "Finanzanalystin", "male": "Finanzanalyst"}, - {"neutral": "Finanzbeamter / Finanzbeamtin", "female": "Finanzbeamtin", "male": "Finanzbeamter"}, - {"neutral": "Finanzberater*in", "female": "Finanzberaterin", "male": "Finanzberater"}, - {"neutral": "Finanzbuchhalter*in", "female": "Finanzbuchhalterin", "male": "Finanzbuchhalter"}, + { + "neutral": "Finanzanalyst*in", + "female": "Finanzanalystin", + "male": "Finanzanalyst", + }, + { + "neutral": "Finanzbeamter / Finanzbeamtin", + "female": "Finanzbeamtin", + "male": "Finanzbeamter", + }, + { + "neutral": "Finanzberater*in", + "female": "Finanzberaterin", + "male": "Finanzberater", + }, + { + "neutral": "Finanzbuchhalter*in", + "female": "Finanzbuchhalterin", + "male": "Finanzbuchhalter", + }, { "neutral": "Finanzdienstleistungskaufmann / Finanzdienstleistungskauffrau", "female": "Finanzdienstleistungskauffrau", "male": "Finanzdienstleistungskaufmann", }, - {"neutral": "Fischereiwirtschaft", "female": "Fischereiwirtschaft", "male": "Fischereiwirtschaft"}, - {"neutral": "Fitnessbetreuung", "female": "Fitnessbetreuung", "male": "Fitnessbetreuung"}, - {"neutral": "Fitnesstrainer*in", "female": "Fitnesstrainerin", "male": "Fitnesstrainer"}, - {"neutral": "Flachdrucker*in", "female": "Flachdruckerin", "male": "Flachdrucker"}, + { + "neutral": "Fischereiwirtschaft", + "female": "Fischereiwirtschaft", + "male": "Fischereiwirtschaft", + }, + { + "neutral": "Fitnessbetreuung", + "female": "Fitnessbetreuung", + "male": "Fitnessbetreuung", + }, + { + "neutral": "Fitnesstrainer*in", + "female": "Fitnesstrainerin", + "male": "Fitnesstrainer", + }, + { + "neutral": "Flachdrucker*in", + "female": "Flachdruckerin", + "male": "Flachdrucker", + }, {"neutral": "Fleischer*in", "female": "Fleischerin", "male": "Fleischer"}, { "neutral": "Fleischuntersucher*in und Trichinenschauer*in", "female": "Fleischuntersucherin und Trichinenschauerin", "male": "Fleischuntersucher und Trichinenschauer", }, - {"neutral": "Fleischverarbeitung", "female": "Fleischverarbeitung", "male": "Fleischverarbeitung"}, - {"neutral": "Fleischverkauf", "female": "Fleischverkauf", "male": "Fleischverkauf"}, - {"neutral": "Fleischwarenarbeiter*in", "female": "Fleischwarenarbeiterin", "male": "Fleischwarenarbeiter"}, - {"neutral": "Flight Engineer", "female": "Flight Engineer", "male": "Flight Engineer"}, - {"neutral": "Flight-Attendant", "female": "Flight-Attendant", "male": "Flight-Attendant"}, + { + "neutral": "Fleischverarbeitung", + "female": "Fleischverarbeitung", + "male": "Fleischverarbeitung", + }, + { + "neutral": "Fleischverkauf", + "female": "Fleischverkauf", + "male": "Fleischverkauf", + }, + { + "neutral": "Fleischwarenarbeiter*in", + "female": "Fleischwarenarbeiterin", + "male": "Fleischwarenarbeiter", + }, + { + "neutral": "Flight Engineer", + "female": "Flight Engineer", + "male": "Flight Engineer", + }, + { + "neutral": "Flight-Attendant", + "female": "Flight-Attendant", + "male": "Flight-Attendant", + }, {"neutral": "Florist*in", "female": "Floristin", "male": "Florist"}, - {"neutral": "Flugbegleiter*in", "female": "Flugbegleiterin", "male": "Flugbegleiter"}, - {"neutral": "Flughafenarbeiter*in", "female": "Flughafenarbeiterin", "male": "Flughafenarbeiter"}, + { + "neutral": "Flugbegleiter*in", + "female": "Flugbegleiterin", + "male": "Flugbegleiter", + }, + { + "neutral": "Flughafenarbeiter*in", + "female": "Flughafenarbeiterin", + "male": "Flughafenarbeiter", + }, {"neutral": "Fluglehrer*in", "female": "Fluglehrerin", "male": "Fluglehrer"}, - {"neutral": "Fluglotse / Fluglotsin", "female": "Fluglotsin", "male": "Fluglotse"}, + { + "neutral": "Fluglotse / Fluglotsin", + "female": "Fluglotsin", + "male": "Fluglotse", + }, { "neutral": "Flugsicherungsmechaniker*in", "female": "Flugsicherungsmechanikerin", "male": "Flugsicherungsmechaniker", }, - {"neutral": "Flugzeugbautechniker*in", "female": "Flugzeugbautechnikerin", "male": "Flugzeugbautechniker"}, - {"neutral": "Flugzeugspengler*in", "female": "Flugzeugspenglerin", "male": "Flugzeugspengler"}, - {"neutral": "Flüchtlingsbetreuer*in", "female": "Flüchtlingsbetreuerin", "male": "Flüchtlingsbetreuer"}, - {"neutral": "Fondsmanager*in", "female": "Fondsmanagerin", "male": "Fondsmanager"}, - {"neutral": "Fondsverwalter*in", "female": "Fondsverwalterin", "male": "Fondsverwalter"}, + { + "neutral": "Flugzeugbautechniker*in", + "female": "Flugzeugbautechnikerin", + "male": "Flugzeugbautechniker", + }, + { + "neutral": "Flugzeugspengler*in", + "female": "Flugzeugspenglerin", + "male": "Flugzeugspengler", + }, + { + "neutral": "Flüchtlingsbetreuer*in", + "female": "Flüchtlingsbetreuerin", + "male": "Flüchtlingsbetreuer", + }, + { + "neutral": "Fondsmanager*in", + "female": "Fondsmanagerin", + "male": "Fondsmanager", + }, + { + "neutral": "Fondsverwalter*in", + "female": "Fondsverwalterin", + "male": "Fondsverwalter", + }, { "neutral": "Food & Beverage Manager*in", "female": "Food & Beverage Managerin", "male": "Food & Beverage Manager", }, - {"neutral": "Food Blogger*in", "female": "Food Bloggerin", "male": "Food Blogger"}, - {"neutral": "Food Designer*in", "female": "Food Designerin", "male": "Food Designer"}, + { + "neutral": "Food Blogger*in", + "female": "Food Bloggerin", + "male": "Food Blogger", + }, + { + "neutral": "Food Designer*in", + "female": "Food Designerin", + "male": "Food Designer", + }, {"neutral": "Foodstylist", "female": "Foodstylist", "male": "Foodstylist"}, - {"neutral": "Forensic Analyst", "female": "Forensic Analyst", "male": "Forensic Analyst"}, + { + "neutral": "Forensic Analyst", + "female": "Forensic Analyst", + "male": "Forensic Analyst", + }, { "neutral": "Forensiker*in (Spurensicherungsexpert*in)", "female": "Forensikerin (Spurensicherungsexpertin)", @@ -1791,52 +3119,144 @@ class Provider(BaseProvider): {"neutral": "Forsttechnik", "female": "Forsttechnik", "male": "Forsttechnik"}, {"neutral": "Forstwart*in", "female": "Forstwartin", "male": "Forstwart"}, {"neutral": "Forstwirt*in", "female": "Forstwirtin", "male": "Forstwirt"}, - {"neutral": "Forstwirtschaft", "female": "Forstwirtschaft", "male": "Forstwirtschaft"}, + { + "neutral": "Forstwirtschaft", + "female": "Forstwirtschaft", + "male": "Forstwirtschaft", + }, { "neutral": "Foto- und Multimediakaufmann / Foto- und Multimediakauffrau", "female": "Foto- und Multimediakauffrau", "male": "Foto- und Multimediakaufmann", }, {"neutral": "Fotograf*in", "female": "Fotografin", "male": "Fotograf"}, - {"neutral": "Fotograf*in (-Kunst)", "female": "Fotografin (-Kunst)", "male": "Fotograf (-Kunst)"}, - {"neutral": "Fotogravurzeichner*in", "female": "Fotogravurzeichnerin", "male": "Fotogravurzeichner"}, - {"neutral": "Fotojournalist*in", "female": "Fotojournalistin", "male": "Fotojournalist"}, + { + "neutral": "Fotograf*in (-Kunst)", + "female": "Fotografin (-Kunst)", + "male": "Fotograf (-Kunst)", + }, + { + "neutral": "Fotogravurzeichner*in", + "female": "Fotogravurzeichnerin", + "male": "Fotogravurzeichner", + }, + { + "neutral": "Fotojournalist*in", + "female": "Fotojournalistin", + "male": "Fotojournalist", + }, {"neutral": "Fotomodell", "female": "Fotomodell", "male": "Fotomodell"}, - {"neutral": "Fotoreporter*in", "female": "Fotoreporterin", "male": "Fotoreporter"}, - {"neutral": "Franchise-Unternehmer*in", "female": "Franchise-Unternehmerin", "male": "Franchise-Unternehmer"}, - {"neutral": "Fraud Analyst", "female": "Fraud Analyst", "male": "Fraud Analyst"}, - {"neutral": "Freizeitberater*in", "female": "Freizeitberaterin", "male": "Freizeitberater"}, - {"neutral": "Freizeitpädagoge / Freizeitpädagogin", "female": "Freizeitpädagogin", "male": "Freizeitpädagoge"}, - {"neutral": "Fremdenführer*in", "female": "Fremdenführerin", "male": "Fremdenführer"}, + { + "neutral": "Fotoreporter*in", + "female": "Fotoreporterin", + "male": "Fotoreporter", + }, + { + "neutral": "Franchise-Unternehmer*in", + "female": "Franchise-Unternehmerin", + "male": "Franchise-Unternehmer", + }, + { + "neutral": "Fraud Analyst", + "female": "Fraud Analyst", + "male": "Fraud Analyst", + }, + { + "neutral": "Freizeitberater*in", + "female": "Freizeitberaterin", + "male": "Freizeitberater", + }, + { + "neutral": "Freizeitpädagoge / Freizeitpädagogin", + "female": "Freizeitpädagogin", + "male": "Freizeitpädagoge", + }, + { + "neutral": "Fremdenführer*in", + "female": "Fremdenführerin", + "male": "Fremdenführer", + }, { "neutral": "Fremdsprachenkorrespondent*in", "female": "Fremdsprachenkorrespondentin", "male": "Fremdsprachenkorrespondent", }, - {"neutral": "Fremdsprachensekretär*in", "female": "Fremdsprachensekretärin", "male": "Fremdsprachensekretär"}, + { + "neutral": "Fremdsprachensekretär*in", + "female": "Fremdsprachensekretärin", + "male": "Fremdsprachensekretär", + }, { "neutral": "Friedhofs- und Ziergärtner*in", "female": "Friedhofs- und Ziergärtnerin", "male": "Friedhofs- und Ziergärtner", }, - {"neutral": "Friedhofsaufseher*in", "female": "Friedhofsaufseherin", "male": "Friedhofsaufseher"}, - {"neutral": "Friseur*in (Stylist*in)", "female": "Friseurin (Stylistin)", "male": "Friseur (Stylist)"}, + { + "neutral": "Friedhofsaufseher*in", + "female": "Friedhofsaufseherin", + "male": "Friedhofsaufseher", + }, + { + "neutral": "Friseur*in (Stylist*in)", + "female": "Friseurin (Stylistin)", + "male": "Friseur (Stylist)", + }, {"neutral": "Frächter*in", "female": "Frächterin", "male": "Frächter"}, {"neutral": "Fundraiser*in", "female": "Fundraiserin", "male": "Fundraiser"}, - {"neutral": "Fundraising Manager*in", "female": "Fundraising Managerin", "male": "Fundraising Manager"}, - {"neutral": "Fußballspieler*in", "female": "Fußballspielerin", "male": "Fußballspieler"}, - {"neutral": "Fußballtrainer*in", "female": "Fußballtrainerin", "male": "Fußballtrainer"}, - {"neutral": "Fußpflege (Podologie)", "female": "Fußpflege (Podologie)", "male": "Fußpflege (Podologie)"}, + { + "neutral": "Fundraising Manager*in", + "female": "Fundraising Managerin", + "male": "Fundraising Manager", + }, + { + "neutral": "Fußballspieler*in", + "female": "Fußballspielerin", + "male": "Fußballspieler", + }, + { + "neutral": "Fußballtrainer*in", + "female": "Fußballtrainerin", + "male": "Fußballtrainer", + }, + { + "neutral": "Fußpflege (Podologie)", + "female": "Fußpflege (Podologie)", + "male": "Fußpflege (Podologie)", + }, {"neutral": "Fußpfleger*in", "female": "Fußpflegerin", "male": "Fußpfleger"}, {"neutral": "Färber*in", "female": "Färberin", "male": "Färber"}, - {"neutral": "Förderungsmanager*in", "female": "Förderungsmanagerin", "male": "Förderungsmanager"}, + { + "neutral": "Förderungsmanager*in", + "female": "Förderungsmanagerin", + "male": "Förderungsmanager", + }, {"neutral": "Förster*in", "female": "Försterin", "male": "Förster"}, - {"neutral": "GIS-Techniker*in", "female": "GIS-Technikerin", "male": "GIS-Techniker"}, - {"neutral": "Gagschreiber*in", "female": "Gagschreiberin", "male": "Gagschreiber"}, - {"neutral": "Galanteriespengler*in", "female": "Galanteriespenglerin", "male": "Galanteriespengler"}, + { + "neutral": "GIS-Techniker*in", + "female": "GIS-Technikerin", + "male": "GIS-Techniker", + }, + { + "neutral": "Gagschreiber*in", + "female": "Gagschreiberin", + "male": "Gagschreiber", + }, + { + "neutral": "Galanteriespengler*in", + "female": "Galanteriespenglerin", + "male": "Galanteriespengler", + }, {"neutral": "Galerist*in", "female": "Galeristin", "male": "Galerist"}, - {"neutral": "Game Developer", "female": "Game Developer", "male": "Game Developer"}, - {"neutral": "Garderobier / Garderobiere", "female": "Garderobiere", "male": "Garderobier"}, + { + "neutral": "Game Developer", + "female": "Game Developer", + "male": "Game Developer", + }, + { + "neutral": "Garderobier / Garderobiere", + "female": "Garderobiere", + "male": "Garderobier", + }, { "neutral": "Garderobier / Garderobiere (Künstler-)", "female": "Garderobiere (Künstler-)", @@ -1858,7 +3278,11 @@ class Provider(BaseProvider): "male": "Garten- und Grünflächengestaltung - Landschaftsgärtnerei", }, {"neutral": "Gartenbau", "female": "Gartenbau", "male": "Gartenbau"}, - {"neutral": "Gartenbautechniker*in", "female": "Gartenbautechnikerin", "male": "Gartenbautechniker"}, + { + "neutral": "Gartenbautechniker*in", + "female": "Gartenbautechnikerin", + "male": "Gartenbautechniker", + }, { "neutral": "Gartencenterkaufmann / Gartencenterkauffrau", "female": "Gartencenterkauffrau", @@ -1880,23 +3304,59 @@ class Provider(BaseProvider): "female": "Gebärdensprachdolmetscherin", "male": "Gebärdensprachdolmetscher", }, - {"neutral": "Gebäudetechniker*in", "female": "Gebäudetechnikerin", "male": "Gebäudetechniker"}, + { + "neutral": "Gebäudetechniker*in", + "female": "Gebäudetechnikerin", + "male": "Gebäudetechniker", + }, { "neutral": "Gebäudetechniker*in (Smart Building)", "female": "Gebäudetechnikerin (Smart Building)", "male": "Gebäudetechniker (Smart Building)", }, - {"neutral": "Gefahrgutbeauftragte*r", "female": "Gefahrgutbeauftragte", "male": "Gefahrgutbeauftragter"}, - {"neutral": "Geflügelwirtschaft", "female": "Geflügelwirtschaft", "male": "Geflügelwirtschaft"}, - {"neutral": "Gehirnforscher*in", "female": "Gehirnforscherin", "male": "Gehirnforscher"}, - {"neutral": "Gemeindepädagoge / Gemeindepädagogin", "female": "Gemeindepädagogin", "male": "Gemeindepädagoge"}, - {"neutral": "Genealoge / Genealogin", "female": "Genealogin", "male": "Genealoge"}, + { + "neutral": "Gefahrgutbeauftragte*r", + "female": "Gefahrgutbeauftragte", + "male": "Gefahrgutbeauftragter", + }, + { + "neutral": "Geflügelwirtschaft", + "female": "Geflügelwirtschaft", + "male": "Geflügelwirtschaft", + }, + { + "neutral": "Gehirnforscher*in", + "female": "Gehirnforscherin", + "male": "Gehirnforscher", + }, + { + "neutral": "Gemeindepädagoge / Gemeindepädagogin", + "female": "Gemeindepädagogin", + "male": "Gemeindepädagoge", + }, + { + "neutral": "Genealoge / Genealogin", + "female": "Genealogin", + "male": "Genealoge", + }, {"neutral": "Genetiker*in", "female": "Genetikerin", "male": "Genetiker"}, - {"neutral": "Gentechnologe / Gentechnologin", "female": "Gentechnologin", "male": "Gentechnologe"}, + { + "neutral": "Gentechnologe / Gentechnologin", + "female": "Gentechnologin", + "male": "Gentechnologe", + }, {"neutral": "Geochemiker*in", "female": "Geochemikerin", "male": "Geochemiker"}, {"neutral": "Geograf*in", "female": "Geografin", "male": "Geograf"}, - {"neutral": "Geoinformatiker*in", "female": "Geoinformatikerin", "male": "Geoinformatiker"}, - {"neutral": "Geoinformationstechnik", "female": "Geoinformationstechnik", "male": "Geoinformationstechnik"}, + { + "neutral": "Geoinformatiker*in", + "female": "Geoinformatikerin", + "male": "Geoinformatiker", + }, + { + "neutral": "Geoinformationstechnik", + "female": "Geoinformationstechnik", + "male": "Geoinformationstechnik", + }, { "neutral": "Geoinformationstechniker*in", "female": "Geoinformationstechnikerin", @@ -1904,18 +3364,50 @@ class Provider(BaseProvider): }, {"neutral": "Geologe / Geologin", "female": "Geologin", "male": "Geologe"}, {"neutral": "Geophysiker*in", "female": "Geophysikerin", "male": "Geophysiker"}, - {"neutral": "Geotechniker*in", "female": "Geotechnikerin", "male": "Geotechniker"}, + { + "neutral": "Geotechniker*in", + "female": "Geotechnikerin", + "male": "Geotechniker", + }, {"neutral": "Geragoge / Geragogin", "female": "Geragogin", "male": "Geragoge"}, {"neutral": "Gerberei", "female": "Gerberei", "male": "Gerberei"}, - {"neutral": "Gerichtsdolmetscher*in", "female": "Gerichtsdolmetscherin", "male": "Gerichtsdolmetscher"}, - {"neutral": "Gerichtsmediziner*in", "female": "Gerichtsmedizinerin", "male": "Gerichtsmediziner"}, - {"neutral": "Gerichtsvollzieher*in", "female": "Gerichtsvollzieherin", "male": "Gerichtsvollzieher"}, + { + "neutral": "Gerichtsdolmetscher*in", + "female": "Gerichtsdolmetscherin", + "male": "Gerichtsdolmetscher", + }, + { + "neutral": "Gerichtsmediziner*in", + "female": "Gerichtsmedizinerin", + "male": "Gerichtsmediziner", + }, + { + "neutral": "Gerichtsvollzieher*in", + "female": "Gerichtsvollzieherin", + "male": "Gerichtsvollzieher", + }, {"neutral": "Germanist*in", "female": "Germanistin", "male": "Germanist"}, - {"neutral": "Gerontologe / Gerontologin", "female": "Gerontologin", "male": "Gerontologe"}, + { + "neutral": "Gerontologe / Gerontologin", + "female": "Gerontologin", + "male": "Gerontologe", + }, {"neutral": "Gerüster*in", "female": "Gerüsterin", "male": "Gerüster"}, - {"neutral": "Gesangslehrer*in", "female": "Gesangslehrerin", "male": "Gesangslehrer"}, - {"neutral": "Geschirrkeramformer*in", "female": "Geschirrkeramformerin", "male": "Geschirrkeramformer"}, - {"neutral": "Geschäftsführer*in", "female": "Geschäftsführerin", "male": "Geschäftsführer"}, + { + "neutral": "Gesangslehrer*in", + "female": "Gesangslehrerin", + "male": "Gesangslehrer", + }, + { + "neutral": "Geschirrkeramformer*in", + "female": "Geschirrkeramformerin", + "male": "Geschirrkeramformer", + }, + { + "neutral": "Geschäftsführer*in", + "female": "Geschäftsführerin", + "male": "Geschäftsführer", + }, { "neutral": "Gesteinshüttentechniker*in", "female": "Gesteinshüttentechnikerin", @@ -1926,20 +3418,52 @@ class Provider(BaseProvider): "female": "Gesundheits- und Krankenpfleger", "male": "Gesundheits- und Krankenschwester", }, - {"neutral": "Gesundheitscontroller*in", "female": "Gesundheitscontrollerin", "male": "Gesundheitscontroller"}, - {"neutral": "Gesundheitsmanager*in", "female": "Gesundheitsmanagerin", "male": "Gesundheitsmanager"}, + { + "neutral": "Gesundheitscontroller*in", + "female": "Gesundheitscontrollerin", + "male": "Gesundheitscontroller", + }, + { + "neutral": "Gesundheitsmanager*in", + "female": "Gesundheitsmanagerin", + "male": "Gesundheitsmanager", + }, { "neutral": "Gesundheitspsychologe / Gesundheitspsychologin", "female": "Gesundheitspsychologin", "male": "Gesundheitspsychologe", }, - {"neutral": "Gesundheitstrainer*in", "female": "Gesundheitstrainerin", "male": "Gesundheitstrainer"}, - {"neutral": "Gesundheitsökonom*in", "female": "Gesundheitsökonomin", "male": "Gesundheitsökonom"}, - {"neutral": "Getreidemüller*in", "female": "Getreidemüllerin", "male": "Getreidemüller"}, - {"neutral": "Getränkehersteller*in", "female": "Getränkeherstellerin", "male": "Getränkehersteller"}, + { + "neutral": "Gesundheitstrainer*in", + "female": "Gesundheitstrainerin", + "male": "Gesundheitstrainer", + }, + { + "neutral": "Gesundheitsökonom*in", + "female": "Gesundheitsökonomin", + "male": "Gesundheitsökonom", + }, + { + "neutral": "Getreidemüller*in", + "female": "Getreidemüllerin", + "male": "Getreidemüller", + }, + { + "neutral": "Getränkehersteller*in", + "female": "Getränkeherstellerin", + "male": "Getränkehersteller", + }, {"neutral": "Ghostwriter", "female": "Ghostwriter", "male": "Ghostwriter"}, - {"neutral": "Gießereimechaniker*in", "female": "Gießereimechanikerin", "male": "Gießereimechaniker"}, - {"neutral": "Gießereitechnik", "female": "Gießereitechnik", "male": "Gießereitechnik"}, + { + "neutral": "Gießereimechaniker*in", + "female": "Gießereimechanikerin", + "male": "Gießereimechaniker", + }, + { + "neutral": "Gießereitechnik", + "female": "Gießereitechnik", + "male": "Gießereitechnik", + }, { "neutral": "Gießereitechnik - Eisen- und Stahlguss", "female": "Gießereitechnik - Eisen- und Stahlguss", @@ -1950,9 +3474,21 @@ class Provider(BaseProvider): "female": "Gießereitechnik - Nichteisenmetallguss", "male": "Gießereitechnik - Nichteisenmetallguss", }, - {"neutral": "Gießereitechniker*in", "female": "Gießereitechnikerin", "male": "Gießereitechniker"}, - {"neutral": "Gipsassistent*in", "female": "Gipsassistentin", "male": "Gipsassistent"}, - {"neutral": "Glasbautechnik", "female": "Glasbautechnik", "male": "Glasbautechnik"}, + { + "neutral": "Gießereitechniker*in", + "female": "Gießereitechnikerin", + "male": "Gießereitechniker", + }, + { + "neutral": "Gipsassistent*in", + "female": "Gipsassistentin", + "male": "Gipsassistent", + }, + { + "neutral": "Glasbautechnik", + "female": "Glasbautechnik", + "male": "Glasbautechnik", + }, { "neutral": "Glasbautechnik - Glasbau", "female": "Glasbautechnik - Glasbau", @@ -1969,12 +3505,24 @@ class Provider(BaseProvider): "male": "Glasbläser und Glasinstrumentenerzeuger", }, {"neutral": "Glaser*in", "female": "Glaserin", "male": "Glaser"}, - {"neutral": "Glasgestalter*in", "female": "Glasgestalterin", "male": "Glasgestalter"}, + { + "neutral": "Glasgestalter*in", + "female": "Glasgestalterin", + "male": "Glasgestalter", + }, {"neutral": "Glasgraveur*in", "female": "Glasgraveurin", "male": "Glasgraveur"}, - {"neutral": "Glashüttentechniker*in", "female": "Glashüttentechnikerin", "male": "Glashüttentechniker"}, + { + "neutral": "Glashüttentechniker*in", + "female": "Glashüttentechnikerin", + "male": "Glashüttentechniker", + }, {"neutral": "Glasmacherei", "female": "Glasmacherei", "male": "Glasmacherei"}, {"neutral": "Glasmaler*in", "female": "Glasmalerin", "male": "Glasmaler"}, - {"neutral": "Glasverfahrenstechnik", "female": "Glasverfahrenstechnik", "male": "Glasverfahrenstechnik"}, + { + "neutral": "Glasverfahrenstechnik", + "female": "Glasverfahrenstechnik", + "male": "Glasverfahrenstechnik", + }, { "neutral": "Glasverfahrenstechnik - Flachglasveredelung", "female": "Glasverfahrenstechnik - Flachglasveredelung", @@ -1985,7 +3533,11 @@ class Provider(BaseProvider): "female": "Glasverfahrenstechnik - Hohlglasproduktion", "male": "Glasverfahrenstechnik - Hohlglasproduktion", }, - {"neutral": "Gleisbautechnik", "female": "Gleisbautechnik", "male": "Gleisbautechnik"}, + { + "neutral": "Gleisbautechnik", + "female": "Gleisbautechnik", + "male": "Gleisbautechnik", + }, { "neutral": "Gold- und Silberschmied*in und Juwelier*in", "female": "Gold- und Silberschmiedin und Juwelierin", @@ -2002,41 +3554,117 @@ class Provider(BaseProvider): "male": "Gold-, Silber- und Perlensticker", }, {"neutral": "Golflehrer*in", "female": "Golflehrerin", "male": "Golflehrer"}, - {"neutral": "Grafikdesigner*in", "female": "Grafikdesignerin", "male": "Grafikdesigner"}, + { + "neutral": "Grafikdesigner*in", + "female": "Grafikdesignerin", + "male": "Grafikdesigner", + }, {"neutral": "Grafiker*in", "female": "Grafikerin", "male": "Grafiker"}, - {"neutral": "Grafiker*in (Kunst-)", "female": "Grafikerin (Kunst-)", "male": "Grafiker (Kunst-)"}, + { + "neutral": "Grafiker*in (Kunst-)", + "female": "Grafikerin (Kunst-)", + "male": "Grafiker (Kunst-)", + }, {"neutral": "Graveur*in", "female": "Graveurin", "male": "Graveur"}, - {"neutral": "Ground Hostess / Ground Stewart", "female": "Ground Hostess", "male": "Ground Steward"}, - {"neutral": "Growth Manager*in", "female": "Growth Managerin", "male": "Growth Manager"}, + { + "neutral": "Ground Hostess / Ground Stewart", + "female": "Ground Hostess", + "male": "Ground Steward", + }, + { + "neutral": "Growth Manager*in", + "female": "Growth Managerin", + "male": "Growth Manager", + }, { "neutral": "Großhandelskaufmann / Großhandelskauffrau", "female": "Großhandelskauffrau", "male": "Großhandelskaufmann", }, - {"neutral": "Großmaschinsticker*in", "female": "Großmaschinstickerin", "male": "Großmaschinsticker"}, - {"neutral": "Gründungsberater*in", "female": "Gründungsberaterin", "male": "Gründungsberater"}, - {"neutral": "Gymnastiktrainer*in", "female": "Gymnastiktrainerin", "male": "Gymnastiktrainer"}, + { + "neutral": "Großmaschinsticker*in", + "female": "Großmaschinstickerin", + "male": "Großmaschinsticker", + }, + { + "neutral": "Gründungsberater*in", + "female": "Gründungsberaterin", + "male": "Gründungsberater", + }, + { + "neutral": "Gymnastiktrainer*in", + "female": "Gymnastiktrainerin", + "male": "Gymnastiktrainer", + }, {"neutral": "Gürtler*in", "female": "Gürtlerin", "male": "Gürtler"}, - {"neutral": "HR-Business-Partner*in", "female": "HR-Business-Partnerin", "male": "HR-Business-Partner"}, + { + "neutral": "HR-Business-Partner*in", + "female": "HR-Business-Partnerin", + "male": "HR-Business-Partner", + }, { "neutral": "HR-Manager*in (Human Resources Manager*in)", "female": "HR-Managerin (Human Resources Managerin)", "male": "HR-Manager (Human Resources Manager)", }, - {"neutral": "Hafenmeister*in", "female": "Hafenmeisterin", "male": "Hafenmeister"}, + { + "neutral": "Hafenmeister*in", + "female": "Hafenmeisterin", + "male": "Hafenmeister", + }, {"neutral": "Hafner*in", "female": "Hafnerin", "male": "Hafner"}, - {"neutral": "Handelsvertreter*in", "female": "Handelsvertreterin", "male": "Handelsvertreter"}, - {"neutral": "Handelswissenschafter*in", "female": "Handelswissenschafterin", "male": "Handelswissenschafter"}, - {"neutral": "Handschuhmacher*in", "female": "Handschuhmacherin", "male": "Handschuhmacher"}, - {"neutral": "Hardware-Entwickler*in", "female": "Hardware-Entwicklerin", "male": "Hardware-Entwickler"}, - {"neutral": "Harmonikamacher*in", "female": "Harmonikamacherin", "male": "Harmonikamacher"}, - {"neutral": "Hausbesorger*in", "female": "Hausbesorgerin", "male": "Hausbesorger"}, - {"neutral": "Hausdame / Hausherr im Hotel", "female": "Hausdame im Hotel", "male": "Hausherr im Hotel"}, + { + "neutral": "Handelsvertreter*in", + "female": "Handelsvertreterin", + "male": "Handelsvertreter", + }, + { + "neutral": "Handelswissenschafter*in", + "female": "Handelswissenschafterin", + "male": "Handelswissenschafter", + }, + { + "neutral": "Handschuhmacher*in", + "female": "Handschuhmacherin", + "male": "Handschuhmacher", + }, + { + "neutral": "Hardware-Entwickler*in", + "female": "Hardware-Entwicklerin", + "male": "Hardware-Entwickler", + }, + { + "neutral": "Harmonikamacher*in", + "female": "Harmonikamacherin", + "male": "Harmonikamacher", + }, + { + "neutral": "Hausbesorger*in", + "female": "Hausbesorgerin", + "male": "Hausbesorger", + }, + { + "neutral": "Hausdame / Hausherr im Hotel", + "female": "Hausdame im Hotel", + "male": "Hausherr im Hotel", + }, {"neutral": "Haushälter*in", "female": "Haushälterin", "male": "Haushälter"}, - {"neutral": "Haustechniker*in", "female": "Haustechnikerin", "male": "Haustechniker"}, - {"neutral": "Hausverwalter*in", "female": "Hausverwalterin", "male": "Hausverwalter"}, + { + "neutral": "Haustechniker*in", + "female": "Haustechnikerin", + "male": "Haustechniker", + }, + { + "neutral": "Hausverwalter*in", + "female": "Hausverwalterin", + "male": "Hausverwalter", + }, {"neutral": "Hebamme", "female": "Hebamme", "male": "Hebamme"}, - {"neutral": "Heilbadegehilfe / Heilbadegehilfin", "female": "Heilbadegehilfin", "male": "Heilbadegehilfe"}, + { + "neutral": "Heilbadegehilfe / Heilbadegehilfin", + "female": "Heilbadegehilfin", + "male": "Heilbadegehilfe", + }, { "neutral": "Heilbademeister*in / Heilbademasseur*in", "female": "Heilbademeisterin / Heilbademasseurin", @@ -2050,14 +3678,30 @@ class Provider(BaseProvider): }, {"neutral": "Heimhelfer*in", "female": "Heimhelferin", "male": "Heimhelfer"}, {"neutral": "Heimleiter*in", "female": "Heimleiterin", "male": "Heimleiter"}, - {"neutral": "Helpdesk Agent", "female": "Helpdesk Agent", "male": "Helpdesk Agent"}, + { + "neutral": "Helpdesk Agent", + "female": "Helpdesk Agent", + "male": "Helpdesk Agent", + }, {"neutral": "Heraldiker*in", "female": "Heraldikerin", "male": "Heraldiker"}, - {"neutral": "Herrenkleidermacher*in", "female": "Herrenkleidermacherin", "male": "Herrenkleidermacher"}, - {"neutral": "Hippotherapeut*in", "female": "Hippotherapeutin", "male": "Hippotherapeut"}, + { + "neutral": "Herrenkleidermacher*in", + "female": "Herrenkleidermacherin", + "male": "Herrenkleidermacher", + }, + { + "neutral": "Hippotherapeut*in", + "female": "Hippotherapeutin", + "male": "Hippotherapeut", + }, {"neutral": "Hirte / Hirtin", "female": "Hirtin", "male": "Hirte"}, {"neutral": "Historiker*in", "female": "Historikerin", "male": "Historiker"}, {"neutral": "Hochbau", "female": "Hochbau", "male": "Hochbau"}, - {"neutral": "Hochbauspezialist*in", "female": "Hochbauspezialistin", "male": "Hochbauspezialist"}, + { + "neutral": "Hochbauspezialist*in", + "female": "Hochbauspezialistin", + "male": "Hochbauspezialist", + }, { "neutral": "Hochbauspezialist*in - Neubau", "female": "Hochbauspezialistin - Neubau", @@ -2068,14 +3712,22 @@ class Provider(BaseProvider): "female": "Hochbauspezialistin - Sanierung", "male": "Hochbauspezialist - Sanierung", }, - {"neutral": "Hochbautechniker*in", "female": "Hochbautechnikerin", "male": "Hochbautechniker"}, + { + "neutral": "Hochbautechniker*in", + "female": "Hochbautechnikerin", + "male": "Hochbautechniker", + }, {"neutral": "Hofberater*in", "female": "Hofberaterin", "male": "Hofberater"}, { "neutral": "Hohlglasschleifer*in- Kugeln", "female": "Hohlglasschleiferin- Kugeln", "male": "Hohlglasschleifer- Kugeln", }, - {"neutral": "Hohlglasveredler*in", "female": "Hohlglasveredlerin", "male": "Hohlglasveredler"}, + { + "neutral": "Hohlglasveredler*in", + "female": "Hohlglasveredlerin", + "male": "Hohlglasveredler", + }, { "neutral": "Hohlglasveredler*in - Glasmalerei", "female": "Hohlglasveredlerin - Glasmalerei", @@ -2096,17 +3748,41 @@ class Provider(BaseProvider): "female": "Holz- und Steinbildhauerin", "male": "Holz- und Steinbildhauer", }, - {"neutral": "Holz- und Sägetechnik", "female": "Holz- und Sägetechnik", "male": "Holz- und Sägetechnik"}, - {"neutral": "Holzbaukonstrukteur*in", "female": "Holzbaukonstrukteurin", "male": "Holzbaukonstrukteur"}, - {"neutral": "Holzbautechniker*in", "female": "Holzbautechnikerin", "male": "Holzbautechniker"}, + { + "neutral": "Holz- und Sägetechnik", + "female": "Holz- und Sägetechnik", + "male": "Holz- und Sägetechnik", + }, + { + "neutral": "Holzbaukonstrukteur*in", + "female": "Holzbaukonstrukteurin", + "male": "Holzbaukonstrukteur", + }, + { + "neutral": "Holzbautechniker*in", + "female": "Holzbautechnikerin", + "male": "Holzbautechniker", + }, { "neutral": "Holzblasinstrumentenerzeugung", "female": "Holzblasinstrumentenerzeugung", "male": "Holzblasinstrumentenerzeugung", }, - {"neutral": "Holzdesigner*in", "female": "Holzdesignerin", "male": "Holzdesigner"}, - {"neutral": "Holzkaufmann / Holzkauffrau", "female": "Holzkauffrau", "male": "Holzkaufmann"}, - {"neutral": "Holzspielzeugmacher*in", "female": "Holzspielzeugmacherin", "male": "Holzspielzeugmacher"}, + { + "neutral": "Holzdesigner*in", + "female": "Holzdesignerin", + "male": "Holzdesigner", + }, + { + "neutral": "Holzkaufmann / Holzkauffrau", + "female": "Holzkauffrau", + "male": "Holzkaufmann", + }, + { + "neutral": "Holzspielzeugmacher*in", + "female": "Holzspielzeugmacherin", + "male": "Holzspielzeugmacher", + }, {"neutral": "Holztechnik", "female": "Holztechnik", "male": "Holztechnik"}, { "neutral": "Holztechnik - Fensterbautechnik", @@ -2128,10 +3804,18 @@ class Provider(BaseProvider): "female": "Holztechnik - Werkstoffproduktion", "male": "Holztechnik - Werkstoffproduktion", }, - {"neutral": "Holztechniker*in", "female": "Holztechnikerin", "male": "Holztechniker"}, + { + "neutral": "Holztechniker*in", + "female": "Holztechnikerin", + "male": "Holztechniker", + }, {"neutral": "Holzwirt*in", "female": "Holzwirtin", "male": "Holzwirt"}, {"neutral": "Home Stager", "female": "Home Stager", "male": "Home Stager"}, - {"neutral": "Hortpädagoge / Hortpädagogin", "female": "Hortpädagogin", "male": "Hortpädagoge"}, + { + "neutral": "Hortpädagoge / Hortpädagogin", + "female": "Hortpädagogin", + "male": "Hortpädagoge", + }, { "neutral": "Hotel- und Gastgewerbeassistent*in", "female": "Hotel- und Gastgewerbeassistentin", @@ -2142,45 +3826,133 @@ class Provider(BaseProvider): "female": "Hotel- und Restaurantfachfrau", "male": "Hotel- und Restaurantfachmann", }, - {"neutral": "Hotelassistent*in", "female": "Hotelassistentin", "male": "Hotelassistent"}, - {"neutral": "Hoteldirektor*in", "female": "Hoteldirektorin", "male": "Hoteldirektor"}, - {"neutral": "Hotelkaufmann / Hotelkauffrau", "female": "Hotelkauffrau", "male": "Hotelkaufmann"}, - {"neutral": "Hotelportier*in", "female": "Hotelportierin", "male": "Hotelportier"}, - {"neutral": "Hotelsekretär*in", "female": "Hotelsekretärin", "male": "Hotelsekretär"}, + { + "neutral": "Hotelassistent*in", + "female": "Hotelassistentin", + "male": "Hotelassistent", + }, + { + "neutral": "Hoteldirektor*in", + "female": "Hoteldirektorin", + "male": "Hoteldirektor", + }, + { + "neutral": "Hotelkaufmann / Hotelkauffrau", + "female": "Hotelkauffrau", + "male": "Hotelkaufmann", + }, + { + "neutral": "Hotelportier*in", + "female": "Hotelportierin", + "male": "Hotelportier", + }, + { + "neutral": "Hotelsekretär*in", + "female": "Hotelsekretärin", + "male": "Hotelsekretär", + }, {"neutral": "Housekeeper", "female": "Housekeeper", "male": "Housekeeper"}, - {"neutral": "Hubschrauberpilot*in", "female": "Hubschrauberpilotin", "male": "Hubschrauberpilot"}, + { + "neutral": "Hubschrauberpilot*in", + "female": "Hubschrauberpilotin", + "male": "Hubschrauberpilot", + }, {"neutral": "Hufschmied*in", "female": "Hufschmiedin", "male": "Hufschmied"}, - {"neutral": "Humanbiologe / Humanbiologin", "female": "Humanbiologin", "male": "Humanbiologe"}, + { + "neutral": "Humanbiologe / Humanbiologin", + "female": "Humanbiologin", + "male": "Humanbiologe", + }, {"neutral": "Hundeführer*in", "female": "Hundeführerin", "male": "Hundeführer"}, - {"neutral": "Hundekosmetiker*in", "female": "Hundekosmetikerin", "male": "Hundekosmetiker"}, - {"neutral": "Hundetrainer*in", "female": "Hundetrainerin", "male": "Hundetrainer"}, + { + "neutral": "Hundekosmetiker*in", + "female": "Hundekosmetikerin", + "male": "Hundekosmetiker", + }, + { + "neutral": "Hundetrainer*in", + "female": "Hundetrainerin", + "male": "Hundetrainer", + }, {"neutral": "Hutmacher*in", "female": "Hutmacherin", "male": "Hutmacher"}, - {"neutral": "Höhlenführer*in", "female": "Höhlenführerin", "male": "Höhlenführer"}, - {"neutral": "Hörgeräteakustiker*in", "female": "Hörgeräteakustikerin", "male": "Hörgeräteakustiker"}, - {"neutral": "Hütteningenieur*in", "female": "Hütteningenieurin", "male": "Hütteningenieur"}, - {"neutral": "Hüttenwerkschlosser*in", "female": "Hüttenwerkschlosserin", "male": "Hüttenwerkschlosser"}, + { + "neutral": "Höhlenführer*in", + "female": "Höhlenführerin", + "male": "Höhlenführer", + }, + { + "neutral": "Hörgeräteakustiker*in", + "female": "Hörgeräteakustikerin", + "male": "Hörgeräteakustiker", + }, + { + "neutral": "Hütteningenieur*in", + "female": "Hütteningenieurin", + "male": "Hütteningenieur", + }, + { + "neutral": "Hüttenwerkschlosser*in", + "female": "Hüttenwerkschlosserin", + "male": "Hüttenwerkschlosser", + }, { "neutral": "IC-Designer*in - Elektrotechnik", "female": "IC-Designerin - Elektrotechnik", "male": "IC-Designer - Elektrotechnik", }, - {"neutral": "IFRS Accountant", "female": "IFRS Accountant", "male": "IFRS Accountant"}, + { + "neutral": "IFRS Accountant", + "female": "IFRS Accountant", + "male": "IFRS Accountant", + }, {"neutral": "IT-Assistant", "female": "IT-Assistant", "male": "IT-Assistant"}, {"neutral": "IT-Berater*in", "female": "IT-Beraterin", "male": "IT-Berater"}, {"neutral": "IT-Betreuer*in", "female": "IT-Betreuerin", "male": "IT-Betreuer"}, - {"neutral": "IT-Consultant", "female": "IT-Consultant", "male": "IT-Consultant"}, - {"neutral": "IT-Elektronik", "female": "IT-Elektronik", "male": "IT-Elektronik"}, - {"neutral": "IT-Forensiker*in", "female": "IT-Forensikerin", "male": "IT-Forensiker"}, - {"neutral": "IT-Kaufmann / IT-Kauffrau", "female": "IT-Kauffrau", "male": "IT-Kaufmann"}, + { + "neutral": "IT-Consultant", + "female": "IT-Consultant", + "male": "IT-Consultant", + }, + { + "neutral": "IT-Elektronik", + "female": "IT-Elektronik", + "male": "IT-Elektronik", + }, + { + "neutral": "IT-Forensiker*in", + "female": "IT-Forensikerin", + "male": "IT-Forensiker", + }, + { + "neutral": "IT-Kaufmann / IT-Kauffrau", + "female": "IT-Kauffrau", + "male": "IT-Kaufmann", + }, { "neutral": "IT-Organisationsberater*in", "female": "IT-Organisationsberaterin", "male": "IT-Organisationsberater", }, - {"neutral": "IT-Projektmanager*in", "female": "IT-Projektmanagerin", "male": "IT-Projektmanager"}, - {"neutral": "IT-Sales-Manager*in", "female": "IT-Sales-Managerin", "male": "IT-Sales-Manager"}, - {"neutral": "IT-Security Manager*in", "female": "IT-Security Managerin", "male": "IT-Security Manager"}, - {"neutral": "IT-System-Engineer", "female": "IT-System-Engineer", "male": "IT-System-Engineer"}, + { + "neutral": "IT-Projektmanager*in", + "female": "IT-Projektmanagerin", + "male": "IT-Projektmanager", + }, + { + "neutral": "IT-Sales-Manager*in", + "female": "IT-Sales-Managerin", + "male": "IT-Sales-Manager", + }, + { + "neutral": "IT-Security Manager*in", + "female": "IT-Security Managerin", + "male": "IT-Security Manager", + }, + { + "neutral": "IT-System-Engineer", + "female": "IT-System-Engineer", + "male": "IT-System-Engineer", + }, { "neutral": "IT-System-Kaufmann / IT-System-Kauffrau", "female": "IT-System-Kauffrau", @@ -2191,9 +3963,21 @@ class Provider(BaseProvider): "female": "IT-Systemadministratorin", "male": "IT-Systemadministrator", }, - {"neutral": "IT-Systemanalytiker*in", "female": "IT-Systemanalytikerin", "male": "IT-Systemanalytiker"}, - {"neutral": "IT-Systemdesigner*in", "female": "IT-Systemdesignerin", "male": "IT-Systemdesigner"}, - {"neutral": "IT-Systemelektroniker*in", "female": "IT-Systemelektronikerin", "male": "IT-Systemelektroniker"}, + { + "neutral": "IT-Systemanalytiker*in", + "female": "IT-Systemanalytikerin", + "male": "IT-Systemanalytiker", + }, + { + "neutral": "IT-Systemdesigner*in", + "female": "IT-Systemdesignerin", + "male": "IT-Systemdesigner", + }, + { + "neutral": "IT-Systemelektroniker*in", + "female": "IT-Systemelektronikerin", + "male": "IT-Systemelektroniker", + }, { "neutral": "IT-Systemelektroniker*in (Computersysteme)", "female": "IT-Systemelektronikerin (Computersysteme)", @@ -2219,9 +4003,21 @@ class Provider(BaseProvider): "female": "IT-Systemelektronikerin (Sicherheitssysteme)", "male": "IT-Systemelektroniker (Sicherheitssysteme)", }, - {"neutral": "IT-Systemingenieur*in", "female": "IT-Systemingenieurin", "male": "IT-Systemingenieur"}, - {"neutral": "IT-Systemmanager*in", "female": "IT-Systemmanagerin", "male": "IT-Systemmanager"}, - {"neutral": "IT-Systemtechniker*in", "female": "IT-Systemtechnikerin", "male": "IT-Systemtechniker"}, + { + "neutral": "IT-Systemingenieur*in", + "female": "IT-Systemingenieurin", + "male": "IT-Systemingenieur", + }, + { + "neutral": "IT-Systemmanager*in", + "female": "IT-Systemmanagerin", + "male": "IT-Systemmanager", + }, + { + "neutral": "IT-Systemtechniker*in", + "female": "IT-Systemtechnikerin", + "male": "IT-Systemtechniker", + }, {"neutral": "IT-Trainer*in", "female": "IT-Trainerin", "male": "IT-Trainer"}, {"neutral": "Illustrator*in", "female": "Illustratorin", "male": "Illustrator"}, {"neutral": "Imam", "female": "Imam", "male": "Imam"}, @@ -2230,11 +4026,27 @@ class Provider(BaseProvider): "female": "Immobilienkauffrau", "male": "Immobilienkaufmann", }, - {"neutral": "Immobilienmakler*in", "female": "Immobilienmaklerin", "male": "Immobilienmakler"}, - {"neutral": "Immobilientreuhänder*in", "female": "Immobilientreuhänderin", "male": "Immobilientreuhänder"}, - {"neutral": "Immobilienverwalter*in", "female": "Immobilienverwalterin", "male": "Immobilienverwalter"}, + { + "neutral": "Immobilienmakler*in", + "female": "Immobilienmaklerin", + "male": "Immobilienmakler", + }, + { + "neutral": "Immobilientreuhänder*in", + "female": "Immobilientreuhänderin", + "male": "Immobilientreuhänder", + }, + { + "neutral": "Immobilienverwalter*in", + "female": "Immobilienverwalterin", + "male": "Immobilienverwalter", + }, {"neutral": "Indologe / Indologin", "female": "Indologin", "male": "Indologe"}, - {"neutral": "Industrial-Designer*in", "female": "Industrial-Designerin", "male": "Industrial-Designer"}, + { + "neutral": "Industrial-Designer*in", + "female": "Industrial-Designerin", + "male": "Industrial-Designer", + }, { "neutral": "Industriekaufmann / Industriekauffrau", "female": "Industriekauffrau", @@ -2245,13 +4057,33 @@ class Provider(BaseProvider): "female": "Industriekletterin", "male": "Industriekletterer", }, - {"neutral": "Industrielogistiker*in", "female": "Industrielogistikerin", "male": "Industrielogistiker"}, - {"neutral": "Industrietaucher*in", "female": "Industrietaucherin", "male": "Industrietaucher"}, - {"neutral": "Industrietechniker*in", "female": "Industrietechnikerin", "male": "Industrietechniker"}, + { + "neutral": "Industrielogistiker*in", + "female": "Industrielogistikerin", + "male": "Industrielogistiker", + }, + { + "neutral": "Industrietaucher*in", + "female": "Industrietaucherin", + "male": "Industrietaucher", + }, + { + "neutral": "Industrietechniker*in", + "female": "Industrietechnikerin", + "male": "Industrietechniker", + }, {"neutral": "Influencer", "female": "Influencer", "male": "Influencer"}, - {"neutral": "Infografiker*in", "female": "Infografikerin", "male": "Infografiker"}, + { + "neutral": "Infografiker*in", + "female": "Infografikerin", + "male": "Infografiker", + }, {"neutral": "Informatik", "female": "Informatik", "male": "Informatik"}, - {"neutral": "Informatiker*in", "female": "Informatikerin", "male": "Informatiker"}, + { + "neutral": "Informatiker*in", + "female": "Informatikerin", + "male": "Informatiker", + }, { "neutral": "Informatiker*in (Digitale Industrie)", "female": "Informatikerin (Digitale Industrie)", @@ -2262,12 +4094,36 @@ class Provider(BaseProvider): "female": "Informatikkauffrau", "male": "Informatikkaufmann", }, - {"neutral": "Informationsbroker", "female": "Informationsbroker", "male": "Informationsbroker"}, - {"neutral": "Informationsdesigner*in", "female": "Informationsdesignerin", "male": "Informationsdesigner"}, - {"neutral": "Informationsmanager*in", "female": "Informationsmanagerin", "male": "Informationsmanager"}, - {"neutral": "Informationsoffizier*in", "female": "Informationsoffizierin", "male": "Informationsoffizier"}, - {"neutral": "Informationstechniker*in", "female": "Informationstechnikerin", "male": "Informationstechniker"}, - {"neutral": "Informationstechnologie", "female": "Informationstechnologie", "male": "Informationstechnologie"}, + { + "neutral": "Informationsbroker", + "female": "Informationsbroker", + "male": "Informationsbroker", + }, + { + "neutral": "Informationsdesigner*in", + "female": "Informationsdesignerin", + "male": "Informationsdesigner", + }, + { + "neutral": "Informationsmanager*in", + "female": "Informationsmanagerin", + "male": "Informationsmanager", + }, + { + "neutral": "Informationsoffizier*in", + "female": "Informationsoffizierin", + "male": "Informationsoffizier", + }, + { + "neutral": "Informationstechniker*in", + "female": "Informationstechnikerin", + "male": "Informationstechniker", + }, + { + "neutral": "Informationstechnologie", + "female": "Informationstechnologie", + "male": "Informationstechnologie", + }, { "neutral": "Informationstechnologie - Betriebstechnik", "female": "Informationstechnologie - Betriebstechnik", @@ -2288,15 +4144,43 @@ class Provider(BaseProvider): "female": "Informationstechnologie - Technik", "male": "Informationstechnologie - Technik", }, - {"neutral": "Ingenieurkonsulent*in", "female": "Ingenieurkonsulentin", "male": "Ingenieurkonsulent"}, - {"neutral": "Innenarchitekt*in", "female": "Innenarchitektin", "male": "Innenarchitekt"}, - {"neutral": "Innenausbauer*in", "female": "Innenausbauerin", "male": "Innenausbauer"}, - {"neutral": "Innenrequisiteur*in", "female": "Innenrequisiteurin", "male": "Innenrequisiteur"}, - {"neutral": "Innovationsmanager*in", "female": "Innovationsmanagerin", "male": "Innovationsmanager"}, - {"neutral": "Innovationstechniker*in", "female": "Innovationstechnikerin", "male": "Innovationstechniker"}, + { + "neutral": "Ingenieurkonsulent*in", + "female": "Ingenieurkonsulentin", + "male": "Ingenieurkonsulent", + }, + { + "neutral": "Innenarchitekt*in", + "female": "Innenarchitektin", + "male": "Innenarchitekt", + }, + { + "neutral": "Innenausbauer*in", + "female": "Innenausbauerin", + "male": "Innenausbauer", + }, + { + "neutral": "Innenrequisiteur*in", + "female": "Innenrequisiteurin", + "male": "Innenrequisiteur", + }, + { + "neutral": "Innovationsmanager*in", + "female": "Innovationsmanagerin", + "male": "Innovationsmanager", + }, + { + "neutral": "Innovationstechniker*in", + "female": "Innovationstechnikerin", + "male": "Innovationstechniker", + }, {"neutral": "Inspizient*in", "female": "Inspizientin", "male": "Inspizient"}, {"neutral": "Instagrammer", "female": "Instagrammer", "male": "Instagrammer"}, - {"neutral": "Installateur*in", "female": "Installateurin", "male": "Installateur"}, + { + "neutral": "Installateur*in", + "female": "Installateurin", + "male": "Installateur", + }, { "neutral": "Installations- und Gebäudetechnik", "female": "Installations- und Gebäudetechnik", @@ -2317,7 +4201,11 @@ class Provider(BaseProvider): "female": "Installations- und Gebäudetechnik - Lüftungstechnik", "male": "Installations- und Gebäudetechnik - Lüftungstechnik", }, - {"neutral": "Installationskünstler*in", "female": "Installationskünstlerin", "male": "Installationskünstler"}, + { + "neutral": "Installationskünstler*in", + "female": "Installationskünstlerin", + "male": "Installationskünstler", + }, { "neutral": "Instandhaltungstechniker*in", "female": "Instandhaltungstechnikerin", @@ -2333,10 +4221,22 @@ class Provider(BaseProvider): "female": "Instrumental- und Gesangspädagogin", "male": "Instrumental- und Gesangspädagoge", }, - {"neutral": "Instrumentalmusiker*in", "female": "Instrumentalmusikerin", "male": "Instrumentalmusiker"}, - {"neutral": "Integrationsbegleiter*in", "female": "Integrationsbegleiterin", "male": "Integrationsbegleiter"}, + { + "neutral": "Instrumentalmusiker*in", + "female": "Instrumentalmusikerin", + "male": "Instrumentalmusiker", + }, + { + "neutral": "Integrationsbegleiter*in", + "female": "Integrationsbegleiterin", + "male": "Integrationsbegleiter", + }, {"neutral": "Intendant*in", "female": "Intendantin", "male": "Intendant"}, - {"neutral": "Interface-Designer*in", "female": "Interface-Designerin", "male": "Interface-Designer"}, + { + "neutral": "Interface-Designer*in", + "female": "Interface-Designerin", + "male": "Interface-Designer", + }, { "neutral": "Interkulturelle*r Trainer*in", "female": "Interkulturelle Trainerin", @@ -2357,63 +4257,131 @@ class Provider(BaseProvider): "female": "Internet-/Intranet-Redakteurin", "male": "Internet-/Intranet-Redakteur", }, - {"neutral": "Internet-Scout", "female": "Internet-Scout", "male": "Internet-Scout"}, + { + "neutral": "Internet-Scout", + "female": "Internet-Scout", + "male": "Internet-Scout", + }, { "neutral": "Internet-Systembetreuer*in", "female": "Internet-Systembetreuerin", "male": "Internet-Systembetreuer", }, {"neutral": "Interviewer*in", "female": "Interviewerin", "male": "Interviewer"}, - {"neutral": "Investment Analyst*in", "female": "Investment Analystin", "male": "Investment Analyst"}, - {"neutral": "Investment Banker", "female": "Investment Banker", "male": "Investment Banker"}, + { + "neutral": "Investment Analyst*in", + "female": "Investment Analystin", + "male": "Investment Analyst", + }, + { + "neutral": "Investment Banker", + "female": "Investment Banker", + "male": "Investment Banker", + }, { "neutral": "Investor Relations Manager*in", "female": "Investor Relations Managerin", "male": "Investor Relations Manager", }, - {"neutral": "IoT-Entwickler*in", "female": "IoT-Entwicklerin", "male": "IoT-Entwickler"}, - {"neutral": "Isoliermonteur*in", "female": "Isoliermonteurin", "male": "Isoliermonteur"}, + { + "neutral": "IoT-Entwickler*in", + "female": "IoT-Entwicklerin", + "male": "IoT-Entwickler", + }, + { + "neutral": "Isoliermonteur*in", + "female": "Isoliermonteurin", + "male": "Isoliermonteur", + }, {"neutral": "Job Broker", "female": "Job Broker", "male": "Job Broker"}, {"neutral": "Jockey", "female": "Jockey", "male": "Jockey"}, {"neutral": "Journalist*in", "female": "Journalistin", "male": "Journalist"}, - {"neutral": "Journalist*in (Kultur)", "female": "Journalistin (Kultur)", "male": "Journalist (Kultur)"}, + { + "neutral": "Journalist*in (Kultur)", + "female": "Journalistin (Kultur)", + "male": "Journalist (Kultur)", + }, {"neutral": "Judaist*in", "female": "Judaistin", "male": "Judaist"}, - {"neutral": "Jugendbetreuer*in", "female": "Jugendbetreuerin", "male": "Jugendbetreuer"}, + { + "neutral": "Jugendbetreuer*in", + "female": "Jugendbetreuerin", + "male": "Jugendbetreuer", + }, { "neutral": "Junior Consultant E-Commerce", "female": "Junior Consultant E-Commerce", "male": "Junior Consultant E-Commerce", }, - {"neutral": "Junior Scientist", "female": "Junior Scientist", "male": "Junior Scientist"}, + { + "neutral": "Junior Scientist", + "female": "Junior Scientist", + "male": "Junior Scientist", + }, {"neutral": "Jurist*in", "female": "Juristin", "male": "Jurist"}, { "neutral": "Jurist*in (Arbeits- und Sozialrecht)", "female": "Juristin (Arbeits- und Sozialrecht)", "male": "Jurist (Arbeits- und Sozialrecht)", }, - {"neutral": "Jurist*in (Europarecht)", "female": "Juristin (Europarecht)", "male": "Jurist (Europarecht)"}, + { + "neutral": "Jurist*in (Europarecht)", + "female": "Juristin (Europarecht)", + "male": "Jurist (Europarecht)", + }, { "neutral": "Jurist*in (Internationales Recht)", "female": "Juristin (Internationales Recht)", "male": "Jurist (Internationales Recht)", }, - {"neutral": "Jurist*in (Steuerrecht)", "female": "Juristin (Steuerrecht)", "male": "Jurist (Steuerrecht)"}, - {"neutral": "Jurist*in (Strafrecht)", "female": "Juristin (Strafrecht)", "male": "Jurist (Strafrecht)"}, - {"neutral": "Jurist*in (Umweltrecht)", "female": "Juristin (Umweltrecht)", "male": "Jurist (Umweltrecht)"}, + { + "neutral": "Jurist*in (Steuerrecht)", + "female": "Juristin (Steuerrecht)", + "male": "Jurist (Steuerrecht)", + }, + { + "neutral": "Jurist*in (Strafrecht)", + "female": "Juristin (Strafrecht)", + "male": "Jurist (Strafrecht)", + }, + { + "neutral": "Jurist*in (Umweltrecht)", + "female": "Juristin (Umweltrecht)", + "male": "Jurist (Umweltrecht)", + }, { "neutral": "Jurist*in (Wirtschaftsrecht)", "female": "Juristin (Wirtschaftsrecht)", "male": "Jurist (Wirtschaftsrecht)", }, - {"neutral": "Jurist*in (Zivilrecht)", "female": "Juristin (Zivilrecht)", "male": "Jurist (Zivilrecht)"}, + { + "neutral": "Jurist*in (Zivilrecht)", + "female": "Juristin (Zivilrecht)", + "male": "Jurist (Zivilrecht)", + }, {"neutral": "KI-Prompter", "female": "KI-Prompter", "male": "KI-Prompter"}, {"neutral": "KI-Trainer*in", "female": "KI-Trainerin", "male": "KI-Trainer"}, {"neutral": "Kabarettist*in", "female": "Kabarettistin", "male": "Kabarettist"}, - {"neutral": "Kaffeeröster*in", "female": "Kaffeerösterin", "male": "Kaffeeröster"}, - {"neutral": "Kameramann / Kamerafrau", "female": "Kamerafrau", "male": "Kameramann"}, - {"neutral": "Kanalfacharbeiter*in", "female": "Kanalfacharbeiterin", "male": "Kanalfacharbeiter"}, + { + "neutral": "Kaffeeröster*in", + "female": "Kaffeerösterin", + "male": "Kaffeeröster", + }, + { + "neutral": "Kameramann / Kamerafrau", + "female": "Kamerafrau", + "male": "Kameramann", + }, + { + "neutral": "Kanalfacharbeiter*in", + "female": "Kanalfacharbeiterin", + "male": "Kanalfacharbeiter", + }, {"neutral": "Kantineur*in", "female": "Kantineurin", "male": "Kantineur"}, - {"neutral": "Kanzleiassistent*in", "female": "Kanzleiassistentin", "male": "Kanzleiassistent"}, + { + "neutral": "Kanzleiassistent*in", + "female": "Kanzleiassistentin", + "male": "Kanzleiassistent", + }, { "neutral": "Kanzleiassistent*in - Notariatskanzlei", "female": "Kanzleiassistentin - Notariatskanzlei", @@ -2424,10 +4392,26 @@ class Provider(BaseProvider): "female": "Kanzleiassistentin - Rechtsanwaltskanzlei", "male": "Kanzleiassistent - Rechtsanwaltskanzlei", }, - {"neutral": "Kappenmacher*in", "female": "Kappenmacherin", "male": "Kappenmacher"}, - {"neutral": "Kardiotechniker*in", "female": "Kardiotechnikerin", "male": "Kardiotechniker"}, - {"neutral": "Karikaturist*in", "female": "Karikaturistin", "male": "Karikaturist"}, - {"neutral": "Karosseriebautechnik", "female": "Karosseriebautechnik", "male": "Karosseriebautechnik"}, + { + "neutral": "Kappenmacher*in", + "female": "Kappenmacherin", + "male": "Kappenmacher", + }, + { + "neutral": "Kardiotechniker*in", + "female": "Kardiotechnikerin", + "male": "Kardiotechniker", + }, + { + "neutral": "Karikaturist*in", + "female": "Karikaturistin", + "male": "Karikaturist", + }, + { + "neutral": "Karosseriebautechnik", + "female": "Karosseriebautechnik", + "male": "Karosseriebautechnik", + }, {"neutral": "Karosseur*in", "female": "Karosseurin", "male": "Karosseur"}, {"neutral": "Kartograf*in", "female": "Kartografin", "male": "Kartograf"}, { @@ -2440,15 +4424,27 @@ class Provider(BaseProvider): "female": "Kassierin - Einzelhandel", "male": "Kassier - Einzelhandel", }, - {"neutral": "Katastrophenmanager*in", "female": "Katastrophenmanagerin", "male": "Katastrophenmanager"}, - {"neutral": "Kaufhausdetektiv*in", "female": "Kaufhausdetektivin", "male": "Kaufhausdetektiv"}, + { + "neutral": "Katastrophenmanager*in", + "female": "Katastrophenmanagerin", + "male": "Katastrophenmanager", + }, + { + "neutral": "Kaufhausdetektiv*in", + "female": "Kaufhausdetektivin", + "male": "Kaufhausdetektiv", + }, { "neutral": "Kaufmann / Kauffrau - Kurierdienste", "female": "Kauffrau - Kurierdienste", "male": "Kaufmann - Kurierdienste", }, {"neutral": "Kellner*in", "female": "Kellnerin", "male": "Kellner"}, - {"neutral": "Keltologe / Keltologin", "female": "Keltologin", "male": "Keltologe"}, + { + "neutral": "Keltologe / Keltologin", + "female": "Keltologin", + "male": "Keltologe", + }, {"neutral": "Keramiker*in", "female": "Keramikerin", "male": "Keramiker"}, { "neutral": "Keramiker*in - Baukeramik", @@ -2466,13 +4462,21 @@ class Provider(BaseProvider): "male": "Keramiker - Industriekeramik", }, {"neutral": "Kerammaler*in", "female": "Kerammalerin", "male": "Kerammaler"}, - {"neutral": "Kerammodelleur*in", "female": "Kerammodelleurin", "male": "Kerammodelleur"}, + { + "neutral": "Kerammodelleur*in", + "female": "Kerammodelleurin", + "male": "Kerammodelleur", + }, { "neutral": "Key Account Manager*in / Account Manager*in", "female": "Key Account Managerin / Account Managerin", "male": "Key Account Manager / Account Manager", }, - {"neutral": "Key Influencer", "female": "Key Influencer", "male": "Key Influencer"}, + { + "neutral": "Key Influencer", + "female": "Key Influencer", + "male": "Key Influencer", + }, { "neutral": "Kfz-Sachverständiger / Kfz-Sachverständige", "female": "Kfz-Sachverständige", @@ -2483,38 +4487,82 @@ class Provider(BaseProvider): "female": "Kinder- und Jugendberaterin", "male": "Kinder- und Jugendberater", }, - {"neutral": "Kinderbetreuer*in", "female": "Kinderbetreuerin", "male": "Kinderbetreuer"}, - {"neutral": "Kinderdorfhelfer*in", "female": "Kinderdorfhelferin", "male": "Kinderdorfhelfer"}, - {"neutral": "Kinderdorfmutter / Kinderdorfvater", "female": "Kinderdorfvater", "male": "Kinderdorfmutter"}, - {"neutral": "Kindergartenassistent*in", "female": "Kindergartenassistentin", "male": "Kindergartenassistent"}, + { + "neutral": "Kinderbetreuer*in", + "female": "Kinderbetreuerin", + "male": "Kinderbetreuer", + }, + { + "neutral": "Kinderdorfhelfer*in", + "female": "Kinderdorfhelferin", + "male": "Kinderdorfhelfer", + }, + { + "neutral": "Kinderdorfmutter / Kinderdorfvater", + "female": "Kinderdorfvater", + "male": "Kinderdorfmutter", + }, + { + "neutral": "Kindergartenassistent*in", + "female": "Kindergartenassistentin", + "male": "Kindergartenassistent", + }, { "neutral": "Kindergesundheitstrainer*in", "female": "Kindergesundheitstrainerin", "male": "Kindergesundheitstrainer", }, - {"neutral": "Kindergruppenbetreuer*in", "female": "Kindergruppenbetreuerin", "male": "Kindergruppenbetreuer"}, + { + "neutral": "Kindergruppenbetreuer*in", + "female": "Kindergruppenbetreuerin", + "male": "Kindergruppenbetreuer", + }, { "neutral": "Kindergärtner*in / Kindergartenpädagoge / Kindergartenpädagogin", "female": "Kindergärtnerin / Kindergartenpädagogin", "male": "Kindergärtner / Kindergartenpädagoge", }, - {"neutral": "Kinderkrankenpfleger*in", "female": "Kinderkrankenpflegerin", "male": "Kinderkrankenpfleger"}, - {"neutral": "Kinesiologe / Kinesiologin", "female": "Kinesiologin", "male": "Kinesiologe"}, - {"neutral": "Kirchenmusiker*in", "female": "Kirchenmusikerin", "male": "Kirchenmusiker"}, + { + "neutral": "Kinderkrankenpfleger*in", + "female": "Kinderkrankenpflegerin", + "male": "Kinderkrankenpfleger", + }, + { + "neutral": "Kinesiologe / Kinesiologin", + "female": "Kinesiologin", + "male": "Kinesiologe", + }, + { + "neutral": "Kirchenmusiker*in", + "female": "Kirchenmusikerin", + "male": "Kirchenmusiker", + }, {"neutral": "Klavierbau", "female": "Klavierbau", "male": "Klavierbau"}, - {"neutral": "Klaviermacher*in", "female": "Klaviermacherin", "male": "Klaviermacher"}, + { + "neutral": "Klaviermacher*in", + "female": "Klaviermacherin", + "male": "Klaviermacher", + }, { "neutral": "Kleinkindpädagoge / Kleinkindpädagogin", "female": "Kleinkindpädagogin", "male": "Kleinkindpädagoge", }, - {"neutral": "Klimagärtnerin / Klimagärtner", "female": "Klimagärtner", "male": "Klimagärtnerin"}, + { + "neutral": "Klimagärtnerin / Klimagärtner", + "female": "Klimagärtner", + "male": "Klimagärtnerin", + }, { "neutral": "Klimatechniker*in und Heizungstechniker*in", "female": "Klimatechnikerin und Heizungstechnikerin", "male": "Klimatechniker und Heizungstechniker", }, - {"neutral": "Klimatologe / Klimatologin", "female": "Klimatologin", "male": "Klimatologe"}, + { + "neutral": "Klimatologe / Klimatologin", + "female": "Klimatologin", + "male": "Klimatologe", + }, { "neutral": "Klinischer Linguist / Klinische Linguistin", "female": "Klinische Linguistin", @@ -2534,9 +4582,21 @@ class Provider(BaseProvider): }, {"neutral": "Kolumnist*in", "female": "Kolumnistin", "male": "Kolumnist"}, {"neutral": "Kommandant*in", "female": "Kommandantin", "male": "Kommandant"}, - {"neutral": "Kommerzkundenbetreuer*in", "female": "Kommerzkundenbetreuerin", "male": "Kommerzkundenbetreuer"}, - {"neutral": "Kommissionierer*in", "female": "Kommissioniererin", "male": "Kommissionierer"}, - {"neutral": "Kommunikationsmanager*in", "female": "Kommunikationsmanagerin", "male": "Kommunikationsmanager"}, + { + "neutral": "Kommerzkundenbetreuer*in", + "female": "Kommerzkundenbetreuerin", + "male": "Kommerzkundenbetreuer", + }, + { + "neutral": "Kommissionierer*in", + "female": "Kommissioniererin", + "male": "Kommissionierer", + }, + { + "neutral": "Kommunikationsmanager*in", + "female": "Kommunikationsmanagerin", + "male": "Kommunikationsmanager", + }, { "neutral": "Kommunikationstechniker*in", "female": "Kommunikationstechnikerin", @@ -2567,7 +4627,11 @@ class Provider(BaseProvider): "female": "Kommunikationswissenschafterin", "male": "Kommunikationswissenschafter", }, - {"neutral": "Komplementärmediziner*in", "female": "Komplementärmedizinerin", "male": "Komplementärmediziner"}, + { + "neutral": "Komplementärmediziner*in", + "female": "Komplementärmedizinerin", + "male": "Komplementärmediziner", + }, {"neutral": "Komponist*in", "female": "Komponistin", "male": "Komponist"}, { "neutral": "Konditor*in (Zuckerbäcker*in)", @@ -2589,13 +4653,21 @@ class Provider(BaseProvider): "female": "Konditorei (Zuckerbäckerei) - Patisserie", "male": "Konditorei (Zuckerbäckerei) - Patisserie", }, - {"neutral": "Konferenzdolmetscher*in", "female": "Konferenzdolmetscherin", "male": "Konferenzdolmetscher"}, + { + "neutral": "Konferenzdolmetscher*in", + "female": "Konferenzdolmetscherin", + "male": "Konferenzdolmetscher", + }, { "neutral": "Kongress- und Konferenzmanager*in", "female": "Kongress- und Konferenzmanagerin", "male": "Kongress- und Konferenzmanager", }, - {"neutral": "Konstrukteur*in", "female": "Konstrukteurin", "male": "Konstrukteur"}, + { + "neutral": "Konstrukteur*in", + "female": "Konstrukteurin", + "male": "Konstrukteur", + }, { "neutral": "Konstrukteur*in - Elektroinstallationstechnik", "female": "Konstrukteurin - Elektroinstallationstechnik", @@ -2636,26 +4708,54 @@ class Provider(BaseProvider): "female": "Konstruktionstechnikerin", "male": "Konstruktionstechniker", }, - {"neutral": "Konsumentenberater*in", "female": "Konsumentenberaterin", "male": "Konsumentenberater"}, + { + "neutral": "Konsumentenberater*in", + "female": "Konsumentenberaterin", + "male": "Konsumentenberater", + }, {"neutral": "Kontakter*in", "female": "Kontakterin", "male": "Kontakter"}, - {"neutral": "Konzeptkünstler*in", "female": "Konzeptkünstlerin", "male": "Konzeptkünstler"}, + { + "neutral": "Konzeptkünstler*in", + "female": "Konzeptkünstlerin", + "male": "Konzeptkünstler", + }, { "neutral": "Korb- und Möbelflechter*in", "female": "Korb- und Möbelflechterin", "male": "Korb- und Möbelflechter", }, {"neutral": "Korrektor*in", "female": "Korrektorin", "male": "Korrektor"}, - {"neutral": "Korrespondent*in", "female": "Korrespondentin", "male": "Korrespondent"}, - {"neutral": "Kosmetik (Kosmetologie)", "female": "Kosmetik (Kosmetologie)", "male": "Kosmetik (Kosmetologie)"}, + { + "neutral": "Korrespondent*in", + "female": "Korrespondentin", + "male": "Korrespondent", + }, + { + "neutral": "Kosmetik (Kosmetologie)", + "female": "Kosmetik (Kosmetologie)", + "male": "Kosmetik (Kosmetologie)", + }, { "neutral": "Kosmetik (Kosmetologie) / Fußpflege (Podologie)", "female": "Kosmetik (Kosmetologie) / Fußpflege (Podologie)", "male": "Kosmetik (Kosmetologie) / Fußpflege (Podologie)", }, {"neutral": "Kosmetiker*in", "female": "Kosmetikerin", "male": "Kosmetiker"}, - {"neutral": "Kosmologe / Kosmologin", "female": "Kosmologin", "male": "Kosmologe"}, - {"neutral": "Kostenrechner*in", "female": "Kostenrechnerin", "male": "Kostenrechner"}, - {"neutral": "Kostümbildner*in", "female": "Kostümbildnerin", "male": "Kostümbildner"}, + { + "neutral": "Kosmologe / Kosmologin", + "female": "Kosmologin", + "male": "Kosmologe", + }, + { + "neutral": "Kostenrechner*in", + "female": "Kostenrechnerin", + "male": "Kostenrechner", + }, + { + "neutral": "Kostümbildner*in", + "female": "Kostümbildnerin", + "male": "Kostümbildner", + }, { "neutral": "Kraftfahrzeugelektriker*in", "female": "Kraftfahrzeugelektrikerin", @@ -2666,7 +4766,11 @@ class Provider(BaseProvider): "female": "Kraftfahrzeugmechanikerin", "male": "Kraftfahrzeugmechaniker", }, - {"neutral": "Kraftfahrzeugtechnik", "female": "Kraftfahrzeugtechnik", "male": "Kraftfahrzeugtechnik"}, + { + "neutral": "Kraftfahrzeugtechnik", + "female": "Kraftfahrzeugtechnik", + "male": "Kraftfahrzeugtechnik", + }, { "neutral": "Kraftfahrzeugtechnik - Motorradtechnik", "female": "Kraftfahrzeugtechnik - Motorradtechnik", @@ -2683,63 +4787,215 @@ class Provider(BaseProvider): "male": "Kraftfahrzeugtechnik - Personenkraftwagentechnik", }, {"neutral": "Kranführer*in", "female": "Kranführerin", "male": "Kranführer"}, - {"neutral": "Krankenhausmanager*in", "female": "Krankenhausmanagerin", "male": "Krankenhausmanager"}, - {"neutral": "Krankenhausreferent*in", "female": "Krankenhausreferentin", "male": "Krankenhausreferent"}, - {"neutral": "Krankenpfleger*in", "female": "Krankenpflegerin", "male": "Krankenpfleger"}, + { + "neutral": "Krankenhausmanager*in", + "female": "Krankenhausmanagerin", + "male": "Krankenhausmanager", + }, + { + "neutral": "Krankenhausreferent*in", + "female": "Krankenhausreferentin", + "male": "Krankenhausreferent", + }, + { + "neutral": "Krankenpfleger*in", + "female": "Krankenpflegerin", + "male": "Krankenpfleger", + }, {"neutral": "Kranmonteur*in", "female": "Kranmonteurin", "male": "Kranmonteur"}, - {"neutral": "Kreditprüfer*in", "female": "Kreditprüferin", "male": "Kreditprüfer"}, - {"neutral": "Kreditreferent*in", "female": "Kreditreferentin", "male": "Kreditreferent"}, - {"neutral": "Kreditrevisor*in", "female": "Kreditrevisorin", "male": "Kreditrevisor"}, - {"neutral": "Kriminalanalytiker*in", "female": "Kriminalanalytikerin", "male": "Kriminalanalytiker"}, - {"neutral": "Kriminalbeamter / Kriminalbeamtin", "female": "Kriminalbeamtin", "male": "Kriminalbeamter"}, - {"neutral": "Kriminaltechniker*in", "female": "Kriminaltechnikerin", "male": "Kriminaltechniker"}, - {"neutral": "Kriminologe / Kriminologin", "female": "Kriminologin", "male": "Kriminologe"}, - {"neutral": "Kristallschleiftechnik", "female": "Kristallschleiftechnik", "male": "Kristallschleiftechnik"}, - {"neutral": "Kräuterpädagoge / Kräuterpädagogin", "female": "Kräuterpädagogin", "male": "Kräuterpädagoge"}, + { + "neutral": "Kreditprüfer*in", + "female": "Kreditprüferin", + "male": "Kreditprüfer", + }, + { + "neutral": "Kreditreferent*in", + "female": "Kreditreferentin", + "male": "Kreditreferent", + }, + { + "neutral": "Kreditrevisor*in", + "female": "Kreditrevisorin", + "male": "Kreditrevisor", + }, + { + "neutral": "Kriminalanalytiker*in", + "female": "Kriminalanalytikerin", + "male": "Kriminalanalytiker", + }, + { + "neutral": "Kriminalbeamter / Kriminalbeamtin", + "female": "Kriminalbeamtin", + "male": "Kriminalbeamter", + }, + { + "neutral": "Kriminaltechniker*in", + "female": "Kriminaltechnikerin", + "male": "Kriminaltechniker", + }, + { + "neutral": "Kriminologe / Kriminologin", + "female": "Kriminologin", + "male": "Kriminologe", + }, + { + "neutral": "Kristallschleiftechnik", + "female": "Kristallschleiftechnik", + "male": "Kristallschleiftechnik", + }, + { + "neutral": "Kräuterpädagoge / Kräuterpädagogin", + "female": "Kräuterpädagogin", + "male": "Kräuterpädagoge", + }, { "neutral": "Kultur- und Sozialanthropolog*in", "female": "Kultur- und Sozialanthropologin", "male": "Kultur- und Sozialanthropolog", }, - {"neutral": "Kulturmanager*in", "female": "Kulturmanagerin", "male": "Kulturmanager"}, - {"neutral": "Kulturtechniker*in", "female": "Kulturtechnikerin", "male": "Kulturtechniker"}, - {"neutral": "Kulturvermittler*in", "female": "Kulturvermittlerin", "male": "Kulturvermittler"}, - {"neutral": "Kulturwissenschafter*in", "female": "Kulturwissenschafterin", "male": "Kulturwissenschafter"}, - {"neutral": "Kund*innenbetreuer*in", "female": "Kundinnenbetreuerin", "male": "Kundnenbetreuer"}, - {"neutral": "Kunstberater*in", "female": "Kunstberaterin", "male": "Kunstberater"}, - {"neutral": "Kunsthistoriker*in", "female": "Kunsthistorikerin", "male": "Kunsthistoriker"}, - {"neutral": "Kunsthändler*in", "female": "Kunsthändlerin", "male": "Kunsthändler"}, - {"neutral": "Kunstkritiker*in", "female": "Kunstkritikerin", "male": "Kunstkritiker"}, - {"neutral": "Kunststeinerzeuger*in", "female": "Kunststeinerzeugerin", "male": "Kunststeinerzeuger"}, - {"neutral": "Kunststoffformgebung", "female": "Kunststoffformgebung", "male": "Kunststoffformgebung"}, - {"neutral": "Kunststofftechnik", "female": "Kunststofftechnik", "male": "Kunststofftechnik"}, - {"neutral": "Kunststofftechniker*in", "female": "Kunststofftechnikerin", "male": "Kunststofftechniker"}, - {"neutral": "Kunststofftechnologie", "female": "Kunststofftechnologie", "male": "Kunststofftechnologie"}, - {"neutral": "Kunststoffverarbeitung", "female": "Kunststoffverarbeitung", "male": "Kunststoffverarbeitung"}, + { + "neutral": "Kulturmanager*in", + "female": "Kulturmanagerin", + "male": "Kulturmanager", + }, + { + "neutral": "Kulturtechniker*in", + "female": "Kulturtechnikerin", + "male": "Kulturtechniker", + }, + { + "neutral": "Kulturvermittler*in", + "female": "Kulturvermittlerin", + "male": "Kulturvermittler", + }, + { + "neutral": "Kulturwissenschafter*in", + "female": "Kulturwissenschafterin", + "male": "Kulturwissenschafter", + }, + { + "neutral": "Kund*innenbetreuer*in", + "female": "Kundinnenbetreuerin", + "male": "Kundnenbetreuer", + }, + { + "neutral": "Kunstberater*in", + "female": "Kunstberaterin", + "male": "Kunstberater", + }, + { + "neutral": "Kunsthistoriker*in", + "female": "Kunsthistorikerin", + "male": "Kunsthistoriker", + }, + { + "neutral": "Kunsthändler*in", + "female": "Kunsthändlerin", + "male": "Kunsthändler", + }, + { + "neutral": "Kunstkritiker*in", + "female": "Kunstkritikerin", + "male": "Kunstkritiker", + }, + { + "neutral": "Kunststeinerzeuger*in", + "female": "Kunststeinerzeugerin", + "male": "Kunststeinerzeuger", + }, + { + "neutral": "Kunststoffformgebung", + "female": "Kunststoffformgebung", + "male": "Kunststoffformgebung", + }, + { + "neutral": "Kunststofftechnik", + "female": "Kunststofftechnik", + "male": "Kunststofftechnik", + }, + { + "neutral": "Kunststofftechniker*in", + "female": "Kunststofftechnikerin", + "male": "Kunststofftechniker", + }, + { + "neutral": "Kunststofftechnologie", + "female": "Kunststofftechnologie", + "male": "Kunststofftechnologie", + }, + { + "neutral": "Kunststoffverarbeitung", + "female": "Kunststoffverarbeitung", + "male": "Kunststoffverarbeitung", + }, { "neutral": "Kunststoffverfahrenstechnik", "female": "Kunststoffverfahrenstechnik", "male": "Kunststoffverfahrenstechnik", }, - {"neutral": "Kunsttherapeut*in", "female": "Kunsttherapeutin", "male": "Kunsttherapeut"}, - {"neutral": "Kunsttischler*in", "female": "Kunsttischlerin", "male": "Kunsttischler"}, - {"neutral": "Kupferdrucker*in", "female": "Kupferdruckerin", "male": "Kupferdrucker"}, - {"neutral": "Kupferschmied*in", "female": "Kupferschmiedin", "male": "Kupferschmied"}, - {"neutral": "Kurator*in (Museum)", "female": "Kuratorin (Museum)", "male": "Kurator (Museum)"}, + { + "neutral": "Kunsttherapeut*in", + "female": "Kunsttherapeutin", + "male": "Kunsttherapeut", + }, + { + "neutral": "Kunsttischler*in", + "female": "Kunsttischlerin", + "male": "Kunsttischler", + }, + { + "neutral": "Kupferdrucker*in", + "female": "Kupferdruckerin", + "male": "Kupferdrucker", + }, + { + "neutral": "Kupferschmied*in", + "female": "Kupferschmiedin", + "male": "Kupferschmied", + }, + { + "neutral": "Kurator*in (Museum)", + "female": "Kuratorin (Museum)", + "male": "Kurator (Museum)", + }, { "neutral": "Kurator*in (Veranstaltungen)", "female": "Kuratorin (Veranstaltungen)", "male": "Kurator (Veranstaltungen)", }, - {"neutral": "Kybernetiker*in", "female": "Kybernetikerin", "male": "Kybernetiker"}, - {"neutral": "Kälteanlagentechnik", "female": "Kälteanlagentechnik", "male": "Kälteanlagentechnik"}, + { + "neutral": "Kybernetiker*in", + "female": "Kybernetikerin", + "male": "Kybernetiker", + }, + { + "neutral": "Kälteanlagentechnik", + "female": "Kälteanlagentechnik", + "male": "Kälteanlagentechnik", + }, {"neutral": "Küchenchef*in", "female": "Küchenchefin", "male": "Küchenchef"}, - {"neutral": "Küchengehilfe / Küchengehilfin", "female": "Küchengehilfin", "male": "Küchengehilfe"}, - {"neutral": "Küchenplaner*in", "female": "Küchenplanerin", "male": "Küchenplaner"}, - {"neutral": "Künstleragent*in", "female": "Künstleragentin", "male": "Künstleragent"}, + { + "neutral": "Küchengehilfe / Küchengehilfin", + "female": "Küchengehilfin", + "male": "Küchengehilfe", + }, + { + "neutral": "Küchenplaner*in", + "female": "Küchenplanerin", + "male": "Küchenplaner", + }, + { + "neutral": "Künstleragent*in", + "female": "Künstleragentin", + "male": "Künstleragent", + }, {"neutral": "Kürschner*in", "female": "Kürschnerin", "male": "Kürschner"}, {"neutral": "LKW-Fahrer*in", "female": "LKW-Fahrerin", "male": "LKW-Fahrer"}, - {"neutral": "Labelmanager*in", "female": "Labelmanagerin", "male": "Labelmanager"}, + { + "neutral": "Labelmanager*in", + "female": "Labelmanagerin", + "male": "Labelmanager", + }, { "neutral": "Laborassistent*in (medizinisch)", "female": "Laborassistentin (medizinisch)", @@ -2756,16 +5012,36 @@ class Provider(BaseProvider): "female": "Labortechnik - Biochemie", "male": "Labortechnik - Biochemie", }, - {"neutral": "Labortechnik - Chemie", "female": "Labortechnik - Chemie", "male": "Labortechnik - Chemie"}, + { + "neutral": "Labortechnik - Chemie", + "female": "Labortechnik - Chemie", + "male": "Labortechnik - Chemie", + }, { "neutral": "Labortechnik - Lack- und Anstrichmittel", "female": "Labortechnik - Lack- und Anstrichmittel", "male": "Labortechnik - Lack- und Anstrichmittel", }, - {"neutral": "Lackiertechnik", "female": "Lackiertechnik", "male": "Lackiertechnik"}, - {"neutral": "Ladenkassier*in", "female": "Ladenkassierin", "male": "Ladenkassier"}, - {"neutral": "Lagerarbeiter*in", "female": "Lagerarbeiterin", "male": "Lagerarbeiter"}, - {"neutral": "Lagerlogistik", "female": "Lagerlogistik", "male": "Lagerlogistik"}, + { + "neutral": "Lackiertechnik", + "female": "Lackiertechnik", + "male": "Lackiertechnik", + }, + { + "neutral": "Ladenkassier*in", + "female": "Ladenkassierin", + "male": "Ladenkassier", + }, + { + "neutral": "Lagerarbeiter*in", + "female": "Lagerarbeiterin", + "male": "Lagerarbeiter", + }, + { + "neutral": "Lagerlogistik", + "female": "Lagerlogistik", + "male": "Lagerlogistik", + }, { "neutral": "Land- und Baumaschinentechnik", "female": "Land- und Baumaschinentechnik", @@ -2791,9 +5067,17 @@ class Provider(BaseProvider): "female": "Landschaftsgärtnerin (Garten- und Grünflächengestaltung)", "male": "Landschaftsgärtner (Garten- und Grünflächengestaltung)", }, - {"neutral": "Landschaftsplaner*in", "female": "Landschaftsplanerin", "male": "Landschaftsplaner"}, + { + "neutral": "Landschaftsplaner*in", + "female": "Landschaftsplanerin", + "male": "Landschaftsplaner", + }, {"neutral": "Landwirt*in", "female": "Landwirtin", "male": "Landwirt"}, - {"neutral": "Landwirtschaft", "female": "Landwirtschaft", "male": "Landwirtschaft"}, + { + "neutral": "Landwirtschaft", + "female": "Landwirtschaft", + "male": "Landwirtschaft", + }, { "neutral": "Landwirtschaftliche Lagerhaltung", "female": "Landwirtschaftliche Lagerhaltung", @@ -2821,7 +5105,11 @@ class Provider(BaseProvider): }, {"neutral": "Laserchirug*in", "female": "Laserchirugin", "male": "Laserchirug"}, {"neutral": "Layouter*in", "female": "Layouterin", "male": "Layouter"}, - {"neutral": "Leasingspezialist*in", "female": "Leasingspezialistin", "male": "Leasingspezialist"}, + { + "neutral": "Leasingspezialist*in", + "female": "Leasingspezialistin", + "male": "Leasingspezialist", + }, { "neutral": "Lebens- und Sozialberater*in", "female": "Lebens- und Sozialberaterin", @@ -2832,8 +5120,16 @@ class Provider(BaseProvider): "female": "Lebensmittelaufsichtsorgan", "male": "Lebensmittelaufsichtsorgan", }, - {"neutral": "Lebensmitteltechnik", "female": "Lebensmitteltechnik", "male": "Lebensmitteltechnik"}, - {"neutral": "Lebensmitteltechniker*in", "female": "Lebensmitteltechnikerin", "male": "Lebensmitteltechniker"}, + { + "neutral": "Lebensmitteltechnik", + "female": "Lebensmitteltechnik", + "male": "Lebensmitteltechnik", + }, + { + "neutral": "Lebensmitteltechniker*in", + "female": "Lebensmitteltechnikerin", + "male": "Lebensmitteltechniker", + }, { "neutral": "Lebzelter*in und Wachszieher*in", "female": "Lebzelterin und Wachszieherin", @@ -2960,22 +5256,54 @@ class Provider(BaseProvider): "male": "Lehrer für elementare Musik- u. Bewegungserziehung", }, {"neutral": "Lehrhebamme", "female": "Lehrhebamme", "male": "Lehrhebamme"}, - {"neutral": "Lehrlingsausbilder*in", "female": "Lehrlingsausbilderin", "male": "Lehrlingsausbilder"}, - {"neutral": "Leichtflugzeugbauer*in", "female": "Leichtflugzeugbauerin", "male": "Leichtflugzeugbauer"}, - {"neutral": "Leistungssportler*in", "female": "Leistungssportlerin", "male": "Leistungssportler"}, - {"neutral": "Leitartikler*in", "female": "Leitartiklerin", "male": "Leitartikler"}, + { + "neutral": "Lehrlingsausbilder*in", + "female": "Lehrlingsausbilderin", + "male": "Lehrlingsausbilder", + }, + { + "neutral": "Leichtflugzeugbauer*in", + "female": "Leichtflugzeugbauerin", + "male": "Leichtflugzeugbauer", + }, + { + "neutral": "Leistungssportler*in", + "female": "Leistungssportlerin", + "male": "Leistungssportler", + }, + { + "neutral": "Leitartikler*in", + "female": "Leitartiklerin", + "male": "Leitartikler", + }, { "neutral": "Leiter*in des technischen Kundendienstes", "female": "Leiterin des technischen Kundendienstes", "male": "Leiter des technischen Kundendienstes", }, - {"neutral": "Lektor*in (Uni, FH)", "female": "Lektorin (Uni, FH)", "male": "Lektor (Uni, FH)"}, + { + "neutral": "Lektor*in (Uni, FH)", + "female": "Lektorin (Uni, FH)", + "male": "Lektor (Uni, FH)", + }, {"neutral": "Lerncoach", "female": "Lerncoach", "male": "Lerncoach"}, - {"neutral": "Lerntheoretiker*in", "female": "Lerntheoretikerin", "male": "Lerntheoretiker"}, - {"neutral": "Lerntherapeut*in", "female": "Lerntherapeutin", "male": "Lerntherapeut"}, + { + "neutral": "Lerntheoretiker*in", + "female": "Lerntheoretikerin", + "male": "Lerntheoretiker", + }, + { + "neutral": "Lerntherapeut*in", + "female": "Lerntherapeutin", + "male": "Lerntherapeut", + }, {"neutral": "Let's Player", "female": "Let's Player", "male": "Let's Player"}, {"neutral": "Librettist*in", "female": "Librettistin", "male": "Librettist"}, - {"neutral": "Lichttechniker*in", "female": "Lichttechnikerin", "male": "Lichttechniker"}, + { + "neutral": "Lichttechniker*in", + "female": "Lichttechnikerin", + "male": "Lichttechniker", + }, {"neutral": "Liftwart*in", "female": "Liftwartin", "male": "Liftwart"}, {"neutral": "Linguist*in", "female": "Linguistin", "male": "Linguist"}, {"neutral": "Listbroker", "female": "Listbroker", "male": "Listbroker"}, @@ -2988,8 +5316,16 @@ class Provider(BaseProvider): {"neutral": "Lobbyist*in", "female": "Lobbyistin", "male": "Lobbyist"}, {"neutral": "Logistiker*in", "female": "Logistikerin", "male": "Logistiker"}, {"neutral": "Logopäde / Logopädin", "female": "Logopädin", "male": "Logopäde"}, - {"neutral": "Lohnverrechner*in", "female": "Lohnverrechnerin", "male": "Lohnverrechner"}, - {"neutral": "Luftfahrzeugtechnik", "female": "Luftfahrzeugtechnik", "male": "Luftfahrzeugtechnik"}, + { + "neutral": "Lohnverrechner*in", + "female": "Lohnverrechnerin", + "male": "Lohnverrechner", + }, + { + "neutral": "Luftfahrzeugtechnik", + "female": "Luftfahrzeugtechnik", + "male": "Luftfahrzeugtechnik", + }, { "neutral": "Luftfahrzeugtechnik - Flugzeuge mit Kolbentriebwerken", "female": "Luftfahrzeugtechnik - Flugzeuge mit Kolbentriebwerken", @@ -3016,7 +5352,11 @@ class Provider(BaseProvider): "male": "Ländliches Betriebs- und Haushaltsmanagement", }, {"neutral": "Magazineur*in", "female": "Magazineurin", "male": "Magazineur"}, - {"neutral": "Maler*in (Kunst-)", "female": "Malerin (Kunst-)", "male": "Maler (Kunst-)"}, + { + "neutral": "Maler*in (Kunst-)", + "female": "Malerin (Kunst-)", + "male": "Maler (Kunst-)", + }, { "neutral": "Maler*in und Anstreicher*in", "female": "Malerin und Anstreicherin", @@ -3047,32 +5387,72 @@ class Provider(BaseProvider): "female": "Malerin und Beschichtungstechnikerin - Korrosionsschutz", "male": "Maler und Beschichtungstechniker - Korrosionsschutz", }, - {"neutral": "Management-Accountant", "female": "Management-Accountant", "male": "Management-Accountant"}, - {"neutral": "Managementassistent*in", "female": "Managementassistentin", "male": "Managementassistent"}, + { + "neutral": "Management-Accountant", + "female": "Management-Accountant", + "male": "Management-Accountant", + }, + { + "neutral": "Managementassistent*in", + "female": "Managementassistentin", + "male": "Managementassistent", + }, {"neutral": "Manager*in", "female": "Managerin", "male": "Manager"}, - {"neutral": "Manager*in (Controlling)", "female": "Managerin (Controlling)", "male": "Manager (Controlling)"}, + { + "neutral": "Manager*in (Controlling)", + "female": "Managerin (Controlling)", + "male": "Manager (Controlling)", + }, { "neutral": "Manager*in (Einkauf, Beschaffung)", "female": "Managerin (Einkauf, Beschaffung)", "male": "Manager (Einkauf, Beschaffung)", }, - {"neutral": "Manager*in (Export)", "female": "Managerin (Export)", "male": "Manager (Export)"}, + { + "neutral": "Manager*in (Export)", + "female": "Managerin (Export)", + "male": "Manager (Export)", + }, { "neutral": "Manager*in (Investitionsplanung)", "female": "Managerin (Investitionsplanung)", "male": "Manager (Investitionsplanung)", }, - {"neutral": "Manager*in (Krankenhaus)", "female": "Managerin (Krankenhaus)", "male": "Manager (Krankenhaus)"}, - {"neutral": "Manager*in (Logistik)", "female": "Managerin (Logistik)", "male": "Manager (Logistik)"}, - {"neutral": "Manager*in (Marketing)", "female": "Managerin (Marketing)", "male": "Manager (Marketing)"}, + { + "neutral": "Manager*in (Krankenhaus)", + "female": "Managerin (Krankenhaus)", + "male": "Manager (Krankenhaus)", + }, + { + "neutral": "Manager*in (Logistik)", + "female": "Managerin (Logistik)", + "male": "Manager (Logistik)", + }, + { + "neutral": "Manager*in (Marketing)", + "female": "Managerin (Marketing)", + "male": "Manager (Marketing)", + }, { "neutral": "Manager*in (Materialwirtschaft)", "female": "Managerin (Materialwirtschaft)", "male": "Manager (Materialwirtschaft)", }, - {"neutral": "Manager*in (Produktion)", "female": "Managerin (Produktion)", "male": "Manager (Produktion)"}, - {"neutral": "Manager*in (Verkauf)", "female": "Managerin (Verkauf)", "male": "Manager (Verkauf)"}, - {"neutral": "Manager*in (Vertrieb)", "female": "Managerin (Vertrieb)", "male": "Manager (Vertrieb)"}, + { + "neutral": "Manager*in (Produktion)", + "female": "Managerin (Produktion)", + "male": "Manager (Produktion)", + }, + { + "neutral": "Manager*in (Verkauf)", + "female": "Managerin (Verkauf)", + "male": "Manager (Verkauf)", + }, + { + "neutral": "Manager*in (Vertrieb)", + "female": "Managerin (Vertrieb)", + "male": "Manager (Vertrieb)", + }, {"neutral": "Mannequin / Dressman", "female": "Dressman", "male": "Mannequin"}, { "neutral": "Marionettenspieler*in / Puppenspieler*in", @@ -3084,40 +5464,92 @@ class Provider(BaseProvider): "female": "Marketingfachfrau", "male": "Marketingfachmann", }, - {"neutral": "Markscheider*in", "female": "Markscheiderin", "male": "Markscheider"}, + { + "neutral": "Markscheider*in", + "female": "Markscheiderin", + "male": "Markscheider", + }, { "neutral": "Markt- und Meinungsforscher*in", "female": "Markt- und Meinungsforscherin", "male": "Markt- und Meinungsforscher", }, - {"neutral": "Marktaufsichtsorgan", "female": "Marktaufsichtsorgan", "male": "Marktaufsichtsorgan"}, + { + "neutral": "Marktaufsichtsorgan", + "female": "Marktaufsichtsorgan", + "male": "Marktaufsichtsorgan", + }, { "neutral": "Maschinenbau- und Anlagenkonstrukteur*in", "female": "Maschinenbau- und Anlagenkonstrukteurin", "male": "Maschinenbau- und Anlagenkonstrukteur", }, - {"neutral": "Maschinenbauingenieur*in", "female": "Maschinenbauingenieurin", "male": "Maschinenbauingenieur"}, - {"neutral": "Maschinenbautechnik", "female": "Maschinenbautechnik", "male": "Maschinenbautechnik"}, - {"neutral": "Maschinenbautechniker*in", "female": "Maschinenbautechnikerin", "male": "Maschinenbautechniker"}, - {"neutral": "Maschinenbediener*in", "female": "Maschinenbedienerin", "male": "Maschinenbediener"}, + { + "neutral": "Maschinenbauingenieur*in", + "female": "Maschinenbauingenieurin", + "male": "Maschinenbauingenieur", + }, + { + "neutral": "Maschinenbautechnik", + "female": "Maschinenbautechnik", + "male": "Maschinenbautechnik", + }, + { + "neutral": "Maschinenbautechniker*in", + "female": "Maschinenbautechnikerin", + "male": "Maschinenbautechniker", + }, + { + "neutral": "Maschinenbediener*in", + "female": "Maschinenbedienerin", + "male": "Maschinenbediener", + }, { "neutral": "Maschinenfertigungstechnik", "female": "Maschinenfertigungstechnik", "male": "Maschinenfertigungstechnik", }, - {"neutral": "Maschinenmechanik", "female": "Maschinenmechanik", "male": "Maschinenmechanik"}, - {"neutral": "Maschinennäher*in", "female": "Maschinennäherin", "male": "Maschinennäher"}, - {"neutral": "Maschinenschlosser*in", "female": "Maschinenschlosserin", "male": "Maschinenschlosser"}, - {"neutral": "Maschinsticker*in", "female": "Maschinstickerin", "male": "Maschinsticker"}, - {"neutral": "Maskenbildner*in", "female": "Maskenbildnerin", "male": "Maskenbildner"}, + { + "neutral": "Maschinenmechanik", + "female": "Maschinenmechanik", + "male": "Maschinenmechanik", + }, + { + "neutral": "Maschinennäher*in", + "female": "Maschinennäherin", + "male": "Maschinennäher", + }, + { + "neutral": "Maschinenschlosser*in", + "female": "Maschinenschlosserin", + "male": "Maschinenschlosser", + }, + { + "neutral": "Maschinsticker*in", + "female": "Maschinstickerin", + "male": "Maschinsticker", + }, + { + "neutral": "Maskenbildner*in", + "female": "Maskenbildnerin", + "male": "Maskenbildner", + }, {"neutral": "Masseur*in", "female": "Masseurin", "male": "Masseur"}, { "neutral": "Material- und Verarbeitungstechniker*in", "female": "Material- und Verarbeitungstechnikerin", "male": "Material- und Verarbeitungstechniker", }, - {"neutral": "Materialprüfer*in", "female": "Materialprüferin", "male": "Materialprüfer"}, - {"neutral": "Mathematiker*in", "female": "Mathematikerin", "male": "Mathematiker"}, + { + "neutral": "Materialprüfer*in", + "female": "Materialprüferin", + "male": "Materialprüfer", + }, + { + "neutral": "Mathematiker*in", + "female": "Mathematikerin", + "male": "Mathematiker", + }, { "neutral": "Mathematiker*in (Informations- und Datenverarbeitung)", "female": "Mathematikerin (Informations- und Datenverarbeitung)", @@ -3167,20 +5599,48 @@ class Provider(BaseProvider): "female": "Mechatronik - Medizingerätetechnik", "male": "Mechatronik - Medizingerätetechnik", }, - {"neutral": "Mechatroniker*in", "female": "Mechatronikerin", "male": "Mechatroniker"}, + { + "neutral": "Mechatroniker*in", + "female": "Mechatronikerin", + "male": "Mechatroniker", + }, { "neutral": "Mechatroniker*in (Robotik)", "female": "Mechatronikerin (Robotik)", "male": "Mechatroniker (Robotik)", }, - {"neutral": "Mediaberater*in", "female": "Mediaberaterin", "male": "Mediaberater"}, - {"neutral": "Mediafachmann / Mediafachfrau", "female": "Mediafachfrau", "male": "Mediafachmann"}, + { + "neutral": "Mediaberater*in", + "female": "Mediaberaterin", + "male": "Mediaberater", + }, + { + "neutral": "Mediafachmann / Mediafachfrau", + "female": "Mediafachfrau", + "male": "Mediafachmann", + }, {"neutral": "Mediaplaner*in", "female": "Mediaplanerin", "male": "Mediaplaner"}, {"neutral": "Mediator*in", "female": "Mediatorin", "male": "Mediator"}, - {"neutral": "Medical Writer", "female": "Medical Writer", "male": "Medical Writer"}, - {"neutral": "Medienarchivar*in", "female": "Medienarchivarin", "male": "Medienarchivar"}, - {"neutral": "Mediendidaktiker*in", "female": "Mediendidaktikerin", "male": "Mediendidaktiker"}, - {"neutral": "Medienfachmann / Medienfachfrau", "female": "Medienfachfrau", "male": "Medienfachmann"}, + { + "neutral": "Medical Writer", + "female": "Medical Writer", + "male": "Medical Writer", + }, + { + "neutral": "Medienarchivar*in", + "female": "Medienarchivarin", + "male": "Medienarchivar", + }, + { + "neutral": "Mediendidaktiker*in", + "female": "Mediendidaktikerin", + "male": "Mediendidaktiker", + }, + { + "neutral": "Medienfachmann / Medienfachfrau", + "female": "Medienfachfrau", + "male": "Medienfachmann", + }, { "neutral": "Mediengestalter*in (Bild und Ton)", "female": "Mediengestalterin (Bild und Ton)", @@ -3196,11 +5656,31 @@ class Provider(BaseProvider): "female": "Mediengestalterin (Visuelle Medien)", "male": "Mediengestalter (Visuelle Medien)", }, - {"neutral": "Medieninformatiker*in", "female": "Medieninformatikerin", "male": "Medieninformatiker"}, - {"neutral": "Medienkomponist*in", "female": "Medienkomponistin", "male": "Medienkomponist"}, - {"neutral": "Medienmanager*in", "female": "Medienmanagerin", "male": "Medienmanager"}, - {"neutral": "Mediensprecher*in", "female": "Mediensprecherin", "male": "Mediensprecher"}, - {"neutral": "Medizininformatiker*in", "female": "Medizininformatikerin", "male": "Medizininformatiker"}, + { + "neutral": "Medieninformatiker*in", + "female": "Medieninformatikerin", + "male": "Medieninformatiker", + }, + { + "neutral": "Medienkomponist*in", + "female": "Medienkomponistin", + "male": "Medienkomponist", + }, + { + "neutral": "Medienmanager*in", + "female": "Medienmanagerin", + "male": "Medienmanager", + }, + { + "neutral": "Mediensprecher*in", + "female": "Mediensprecherin", + "male": "Mediensprecher", + }, + { + "neutral": "Medizininformatiker*in", + "female": "Medizininformatikerin", + "male": "Medizininformatiker", + }, { "neutral": "Medizinisch-pharmazeutische/r Fachberater*in", "female": "Medizinisch-pharmazeutische Fachberaterin", @@ -3221,7 +5701,11 @@ class Provider(BaseProvider): "female": "Medizinische Fachassistentin (MFA)", "male": "Medizinischer Fachassistent (MFA)", }, - {"neutral": "Medizinische*r Masseur*in", "female": "Medizinische Masseurin", "male": "Medizinischer Masseur"}, + { + "neutral": "Medizinische*r Masseur*in", + "female": "Medizinische Masseurin", + "male": "Medizinischer Masseur", + }, { "neutral": "Medizinprodukteberater*in", "female": "Medizinprodukteberaterin", @@ -3232,16 +5716,36 @@ class Provider(BaseProvider): "female": "Medizinproduktekauffrau", "male": "Medizinproduktekaufmann", }, - {"neutral": "Medizintechniker*in", "female": "Medizintechnikerin", "male": "Medizintechniker"}, + { + "neutral": "Medizintechniker*in", + "female": "Medizintechnikerin", + "male": "Medizintechniker", + }, { "neutral": "Medizintechnische*r Fachberater*in", "female": "Medizintechnische Fachberaterin", "male": "Medizintechnischer Fachberater", }, - {"neutral": "Meeresbiologe / Meeresbiologin", "female": "Meeresbiologin", "male": "Meeresbiologe"}, - {"neutral": "Meeresforscher*in", "female": "Meeresforscherin", "male": "Meeresforscher"}, - {"neutral": "Meinungsforscher*in", "female": "Meinungsforscherin", "male": "Meinungsforscher"}, - {"neutral": "Mentaltrainer*in", "female": "Mentaltrainerin", "male": "Mentaltrainer"}, + { + "neutral": "Meeresbiologe / Meeresbiologin", + "female": "Meeresbiologin", + "male": "Meeresbiologe", + }, + { + "neutral": "Meeresforscher*in", + "female": "Meeresforscherin", + "male": "Meeresforscher", + }, + { + "neutral": "Meinungsforscher*in", + "female": "Meinungsforscherin", + "male": "Meinungsforscher", + }, + { + "neutral": "Mentaltrainer*in", + "female": "Mentaltrainerin", + "male": "Mentaltrainer", + }, {"neutral": "Merchandiser", "female": "Merchandiser", "male": "Merchandiser"}, { "neutral": "Mergers & Acquisitions Manager*in", @@ -3253,12 +5757,32 @@ class Provider(BaseProvider): "female": "Messe- u. Ausstellungsgestalterin", "male": "Messe- u. Ausstellungsgestalter", }, - {"neutral": "Messerschmied*in", "female": "Messerschmiedin", "male": "Messerschmied"}, - {"neutral": "Messtechniker*in", "female": "Messtechnikerin", "male": "Messtechniker"}, - {"neutral": "Metallbaukonstrukteur*in", "female": "Metallbaukonstrukteurin", "male": "Metallbaukonstrukteur"}, - {"neutral": "Metallbearbeitung", "female": "Metallbearbeitung", "male": "Metallbearbeitung"}, + { + "neutral": "Messerschmied*in", + "female": "Messerschmiedin", + "male": "Messerschmied", + }, + { + "neutral": "Messtechniker*in", + "female": "Messtechnikerin", + "male": "Messtechniker", + }, + { + "neutral": "Metallbaukonstrukteur*in", + "female": "Metallbaukonstrukteurin", + "male": "Metallbaukonstrukteur", + }, + { + "neutral": "Metallbearbeitung", + "female": "Metallbearbeitung", + "male": "Metallbearbeitung", + }, {"neutral": "Metalldesign", "female": "Metalldesign", "male": "Metalldesign"}, - {"neutral": "Metalldesign - Gravur", "female": "Metalldesign - Gravur", "male": "Metalldesign - Gravur"}, + { + "neutral": "Metalldesign - Gravur", + "female": "Metalldesign - Gravur", + "male": "Metalldesign - Gravur", + }, { "neutral": "Metalldesign - Gürtlerei", "female": "Metalldesign - Gürtlerei", @@ -3269,15 +5793,31 @@ class Provider(BaseProvider): "female": "Metalldesign - Metalldrückerei", "male": "Metalldesign - Metalldrückerei", }, - {"neutral": "Metalldrücker*in", "female": "Metalldrückerin", "male": "Metalldrücker"}, - {"neutral": "Metallgestalter*in", "female": "Metallgestalterin", "male": "Metallgestalter"}, - {"neutral": "Metallgießer*in", "female": "Metallgießerin", "male": "Metallgießer"}, + { + "neutral": "Metalldrücker*in", + "female": "Metalldrückerin", + "male": "Metalldrücker", + }, + { + "neutral": "Metallgestalter*in", + "female": "Metallgestalterin", + "male": "Metallgestalter", + }, + { + "neutral": "Metallgießer*in", + "female": "Metallgießerin", + "male": "Metallgießer", + }, { "neutral": "Metallschleifer*in und Galvaniseur*in", "female": "Metallschleiferin und Galvaniseurin", "male": "Metallschleifer und Galvaniseur", }, - {"neutral": "Metalltechnik", "female": "Metalltechnik", "male": "Metalltechnik"}, + { + "neutral": "Metalltechnik", + "female": "Metalltechnik", + "male": "Metalltechnik", + }, { "neutral": "Metalltechnik - Blechtechnik", "female": "Metalltechnik - Blechtechnik", @@ -3349,11 +5889,27 @@ class Provider(BaseProvider): "female": "Metallverfahrenstechnikerin", "male": "Metallverfahrenstechniker", }, - {"neutral": "Meteorologe / Meteorologin", "female": "Meteorologin", "male": "Meteorologe"}, + { + "neutral": "Meteorologe / Meteorologin", + "female": "Meteorologin", + "male": "Meteorologe", + }, {"neutral": "Methodiker*in", "female": "Methodikerin", "male": "Methodiker"}, - {"neutral": "Miedererzeuger*in", "female": "Miedererzeugerin", "male": "Miedererzeuger"}, - {"neutral": "Mikrobiologe / Mikrobiologin", "female": "Mikrobiologin", "male": "Mikrobiologe"}, - {"neutral": "Mikroelektroniker*in", "female": "Mikroelektronikerin", "male": "Mikroelektroniker"}, + { + "neutral": "Miedererzeuger*in", + "female": "Miedererzeugerin", + "male": "Miedererzeuger", + }, + { + "neutral": "Mikrobiologe / Mikrobiologin", + "female": "Mikrobiologin", + "male": "Mikrobiologe", + }, + { + "neutral": "Mikroelektroniker*in", + "female": "Mikroelektronikerin", + "male": "Mikroelektroniker", + }, {"neutral": "Mikrotechnik", "female": "Mikrotechnik", "male": "Mikrotechnik"}, { "neutral": "Mikrotechniker*in - Medizintechnik", @@ -3380,55 +5936,131 @@ class Provider(BaseProvider): "female": "Mikrotechnikerin / Mikrosystemtechnikerin", "male": "Mikrotechniker / Mikrosystemtechniker", }, - {"neutral": "Milchtechnologie", "female": "Milchtechnologie", "male": "Milchtechnologie"}, - {"neutral": "Militärstreife", "female": "Militärstreife", "male": "Militärstreife"}, - {"neutral": "Mineraloge / Mineralogin", "female": "Mineralogin", "male": "Mineraloge"}, - {"neutral": "Mineur*in", "female": "Mineurin", "male": "Mineur"}, - {"neutral": "Mobile Developer*in", "female": "Mobile Developerin", "male": "Mobile Developer"}, - {"neutral": "Mobilitätsberater*in", "female": "Mobilitätsberaterin", "male": "Mobilitätsberater"}, - {"neutral": "Mobilitätsservice", "female": "Mobilitätsservice", "male": "Mobilitätsservice"}, - {"neutral": "Modedesigner*in", "female": "Modedesignerin", "male": "Modedesigner"}, - {"neutral": "Modegrafiker*in", "female": "Modegrafikerin", "male": "Modegrafiker"}, - {"neutral": "Modehändler*in", "female": "Modehändlerin", "male": "Modehändler"}, + { + "neutral": "Milchtechnologie", + "female": "Milchtechnologie", + "male": "Milchtechnologie", + }, + { + "neutral": "Militärstreife", + "female": "Militärstreife", + "male": "Militärstreife", + }, + { + "neutral": "Mineraloge / Mineralogin", + "female": "Mineralogin", + "male": "Mineraloge", + }, + {"neutral": "Mineur*in", "female": "Mineurin", "male": "Mineur"}, + { + "neutral": "Mobile Developer*in", + "female": "Mobile Developerin", + "male": "Mobile Developer", + }, + { + "neutral": "Mobilitätsberater*in", + "female": "Mobilitätsberaterin", + "male": "Mobilitätsberater", + }, + { + "neutral": "Mobilitätsservice", + "female": "Mobilitätsservice", + "male": "Mobilitätsservice", + }, + { + "neutral": "Modedesigner*in", + "female": "Modedesignerin", + "male": "Modedesigner", + }, + { + "neutral": "Modegrafiker*in", + "female": "Modegrafikerin", + "male": "Modegrafiker", + }, + {"neutral": "Modehändler*in", "female": "Modehändlerin", "male": "Modehändler"}, {"neutral": "Modellbauer*in", "female": "Modellbauerin", "male": "Modellbauer"}, - {"neutral": "Modellschlosser*in", "female": "Modellschlosserin", "male": "Modellschlosser"}, - {"neutral": "Modelltischler*in", "female": "Modelltischlerin", "male": "Modelltischler"}, + { + "neutral": "Modellschlosser*in", + "female": "Modellschlosserin", + "male": "Modellschlosser", + }, + { + "neutral": "Modelltischler*in", + "female": "Modelltischlerin", + "male": "Modelltischler", + }, {"neutral": "Moderator*in", "female": "Moderatorin", "male": "Moderator"}, {"neutral": "Modist*in", "female": "Modistin", "male": "Modist"}, - {"neutral": "Molekularbiologe / Molekularbiologin", "female": "Molekularbiologin", "male": "Molekularbiologe"}, - {"neutral": "Molekularmediziner*in", "female": "Molekularmedizinerin", "male": "Molekularmediziner"}, - {"neutral": "Molekulartechniker*in", "female": "Molekulartechnikerin", "male": "Molekulartechniker"}, + { + "neutral": "Molekularbiologe / Molekularbiologin", + "female": "Molekularbiologin", + "male": "Molekularbiologe", + }, + { + "neutral": "Molekularmediziner*in", + "female": "Molekularmedizinerin", + "male": "Molekularmediziner", + }, + { + "neutral": "Molekulartechniker*in", + "female": "Molekulartechnikerin", + "male": "Molekulartechniker", + }, { "neutral": "Molkerei- und Käsereiwirtschaft", "female": "Molkerei- und Käsereiwirtschaft", "male": "Molkerei- und Käsereiwirtschaft", }, - {"neutral": "Molkereifachmann / Molkereifachfrau", "female": "Molkereifachfrau", "male": "Molkereifachmann"}, + { + "neutral": "Molkereifachmann / Molkereifachfrau", + "female": "Molkereifachfrau", + "male": "Molkereifachmann", + }, { "neutral": "Montanmaschinenbautechniker*in", "female": "Montanmaschinenbautechnikerin", "male": "Montanmaschinenbautechniker", }, - {"neutral": "Motorradtechniker*in", "female": "Motorradtechnikerin", "male": "Motorradtechniker"}, + { + "neutral": "Motorradtechniker*in", + "female": "Motorradtechnikerin", + "male": "Motorradtechniker", + }, { "neutral": "Mountainbike- und Touringguide", "female": "Mountainbike- und Touringguide", "male": "Mountainbike- und Touringguide", }, - {"neutral": "Multimedia-Designer*in", "female": "Multimedia-Designerin", "male": "Multimedia-Designer"}, + { + "neutral": "Multimedia-Designer*in", + "female": "Multimedia-Designerin", + "male": "Multimedia-Designer", + }, { "neutral": "Multimedia-Informatiker*in", "female": "Multimedia-Informatikerin", "male": "Multimedia-Informatiker", }, - {"neutral": "Multimedia-Ingenieur*in", "female": "Multimedia-Ingenieurin", "male": "Multimedia-Ingenieur"}, + { + "neutral": "Multimedia-Ingenieur*in", + "female": "Multimedia-Ingenieurin", + "male": "Multimedia-Ingenieur", + }, { "neutral": "Multimedia-Konzeptionist*in", "female": "Multimedia-Konzeptionistin", "male": "Multimedia-Konzeptionist", }, - {"neutral": "Multimedia-Künstler*in", "female": "Multimedia-Künstlerin", "male": "Multimedia-Künstler"}, - {"neutral": "Multimedia-Producer", "female": "Multimedia-Producer", "male": "Multimedia-Producer"}, + { + "neutral": "Multimedia-Künstler*in", + "female": "Multimedia-Künstlerin", + "male": "Multimedia-Künstler", + }, + { + "neutral": "Multimedia-Producer", + "female": "Multimedia-Producer", + "male": "Multimedia-Producer", + }, { "neutral": "Multimedia-Programmierer*in", "female": "Multimedia-Programmiererin", @@ -3444,30 +6076,94 @@ class Provider(BaseProvider): "female": "Multimedia-Projektmanagerin", "male": "Multimedia-Projektmanager", }, - {"neutral": "Multimedia-Redakteur*in", "female": "Multimedia-Redakteurin", "male": "Multimedia-Redakteur"}, + { + "neutral": "Multimedia-Redakteur*in", + "female": "Multimedia-Redakteurin", + "male": "Multimedia-Redakteur", + }, { "neutral": "Multimedia-Software-Entwickler*in", "female": "Multimedia-Software-Entwicklerin", "male": "Multimedia-Software-Entwickler", }, - {"neutral": "Museumsaufseher*in", "female": "Museumsaufseherin", "male": "Museumsaufseher"}, - {"neutral": "Museumsdidaktiker*in", "female": "Museumsdidaktikerin", "male": "Museumsdidaktiker"}, - {"neutral": "Museumsdirektor*in", "female": "Museumsdirektorin", "male": "Museumsdirektor"}, - {"neutral": "Museumsführer*in", "female": "Museumsführerin", "male": "Museumsführer"}, - {"neutral": "Museumspädagoge / Museumspädagogin", "female": "Museumspädagogin", "male": "Museumspädagoge"}, - {"neutral": "Musicaldarsteller*in", "female": "Musicaldarstellerin", "male": "Musicaldarsteller"}, + { + "neutral": "Museumsaufseher*in", + "female": "Museumsaufseherin", + "male": "Museumsaufseher", + }, + { + "neutral": "Museumsdidaktiker*in", + "female": "Museumsdidaktikerin", + "male": "Museumsdidaktiker", + }, + { + "neutral": "Museumsdirektor*in", + "female": "Museumsdirektorin", + "male": "Museumsdirektor", + }, + { + "neutral": "Museumsführer*in", + "female": "Museumsführerin", + "male": "Museumsführer", + }, + { + "neutral": "Museumspädagoge / Museumspädagogin", + "female": "Museumspädagogin", + "male": "Museumspädagoge", + }, + { + "neutral": "Musicaldarsteller*in", + "female": "Musicaldarstellerin", + "male": "Musicaldarsteller", + }, {"neutral": "Musikagent*in", "female": "Musikagentin", "male": "Musikagent"}, - {"neutral": "Musikalienhändler*in", "female": "Musikalienhändlerin", "male": "Musikalienhändler"}, + { + "neutral": "Musikalienhändler*in", + "female": "Musikalienhändlerin", + "male": "Musikalienhändler", + }, {"neutral": "Musiker*in", "female": "Musikerin", "male": "Musiker"}, {"neutral": "Musiklehrer*in", "female": "Musiklehrerin", "male": "Musiklehrer"}, - {"neutral": "Musikmanager*in", "female": "Musikmanagerin", "male": "Musikmanager"}, - {"neutral": "Musikproduzent*in", "female": "Musikproduzentin", "male": "Musikproduzent"}, - {"neutral": "Musiktherapeut*in", "female": "Musiktherapeutin", "male": "Musiktherapeut"}, - {"neutral": "Musikwissenschafter*in", "female": "Musikwissenschafterin", "male": "Musikwissenschafter"}, - {"neutral": "Möbelbautechniker*in", "female": "Möbelbautechnikerin", "male": "Möbelbautechniker"}, - {"neutral": "Möbelmonteur*in", "female": "Möbelmonteurin", "male": "Möbelmonteur"}, - {"neutral": "Müllaufleger*in", "female": "Müllauflegerin", "male": "Müllaufleger"}, - {"neutral": "Münzenhändler*in", "female": "Münzenhändlerin", "male": "Münzenhändler"}, + { + "neutral": "Musikmanager*in", + "female": "Musikmanagerin", + "male": "Musikmanager", + }, + { + "neutral": "Musikproduzent*in", + "female": "Musikproduzentin", + "male": "Musikproduzent", + }, + { + "neutral": "Musiktherapeut*in", + "female": "Musiktherapeutin", + "male": "Musiktherapeut", + }, + { + "neutral": "Musikwissenschafter*in", + "female": "Musikwissenschafterin", + "male": "Musikwissenschafter", + }, + { + "neutral": "Möbelbautechniker*in", + "female": "Möbelbautechnikerin", + "male": "Möbelbautechniker", + }, + { + "neutral": "Möbelmonteur*in", + "female": "Möbelmonteurin", + "male": "Möbelmonteur", + }, + { + "neutral": "Müllaufleger*in", + "female": "Müllauflegerin", + "male": "Müllaufleger", + }, + { + "neutral": "Münzenhändler*in", + "female": "Münzenhändlerin", + "male": "Münzenhändler", + }, { "neutral": "Nachhaltigkeitsmanager*in", "female": "Nachhaltigkeitsmanagerin", @@ -3478,8 +6174,16 @@ class Provider(BaseProvider): "female": "Nachrichtenelektronikerin", "male": "Nachrichtenelektroniker", }, - {"neutral": "Nachrichtentechniker*in", "female": "Nachrichtentechnikerin", "male": "Nachrichtentechniker"}, - {"neutral": "Nachtportier*in", "female": "Nachtportierin", "male": "Nachtportier"}, + { + "neutral": "Nachrichtentechniker*in", + "female": "Nachrichtentechnikerin", + "male": "Nachrichtentechniker", + }, + { + "neutral": "Nachtportier*in", + "female": "Nachtportierin", + "male": "Nachtportier", + }, { "neutral": "Nah- und Distributionslogistik", "female": "Nah- und Distributionslogistik", @@ -3495,9 +6199,21 @@ class Provider(BaseProvider): "female": "Nanobiotechnologin", "male": "Nanobiotechnologe", }, - {"neutral": "Nanotechniker*in", "female": "Nanotechnikerin", "male": "Nanotechniker"}, - {"neutral": "Nanotechnologe / Nanotechnologin", "female": "Nanotechnologin", "male": "Nanotechnologe"}, - {"neutral": "Nationalpark-Ranger", "female": "Nationalpark-Ranger", "male": "Nationalpark-Ranger"}, + { + "neutral": "Nanotechniker*in", + "female": "Nanotechnikerin", + "male": "Nanotechniker", + }, + { + "neutral": "Nanotechnologe / Nanotechnologin", + "female": "Nanotechnologin", + "male": "Nanotechnologe", + }, + { + "neutral": "Nationalpark-Ranger", + "female": "Nationalpark-Ranger", + "male": "Nationalpark-Ranger", + }, { "neutral": "Natur- und Erlebnispädagoge / Natur- und Erlebnispädagogin", "female": "Natur- und Erlebnispädagogin", @@ -3508,27 +6224,87 @@ class Provider(BaseProvider): "female": "Natural Language Processing Expertin", "male": "Natural Language Processing Expert", }, - {"neutral": "Netzwerkadministrator*in", "female": "Netzwerkadministratorin", "male": "Netzwerkadministrator"}, - {"neutral": "Netzwerkarchitekt*in", "female": "Netzwerkarchitektin", "male": "Netzwerkarchitekt"}, - {"neutral": "Netzwerkbetreuer*in", "female": "Netzwerkbetreuerin", "male": "Netzwerkbetreuer"}, - {"neutral": "Netzwerkdesigner*in", "female": "Netzwerkdesignerin", "male": "Netzwerkdesigner"}, - {"neutral": "Netzwerkexpert*in", "female": "Netzwerkexpertin", "male": "Netzwerkexpert"}, - {"neutral": "Netzwerkmanager*in", "female": "Netzwerkmanagerin", "male": "Netzwerkmanager"}, + { + "neutral": "Netzwerkadministrator*in", + "female": "Netzwerkadministratorin", + "male": "Netzwerkadministrator", + }, + { + "neutral": "Netzwerkarchitekt*in", + "female": "Netzwerkarchitektin", + "male": "Netzwerkarchitekt", + }, + { + "neutral": "Netzwerkbetreuer*in", + "female": "Netzwerkbetreuerin", + "male": "Netzwerkbetreuer", + }, + { + "neutral": "Netzwerkdesigner*in", + "female": "Netzwerkdesignerin", + "male": "Netzwerkdesigner", + }, + { + "neutral": "Netzwerkexpert*in", + "female": "Netzwerkexpertin", + "male": "Netzwerkexpert", + }, + { + "neutral": "Netzwerkmanager*in", + "female": "Netzwerkmanagerin", + "male": "Netzwerkmanager", + }, { "neutral": "Netzwerktechniker*in (Computersysteme)", "female": "Netzwerktechnikerin (Computersysteme)", "male": "Netzwerktechniker (Computersysteme)", }, - {"neutral": "Netzwerkverwalter*in", "female": "Netzwerkverwalterin", "male": "Netzwerkverwalter"}, - {"neutral": "Neurolinguist*in", "female": "Neurolinguistin", "male": "Neurolinguist"}, - {"neutral": "Neurowissenschafter*in", "female": "Neurowissenschafterin", "male": "Neurowissenschafter"}, - {"neutral": "New Media Consultant", "female": "New Media Consultant", "male": "New Media Consultant"}, - {"neutral": "Night Auditor", "female": "Night Auditor", "male": "Night Auditor"}, + { + "neutral": "Netzwerkverwalter*in", + "female": "Netzwerkverwalterin", + "male": "Netzwerkverwalter", + }, + { + "neutral": "Neurolinguist*in", + "female": "Neurolinguistin", + "male": "Neurolinguist", + }, + { + "neutral": "Neurowissenschafter*in", + "female": "Neurowissenschafterin", + "male": "Neurowissenschafter", + }, + { + "neutral": "New Media Consultant", + "female": "New Media Consultant", + "male": "New Media Consultant", + }, + { + "neutral": "Night Auditor", + "female": "Night Auditor", + "male": "Night Auditor", + }, {"neutral": "Notar*in", "female": "Notarin", "male": "Notar"}, - {"neutral": "Notfallsanitäter*in", "female": "Notfallsanitäterin", "male": "Notfallsanitäter"}, - {"neutral": "Numismatiker*in", "female": "Numismatikerin", "male": "Numismatiker"}, - {"neutral": "Obduktionsassistent*in", "female": "Obduktionsassistentin", "male": "Obduktionsassistent"}, - {"neutral": "Oberflächentechnik", "female": "Oberflächentechnik", "male": "Oberflächentechnik"}, + { + "neutral": "Notfallsanitäter*in", + "female": "Notfallsanitäterin", + "male": "Notfallsanitäter", + }, + { + "neutral": "Numismatiker*in", + "female": "Numismatikerin", + "male": "Numismatiker", + }, + { + "neutral": "Obduktionsassistent*in", + "female": "Obduktionsassistentin", + "male": "Obduktionsassistent", + }, + { + "neutral": "Oberflächentechnik", + "female": "Oberflächentechnik", + "male": "Oberflächentechnik", + }, { "neutral": "Oberflächentechnik - Dünnschicht- und Plasmatechnik", "female": "Oberflächentechnik - Dünnschicht- und Plasmatechnik", @@ -3559,8 +6335,16 @@ class Provider(BaseProvider): "female": "Oberflächentechnik - Pulverbeschichtung", "male": "Oberflächentechnik - Pulverbeschichtung", }, - {"neutral": "Oberflächentechniker*in", "female": "Oberflächentechnikerin", "male": "Oberflächentechniker"}, - {"neutral": "Oberteilherrichter*in", "female": "Oberteilherrichterin", "male": "Oberteilherrichter"}, + { + "neutral": "Oberflächentechniker*in", + "female": "Oberflächentechnikerin", + "male": "Oberflächentechniker", + }, + { + "neutral": "Oberteilherrichter*in", + "female": "Oberteilherrichterin", + "male": "Oberteilherrichter", + }, { "neutral": "Obst- und Gemüsekonservierer*in", "female": "Obst- und Gemüsekonserviererin", @@ -3577,7 +6361,11 @@ class Provider(BaseProvider): "female": "Ofenbau- und Verlegetechnik", "male": "Ofenbau- und Verlegetechnik", }, - {"neutral": "Office Manager*in", "female": "Office Managerin", "male": "Office Manager"}, + { + "neutral": "Office Manager*in", + "female": "Office Managerin", + "male": "Office Manager", + }, { "neutral": "Offizier*in des Generalstabsdienstes", "female": "Offizierin des Generalstabsdienstes", @@ -3593,21 +6381,41 @@ class Provider(BaseProvider): "female": "Offizierin des technischen Dienstes", "male": "Offizier des technischen Dienstes", }, - {"neutral": "Online Content Creator", "female": "Online Content Creator", "male": "Online Content Creator"}, - {"neutral": "Online Editor", "female": "Online Editor", "male": "Online Editor"}, + { + "neutral": "Online Content Creator", + "female": "Online Content Creator", + "male": "Online Content Creator", + }, + { + "neutral": "Online Editor", + "female": "Online Editor", + "male": "Online Editor", + }, { "neutral": "Online Marketing Specialist", "female": "Online Marketing Specialist", "male": "Online Marketing Specialist", }, - {"neutral": "Onlinejournalist*in", "female": "Onlinejournalistin", "male": "Onlinejournalist"}, - {"neutral": "Onlineredakteur*in", "female": "Onlineredakteurin", "male": "Onlineredakteur"}, + { + "neutral": "Onlinejournalist*in", + "female": "Onlinejournalistin", + "male": "Onlinejournalist", + }, + { + "neutral": "Onlineredakteur*in", + "female": "Onlineredakteurin", + "male": "Onlineredakteur", + }, { "neutral": "Operations Controller - Flugverkehr", "female": "Operations Controller - Flugverkehr", "male": "Operations Controller - Flugverkehr", }, - {"neutral": "Operationsassistent*in", "female": "Operationsassistentin", "male": "Operationsassistent"}, + { + "neutral": "Operationsassistent*in", + "female": "Operationsassistentin", + "male": "Operationsassistent", + }, { "neutral": "Operationsgehilfe / Operationsgehilfin", "female": "Operationsgehilfin", @@ -3625,22 +6433,46 @@ class Provider(BaseProvider): "male": "Optischer Elektroniker", }, {"neutral": "Optometrist*in", "female": "Optometristin", "male": "Optometrist"}, - {"neutral": "Optotechniker*in", "female": "Optotechnikerin", "male": "Optotechniker"}, + { + "neutral": "Optotechniker*in", + "female": "Optotechnikerin", + "male": "Optotechniker", + }, {"neutral": "Ordensfrau", "female": "Ordensfrau", "male": "Ordensfrau"}, {"neutral": "Ordensmann", "female": "Ordensmann", "male": "Ordensmann"}, - {"neutral": "Ordinationsassistent*in", "female": "Ordinationsassistentin", "male": "Ordinationsassistent"}, + { + "neutral": "Ordinationsassistent*in", + "female": "Ordinationsassistentin", + "male": "Ordinationsassistent", + }, { "neutral": "Ordinationsgehilfe / Ordinationsgehilfin", "female": "Ordinationsgehilfin", "male": "Ordinationsgehilfe", }, - {"neutral": "Organisationsberater*in", "female": "Organisationsberaterin", "male": "Organisationsberater"}, + { + "neutral": "Organisationsberater*in", + "female": "Organisationsberaterin", + "male": "Organisationsberater", + }, {"neutral": "Orgelbau", "female": "Orgelbau", "male": "Orgelbau"}, {"neutral": "Orgelbauer*in", "female": "Orgelbauerin", "male": "Orgelbauer"}, {"neutral": "Orthoptist*in", "female": "Orthoptistin", "male": "Orthoptist"}, - {"neutral": "Orthopädiemechaniker*in", "female": "Orthopädiemechanikerin", "male": "Orthopädiemechaniker"}, - {"neutral": "Orthopädieschuhmacher*in", "female": "Orthopädieschuhmacherin", "male": "Orthopädieschuhmacher"}, - {"neutral": "Orthopädietechnik", "female": "Orthopädietechnik", "male": "Orthopädietechnik"}, + { + "neutral": "Orthopädiemechaniker*in", + "female": "Orthopädiemechanikerin", + "male": "Orthopädiemechaniker", + }, + { + "neutral": "Orthopädieschuhmacher*in", + "female": "Orthopädieschuhmacherin", + "male": "Orthopädieschuhmacher", + }, + { + "neutral": "Orthopädietechnik", + "female": "Orthopädietechnik", + "male": "Orthopädietechnik", + }, { "neutral": "Orthopädietechnik - Orthesentechnik", "female": "Orthopädietechnik - Orthesentechnik", @@ -3657,75 +6489,235 @@ class Provider(BaseProvider): "male": "Orthopädietechnik - Rehabilitationstechnik", }, {"neutral": "Osteopath*in", "female": "Osteopathin", "male": "Osteopath"}, - {"neutral": "Outdoor-Trainer*in", "female": "Outdoor-Trainerin", "male": "Outdoor-Trainer"}, - {"neutral": "Outdoorpädagoge / Outdoorpädagogin", "female": "Outdoorpädagogin", "male": "Outdoorpädagoge"}, + { + "neutral": "Outdoor-Trainer*in", + "female": "Outdoor-Trainerin", + "male": "Outdoor-Trainer", + }, + { + "neutral": "Outdoorpädagoge / Outdoorpädagogin", + "female": "Outdoorpädagogin", + "male": "Outdoorpädagoge", + }, {"neutral": "Outplacer", "female": "Outplacer", "male": "Outplacer"}, {"neutral": "Ozeanograf*in", "female": "Ozeanografin", "male": "Ozeanograf"}, {"neutral": "PR-Berater*in", "female": "PR-Beraterin", "male": "PR-Berater"}, {"neutral": "Page", "female": "Page", "male": "Page"}, {"neutral": "Paläograf*in", "female": "Paläografin", "male": "Paläograf"}, - {"neutral": "Paläontologe / Paläontologin", "female": "Paläontologin", "male": "Paläontologe"}, - {"neutral": "Pannenfahrer*in", "female": "Pannenfahrerin", "male": "Pannenfahrer"}, - {"neutral": "Pantomimenspieler*in", "female": "Pantomimenspielerin", "male": "Pantomimenspieler"}, + { + "neutral": "Paläontologe / Paläontologin", + "female": "Paläontologin", + "male": "Paläontologe", + }, + { + "neutral": "Pannenfahrer*in", + "female": "Pannenfahrerin", + "male": "Pannenfahrer", + }, + { + "neutral": "Pantomimenspieler*in", + "female": "Pantomimenspielerin", + "male": "Pantomimenspieler", + }, { "neutral": "Papiermaschinenarbeiter*in", "female": "Papiermaschinenarbeiterin", "male": "Papiermaschinenarbeiter", }, - {"neutral": "Papiertechnik", "female": "Papiertechnik", "male": "Papiertechnik"}, - {"neutral": "Parkraumüberwacher*in", "female": "Parkraumüberwacherin", "male": "Parkraumüberwacher"}, - {"neutral": "Partnervermittler*in", "female": "Partnervermittlerin", "male": "Partnervermittler"}, - {"neutral": "Partyveranstalter*in", "female": "Partyveranstalterin", "male": "Partyveranstalter"}, - {"neutral": "Pastoralassistent*in", "female": "Pastoralassistentin", "male": "Pastoralassistent"}, - {"neutral": "Patent Professional", "female": "Patent Professional", "male": "Patent Professional"}, - {"neutral": "Patentanwalt / Patentanwältin", "female": "Patentanwältin", "male": "Patentanwalt"}, + { + "neutral": "Papiertechnik", + "female": "Papiertechnik", + "male": "Papiertechnik", + }, + { + "neutral": "Parkraumüberwacher*in", + "female": "Parkraumüberwacherin", + "male": "Parkraumüberwacher", + }, + { + "neutral": "Partnervermittler*in", + "female": "Partnervermittlerin", + "male": "Partnervermittler", + }, + { + "neutral": "Partyveranstalter*in", + "female": "Partyveranstalterin", + "male": "Partyveranstalter", + }, + { + "neutral": "Pastoralassistent*in", + "female": "Pastoralassistentin", + "male": "Pastoralassistent", + }, + { + "neutral": "Patent Professional", + "female": "Patent Professional", + "male": "Patent Professional", + }, + { + "neutral": "Patentanwalt / Patentanwältin", + "female": "Patentanwältin", + "male": "Patentanwalt", + }, {"neutral": "Patissier*in", "female": "Patissierin", "male": "Patissier"}, - {"neutral": "Peer Influencer", "female": "Peer Influencer", "male": "Peer Influencer"}, - {"neutral": "Performancekünstler*in", "female": "Performancekünstlerin", "male": "Performancekünstler"}, - {"neutral": "Personal Consultant", "female": "Personal Consultant", "male": "Personal Consultant"}, - {"neutral": "Personal Shopper", "female": "Personal Shopper", "male": "Personal Shopper"}, - {"neutral": "Personal Trainer", "female": "Personal Trainer", "male": "Personal Trainer"}, - {"neutral": "Personalberater*in", "female": "Personalberaterin", "male": "Personalberater"}, - {"neutral": "Personaldienstleistung", "female": "Personaldienstleistung", "male": "Personaldienstleistung"}, - {"neutral": "Personalentwickler*in", "female": "Personalentwicklerin", "male": "Personalentwickler"}, - {"neutral": "Personalleiter*in", "female": "Personalleiterin", "male": "Personalleiter"}, + { + "neutral": "Peer Influencer", + "female": "Peer Influencer", + "male": "Peer Influencer", + }, + { + "neutral": "Performancekünstler*in", + "female": "Performancekünstlerin", + "male": "Performancekünstler", + }, + { + "neutral": "Personal Consultant", + "female": "Personal Consultant", + "male": "Personal Consultant", + }, + { + "neutral": "Personal Shopper", + "female": "Personal Shopper", + "male": "Personal Shopper", + }, + { + "neutral": "Personal Trainer", + "female": "Personal Trainer", + "male": "Personal Trainer", + }, + { + "neutral": "Personalberater*in", + "female": "Personalberaterin", + "male": "Personalberater", + }, + { + "neutral": "Personaldienstleistung", + "female": "Personaldienstleistung", + "male": "Personaldienstleistung", + }, + { + "neutral": "Personalentwickler*in", + "female": "Personalentwicklerin", + "male": "Personalentwickler", + }, + { + "neutral": "Personalleiter*in", + "female": "Personalleiterin", + "male": "Personalleiter", + }, { "neutral": "Personalsachbearbeiter*in", "female": "Personalsachbearbeiterin", "male": "Personalsachbearbeiter", }, - {"neutral": "Personalverrechner*in", "female": "Personalverrechnerin", "male": "Personalverrechner"}, - {"neutral": "Personenbetreuer*in", "female": "Personenbetreuerin", "male": "Personenbetreuer"}, - {"neutral": "Personenschützer*in", "female": "Personenschützerin", "male": "Personenschützer"}, - {"neutral": "Petrochemiker*in", "female": "Petrochemikerin", "male": "Petrochemiker"}, + { + "neutral": "Personalverrechner*in", + "female": "Personalverrechnerin", + "male": "Personalverrechner", + }, + { + "neutral": "Personenbetreuer*in", + "female": "Personenbetreuerin", + "male": "Personenbetreuer", + }, + { + "neutral": "Personenschützer*in", + "female": "Personenschützerin", + "male": "Personenschützer", + }, + { + "neutral": "Petrochemiker*in", + "female": "Petrochemikerin", + "male": "Petrochemiker", + }, {"neutral": "Pfandleiher*in", "female": "Pfandleiherin", "male": "Pfandleiher"}, - {"neutral": "Pfarrer*in (evang.)", "female": "Pfarrerin (evang.)", "male": "Pfarrer (evang.)"}, - {"neutral": "Pferdepfleger*in", "female": "Pferdepflegerin", "male": "Pferdepfleger"}, + { + "neutral": "Pfarrer*in (evang.)", + "female": "Pfarrerin (evang.)", + "male": "Pfarrer (evang.)", + }, + { + "neutral": "Pferdepfleger*in", + "female": "Pferdepflegerin", + "male": "Pferdepfleger", + }, {"neutral": "Pferdewirt*in", "female": "Pferdewirtin", "male": "Pferdewirt"}, - {"neutral": "Pferdewirtschaft", "female": "Pferdewirtschaft", "male": "Pferdewirtschaft"}, - {"neutral": "Pflanzenschutzberater*in", "female": "Pflanzenschutzberaterin", "male": "Pflanzenschutzberater"}, + { + "neutral": "Pferdewirtschaft", + "female": "Pferdewirtschaft", + "male": "Pferdewirtschaft", + }, + { + "neutral": "Pflanzenschutzberater*in", + "female": "Pflanzenschutzberaterin", + "male": "Pflanzenschutzberater", + }, { "neutral": "Pflanzenwissenschafter*in", "female": "Pflanzenwissenschafterin", "male": "Pflanzenwissenschafter", }, - {"neutral": "Pflasterer / Pflasterin", "female": "Pflasterin", "male": "Pflasterer"}, - {"neutral": "Pflegeassistent*in", "female": "Pflegeassistentin", "male": "Pflegeassistent"}, - {"neutral": "Pflegeassistenz", "female": "Pflegeassistenz", "male": "Pflegeassistenz"}, - {"neutral": "Pflegefachassistent*in", "female": "Pflegefachassistentin", "male": "Pflegefachassistent"}, - {"neutral": "Pflegefachassistenz", "female": "Pflegefachassistenz", "male": "Pflegefachassistenz"}, - {"neutral": "Pflegefachkraft", "female": "Pflegefachkraft", "male": "Pflegefachkraft"}, - {"neutral": "Pflegehelfer*in", "female": "Pflegehelferin", "male": "Pflegehelfer"}, - {"neutral": "Pharmakologe / Pharmakologin", "female": "Pharmakologin", "male": "Pharmakologe"}, - {"neutral": "Pharmareferent*in", "female": "Pharmareferentin", "male": "Pharmareferent"}, - {"neutral": "Pharmatechnologie", "female": "Pharmatechnologie", "male": "Pharmatechnologie"}, + { + "neutral": "Pflasterer / Pflasterin", + "female": "Pflasterin", + "male": "Pflasterer", + }, + { + "neutral": "Pflegeassistent*in", + "female": "Pflegeassistentin", + "male": "Pflegeassistent", + }, + { + "neutral": "Pflegeassistenz", + "female": "Pflegeassistenz", + "male": "Pflegeassistenz", + }, + { + "neutral": "Pflegefachassistent*in", + "female": "Pflegefachassistentin", + "male": "Pflegefachassistent", + }, + { + "neutral": "Pflegefachassistenz", + "female": "Pflegefachassistenz", + "male": "Pflegefachassistenz", + }, + { + "neutral": "Pflegefachkraft", + "female": "Pflegefachkraft", + "male": "Pflegefachkraft", + }, + { + "neutral": "Pflegehelfer*in", + "female": "Pflegehelferin", + "male": "Pflegehelfer", + }, + { + "neutral": "Pharmakologe / Pharmakologin", + "female": "Pharmakologin", + "male": "Pharmakologe", + }, + { + "neutral": "Pharmareferent*in", + "female": "Pharmareferentin", + "male": "Pharmareferent", + }, + { + "neutral": "Pharmatechnologie", + "female": "Pharmatechnologie", + "male": "Pharmatechnologie", + }, {"neutral": "Pharmazeut*in", "female": "Pharmazeutin", "male": "Pharmazeut"}, { "neutral": "Pharmazeutisch-kaufmännische Assistenz", "female": "Pharmazeutisch-kaufmännische Assistenz", "male": "Pharmazeutisch-kaufmännische Assistenz", }, - {"neutral": "Philologe / Philologin", "female": "Philologin", "male": "Philologe"}, + { + "neutral": "Philologe / Philologin", + "female": "Philologin", + "male": "Philologe", + }, {"neutral": "Philosoph*in", "female": "Philosophin", "male": "Philosoph"}, {"neutral": "Physiker*in", "female": "Physikerin", "male": "Physiker"}, { @@ -3738,18 +6730,38 @@ class Provider(BaseProvider): "female": "Physikerin für Technische Physik", "male": "Physiker für Technische Physik", }, - {"neutral": "Physiklaborant*in", "female": "Physiklaborantin", "male": "Physiklaborant"}, - {"neutral": "Physiotherapeut*in", "female": "Physiotherapeutin", "male": "Physiotherapeut"}, - {"neutral": "Pilatestrainer*in", "female": "Pilatestrainerin", "male": "Pilatestrainer"}, + { + "neutral": "Physiklaborant*in", + "female": "Physiklaborantin", + "male": "Physiklaborant", + }, + { + "neutral": "Physiotherapeut*in", + "female": "Physiotherapeutin", + "male": "Physiotherapeut", + }, + { + "neutral": "Pilatestrainer*in", + "female": "Pilatestrainerin", + "male": "Pilatestrainer", + }, {"neutral": "Pilot*in", "female": "Pilotin", "male": "Pilot"}, {"neutral": "Plakatierer*in", "female": "Plakatiererin", "male": "Plakatierer"}, - {"neutral": "Planungskoordinator*in", "female": "Planungskoordinatorin", "male": "Planungskoordinator"}, + { + "neutral": "Planungskoordinator*in", + "female": "Planungskoordinatorin", + "male": "Planungskoordinator", + }, { "neutral": "Platten- und Fliesenleger*in", "female": "Platten- und Fliesenlegerin", "male": "Platten- und Fliesenleger", }, - {"neutral": "Platzmeister*in (Bau)", "female": "Platzmeisterin (Bau)", "male": "Platzmeister (Bau)"}, + { + "neutral": "Platzmeister*in (Bau)", + "female": "Platzmeisterin (Bau)", + "male": "Platzmeister (Bau)", + }, { "neutral": "Platzwart*in (Campingplatz, Sportplatz)", "female": "Platzwartin (Campingplatz, Sportplatz)", @@ -3763,68 +6775,192 @@ class Provider(BaseProvider): }, {"neutral": "Polier*in", "female": "Polierin", "male": "Polier"}, {"neutral": "Politiker*in", "female": "Politikerin", "male": "Politiker"}, - {"neutral": "Politologe / Politologin", "female": "Politologin", "male": "Politologe"}, + { + "neutral": "Politologe / Politologin", + "female": "Politologin", + "male": "Politologe", + }, { "neutral": "Polizeilicher Fallanalytiker / Polizeiliche Fallanalytikerin", "female": "Polizeiliche Fallanalytikerin", "male": "Polizeilicher Fallanalytiker", }, {"neutral": "Polizist*in", "female": "Polizistin", "male": "Polizist"}, - {"neutral": "Polsterer / Polsterin", "female": "Polsterin", "male": "Polsterer"}, - {"neutral": "Polymerchemiker*in", "female": "Polymerchemikerin", "male": "Polymerchemiker"}, + { + "neutral": "Polsterer / Polsterin", + "female": "Polsterin", + "male": "Polsterer", + }, + { + "neutral": "Polymerchemiker*in", + "female": "Polymerchemikerin", + "male": "Polymerchemiker", + }, {"neutral": "Popmusiker*in", "female": "Popmusikerin", "male": "Popmusiker"}, - {"neutral": "Portfoliomanager*in", "female": "Portfoliomanagerin", "male": "Portfoliomanager"}, + { + "neutral": "Portfoliomanager*in", + "female": "Portfoliomanagerin", + "male": "Portfoliomanager", + }, {"neutral": "Portier*in", "female": "Portierin", "male": "Portier"}, - {"neutral": "Porzellanformer*in", "female": "Porzellanformerin", "male": "Porzellanformer"}, - {"neutral": "Porzellanmaler*in", "female": "Porzellanmalerin", "male": "Porzellanmaler"}, - {"neutral": "Posamentierer*in", "female": "Posamentiererin", "male": "Posamentierer"}, + { + "neutral": "Porzellanformer*in", + "female": "Porzellanformerin", + "male": "Porzellanformer", + }, + { + "neutral": "Porzellanmaler*in", + "female": "Porzellanmalerin", + "male": "Porzellanmaler", + }, + { + "neutral": "Posamentierer*in", + "female": "Posamentiererin", + "male": "Posamentierer", + }, { "neutral": "Post-Doc Universitätsassistent*in", "female": "Post-Doc Universitätsassistentin", "male": "Post-Doc Universitätsassistent", }, - {"neutral": "Postbediensteter / Postbedienstete", "female": "Postbedienstete", "male": "Postbediensteter"}, + { + "neutral": "Postbediensteter / Postbedienstete", + "female": "Postbedienstete", + "male": "Postbediensteter", + }, { "neutral": "Pre-Doc Universitätsassistent*in", "female": "Pre-Doc Universitätsassistentin", "male": "Pre-Doc Universitätsassistent", }, - {"neutral": "Pre-Sales Manager*in", "female": "Pre-Sales Managerin", "male": "Pre-Sales Manager"}, - {"neutral": "Pre-Sales-Consultant", "female": "Pre-Sales-Consultant", "male": "Pre-Sales-Consultant"}, - {"neutral": "Pressefotograf*in", "female": "Pressefotografin", "male": "Pressefotograf"}, - {"neutral": "Pressesprecher*in", "female": "Pressesprecherin", "male": "Pressesprecher"}, + { + "neutral": "Pre-Sales Manager*in", + "female": "Pre-Sales Managerin", + "male": "Pre-Sales Manager", + }, + { + "neutral": "Pre-Sales-Consultant", + "female": "Pre-Sales-Consultant", + "male": "Pre-Sales-Consultant", + }, + { + "neutral": "Pressefotograf*in", + "female": "Pressefotografin", + "male": "Pressefotograf", + }, + { + "neutral": "Pressesprecher*in", + "female": "Pressesprecherin", + "male": "Pressesprecher", + }, {"neutral": "Priester*in", "female": "Priesterin", "male": "Priester"}, - {"neutral": "Primarstufenlehrer*in", "female": "Primarstufenlehrerin", "male": "Primarstufenlehrer"}, + { + "neutral": "Primarstufenlehrer*in", + "female": "Primarstufenlehrerin", + "male": "Primarstufenlehrer", + }, { "neutral": "Principal Investigator (PI)", "female": "Principal Investigator (PI)", "male": "Principal Investigator (PI)", }, - {"neutral": "Private Banker", "female": "Private Banker", "male": "Private Banker"}, - {"neutral": "Privatkoch / Privatköchin", "female": "Privatköchin", "male": "Privatkoch"}, - {"neutral": "Privatkundenbetreuer*in", "female": "Privatkundenbetreuerin", "male": "Privatkundenbetreuer"}, - {"neutral": "Produktdesigner*in", "female": "Produktdesignerin", "male": "Produktdesigner"}, - {"neutral": "Produktentwickler*in", "female": "Produktentwicklerin", "male": "Produktentwickler"}, - {"neutral": "Produktionsleiter*in", "female": "Produktionsleiterin", "male": "Produktionsleiter"}, + { + "neutral": "Private Banker", + "female": "Private Banker", + "male": "Private Banker", + }, + { + "neutral": "Privatkoch / Privatköchin", + "female": "Privatköchin", + "male": "Privatkoch", + }, + { + "neutral": "Privatkundenbetreuer*in", + "female": "Privatkundenbetreuerin", + "male": "Privatkundenbetreuer", + }, + { + "neutral": "Produktdesigner*in", + "female": "Produktdesignerin", + "male": "Produktdesigner", + }, + { + "neutral": "Produktentwickler*in", + "female": "Produktentwicklerin", + "male": "Produktentwickler", + }, + { + "neutral": "Produktionsleiter*in", + "female": "Produktionsleiterin", + "male": "Produktionsleiter", + }, { "neutral": "Produktionsleiter*in (Fernsehen, Film, Radio, Theater)", "female": "Produktionsleiterin (Fernsehen, Film, Radio, Theater)", "male": "Produktionsleiter (Fernsehen, Film, Radio, Theater)", }, - {"neutral": "Produktionsmanager*in", "female": "Produktionsmanagerin", "male": "Produktionsmanager"}, - {"neutral": "Produktionstechniker*in", "female": "Produktionstechnikerin", "male": "Produktionstechniker"}, - {"neutral": "Produktmanager*in", "female": "Produktmanagerin", "male": "Produktmanager"}, + { + "neutral": "Produktionsmanager*in", + "female": "Produktionsmanagerin", + "male": "Produktionsmanager", + }, + { + "neutral": "Produktionstechniker*in", + "female": "Produktionstechnikerin", + "male": "Produktionstechniker", + }, + { + "neutral": "Produktmanager*in", + "female": "Produktmanagerin", + "male": "Produktmanager", + }, {"neutral": "Produzent*in", "female": "Produzentin", "male": "Produzent"}, {"neutral": "Profiler*in", "female": "Profilerin", "male": "Profiler"}, - {"neutral": "Projektassistent*in", "female": "Projektassistentin", "male": "Projektassistent"}, - {"neutral": "Projektleiter*in", "female": "Projektleiterin", "male": "Projektleiter"}, - {"neutral": "Projektmanager*in", "female": "Projektmanagerin", "male": "Projektmanager"}, - {"neutral": "Prosekturgehilfe / Prosekturgehilfin", "female": "Prosekturgehilfin", "male": "Prosekturgehilfe"}, - {"neutral": "Prozessleittechniker*in", "female": "Prozessleittechnikerin", "male": "Prozessleittechniker"}, - {"neutral": "Prozessmanager*in", "female": "Prozessmanagerin", "male": "Prozessmanager"}, - {"neutral": "Prozessplaner*in", "female": "Prozessplanerin", "male": "Prozessplaner"}, - {"neutral": "Prozesstechnik", "female": "Prozesstechnik", "male": "Prozesstechnik"}, - {"neutral": "Prozesstechniker*in", "female": "Prozesstechnikerin", "male": "Prozesstechniker"}, + { + "neutral": "Projektassistent*in", + "female": "Projektassistentin", + "male": "Projektassistent", + }, + { + "neutral": "Projektleiter*in", + "female": "Projektleiterin", + "male": "Projektleiter", + }, + { + "neutral": "Projektmanager*in", + "female": "Projektmanagerin", + "male": "Projektmanager", + }, + { + "neutral": "Prosekturgehilfe / Prosekturgehilfin", + "female": "Prosekturgehilfin", + "male": "Prosekturgehilfe", + }, + { + "neutral": "Prozessleittechniker*in", + "female": "Prozessleittechnikerin", + "male": "Prozessleittechniker", + }, + { + "neutral": "Prozessmanager*in", + "female": "Prozessmanagerin", + "male": "Prozessmanager", + }, + { + "neutral": "Prozessplaner*in", + "female": "Prozessplanerin", + "male": "Prozessplaner", + }, + { + "neutral": "Prozesstechnik", + "female": "Prozesstechnik", + "male": "Prozesstechnik", + }, + { + "neutral": "Prozesstechniker*in", + "female": "Prozesstechnikerin", + "male": "Prozesstechniker", + }, {"neutral": "Präparator*in", "female": "Präparatorin", "male": "Präparator"}, { "neutral": "Präventions- und Rehabilitationstrainer*in", @@ -3837,26 +6973,58 @@ class Provider(BaseProvider): "male": "Präzisionswerkzeugschleiftechnik", }, {"neutral": "Prüftechnik", "female": "Prüftechnik", "male": "Prüftechnik"}, - {"neutral": "Prüftechnik - Baustoffe", "female": "Prüftechnik - Baustoffe", "male": "Prüftechnik - Baustoffe"}, - {"neutral": "Prüftechnik - Physik", "female": "Prüftechnik - Physik", "male": "Prüftechnik - Physik"}, - {"neutral": "Prüftechniker*in", "female": "Prüftechnikerin", "male": "Prüftechniker"}, + { + "neutral": "Prüftechnik - Baustoffe", + "female": "Prüftechnik - Baustoffe", + "male": "Prüftechnik - Baustoffe", + }, + { + "neutral": "Prüftechnik - Physik", + "female": "Prüftechnik - Physik", + "male": "Prüftechnik - Physik", + }, + { + "neutral": "Prüftechniker*in", + "female": "Prüftechnikerin", + "male": "Prüftechniker", + }, { "neutral": "Psychiatrische*r Gesundheits- und Krankenpfleger*in", "female": "Psychiatrische Gesundheits- und Krankenpflegerin", "male": "Psychiatrischer Gesundheits- und Krankenpfleger", }, - {"neutral": "Psychologe / Psychologin", "female": "Psychologin", "male": "Psychologe"}, - {"neutral": "Psychotherapeut*in", "female": "Psychotherapeutin", "male": "Psychotherapeut"}, + { + "neutral": "Psychologe / Psychologin", + "female": "Psychologin", + "male": "Psychologe", + }, + { + "neutral": "Psychotherapeut*in", + "female": "Psychotherapeutin", + "male": "Psychotherapeut", + }, {"neutral": "Publizist*in", "female": "Publizistin", "male": "Publizist"}, - {"neutral": "Pyrotechniker*in", "female": "Pyrotechnikerin", "male": "Pyrotechniker"}, + { + "neutral": "Pyrotechniker*in", + "female": "Pyrotechnikerin", + "male": "Pyrotechniker", + }, {"neutral": "Pädagoge / Pädagogin", "female": "Pädagogin", "male": "Pädagoge"}, { "neutral": "Pädagogischer Assistent / Pädagogische Assistentin (PA)", "female": "Pädagogische Assistentin (PA)", "male": "Pädagogischer Assistent (PA)", }, - {"neutral": "Qi-Gong-Lehrer*in", "female": "Qi-Gong-Lehrerin", "male": "Qi-Gong-Lehrer"}, - {"neutral": "Qualitätsmanager*in", "female": "Qualitätsmanagerin", "male": "Qualitätsmanager"}, + { + "neutral": "Qi-Gong-Lehrer*in", + "female": "Qi-Gong-Lehrerin", + "male": "Qi-Gong-Lehrer", + }, + { + "neutral": "Qualitätsmanager*in", + "female": "Qualitätsmanagerin", + "male": "Qualitätsmanager", + }, { "neutral": "Qualitätssicherungstechniker*in", "female": "Qualitätssicherungstechnikerin", @@ -3867,9 +7035,21 @@ class Provider(BaseProvider): "female": "Qualitätstechnikerin im Fahrzeugbau", "male": "Qualitätstechniker im Fahrzeugbau", }, - {"neutral": "Quantenphysiker*in", "female": "Quantenphysikerin", "male": "Quantenphysiker"}, - {"neutral": "Quantentechniker*in", "female": "Quantentechnikerin", "male": "Quantentechniker"}, - {"neutral": "REFA-Techniker*in", "female": "REFA-Technikerin", "male": "REFA-Techniker"}, + { + "neutral": "Quantenphysiker*in", + "female": "Quantenphysikerin", + "male": "Quantenphysiker", + }, + { + "neutral": "Quantentechniker*in", + "female": "Quantentechnikerin", + "male": "Quantentechniker", + }, + { + "neutral": "REFA-Techniker*in", + "female": "REFA-Technikerin", + "male": "REFA-Techniker", + }, {"neutral": "Rabbiner*in", "female": "Rabbinerin", "male": "Rabbiner"}, { "neutral": "Radio- und Fernsehredakteur*in", @@ -3881,44 +7061,104 @@ class Provider(BaseProvider): "female": "Radiologietechnologin", "male": "Radiologietechnologe", }, - {"neutral": "Radiosprecher*in", "female": "Radiosprecherin", "male": "Radiosprecher"}, + { + "neutral": "Radiosprecher*in", + "female": "Radiosprecherin", + "male": "Radiosprecher", + }, {"neutral": "Ramp Agent", "female": "Ramp Agent", "male": "Ramp Agent"}, - {"neutral": "Rating-Analyst*in", "female": "Rating-Analystin", "male": "Rating-Analyst"}, - {"neutral": "Rauchfangkehrer*in", "female": "Rauchfangkehrerin", "male": "Rauchfangkehrer"}, - {"neutral": "Raumgestalter*in", "female": "Raumgestalterin", "male": "Raumgestalter"}, + { + "neutral": "Rating-Analyst*in", + "female": "Rating-Analystin", + "male": "Rating-Analyst", + }, + { + "neutral": "Rauchfangkehrer*in", + "female": "Rauchfangkehrerin", + "male": "Rauchfangkehrer", + }, + { + "neutral": "Raumgestalter*in", + "female": "Raumgestalterin", + "male": "Raumgestalter", + }, {"neutral": "Raumpfleger*in", "female": "Raumpflegerin", "male": "Raumpfleger"}, {"neutral": "Raumplaner*in", "female": "Raumplanerin", "male": "Raumplaner"}, - {"neutral": "Rauwarenzurichter*in", "female": "Rauwarenzurichterin", "male": "Rauwarenzurichter"}, - {"neutral": "Rechtsanwalt / Rechtsanwältin", "female": "Rechtsanwältin", "male": "Rechtsanwalt"}, + { + "neutral": "Rauwarenzurichter*in", + "female": "Rauwarenzurichterin", + "male": "Rauwarenzurichter", + }, + { + "neutral": "Rechtsanwalt / Rechtsanwältin", + "female": "Rechtsanwältin", + "male": "Rechtsanwalt", + }, { "neutral": "Rechtskanzleiassistent*in", "female": "Rechtskanzleiassistentin", "male": "Rechtskanzleiassistent", }, - {"neutral": "Rechtswissenschafter*in", "female": "Rechtswissenschafterin", "male": "Rechtswissenschafter"}, - {"neutral": "Recording Engineer", "female": "Recording Engineer", "male": "Recording Engineer"}, + { + "neutral": "Rechtswissenschafter*in", + "female": "Rechtswissenschafterin", + "male": "Rechtswissenschafter", + }, + { + "neutral": "Recording Engineer", + "female": "Recording Engineer", + "male": "Recording Engineer", + }, {"neutral": "Recruiter", "female": "Recruiter", "male": "Recruiter"}, - {"neutral": "Recyclingtechniker*in", "female": "Recyclingtechnikerin", "male": "Recyclingtechniker"}, + { + "neutral": "Recyclingtechniker*in", + "female": "Recyclingtechnikerin", + "male": "Recyclingtechniker", + }, {"neutral": "Redakteur*in", "female": "Redakteurin", "male": "Redakteur"}, {"neutral": "Redesigner*in", "female": "Redesignerin", "male": "Redesigner"}, {"neutral": "Referent*in", "female": "Referentin", "male": "Referent"}, - {"neutral": "Regalbetreuer*in", "female": "Regalbetreuerin", "male": "Regalbetreuer"}, + { + "neutral": "Regalbetreuer*in", + "female": "Regalbetreuerin", + "male": "Regalbetreuer", + }, { "neutral": "Regelungs- und Automatisierungstechniker*in", "female": "Regelungs- und Automatisierungstechnikerin", "male": "Regelungs- und Automatisierungstechniker", }, - {"neutral": "Regieassistent*in", "female": "Regieassistentin", "male": "Regieassistent"}, - {"neutral": "Regionalberater*in", "female": "Regionalberaterin", "male": "Regionalberater"}, + { + "neutral": "Regieassistent*in", + "female": "Regieassistentin", + "male": "Regieassistent", + }, + { + "neutral": "Regionalberater*in", + "female": "Regionalberaterin", + "male": "Regionalberater", + }, {"neutral": "Regisseur*in", "female": "Regisseurin", "male": "Regisseur"}, { "neutral": "Reifen- und Vulkanisationstechnik", "female": "Reifen- und Vulkanisationstechnik", "male": "Reifen- und Vulkanisationstechnik", }, - {"neutral": "Reiki-Praktiker*in", "female": "Reiki-Praktikerin", "male": "Reiki-Praktiker"}, - {"neutral": "Reinigungstechnik", "female": "Reinigungstechnik", "male": "Reinigungstechnik"}, - {"neutral": "Reisebüroassistent*in", "female": "Reisebüroassistentin", "male": "Reisebüroassistent"}, + { + "neutral": "Reiki-Praktiker*in", + "female": "Reiki-Praktikerin", + "male": "Reiki-Praktiker", + }, + { + "neutral": "Reinigungstechnik", + "female": "Reinigungstechnik", + "male": "Reinigungstechnik", + }, + { + "neutral": "Reisebüroassistent*in", + "female": "Reisebüroassistentin", + "male": "Reisebüroassistent", + }, {"neutral": "Reiseleiter*in", "female": "Reiseleiterin", "male": "Reiseleiter"}, { "neutral": "Reiseverkehrsfachmann / Reiseverkehrsfachfrau", @@ -3949,28 +7189,68 @@ class Provider(BaseProvider): {"neutral": "Reporter*in", "female": "Reporterin", "male": "Reporter"}, {"neutral": "Reprografie", "female": "Reprografie", "male": "Reprografie"}, {"neutral": "Requisiteur*in", "female": "Requisiteurin", "male": "Requisiteur"}, - {"neutral": "Resilienztrainer*in", "female": "Resilienztrainerin", "male": "Resilienztrainer"}, + { + "neutral": "Resilienztrainer*in", + "female": "Resilienztrainerin", + "male": "Resilienztrainer", + }, { "neutral": "Restaurantfachmann / Restaurantfachfrau", "female": "Restaurantfachfrau", "male": "Restaurantfachmann", }, - {"neutral": "Restaurantmanager*in", "female": "Restaurantmanagerin", "male": "Restaurantmanager"}, + { + "neutral": "Restaurantmanager*in", + "female": "Restaurantmanagerin", + "male": "Restaurantmanager", + }, {"neutral": "Restaurator*in", "female": "Restauratorin", "male": "Restaurator"}, { "neutral": "Restaurator*in (Möbel und Holz)", "female": "Restauratorin (Möbel und Holz)", "male": "Restaurator (Möbel und Holz)", }, - {"neutral": "Retail Manager*in", "female": "Retail Managerin", "male": "Retail Manager"}, - {"neutral": "Rettungsfahrer*in", "female": "Rettungsfahrerin", "male": "Rettungsfahrer"}, - {"neutral": "Rettungssanitäter*in", "female": "Rettungssanitäterin", "male": "Rettungssanitäter"}, - {"neutral": "Rettungstaucher*in", "female": "Rettungstaucherin", "male": "Rettungstaucher"}, - {"neutral": "Revisionsassistent*in", "female": "Revisionsassistentin", "male": "Revisionsassistent"}, - {"neutral": "Rezeptionist*in (Hotel)", "female": "Rezeptionistin (Hotel)", "male": "Rezeptionist (Hotel)"}, - {"neutral": "Rhythmiklehrer*in", "female": "Rhythmiklehrerin", "male": "Rhythmiklehrer"}, + { + "neutral": "Retail Manager*in", + "female": "Retail Managerin", + "male": "Retail Manager", + }, + { + "neutral": "Rettungsfahrer*in", + "female": "Rettungsfahrerin", + "male": "Rettungsfahrer", + }, + { + "neutral": "Rettungssanitäter*in", + "female": "Rettungssanitäterin", + "male": "Rettungssanitäter", + }, + { + "neutral": "Rettungstaucher*in", + "female": "Rettungstaucherin", + "male": "Rettungstaucher", + }, + { + "neutral": "Revisionsassistent*in", + "female": "Revisionsassistentin", + "male": "Revisionsassistent", + }, + { + "neutral": "Rezeptionist*in (Hotel)", + "female": "Rezeptionistin (Hotel)", + "male": "Rezeptionist (Hotel)", + }, + { + "neutral": "Rhythmiklehrer*in", + "female": "Rhythmiklehrerin", + "male": "Rhythmiklehrer", + }, {"neutral": "Richter*in", "female": "Richterin", "male": "Richter"}, - {"neutral": "Risk Manager*in", "female": "Risk Managerin", "male": "Risk Manager"}, + { + "neutral": "Risk Manager*in", + "female": "Risk Managerin", + "male": "Risk Manager", + }, { "neutral": "Risk Manager*in (Credit Risk)", "female": "Risk Managerin (Credit Risk)", @@ -3986,19 +7266,51 @@ class Provider(BaseProvider): "female": "Robotic Systems Engineer", "male": "Robotic Systems Engineer", }, - {"neutral": "Robotiktechniker*in", "female": "Robotiktechnikerin", "male": "Robotiktechniker"}, - {"neutral": "Rohrleitungsmonteur*in", "female": "Rohrleitungsmonteurin", "male": "Rohrleitungsmonteur"}, + { + "neutral": "Robotiktechniker*in", + "female": "Robotiktechnikerin", + "male": "Robotiktechniker", + }, + { + "neutral": "Rohrleitungsmonteur*in", + "female": "Rohrleitungsmonteurin", + "male": "Rohrleitungsmonteur", + }, {"neutral": "Romanist*in", "female": "Romanistin", "male": "Romanist"}, {"neutral": "Rotgerber*in", "female": "Rotgerberin", "male": "Rotgerber"}, - {"neutral": "Röntgenassistent*in", "female": "Röntgenassistentin", "male": "Röntgenassistent"}, + { + "neutral": "Röntgenassistent*in", + "female": "Röntgenassistentin", + "male": "Röntgenassistent", + }, {"neutral": "SAP-Berater*in", "female": "SAP-Beraterin", "male": "SAP-Berater"}, {"neutral": "SEA-Manager*in", "female": "SEA-Managerin", "male": "SEA-Manager"}, {"neutral": "SEO-Expert*in", "female": "SEO-Expertin", "male": "SEO-Expert"}, - {"neutral": "SFX Supervisor", "female": "SFX Supervisor", "male": "SFX Supervisor"}, - {"neutral": "SPS-Techniker*in", "female": "SPS-Technikerin", "male": "SPS-Techniker"}, - {"neutral": "Saatbautechniker*in", "female": "Saatbautechnikerin", "male": "Saatbautechniker"}, - {"neutral": "Saatgutanalytiker*in", "female": "Saatgutanalytikerin", "male": "Saatgutanalytiker"}, - {"neutral": "Sachbearbeiter*in", "female": "Sachbearbeiterin", "male": "Sachbearbeiter"}, + { + "neutral": "SFX Supervisor", + "female": "SFX Supervisor", + "male": "SFX Supervisor", + }, + { + "neutral": "SPS-Techniker*in", + "female": "SPS-Technikerin", + "male": "SPS-Techniker", + }, + { + "neutral": "Saatbautechniker*in", + "female": "Saatbautechnikerin", + "male": "Saatbautechniker", + }, + { + "neutral": "Saatgutanalytiker*in", + "female": "Saatgutanalytikerin", + "male": "Saatgutanalytiker", + }, + { + "neutral": "Sachbearbeiter*in", + "female": "Sachbearbeiterin", + "male": "Sachbearbeiter", + }, { "neutral": "Sachbearbeiter*in (Hoheitsverwaltung)", "female": "Sachbearbeiterin (Hoheitsverwaltung)", @@ -4010,162 +7322,450 @@ class Provider(BaseProvider): "male": "Sachbearbeiter (Landesverwaltung)", }, { - "neutral": "Sachbearbeiter*in (Wirtschaftsverwaltung)", - "female": "Sachbearbeiterin (Wirtschaftsverwaltung)", - "male": "Sachbearbeiter (Wirtschaftsverwaltung)", + "neutral": "Sachbearbeiter*in (Wirtschaftsverwaltung)", + "female": "Sachbearbeiterin (Wirtschaftsverwaltung)", + "male": "Sachbearbeiter (Wirtschaftsverwaltung)", + }, + { + "neutral": "Sachbearbeiter*in (Öffentlicher Baudienst)", + "female": "Sachbearbeiterin (Öffentlicher Baudienst)", + "male": "Sachbearbeiter (Öffentlicher Baudienst)", + }, + {"neutral": "Sachwalter*in", "female": "Sachwalterin", "male": "Sachwalter"}, + { + "neutral": "Sales Manager*in", + "female": "Sales Managerin", + "male": "Sales Manager", + }, + { + "neutral": "Sanitär- und Klimatechnik - Gas- und Wasserinstallation", + "female": "Sanitär- und Klimatechnik - Gas- und Wasserinstallation", + "male": "Sanitär- und Klimatechnik - Gas- und Wasserinstallation", + }, + { + "neutral": "Sanitär- und Klimatechnik - Heizungsinstallation", + "female": "Sanitär- und Klimatechnik - Heizungsinstallation", + "male": "Sanitär- und Klimatechnik - Heizungsinstallation", + }, + { + "neutral": "Sanitär- und Klimatechnik - Lüftungsinstallation", + "female": "Sanitär- und Klimatechnik - Lüftungsinstallation", + "male": "Sanitär- und Klimatechnik - Lüftungsinstallation", + }, + { + "neutral": "Sanitär- und Klimatechnik - Ökoenergieinstallation", + "female": "Sanitär- und Klimatechnik - Ökoenergieinstallation", + "male": "Sanitär- und Klimatechnik - Ökoenergieinstallation", + }, + {"neutral": "Sanitäter*in", "female": "Sanitäterin", "male": "Sanitäter"}, + { + "neutral": "Sanitätsgehilfe / Sanitätsgehilfin", + "female": "Sanitätsgehilfin", + "male": "Sanitätsgehilfe", + }, + { + "neutral": "Sattler*in und Riemer*in", + "female": "Sattlerin und Riemerin", + "male": "Sattler und Riemer", + }, + {"neutral": "Sattlerei", "female": "Sattlerei", "male": "Sattlerei"}, + { + "neutral": "Sattlerei - Fahrzeugsattlerei", + "female": "Sattlerei - Fahrzeugsattlerei", + "male": "Sattlerei - Fahrzeugsattlerei", + }, + { + "neutral": "Sattlerei - Reitsportsattlerei", + "female": "Sattlerei - Reitsportsattlerei", + "male": "Sattlerei - Reitsportsattlerei", + }, + { + "neutral": "Sattlerei - Taschnerei", + "female": "Sattlerei - Taschnerei", + "male": "Sattlerei - Taschnerei", + }, + { + "neutral": "Schadensgutachter*in", + "female": "Schadensgutachterin", + "male": "Schadensgutachter", + }, + {"neutral": "Schaler*in", "female": "Schalerin", "male": "Schaler"}, + { + "neutral": "Schaltungstechniker*in", + "female": "Schaltungstechnikerin", + "male": "Schaltungstechniker", + }, + {"neutral": "Schalungsbau", "female": "Schalungsbau", "male": "Schalungsbau"}, + { + "neutral": "Schaufenstergestalter*in", + "female": "Schaufenstergestalterin", + "male": "Schaufenstergestalter", + }, + { + "neutral": "Schauspieler*in", + "female": "Schauspielerin", + "male": "Schauspieler", + }, + {"neutral": "Schiffbauer*in", "female": "Schiffbauerin", "male": "Schiffbauer"}, + { + "neutral": "Schiffsbautechniker*in", + "female": "Schiffsbautechnikerin", + "male": "Schiffsbautechniker", + }, + { + "neutral": "Schiffskapitän*in", + "female": "Schiffskapitänin", + "male": "Schiffskapitän", + }, + { + "neutral": "Schiffsmaschinist*in", + "female": "Schiffsmaschinistin", + "male": "Schiffsmaschinist", + }, + { + "neutral": "Schiffssteuermann / Schiffssteuerfrau", + "female": "Schiffssteuerfrau", + "male": "Schiffssteuermann", + }, + { + "neutral": "Schilderherstellung", + "female": "Schilderherstellung", + "male": "Schilderherstellung", + }, + {"neutral": "Schilehrer*in", "female": "Schilehrerin", "male": "Schilehrer"}, + { + "neutral": "Schirmmacher*in", + "female": "Schirmmacherin", + "male": "Schirmmacher", + }, + {"neutral": "Schlosser*in", "female": "Schlosserin", "male": "Schlosser"}, + { + "neutral": "Schmerztherapeut*in", + "female": "Schmerztherapeutin", + "male": "Schmerztherapeut", + }, + {"neutral": "Schmied*in", "female": "Schmiedin", "male": "Schmied"}, + { + "neutral": "Schmuckdesigner*in", + "female": "Schmuckdesignerin", + "male": "Schmuckdesigner", + }, + {"neutral": "Schneider*in", "female": "Schneiderin", "male": "Schneider"}, + { + "neutral": "Schornsteinfeger*in", + "female": "Schornsteinfegerin", + "male": "Schornsteinfeger", + }, + {"neutral": "Schreiner*in", "female": "Schreinerin", "male": "Schreiner"}, + { + "neutral": "Schriftdesigner*in", + "female": "Schriftdesignerin", + "male": "Schriftdesigner", + }, + { + "neutral": "Schriftsteller*in", + "female": "Schriftstellerin", + "male": "Schriftsteller", + }, + { + "neutral": "Schrotthändler*in", + "female": "Schrotthändlerin", + "male": "Schrotthändler", + }, + { + "neutral": "Schuharbeiter*in", + "female": "Schuharbeiterin", + "male": "Schuharbeiter", + }, + { + "neutral": "Schuhfertigung", + "female": "Schuhfertigung", + "male": "Schuhfertigung", + }, + {"neutral": "Schuhmacher*in", "female": "Schuhmacherin", "male": "Schuhmacher"}, + { + "neutral": "Schuldnerberater*in", + "female": "Schuldnerberaterin", + "male": "Schuldnerberater", + }, + { + "neutral": "Schulpsychologe / Schulpsychologin", + "female": "Schulpsychologin", + "male": "Schulpsychologe", + }, + { + "neutral": "Schulsozialarbeiter*in", + "female": "Schulsozialarbeiterin", + "male": "Schulsozialarbeiter", + }, + {"neutral": "Schulwart*in", "female": "Schulwartin", "male": "Schulwart"}, + {"neutral": "Schuster*in", "female": "Schusterin", "male": "Schuster"}, + { + "neutral": "Schwarzdecker*in", + "female": "Schwarzdeckerin", + "male": "Schwarzdecker", + }, + {"neutral": "Schweißer*in", "female": "Schweißerin", "male": "Schweißer"}, + { + "neutral": "Schwimmlehrer*in", + "female": "Schwimmlehrerin", + "male": "Schwimmlehrer", + }, + { + "neutral": "Schädlingsbekämpfer*in", + "female": "Schädlingsbekämpferin", + "male": "Schädlingsbekämpfer", + }, + { + "neutral": "Schätzmeister*in", + "female": "Schätzmeisterin", + "male": "Schätzmeister", + }, + { + "neutral": "Schönheitspfleger*in", + "female": "Schönheitspflegerin", + "male": "Schönheitspfleger", + }, + { + "neutral": "Screen-Designer*in", + "female": "Screen-Designerin", + "male": "Screen-Designer", + }, + {"neutral": "Segellehrer*in", "female": "Segellehrerin", "male": "Segellehrer"}, + {"neutral": "Segelmacher*in", "female": "Segelmacherin", "male": "Segelmacher"}, + { + "neutral": "Seilbahntechnik", + "female": "Seilbahntechnik", + "male": "Seilbahntechnik", + }, + {"neutral": "Seiler*in", "female": "Seilerin", "male": "Seiler"}, + {"neutral": "Sekretär*in", "female": "Sekretärin", "male": "Sekretär"}, + { + "neutral": "Senior Lecturer", + "female": "Senior Lecturer", + "male": "Senior Lecturer", + }, + { + "neutral": "Senior Scientist", + "female": "Senior Scientist", + "male": "Senior Scientist", + }, + { + "neutral": "Seniorenbetreuer*in", + "female": "Seniorenbetreuerin", + "male": "Seniorenbetreuer", + }, + {"neutral": "Senn / Sennerin", "female": "Sennerin", "male": "Senn"}, + {"neutral": "Sensal*in", "female": "Sensalin", "male": "Sensal"}, + { + "neutral": "Sensortechniker*in", + "female": "Sensortechnikerin", + "male": "Sensortechniker", + }, + { + "neutral": "Servicetechniker*in", + "female": "Servicetechnikerin", + "male": "Servicetechniker", + }, + {"neutral": "Servierkraft", "female": "Servierkraft", "male": "Servierkraft"}, + { + "neutral": "Set Designer*in", + "female": "Set Designerin", + "male": "Set Designer", + }, + { + "neutral": "Sexualpädagoge / Sexualpädagogin", + "female": "Sexualpädagogin", + "male": "Sexualpädagoge", + }, + {"neutral": "Shaper", "female": "Shaper", "male": "Shaper"}, + { + "neutral": "Shiatsu-Praktiker*in", + "female": "Shiatsu-Praktikerin", + "male": "Shiatsu-Praktiker", + }, + { + "neutral": "Shop-Betreuer*in", + "female": "Shop-Betreuerin", + "male": "Shop-Betreuer", + }, + { + "neutral": "Sicherheitsfachkraft", + "female": "Sicherheitsfachkraft", + "male": "Sicherheitsfachkraft", + }, + {"neutral": "Siebdrucker*in", "female": "Siebdruckerin", "male": "Siebdrucker"}, + { + "neutral": "Signaltechniker*in", + "female": "Signaltechnikerin", + "male": "Signaltechniker", + }, + { + "neutral": "Single-Berater*in", + "female": "Single-Beraterin", + "male": "Single-Berater", + }, + {"neutral": "Sinologe / Sinologin", "female": "Sinologin", "male": "Sinologe"}, + { + "neutral": "Skibautechnik", + "female": "Skibautechnik", + "male": "Skibautechnik", + }, + {"neutral": "Skierzeuger*in", "female": "Skierzeugerin", "male": "Skierzeuger"}, + { + "neutral": "Skript Consultant", + "female": "Skript Consultant", + "male": "Skript Consultant", + }, + {"neutral": "Slawist*in", "female": "Slawistin", "male": "Slawist"}, + { + "neutral": "Snowboardlehrer*in", + "female": "Snowboardlehrerin", + "male": "Snowboardlehrer", + }, + { + "neutral": "Social Media Experte / Social Media Expertin", + "female": "Social Media Expertin", + "male": "Social Media Experte", + }, + { + "neutral": "Sodawassererzeuger*in", + "female": "Sodawassererzeugerin", + "male": "Sodawassererzeuger", + }, + { + "neutral": "Software Developer", + "female": "Software Developer", + "male": "Software Developer", + }, + { + "neutral": "Software Engineer", + "female": "Software Engineer", + "male": "Software Engineer", + }, + { + "neutral": "Software-Consultant", + "female": "Software-Consultant", + "male": "Software-Consultant", + }, + { + "neutral": "Softwarearchitekt*in", + "female": "Softwarearchitektin", + "male": "Softwarearchitekt", + }, + { + "neutral": "Softwarebetreuer*in", + "female": "Softwarebetreuerin", + "male": "Softwarebetreuer", + }, + { + "neutral": "Softwaredesigner*in", + "female": "Softwaredesignerin", + "male": "Softwaredesigner", + }, + { + "neutral": "Softwareentwickler*in", + "female": "Softwareentwicklerin", + "male": "Softwareentwickler", + }, + { + "neutral": "Softwareingenieur*in", + "female": "Softwareingenieurin", + "male": "Softwareingenieur", + }, + { + "neutral": "Softwarelektor*in", + "female": "Softwarelektorin", + "male": "Softwarelektor", + }, + { + "neutral": "Softwareprogrammierer*in", + "female": "Softwareprogrammiererin", + "male": "Softwareprogrammierer", + }, + { + "neutral": "Softwaretechniker*in", + "female": "Softwaretechnikerin", + "male": "Softwaretechniker", + }, + { + "neutral": "Softwaretester*in", + "female": "Softwaretesterin", + "male": "Softwaretester", + }, + { + "neutral": "Solartechniker*in", + "female": "Solartechnikerin", + "male": "Solartechniker", + }, + {"neutral": "Solosänger*in", "female": "Solosängerin", "male": "Solosänger"}, + { + "neutral": "Sommelier / Sommelière", + "female": "Sommelière", + "male": "Sommelier", + }, + { + "neutral": "Sonderpädagoge / Sonderpädagogin", + "female": "Sonderpädagogin", + "male": "Sonderpädagoge", }, + {"neutral": "Songwriter", "female": "Songwriter", "male": "Songwriter"}, { - "neutral": "Sachbearbeiter*in (Öffentlicher Baudienst)", - "female": "Sachbearbeiterin (Öffentlicher Baudienst)", - "male": "Sachbearbeiter (Öffentlicher Baudienst)", + "neutral": "Sonnenschutztechnik", + "female": "Sonnenschutztechnik", + "male": "Sonnenschutztechnik", }, - {"neutral": "Sachwalter*in", "female": "Sachwalterin", "male": "Sachwalter"}, - {"neutral": "Sales Manager*in", "female": "Sales Managerin", "male": "Sales Manager"}, { - "neutral": "Sanitär- und Klimatechnik - Gas- und Wasserinstallation", - "female": "Sanitär- und Klimatechnik - Gas- und Wasserinstallation", - "male": "Sanitär- und Klimatechnik - Gas- und Wasserinstallation", + "neutral": "Sortimentsmanager*in", + "female": "Sortimentsmanagerin", + "male": "Sortimentsmanager", }, { - "neutral": "Sanitär- und Klimatechnik - Heizungsinstallation", - "female": "Sanitär- und Klimatechnik - Heizungsinstallation", - "male": "Sanitär- und Klimatechnik - Heizungsinstallation", + "neutral": "Souffleur / Souffleuse", + "female": "Souffleuse", + "male": "Souffleur", }, { - "neutral": "Sanitär- und Klimatechnik - Lüftungsinstallation", - "female": "Sanitär- und Klimatechnik - Lüftungsinstallation", - "male": "Sanitär- und Klimatechnik - Lüftungsinstallation", + "neutral": "Sound Designer*in", + "female": "Sound Designerin", + "male": "Sound Designer", }, { - "neutral": "Sanitär- und Klimatechnik - Ökoenergieinstallation", - "female": "Sanitär- und Klimatechnik - Ökoenergieinstallation", - "male": "Sanitär- und Klimatechnik - Ökoenergieinstallation", + "neutral": "Sozial- und Wirtschaftsstatistiker*in", + "female": "Sozial- und Wirtschaftsstatistikerin", + "male": "Sozial- und Wirtschaftsstatistiker", }, - {"neutral": "Sanitäter*in", "female": "Sanitäterin", "male": "Sanitäter"}, - {"neutral": "Sanitätsgehilfe / Sanitätsgehilfin", "female": "Sanitätsgehilfin", "male": "Sanitätsgehilfe"}, - {"neutral": "Sattler*in und Riemer*in", "female": "Sattlerin und Riemerin", "male": "Sattler und Riemer"}, - {"neutral": "Sattlerei", "female": "Sattlerei", "male": "Sattlerei"}, { - "neutral": "Sattlerei - Fahrzeugsattlerei", - "female": "Sattlerei - Fahrzeugsattlerei", - "male": "Sattlerei - Fahrzeugsattlerei", + "neutral": "Sozialarbeiter*in", + "female": "Sozialarbeiterin", + "male": "Sozialarbeiter", }, { - "neutral": "Sattlerei - Reitsportsattlerei", - "female": "Sattlerei - Reitsportsattlerei", - "male": "Sattlerei - Reitsportsattlerei", + "neutral": "Sozialforscher*in", + "female": "Sozialforscherin", + "male": "Sozialforscher", }, - {"neutral": "Sattlerei - Taschnerei", "female": "Sattlerei - Taschnerei", "male": "Sattlerei - Taschnerei"}, - {"neutral": "Schadensgutachter*in", "female": "Schadensgutachterin", "male": "Schadensgutachter"}, - {"neutral": "Schaler*in", "female": "Schalerin", "male": "Schaler"}, - {"neutral": "Schaltungstechniker*in", "female": "Schaltungstechnikerin", "male": "Schaltungstechniker"}, - {"neutral": "Schalungsbau", "female": "Schalungsbau", "male": "Schalungsbau"}, - {"neutral": "Schaufenstergestalter*in", "female": "Schaufenstergestalterin", "male": "Schaufenstergestalter"}, - {"neutral": "Schauspieler*in", "female": "Schauspielerin", "male": "Schauspieler"}, - {"neutral": "Schiffbauer*in", "female": "Schiffbauerin", "male": "Schiffbauer"}, - {"neutral": "Schiffsbautechniker*in", "female": "Schiffsbautechnikerin", "male": "Schiffsbautechniker"}, - {"neutral": "Schiffskapitän*in", "female": "Schiffskapitänin", "male": "Schiffskapitän"}, - {"neutral": "Schiffsmaschinist*in", "female": "Schiffsmaschinistin", "male": "Schiffsmaschinist"}, { - "neutral": "Schiffssteuermann / Schiffssteuerfrau", - "female": "Schiffssteuerfrau", - "male": "Schiffssteuermann", + "neutral": "Sozialhelfer*in", + "female": "Sozialhelferin", + "male": "Sozialhelfer", }, - {"neutral": "Schilderherstellung", "female": "Schilderherstellung", "male": "Schilderherstellung"}, - {"neutral": "Schilehrer*in", "female": "Schilehrerin", "male": "Schilehrer"}, - {"neutral": "Schirmmacher*in", "female": "Schirmmacherin", "male": "Schirmmacher"}, - {"neutral": "Schlosser*in", "female": "Schlosserin", "male": "Schlosser"}, - {"neutral": "Schmerztherapeut*in", "female": "Schmerztherapeutin", "male": "Schmerztherapeut"}, - {"neutral": "Schmied*in", "female": "Schmiedin", "male": "Schmied"}, - {"neutral": "Schmuckdesigner*in", "female": "Schmuckdesignerin", "male": "Schmuckdesigner"}, - {"neutral": "Schneider*in", "female": "Schneiderin", "male": "Schneider"}, - {"neutral": "Schornsteinfeger*in", "female": "Schornsteinfegerin", "male": "Schornsteinfeger"}, - {"neutral": "Schreiner*in", "female": "Schreinerin", "male": "Schreiner"}, - {"neutral": "Schriftdesigner*in", "female": "Schriftdesignerin", "male": "Schriftdesigner"}, - {"neutral": "Schriftsteller*in", "female": "Schriftstellerin", "male": "Schriftsteller"}, - {"neutral": "Schrotthändler*in", "female": "Schrotthändlerin", "male": "Schrotthändler"}, - {"neutral": "Schuharbeiter*in", "female": "Schuharbeiterin", "male": "Schuharbeiter"}, - {"neutral": "Schuhfertigung", "female": "Schuhfertigung", "male": "Schuhfertigung"}, - {"neutral": "Schuhmacher*in", "female": "Schuhmacherin", "male": "Schuhmacher"}, - {"neutral": "Schuldnerberater*in", "female": "Schuldnerberaterin", "male": "Schuldnerberater"}, - {"neutral": "Schulpsychologe / Schulpsychologin", "female": "Schulpsychologin", "male": "Schulpsychologe"}, - {"neutral": "Schulsozialarbeiter*in", "female": "Schulsozialarbeiterin", "male": "Schulsozialarbeiter"}, - {"neutral": "Schulwart*in", "female": "Schulwartin", "male": "Schulwart"}, - {"neutral": "Schuster*in", "female": "Schusterin", "male": "Schuster"}, - {"neutral": "Schwarzdecker*in", "female": "Schwarzdeckerin", "male": "Schwarzdecker"}, - {"neutral": "Schweißer*in", "female": "Schweißerin", "male": "Schweißer"}, - {"neutral": "Schwimmlehrer*in", "female": "Schwimmlehrerin", "male": "Schwimmlehrer"}, - {"neutral": "Schädlingsbekämpfer*in", "female": "Schädlingsbekämpferin", "male": "Schädlingsbekämpfer"}, - {"neutral": "Schätzmeister*in", "female": "Schätzmeisterin", "male": "Schätzmeister"}, - {"neutral": "Schönheitspfleger*in", "female": "Schönheitspflegerin", "male": "Schönheitspfleger"}, - {"neutral": "Screen-Designer*in", "female": "Screen-Designerin", "male": "Screen-Designer"}, - {"neutral": "Segellehrer*in", "female": "Segellehrerin", "male": "Segellehrer"}, - {"neutral": "Segelmacher*in", "female": "Segelmacherin", "male": "Segelmacher"}, - {"neutral": "Seilbahntechnik", "female": "Seilbahntechnik", "male": "Seilbahntechnik"}, - {"neutral": "Seiler*in", "female": "Seilerin", "male": "Seiler"}, - {"neutral": "Sekretär*in", "female": "Sekretärin", "male": "Sekretär"}, - {"neutral": "Senior Lecturer", "female": "Senior Lecturer", "male": "Senior Lecturer"}, - {"neutral": "Senior Scientist", "female": "Senior Scientist", "male": "Senior Scientist"}, - {"neutral": "Seniorenbetreuer*in", "female": "Seniorenbetreuerin", "male": "Seniorenbetreuer"}, - {"neutral": "Senn / Sennerin", "female": "Sennerin", "male": "Senn"}, - {"neutral": "Sensal*in", "female": "Sensalin", "male": "Sensal"}, - {"neutral": "Sensortechniker*in", "female": "Sensortechnikerin", "male": "Sensortechniker"}, - {"neutral": "Servicetechniker*in", "female": "Servicetechnikerin", "male": "Servicetechniker"}, - {"neutral": "Servierkraft", "female": "Servierkraft", "male": "Servierkraft"}, - {"neutral": "Set Designer*in", "female": "Set Designerin", "male": "Set Designer"}, - {"neutral": "Sexualpädagoge / Sexualpädagogin", "female": "Sexualpädagogin", "male": "Sexualpädagoge"}, - {"neutral": "Shaper", "female": "Shaper", "male": "Shaper"}, - {"neutral": "Shiatsu-Praktiker*in", "female": "Shiatsu-Praktikerin", "male": "Shiatsu-Praktiker"}, - {"neutral": "Shop-Betreuer*in", "female": "Shop-Betreuerin", "male": "Shop-Betreuer"}, - {"neutral": "Sicherheitsfachkraft", "female": "Sicherheitsfachkraft", "male": "Sicherheitsfachkraft"}, - {"neutral": "Siebdrucker*in", "female": "Siebdruckerin", "male": "Siebdrucker"}, - {"neutral": "Signaltechniker*in", "female": "Signaltechnikerin", "male": "Signaltechniker"}, - {"neutral": "Single-Berater*in", "female": "Single-Beraterin", "male": "Single-Berater"}, - {"neutral": "Sinologe / Sinologin", "female": "Sinologin", "male": "Sinologe"}, - {"neutral": "Skibautechnik", "female": "Skibautechnik", "male": "Skibautechnik"}, - {"neutral": "Skierzeuger*in", "female": "Skierzeugerin", "male": "Skierzeuger"}, - {"neutral": "Skript Consultant", "female": "Skript Consultant", "male": "Skript Consultant"}, - {"neutral": "Slawist*in", "female": "Slawistin", "male": "Slawist"}, - {"neutral": "Snowboardlehrer*in", "female": "Snowboardlehrerin", "male": "Snowboardlehrer"}, { - "neutral": "Social Media Experte / Social Media Expertin", - "female": "Social Media Expertin", - "male": "Social Media Experte", + "neutral": "Sozialmanager*in", + "female": "Sozialmanagerin", + "male": "Sozialmanager", }, - {"neutral": "Sodawassererzeuger*in", "female": "Sodawassererzeugerin", "male": "Sodawassererzeuger"}, - {"neutral": "Software Developer", "female": "Software Developer", "male": "Software Developer"}, - {"neutral": "Software Engineer", "female": "Software Engineer", "male": "Software Engineer"}, - {"neutral": "Software-Consultant", "female": "Software-Consultant", "male": "Software-Consultant"}, - {"neutral": "Softwarearchitekt*in", "female": "Softwarearchitektin", "male": "Softwarearchitekt"}, - {"neutral": "Softwarebetreuer*in", "female": "Softwarebetreuerin", "male": "Softwarebetreuer"}, - {"neutral": "Softwaredesigner*in", "female": "Softwaredesignerin", "male": "Softwaredesigner"}, - {"neutral": "Softwareentwickler*in", "female": "Softwareentwicklerin", "male": "Softwareentwickler"}, - {"neutral": "Softwareingenieur*in", "female": "Softwareingenieurin", "male": "Softwareingenieur"}, - {"neutral": "Softwarelektor*in", "female": "Softwarelektorin", "male": "Softwarelektor"}, - {"neutral": "Softwareprogrammierer*in", "female": "Softwareprogrammiererin", "male": "Softwareprogrammierer"}, - {"neutral": "Softwaretechniker*in", "female": "Softwaretechnikerin", "male": "Softwaretechniker"}, - {"neutral": "Softwaretester*in", "female": "Softwaretesterin", "male": "Softwaretester"}, - {"neutral": "Solartechniker*in", "female": "Solartechnikerin", "male": "Solartechniker"}, - {"neutral": "Solosänger*in", "female": "Solosängerin", "male": "Solosänger"}, - {"neutral": "Sommelier / Sommelière", "female": "Sommelière", "male": "Sommelier"}, - {"neutral": "Sonderpädagoge / Sonderpädagogin", "female": "Sonderpädagogin", "male": "Sonderpädagoge"}, - {"neutral": "Songwriter", "female": "Songwriter", "male": "Songwriter"}, - {"neutral": "Sonnenschutztechnik", "female": "Sonnenschutztechnik", "male": "Sonnenschutztechnik"}, - {"neutral": "Sortimentsmanager*in", "female": "Sortimentsmanagerin", "male": "Sortimentsmanager"}, - {"neutral": "Souffleur / Souffleuse", "female": "Souffleuse", "male": "Souffleur"}, - {"neutral": "Sound Designer*in", "female": "Sound Designerin", "male": "Sound Designer"}, { - "neutral": "Sozial- und Wirtschaftsstatistiker*in", - "female": "Sozial- und Wirtschaftsstatistikerin", - "male": "Sozial- und Wirtschaftsstatistiker", + "neutral": "Sozialpädagoge / Sozialpädagogin", + "female": "Sozialpädagogin", + "male": "Sozialpädagoge", }, - {"neutral": "Sozialarbeiter*in", "female": "Sozialarbeiterin", "male": "Sozialarbeiter"}, - {"neutral": "Sozialforscher*in", "female": "Sozialforscherin", "male": "Sozialforscher"}, - {"neutral": "Sozialhelfer*in", "female": "Sozialhelferin", "male": "Sozialhelfer"}, - {"neutral": "Sozialmanager*in", "female": "Sozialmanagerin", "male": "Sozialmanager"}, - {"neutral": "Sozialpädagoge / Sozialpädagogin", "female": "Sozialpädagogin", "male": "Sozialpädagoge"}, {"neutral": "Sozialwirt*in", "female": "Sozialwirtin", "male": "Sozialwirt"}, - {"neutral": "Soziologe / Soziologin", "female": "Soziologin", "male": "Soziologe"}, + { + "neutral": "Soziologe / Soziologin", + "female": "Soziologin", + "male": "Soziologe", + }, {"neutral": "Speaker", "female": "Speaker", "male": "Speaker"}, {"neutral": "Spediteur*in", "female": "Spediteurin", "male": "Spediteur"}, { @@ -4173,45 +7773,133 @@ class Provider(BaseProvider): "female": "Speditionskauffrau", "male": "Speditionskaufmann", }, - {"neutral": "Speditionslogistik", "female": "Speditionslogistik", "male": "Speditionslogistik"}, - {"neutral": "Speiseeiserzeuger*in", "female": "Speiseeiserzeugerin", "male": "Speiseeiserzeuger"}, + { + "neutral": "Speditionslogistik", + "female": "Speditionslogistik", + "male": "Speditionslogistik", + }, + { + "neutral": "Speiseeiserzeuger*in", + "female": "Speiseeiserzeugerin", + "male": "Speiseeiserzeuger", + }, {"neutral": "Spengler*in", "female": "Spenglerin", "male": "Spengler"}, - {"neutral": "Sportadministration", "female": "Sportadministration", "male": "Sportadministration"}, - {"neutral": "Sportgerätefachkraft", "female": "Sportgerätefachkraft", "male": "Sportgerätefachkraft"}, + { + "neutral": "Sportadministration", + "female": "Sportadministration", + "male": "Sportadministration", + }, + { + "neutral": "Sportgerätefachkraft", + "female": "Sportgerätefachkraft", + "male": "Sportgerätefachkraft", + }, { "neutral": "Sportgerätehersteller*in und Sportgerätemonteur*in", "female": "Sportgeräteherstellerin und Sportgerätemonteurin", "male": "Sportgerätehersteller und Sportgerätemonteur", }, - {"neutral": "Sportgerätetechniker*in", "female": "Sportgerätetechnikerin", "male": "Sportgerätetechniker"}, + { + "neutral": "Sportgerätetechniker*in", + "female": "Sportgerätetechnikerin", + "male": "Sportgerätetechniker", + }, {"neutral": "Sportlehrer*in", "female": "Sportlehrerin", "male": "Sportlehrer"}, - {"neutral": "Sportmanager*in", "female": "Sportmanagerin", "male": "Sportmanager"}, - {"neutral": "Sporttechnologe / Sporttechnologin", "female": "Sporttechnologin", "male": "Sporttechnologe"}, - {"neutral": "Sporttherapeut*in", "female": "Sporttherapeutin", "male": "Sporttherapeut"}, - {"neutral": "Sportwissenschafter*in", "female": "Sportwissenschafterin", "male": "Sportwissenschafter"}, - {"neutral": "Sprachlehrer*in", "female": "Sprachlehrerin", "male": "Sprachlehrer"}, - {"neutral": "Sprachwissenschafter*in", "female": "Sprachwissenschafterin", "male": "Sprachwissenschafter"}, + { + "neutral": "Sportmanager*in", + "female": "Sportmanagerin", + "male": "Sportmanager", + }, + { + "neutral": "Sporttechnologe / Sporttechnologin", + "female": "Sporttechnologin", + "male": "Sporttechnologe", + }, + { + "neutral": "Sporttherapeut*in", + "female": "Sporttherapeutin", + "male": "Sporttherapeut", + }, + { + "neutral": "Sportwissenschafter*in", + "female": "Sportwissenschafterin", + "male": "Sportwissenschafter", + }, + { + "neutral": "Sprachlehrer*in", + "female": "Sprachlehrerin", + "male": "Sprachlehrer", + }, + { + "neutral": "Sprachwissenschafter*in", + "female": "Sprachwissenschafterin", + "male": "Sprachwissenschafter", + }, {"neutral": "Sprecher*in", "female": "Sprecherin", "male": "Sprecher"}, - {"neutral": "Sprengbefugte*r", "female": "Sprengbefugte", "male": "Sprengbefugter"}, - {"neutral": "Staatsanwalt / Staatsanwältin", "female": "Staatsanwältin", "male": "Staatsanwalt"}, + { + "neutral": "Sprengbefugte*r", + "female": "Sprengbefugte", + "male": "Sprengbefugter", + }, + { + "neutral": "Staatsanwalt / Staatsanwältin", + "female": "Staatsanwältin", + "male": "Staatsanwalt", + }, { "neutral": "Stadt- und Regionalplaner*in", "female": "Stadt- und Regionalplanerin", "male": "Stadt- und Regionalplaner", }, - {"neutral": "Stahlbauschlosser*in", "female": "Stahlbauschlosserin", "male": "Stahlbauschlosser"}, - {"neutral": "Standesbeamter / Standesbeamtin", "female": "Standesbeamtin", "male": "Standesbeamter"}, - {"neutral": "Staplerfahrer*in", "female": "Staplerfahrerin", "male": "Staplerfahrer"}, - {"neutral": "Starkstrommonteur*in", "female": "Starkstrommonteurin", "male": "Starkstrommonteur"}, - {"neutral": "Starkstromtechniker*in", "female": "Starkstromtechnikerin", "male": "Starkstromtechniker"}, + { + "neutral": "Stahlbauschlosser*in", + "female": "Stahlbauschlosserin", + "male": "Stahlbauschlosser", + }, + { + "neutral": "Standesbeamter / Standesbeamtin", + "female": "Standesbeamtin", + "male": "Standesbeamter", + }, + { + "neutral": "Staplerfahrer*in", + "female": "Staplerfahrerin", + "male": "Staplerfahrer", + }, + { + "neutral": "Starkstrommonteur*in", + "female": "Starkstrommonteurin", + "male": "Starkstrommonteur", + }, + { + "neutral": "Starkstromtechniker*in", + "female": "Starkstromtechnikerin", + "male": "Starkstromtechniker", + }, {"neutral": "Statiker*in", "female": "Statikerin", "male": "Statiker"}, - {"neutral": "Stationsassistent*in", "female": "Stationsassistentin", "male": "Stationsassistent"}, + { + "neutral": "Stationsassistent*in", + "female": "Stationsassistentin", + "male": "Stationsassistent", + }, {"neutral": "Statist*in", "female": "Statistin", "male": "Statist"}, {"neutral": "Statistiker*in", "female": "Statistikerin", "male": "Statistiker"}, - {"neutral": "Steingutdesigner*in", "female": "Steingutdesignerin", "male": "Steingutdesigner"}, + { + "neutral": "Steingutdesigner*in", + "female": "Steingutdesignerin", + "male": "Steingutdesigner", + }, {"neutral": "Steinmetz*in", "female": "Steinmetzin", "male": "Steinmetz"}, - {"neutral": "Steinmetztechnik", "female": "Steinmetztechnik", "male": "Steinmetztechnik"}, - {"neutral": "Stellwerksmitarbeiter*in", "female": "Stellwerksmitarbeiterin", "male": "Stellwerksmitarbeiter"}, + { + "neutral": "Steinmetztechnik", + "female": "Steinmetztechnik", + "male": "Steinmetztechnik", + }, + { + "neutral": "Stellwerksmitarbeiter*in", + "female": "Stellwerksmitarbeiterin", + "male": "Stellwerksmitarbeiter", + }, { "neutral": "Stempelerzeuger*in und Flexograf*in", "female": "Stempelerzeugerin und Flexografin", @@ -4227,27 +7915,67 @@ class Provider(BaseProvider): "female": "Steuer- und Wirtschaftsprüferin", "male": "Steuer- und Wirtschaftsprüfer", }, - {"neutral": "Steuerassistenz", "female": "Steuerassistenz", "male": "Steuerassistenz"}, - {"neutral": "Steuerberater*in", "female": "Steuerberaterin", "male": "Steuerberater"}, + { + "neutral": "Steuerassistenz", + "female": "Steuerassistenz", + "male": "Steuerassistenz", + }, + { + "neutral": "Steuerberater*in", + "female": "Steuerberaterin", + "male": "Steuerberater", + }, { "neutral": "Steuerungs- und Regelungstechniker*in", "female": "Steuerungs- und Regelungstechnikerin", "male": "Steuerungs- und Regelungstechniker", }, {"neutral": "Stewardess / Steward", "female": "Stewardess", "male": "Steward"}, - {"neutral": "Stickereizeichner*in", "female": "Stickereizeichnerin", "male": "Stickereizeichner"}, - {"neutral": "Stoffdrucker*in", "female": "Stoffdruckerin", "male": "Stoffdrucker"}, - {"neutral": "Straßenbahnfahrer*in", "female": "Straßenbahnfahrerin", "male": "Straßenbahnfahrer"}, - {"neutral": "Straßenbauarbeiter*in", "female": "Straßenbauarbeiterin", "male": "Straßenbauarbeiter"}, + { + "neutral": "Stickereizeichner*in", + "female": "Stickereizeichnerin", + "male": "Stickereizeichner", + }, + { + "neutral": "Stoffdrucker*in", + "female": "Stoffdruckerin", + "male": "Stoffdrucker", + }, + { + "neutral": "Straßenbahnfahrer*in", + "female": "Straßenbahnfahrerin", + "male": "Straßenbahnfahrer", + }, + { + "neutral": "Straßenbauarbeiter*in", + "female": "Straßenbauarbeiterin", + "male": "Straßenbauarbeiter", + }, { "neutral": "Straßenerhaltungsfachmann / Straßenerhaltungsfachfrau", "female": "Straßenerhaltungsfachfrau", "male": "Straßenerhaltungsfachmann", }, - {"neutral": "Straßenplaner*in", "female": "Straßenplanerin", "male": "Straßenplaner"}, - {"neutral": "Straßenreiniger*in", "female": "Straßenreinigerin", "male": "Straßenreiniger"}, - {"neutral": "Straßenwärter*in", "female": "Straßenwärterin", "male": "Straßenwärter"}, - {"neutral": "Streetworker*in", "female": "Streetworkerin", "male": "Streetworker"}, + { + "neutral": "Straßenplaner*in", + "female": "Straßenplanerin", + "male": "Straßenplaner", + }, + { + "neutral": "Straßenreiniger*in", + "female": "Straßenreinigerin", + "male": "Straßenreiniger", + }, + { + "neutral": "Straßenwärter*in", + "female": "Straßenwärterin", + "male": "Straßenwärter", + }, + { + "neutral": "Streetworker*in", + "female": "Streetworkerin", + "male": "Streetworker", + }, { "neutral": "Streich- und Saiteninstrumentenbau", "female": "Streich- und Saiteninstrumentenbau", @@ -4273,27 +8001,59 @@ class Provider(BaseProvider): "female": "Strickmaschineneinrichterin", "male": "Strickmaschineneinrichter", }, - {"neutral": "Strickwarenerzeuger*in", "female": "Strickwarenerzeugerin", "male": "Strickwarenerzeuger"}, + { + "neutral": "Strickwarenerzeuger*in", + "female": "Strickwarenerzeugerin", + "male": "Strickwarenerzeuger", + }, { "neutral": "Stuckateur*in und Trockenausbauer*in", "female": "Stuckateurin und Trockenausbauerin", "male": "Stuckateur und Trockenausbauer", }, - {"neutral": "Studiotechniker*in", "female": "Studiotechnikerin", "male": "Studiotechniker"}, - {"neutral": "Stuntman / Stuntwoman", "female": "Stuntwoman", "male": "Stuntman"}, + { + "neutral": "Studiotechniker*in", + "female": "Studiotechnikerin", + "male": "Studiotechniker", + }, + { + "neutral": "Stuntman / Stuntwoman", + "female": "Stuntwoman", + "male": "Stuntman", + }, {"neutral": "Stylist*in", "female": "Stylistin", "male": "Stylist"}, { "neutral": "Städteplaner*in - Smart City & E-Mobility", "female": "Städteplanerin - Smart City & E-Mobility", "male": "Städteplaner - Smart City & E-Mobility", }, - {"neutral": "Suchtberater*in", "female": "Suchtberaterin", "male": "Suchtberater"}, + { + "neutral": "Suchtberater*in", + "female": "Suchtberaterin", + "male": "Suchtberater", + }, {"neutral": "Supervisor*in", "female": "Supervisorin", "male": "Supervisor"}, - {"neutral": "Supply Chain Manager*in", "female": "Supply Chain Managerin", "male": "Supply Chain Manager"}, + { + "neutral": "Supply Chain Manager*in", + "female": "Supply Chain Managerin", + "male": "Supply Chain Manager", + }, {"neutral": "Surflehrer*in", "female": "Surflehrerin", "male": "Surflehrer"}, - {"neutral": "Synchronsprecher*in", "female": "Synchronsprecherin", "male": "Synchronsprecher"}, - {"neutral": "Systemadministrator*in", "female": "Systemadministratorin", "male": "Systemadministrator"}, - {"neutral": "Systemanalytiker*in", "female": "Systemanalytikerin", "male": "Systemanalytiker"}, + { + "neutral": "Synchronsprecher*in", + "female": "Synchronsprecherin", + "male": "Synchronsprecher", + }, + { + "neutral": "Systemadministrator*in", + "female": "Systemadministratorin", + "male": "Systemadministrator", + }, + { + "neutral": "Systemanalytiker*in", + "female": "Systemanalytikerin", + "male": "Systemanalytiker", + }, { "neutral": "Systementwickler*in für Multimedia (Hard- und Software)", "female": "Systementwicklerin für Multimedia (Hard- und Software)", @@ -4304,29 +8064,69 @@ class Provider(BaseProvider): "female": "Systemgastronomiefachkraft", "male": "Systemgastronomiefachkraft", }, - {"neutral": "Systemwissenschafter*in", "female": "Systemwissenschafterin", "male": "Systemwissenschafter"}, - {"neutral": "Szenenbildner*in", "female": "Szenenbildnerin", "male": "Szenenbildner"}, + { + "neutral": "Systemwissenschafter*in", + "female": "Systemwissenschafterin", + "male": "Systemwissenschafter", + }, + { + "neutral": "Szenenbildner*in", + "female": "Szenenbildnerin", + "male": "Szenenbildner", + }, { "neutral": "Säckler*in (Lederbekleidungserzeuger*in)", "female": "Säcklerin (Lederbekleidungserzeugerin)", "male": "Säckler (Lederbekleidungserzeuger)", }, - {"neutral": "Sägetechniker*in", "female": "Sägetechnikerin", "male": "Sägetechniker"}, + { + "neutral": "Sägetechniker*in", + "female": "Sägetechnikerin", + "male": "Sägetechniker", + }, {"neutral": "Sänger*in", "female": "Sängerin", "male": "Sänger"}, { "neutral": "Säuglingsschwester / Säuglingspfleger", "female": "Säuglingsschwester", "male": "Säuglingspfleger", }, - {"neutral": "Süßwarenhersteller*in", "female": "Süßwarenherstellerin", "male": "Süßwarenhersteller"}, - {"neutral": "Tabakarbeiter*in", "female": "Tabakarbeiterin", "male": "Tabakarbeiter"}, - {"neutral": "Tagesmutter / Tagesvater", "female": "Tagesmutter", "male": "Tagesvater"}, - {"neutral": "Tagungsveranstalter*in", "female": "Tagungsveranstalterin", "male": "Tagungsveranstalter"}, - {"neutral": "Tai Chi Lehrer*in", "female": "Tai Chi Lehrerin", "male": "Tai Chi Lehrer"}, - {"neutral": "Tankwagenfahrer*in", "female": "Tankwagenfahrerin", "male": "Tankwagenfahrer"}, + { + "neutral": "Süßwarenhersteller*in", + "female": "Süßwarenherstellerin", + "male": "Süßwarenhersteller", + }, + { + "neutral": "Tabakarbeiter*in", + "female": "Tabakarbeiterin", + "male": "Tabakarbeiter", + }, + { + "neutral": "Tagesmutter / Tagesvater", + "female": "Tagesmutter", + "male": "Tagesvater", + }, + { + "neutral": "Tagungsveranstalter*in", + "female": "Tagungsveranstalterin", + "male": "Tagungsveranstalter", + }, + { + "neutral": "Tai Chi Lehrer*in", + "female": "Tai Chi Lehrerin", + "male": "Tai Chi Lehrer", + }, + { + "neutral": "Tankwagenfahrer*in", + "female": "Tankwagenfahrerin", + "male": "Tankwagenfahrer", + }, {"neutral": "Tankwart*in", "female": "Tankwartin", "male": "Tankwart"}, {"neutral": "Tanzlehrer*in", "female": "Tanzlehrerin", "male": "Tanzlehrer"}, - {"neutral": "Tanzpädagoge / Tanzpädagogin", "female": "Tanzpädagogin", "male": "Tanzpädagoge"}, + { + "neutral": "Tanzpädagoge / Tanzpädagogin", + "female": "Tanzpädagogin", + "male": "Tanzpädagoge", + }, { "neutral": "Tapezierer*in und Bettwarenerzeuger*in", "female": "Tapeziererin und Bettwarenerzeugerin", @@ -4337,18 +8137,38 @@ class Provider(BaseProvider): "female": "Tapeziererin und Dekorateurin", "male": "Tapezierer und Dekorateur", }, - {"neutral": "Tatortreiniger*in", "female": "Tatortreinigerin", "male": "Tatortreiniger"}, + { + "neutral": "Tatortreiniger*in", + "female": "Tatortreinigerin", + "male": "Tatortreiniger", + }, {"neutral": "Tauchlehrer*in", "female": "Tauchlehrerin", "male": "Tauchlehrer"}, {"neutral": "Taxifahrer*in", "female": "Taxifahrerin", "male": "Taxifahrer"}, - {"neutral": "Teamassistent*in", "female": "Teamassistentin", "male": "Teamassistent"}, + { + "neutral": "Teamassistent*in", + "female": "Teamassistentin", + "male": "Teamassistent", + }, { "neutral": "Technical Support Engineer", "female": "Technical Support Engineer", "male": "Technical Support Engineer", }, - {"neutral": "Technical Writer", "female": "Technical Writer", "male": "Technical Writer"}, - {"neutral": "Technik Consultant", "female": "Technik Consultant", "male": "Technik Consultant"}, - {"neutral": "Technische*r Manager*in", "female": "Technische Managerin", "male": "Technischer Manager"}, + { + "neutral": "Technical Writer", + "female": "Technical Writer", + "male": "Technical Writer", + }, + { + "neutral": "Technik Consultant", + "female": "Technik Consultant", + "male": "Technik Consultant", + }, + { + "neutral": "Technische*r Manager*in", + "female": "Technische Managerin", + "male": "Technischer Manager", + }, { "neutral": "Technische*r Projektmanager*in", "female": "Technische Projektmanagerin", @@ -4374,17 +8194,41 @@ class Provider(BaseProvider): "female": "Technische Zeichnerin", "male": "Technischer Zeichner", }, - {"neutral": "Technokeramformer*in", "female": "Technokeramformerin", "male": "Technokeramformer"}, + { + "neutral": "Technokeramformer*in", + "female": "Technokeramformerin", + "male": "Technokeramformer", + }, {"neutral": "Tele-Tutor", "female": "Tele-Tutor", "male": "Tele-Tutor"}, {"neutral": "Telefonist*in", "female": "Telefonistin", "male": "Telefonist"}, {"neutral": "Telematiker*in", "female": "Telematikerin", "male": "Telematiker"}, - {"neutral": "Tennislehrer*in", "female": "Tennislehrerin", "male": "Tennislehrer"}, - {"neutral": "Terminal Guide", "female": "Terminal Guide", "male": "Terminal Guide"}, - {"neutral": "Terrazzomacher*in", "female": "Terrazzomacherin", "male": "Terrazzomacher"}, + { + "neutral": "Tennislehrer*in", + "female": "Tennislehrerin", + "male": "Tennislehrer", + }, + { + "neutral": "Terminal Guide", + "female": "Terminal Guide", + "male": "Terminal Guide", + }, + { + "neutral": "Terrazzomacher*in", + "female": "Terrazzomacherin", + "male": "Terrazzomacher", + }, {"neutral": "Textautor*in", "female": "Textautorin", "male": "Textautor"}, {"neutral": "Textilchemie", "female": "Textilchemie", "male": "Textilchemie"}, - {"neutral": "Textildesigner*in", "female": "Textildesignerin", "male": "Textildesigner"}, - {"neutral": "Textilgestaltung", "female": "Textilgestaltung", "male": "Textilgestaltung"}, + { + "neutral": "Textildesigner*in", + "female": "Textildesignerin", + "male": "Textildesigner", + }, + { + "neutral": "Textilgestaltung", + "female": "Textilgestaltung", + "male": "Textilgestaltung", + }, { "neutral": "Textilgestaltung - Posamentiererei", "female": "Textilgestaltung - Posamentiererei", @@ -4405,10 +8249,26 @@ class Provider(BaseProvider): "female": "Textilgestaltung - Weberei", "male": "Textilgestaltung - Weberei", }, - {"neutral": "Textilkaufmann / Textilkauffrau", "female": "Textilkauffrau", "male": "Textilkaufmann"}, - {"neutral": "Textilmechanik", "female": "Textilmechanik", "male": "Textilmechanik"}, - {"neutral": "Textilmusterzeichner*in", "female": "Textilmusterzeichnerin", "male": "Textilmusterzeichner"}, - {"neutral": "Textilreiniger*in", "female": "Textilreinigerin", "male": "Textilreiniger"}, + { + "neutral": "Textilkaufmann / Textilkauffrau", + "female": "Textilkauffrau", + "male": "Textilkaufmann", + }, + { + "neutral": "Textilmechanik", + "female": "Textilmechanik", + "male": "Textilmechanik", + }, + { + "neutral": "Textilmusterzeichner*in", + "female": "Textilmusterzeichnerin", + "male": "Textilmusterzeichner", + }, + { + "neutral": "Textilreiniger*in", + "female": "Textilreinigerin", + "male": "Textilreiniger", + }, { "neutral": "Textiltechnik - Maschentechnik", "female": "Textiltechnik - Maschentechnik", @@ -4419,16 +8279,44 @@ class Provider(BaseProvider): "female": "Textiltechnik - Webtechnik", "male": "Textiltechnik - Webtechnik", }, - {"neutral": "Textiltechniker*in", "female": "Textiltechnikerin", "male": "Textiltechniker"}, - {"neutral": "Textiltechnologie", "female": "Textiltechnologie", "male": "Textiltechnologie"}, - {"neutral": "Textilveredler*in", "female": "Textilveredlerin", "male": "Textilveredler"}, - {"neutral": "Theaterwissenschafter*in", "female": "Theaterwissenschafterin", "male": "Theaterwissenschafter"}, + { + "neutral": "Textiltechniker*in", + "female": "Textiltechnikerin", + "male": "Textiltechniker", + }, + { + "neutral": "Textiltechnologie", + "female": "Textiltechnologie", + "male": "Textiltechnologie", + }, + { + "neutral": "Textilveredler*in", + "female": "Textilveredlerin", + "male": "Textilveredler", + }, + { + "neutral": "Theaterwissenschafter*in", + "female": "Theaterwissenschafterin", + "male": "Theaterwissenschafter", + }, {"neutral": "Theologe / Theologin", "female": "Theologin", "male": "Theologe"}, - {"neutral": "Third Age Coach", "female": "Third Age Coach", "male": "Third Age Coach"}, - {"neutral": "Ticketing Agent", "female": "Ticketing Agent", "male": "Ticketing Agent"}, + { + "neutral": "Third Age Coach", + "female": "Third Age Coach", + "male": "Third Age Coach", + }, + { + "neutral": "Ticketing Agent", + "female": "Ticketing Agent", + "male": "Ticketing Agent", + }, {"neutral": "Tiefbau", "female": "Tiefbau", "male": "Tiefbau"}, {"neutral": "Tiefbauer*in", "female": "Tiefbauerin", "male": "Tiefbauer"}, - {"neutral": "Tiefbauspezialist*in", "female": "Tiefbauspezialistin", "male": "Tiefbauspezialist"}, + { + "neutral": "Tiefbauspezialist*in", + "female": "Tiefbauspezialistin", + "male": "Tiefbauspezialist", + }, { "neutral": "Tiefbauspezialist*in - Baumaschinenbetrieb", "female": "Tiefbauspezialistin - Baumaschinenbetrieb", @@ -4449,15 +8337,31 @@ class Provider(BaseProvider): "female": "Tiefbauspezialistin - Verkehrswegebau", "male": "Tiefbauspezialist - Verkehrswegebau", }, - {"neutral": "Tiefbautechniker*in", "female": "Tiefbautechnikerin", "male": "Tiefbautechniker"}, + { + "neutral": "Tiefbautechniker*in", + "female": "Tiefbautechnikerin", + "male": "Tiefbautechniker", + }, { "neutral": "Tiefdruckformenhersteller*in", "female": "Tiefdruckformenherstellerin", "male": "Tiefdruckformenhersteller", }, - {"neutral": "Tier-Physiotherapeut*in", "female": "Tier-Physiotherapeutin", "male": "Tier-Physiotherapeut"}, - {"neutral": "Tierarzt / Tierärztin", "female": "Tierärztin", "male": "Tierarzt"}, - {"neutral": "Tierarzthelfer*in", "female": "Tierarzthelferin", "male": "Tierarzthelfer"}, + { + "neutral": "Tier-Physiotherapeut*in", + "female": "Tier-Physiotherapeutin", + "male": "Tier-Physiotherapeut", + }, + { + "neutral": "Tierarzt / Tierärztin", + "female": "Tierärztin", + "male": "Tierarzt", + }, + { + "neutral": "Tierarzthelfer*in", + "female": "Tierarzthelferin", + "male": "Tierarzthelfer", + }, {"neutral": "Tierhändler*in", "female": "Tierhändlerin", "male": "Tierhändler"}, {"neutral": "Tierpfleger*in", "female": "Tierpflegerin", "male": "Tierpfleger"}, { @@ -4470,8 +8374,16 @@ class Provider(BaseProvider): "female": "Tierpflegerin (Tierheime)", "male": "Tierpfleger (Tierheime)", }, - {"neutral": "Tierpfleger*in (Zoo)", "female": "Tierpflegerin (Zoo)", "male": "Tierpfleger (Zoo)"}, - {"neutral": "Tierpsychologe / Tierpsychologin", "female": "Tierpsychologin", "male": "Tierpsychologe"}, + { + "neutral": "Tierpfleger*in (Zoo)", + "female": "Tierpflegerin (Zoo)", + "male": "Tierpfleger (Zoo)", + }, + { + "neutral": "Tierpsychologe / Tierpsychologin", + "female": "Tierpsychologin", + "male": "Tierpsychologe", + }, { "neutral": "Tierärztliche Ordinationsassistenz", "female": "Tierärztliche Ordinationsassistenz", @@ -4488,7 +8400,11 @@ class Provider(BaseProvider): "female": "Tischlerei - Drechslerei", "male": "Tischlerei - Drechslerei", }, - {"neutral": "Tischlereitechnik", "female": "Tischlereitechnik", "male": "Tischlereitechnik"}, + { + "neutral": "Tischlereitechnik", + "female": "Tischlereitechnik", + "male": "Tischlereitechnik", + }, { "neutral": "Tischlereitechnik - Modell- und Formenbau", "female": "Tischlereitechnik - Modell- und Formenbau", @@ -4504,16 +8420,32 @@ class Provider(BaseProvider): "female": "Tischlereitechnik - Produktion", "male": "Tischlereitechnik - Produktion", }, - {"neutral": "Tissue Engineer", "female": "Tissue Engineer", "male": "Tissue Engineer"}, - {"neutral": "Toningenieur*in", "female": "Toningenieurin", "male": "Toningenieur"}, + { + "neutral": "Tissue Engineer", + "female": "Tissue Engineer", + "male": "Tissue Engineer", + }, + { + "neutral": "Toningenieur*in", + "female": "Toningenieurin", + "male": "Toningenieur", + }, {"neutral": "Tonmeister*in", "female": "Tonmeisterin", "male": "Tonmeister"}, - {"neutral": "Tontechniker*in", "female": "Tontechnikerin", "male": "Tontechniker"}, + { + "neutral": "Tontechniker*in", + "female": "Tontechnikerin", + "male": "Tontechniker", + }, { "neutral": "Tontechniker*in (Aufnahmeleitung)", "female": "Tontechnikerin (Aufnahmeleitung)", "male": "Tontechniker (Aufnahmeleitung)", }, - {"neutral": "Tontechniker*in (Film)", "female": "Tontechnikerin (Film)", "male": "Tontechniker (Film)"}, + { + "neutral": "Tontechniker*in (Film)", + "female": "Tontechnikerin (Film)", + "male": "Tontechniker (Film)", + }, { "neutral": "Tontechniker*in (Live-Tontechnik)", "female": "Tontechnikerin (Live-Tontechnik)", @@ -4529,50 +8461,110 @@ class Provider(BaseProvider): "female": "Tontechnikerin (Theater)", "male": "Tontechniker (Theater)", }, - {"neutral": "Tourismusassistent*in", "female": "Tourismusassistentin", "male": "Tourismusassistent"}, - {"neutral": "Tourismusberater*in", "female": "Tourismusberaterin", "male": "Tourismusberater"}, + { + "neutral": "Tourismusassistent*in", + "female": "Tourismusassistentin", + "male": "Tourismusassistent", + }, + { + "neutral": "Tourismusberater*in", + "female": "Tourismusberaterin", + "male": "Tourismusberater", + }, { "neutral": "Tourismuskaufmann / Tourismuskauffrau", "female": "Tourismuskauffrau", "male": "Tourismuskaufmann", }, - {"neutral": "Tourismusmanager*in", "female": "Tourismusmanagerin", "male": "Tourismusmanager"}, - {"neutral": "Toxikologe / Toxikologin", "female": "Toxikologin", "male": "Toxikologe"}, - {"neutral": "Traffic-Clerk", "female": "Traffic-Clerk", "male": "Traffic-Clerk"}, + { + "neutral": "Tourismusmanager*in", + "female": "Tourismusmanagerin", + "male": "Tourismusmanager", + }, + { + "neutral": "Toxikologe / Toxikologin", + "female": "Toxikologin", + "male": "Toxikologe", + }, + { + "neutral": "Traffic-Clerk", + "female": "Traffic-Clerk", + "male": "Traffic-Clerk", + }, {"neutral": "Trafikant*in", "female": "Trafikantin", "male": "Trafikant"}, {"neutral": "Trainer*in", "female": "Trainerin", "male": "Trainer"}, - {"neutral": "Trainer*in (Sport)", "female": "Trainerin (Sport)", "male": "Trainer (Sport)"}, - {"neutral": "Transportarbeiter*in", "female": "Transportarbeiterin", "male": "Transportarbeiter"}, - {"neutral": "Transportbetontechnik", "female": "Transportbetontechnik", "male": "Transportbetontechnik"}, + { + "neutral": "Trainer*in (Sport)", + "female": "Trainerin (Sport)", + "male": "Trainer (Sport)", + }, + { + "neutral": "Transportarbeiter*in", + "female": "Transportarbeiterin", + "male": "Transportarbeiter", + }, + { + "neutral": "Transportbetontechnik", + "female": "Transportbetontechnik", + "male": "Transportbetontechnik", + }, { "neutral": "Trauerredner*in und Ritualbegleiter*in", "female": "Trauerrednerin und Ritualbegleiterin", "male": "Trauerredner und Ritualbegleiter", }, - {"neutral": "Treasury Manager*in", "female": "Treasury Managerin", "male": "Treasury Manager"}, + { + "neutral": "Treasury Manager*in", + "female": "Treasury Managerin", + "male": "Treasury Manager", + }, {"neutral": "Trendscout", "female": "Trendscout", "male": "Trendscout"}, - {"neutral": "Treuhandassistent*in", "female": "Treuhandassistentin", "male": "Treuhandassistent"}, + { + "neutral": "Treuhandassistent*in", + "female": "Treuhandassistentin", + "male": "Treuhandassistent", + }, { "neutral": "Trickfilmzeichner*in / Comic Zeichner*in", "female": "Trickfilmzeichnerin / Comic Zeichnerin", "male": "Trickfilmzeichner / Comic Zeichner", }, - {"neutral": "Triebfahrzeugführer*in", "female": "Triebfahrzeugführerin", "male": "Triebfahrzeugführer"}, - {"neutral": "Triebwagenführer*in", "female": "Triebwagenführerin", "male": "Triebwagenführer"}, + { + "neutral": "Triebfahrzeugführer*in", + "female": "Triebfahrzeugführerin", + "male": "Triebfahrzeugführer", + }, + { + "neutral": "Triebwagenführer*in", + "female": "Triebwagenführerin", + "male": "Triebwagenführer", + }, { "neutral": "Tuning & Monitoring Engineer", "female": "Tuning & Monitoring Engineer", "male": "Tuning & Monitoring Engineer", }, - {"neutral": "Tunnelbautechniker*in", "female": "Tunnelbautechnikerin", "male": "Tunnelbautechniker"}, - {"neutral": "Turkologe / Turkologin", "female": "Turkologin", "male": "Turkologe"}, + { + "neutral": "Tunnelbautechniker*in", + "female": "Tunnelbautechnikerin", + "male": "Tunnelbautechniker", + }, + { + "neutral": "Turkologe / Turkologin", + "female": "Turkologin", + "male": "Turkologe", + }, {"neutral": "Tänzer*in", "female": "Tänzerin", "male": "Tänzer"}, { "neutral": "Tätowierer*in und Piercer*in", "female": "Tätowiererin und Piercerin", "male": "Tätowierer und Piercer", }, - {"neutral": "U-Bahn-Fahrer*in", "female": "U-Bahn-Fahrerin", "male": "U-Bahn-Fahrer"}, + { + "neutral": "U-Bahn-Fahrer*in", + "female": "U-Bahn-Fahrerin", + "male": "U-Bahn-Fahrer", + }, { "neutral": "Uhrmacher*in - Zeitmesstechniker*in", "female": "Uhrmacherin - Zeitmesstechnikerin", @@ -4583,38 +8575,102 @@ class Provider(BaseProvider): "female": "Umwelt- und Nachhaltigkeitsmanagerin", "male": "Umwelt- und Nachhaltigkeitsmanager", }, - {"neutral": "Umweltanalytiker*in", "female": "Umweltanalytikerin", "male": "Umweltanalytiker"}, - {"neutral": "Umweltbautechniker*in", "female": "Umweltbautechnikerin", "male": "Umweltbautechniker"}, + { + "neutral": "Umweltanalytiker*in", + "female": "Umweltanalytikerin", + "male": "Umweltanalytiker", + }, + { + "neutral": "Umweltbautechniker*in", + "female": "Umweltbautechnikerin", + "male": "Umweltbautechniker", + }, { "neutral": "Umweltbeauftragter / Umweltbeauftragte", "female": "Umweltbeauftragte", "male": "Umweltbeauftragter", }, - {"neutral": "Umweltberater*in", "female": "Umweltberaterin", "male": "Umweltberater"}, - {"neutral": "Umweltgutachter*in", "female": "Umweltgutachterin", "male": "Umweltgutachter"}, - {"neutral": "Umweltingenieur*in", "female": "Umweltingenieurin", "male": "Umweltingenieur"}, - {"neutral": "Umweltmesstechniker*in", "female": "Umweltmesstechnikerin", "male": "Umweltmesstechniker"}, + { + "neutral": "Umweltberater*in", + "female": "Umweltberaterin", + "male": "Umweltberater", + }, + { + "neutral": "Umweltgutachter*in", + "female": "Umweltgutachterin", + "male": "Umweltgutachter", + }, + { + "neutral": "Umweltingenieur*in", + "female": "Umweltingenieurin", + "male": "Umweltingenieur", + }, + { + "neutral": "Umweltmesstechniker*in", + "female": "Umweltmesstechnikerin", + "male": "Umweltmesstechniker", + }, { "neutral": "Umweltsystemwissenschafter*in", "female": "Umweltsystemwissenschafterin", "male": "Umweltsystemwissenschafter", }, - {"neutral": "Umwelttechniker*in", "female": "Umwelttechnikerin", "male": "Umwelttechniker"}, + { + "neutral": "Umwelttechniker*in", + "female": "Umwelttechnikerin", + "male": "Umwelttechniker", + }, { "neutral": "Umweltverfahrenstechniker*in", "female": "Umweltverfahrenstechnikerin", "male": "Umweltverfahrenstechniker", }, - {"neutral": "Universalhärter*in", "female": "Universalhärterin", "male": "Universalhärter"}, - {"neutral": "Universalschweißer*in", "female": "Universalschweißerin", "male": "Universalschweißer"}, - {"neutral": "Universitätsassistent*in", "female": "Universitätsassistentin", "male": "Universitätsassistent"}, - {"neutral": "Universitätsdozent*in", "female": "Universitätsdozentin", "male": "Universitätsdozent"}, - {"neutral": "Universitätslektor*in", "female": "Universitätslektorin", "male": "Universitätslektor"}, - {"neutral": "Universitätsprofessor*in", "female": "Universitätsprofessorin", "male": "Universitätsprofessor"}, - {"neutral": "Unternehmensberater*in", "female": "Unternehmensberaterin", "male": "Unternehmensberater"}, + { + "neutral": "Universalhärter*in", + "female": "Universalhärterin", + "male": "Universalhärter", + }, + { + "neutral": "Universalschweißer*in", + "female": "Universalschweißerin", + "male": "Universalschweißer", + }, + { + "neutral": "Universitätsassistent*in", + "female": "Universitätsassistentin", + "male": "Universitätsassistent", + }, + { + "neutral": "Universitätsdozent*in", + "female": "Universitätsdozentin", + "male": "Universitätsdozent", + }, + { + "neutral": "Universitätslektor*in", + "female": "Universitätslektorin", + "male": "Universitätslektor", + }, + { + "neutral": "Universitätsprofessor*in", + "female": "Universitätsprofessorin", + "male": "Universitätsprofessor", + }, + { + "neutral": "Unternehmensberater*in", + "female": "Unternehmensberaterin", + "male": "Unternehmensberater", + }, {"neutral": "Unternehmer*in", "female": "Unternehmerin", "male": "Unternehmer"}, - {"neutral": "Unteroffizier*in", "female": "Unteroffizierin", "male": "Unteroffizier"}, - {"neutral": "Usability Engineer", "female": "Usability Engineer", "male": "Usability Engineer"}, + { + "neutral": "Unteroffizier*in", + "female": "Unteroffizierin", + "male": "Unteroffizier", + }, + { + "neutral": "Usability Engineer", + "female": "Usability Engineer", + "male": "Usability Engineer", + }, { "neutral": "User Experience Designer*in (UX-Designer*in)", "female": "User Experience Designerin (UX-Designerin)", @@ -4625,10 +8681,26 @@ class Provider(BaseProvider): "female": "User Interface Designerin (UI-Designerin)", "male": "User Interface Designer (UI-Designer)", }, - {"neutral": "VFX Supervisor", "female": "VFX Supervisor", "male": "VFX Supervisor"}, - {"neutral": "Veranstaltungstechnik", "female": "Veranstaltungstechnik", "male": "Veranstaltungstechnik"}, - {"neutral": "Verbandstoffarbeiter*in", "female": "Verbandstoffarbeiterin", "male": "Verbandstoffarbeiter"}, - {"neutral": "Verbundstofftechniker*in", "female": "Verbundstofftechnikerin", "male": "Verbundstofftechniker"}, + { + "neutral": "VFX Supervisor", + "female": "VFX Supervisor", + "male": "VFX Supervisor", + }, + { + "neutral": "Veranstaltungstechnik", + "female": "Veranstaltungstechnik", + "male": "Veranstaltungstechnik", + }, + { + "neutral": "Verbandstoffarbeiter*in", + "female": "Verbandstoffarbeiterin", + "male": "Verbandstoffarbeiter", + }, + { + "neutral": "Verbundstofftechniker*in", + "female": "Verbundstofftechnikerin", + "male": "Verbundstofftechniker", + }, { "neutral": "Verfahrenstechnik für die Getreidewirtschaft", "female": "Verfahrenstechnik für die Getreidewirtschaft", @@ -4649,31 +8721,63 @@ class Provider(BaseProvider): "female": "Verfahrenstechnik für die Getreidewirtschaft - Getreidemüllerin", "male": "Verfahrenstechnik für die Getreidewirtschaft - Getreidemüller", }, - {"neutral": "Verfahrenstechniker*in", "female": "Verfahrenstechnikerin", "male": "Verfahrenstechniker"}, + { + "neutral": "Verfahrenstechniker*in", + "female": "Verfahrenstechnikerin", + "male": "Verfahrenstechniker", + }, { "neutral": "Vergolden und Staffieren", "female": "Vergolden und Staffieren", "male": "Vergolden und Staffieren", }, {"neutral": "Vergolder*in", "female": "Vergolderin", "male": "Vergolder"}, - {"neutral": "Verhaltensforscher*in", "female": "Verhaltensforscherin", "male": "Verhaltensforscher"}, + { + "neutral": "Verhaltensforscher*in", + "female": "Verhaltensforscherin", + "male": "Verhaltensforscher", + }, { "neutral": "Verkaufstechniker*in / Vertriebstechniker*in", "female": "Verkaufstechnikerin / Vertriebstechnikerin", "male": "Verkaufstechniker / Vertriebstechniker", }, - {"neutral": "Verkehrsplaner*in", "female": "Verkehrsplanerin", "male": "Verkehrsplaner"}, + { + "neutral": "Verkehrsplaner*in", + "female": "Verkehrsplanerin", + "male": "Verkehrsplaner", + }, { "neutral": "Verkehrspsychologe / Verkehrspsychologin", "female": "Verkehrspsychologin", "male": "Verkehrspsychologe", }, - {"neutral": "Verkehrstechniker*in", "female": "Verkehrstechnikerin", "male": "Verkehrstechniker"}, - {"neutral": "Verkehrstelematiker*in", "female": "Verkehrstelematikerin", "male": "Verkehrstelematiker"}, - {"neutral": "Verkehrswirtschafter*in", "female": "Verkehrswirtschafterin", "male": "Verkehrswirtschafter"}, - {"neutral": "Verkehrsökonom*in", "female": "Verkehrsökonomin", "male": "Verkehrsökonom"}, + { + "neutral": "Verkehrstechniker*in", + "female": "Verkehrstechnikerin", + "male": "Verkehrstechniker", + }, + { + "neutral": "Verkehrstelematiker*in", + "female": "Verkehrstelematikerin", + "male": "Verkehrstelematiker", + }, + { + "neutral": "Verkehrswirtschafter*in", + "female": "Verkehrswirtschafterin", + "male": "Verkehrswirtschafter", + }, + { + "neutral": "Verkehrsökonom*in", + "female": "Verkehrsökonomin", + "male": "Verkehrsökonom", + }, {"neutral": "Verkäufer*in", "female": "Verkäuferin", "male": "Verkäufer"}, - {"neutral": "Verlagslektor*in", "female": "Verlagslektorin", "male": "Verlagslektor"}, + { + "neutral": "Verlagslektor*in", + "female": "Verlagslektorin", + "male": "Verlagslektor", + }, {"neutral": "Verleger*in", "female": "Verlegerin", "male": "Verleger"}, { "neutral": "Vermessungs- und Geoinformationstechnik", @@ -4695,18 +8799,42 @@ class Provider(BaseProvider): "female": "Vermessungsgehilfin", "male": "Vermessungsgehilfe", }, - {"neutral": "Vermessungstechnik", "female": "Vermessungstechnik", "male": "Vermessungstechnik"}, - {"neutral": "Vermessungstechniker*in", "female": "Vermessungstechnikerin", "male": "Vermessungstechniker"}, - {"neutral": "Vermögensberater*in", "female": "Vermögensberaterin", "male": "Vermögensberater"}, - {"neutral": "Verpackungstechnik", "female": "Verpackungstechnik", "male": "Verpackungstechnik"}, + { + "neutral": "Vermessungstechnik", + "female": "Vermessungstechnik", + "male": "Vermessungstechnik", + }, + { + "neutral": "Vermessungstechniker*in", + "female": "Vermessungstechnikerin", + "male": "Vermessungstechniker", + }, + { + "neutral": "Vermögensberater*in", + "female": "Vermögensberaterin", + "male": "Vermögensberater", + }, + { + "neutral": "Verpackungstechnik", + "female": "Verpackungstechnik", + "male": "Verpackungstechnik", + }, {"neutral": "Verschieber*in", "female": "Verschieberin", "male": "Verschieber"}, { "neutral": "Verschlüsselungstechniker*in (Kryptograf*in)", "female": "Verschlüsselungstechnikerin (Kryptografin)", "male": "Verschlüsselungstechniker (Kryptograf)", }, - {"neutral": "Versicherungsagent*in", "female": "Versicherungsagentin", "male": "Versicherungsagent"}, - {"neutral": "Versicherungsberater*in", "female": "Versicherungsberaterin", "male": "Versicherungsberater"}, + { + "neutral": "Versicherungsagent*in", + "female": "Versicherungsagentin", + "male": "Versicherungsagent", + }, + { + "neutral": "Versicherungsberater*in", + "female": "Versicherungsberaterin", + "male": "Versicherungsberater", + }, { "neutral": "Versicherungsfachmann / Versicherungsfachfrau", "female": "Versicherungsfachfrau", @@ -4717,7 +8845,11 @@ class Provider(BaseProvider): "female": "Versicherungskauffrau", "male": "Versicherungskaufmann", }, - {"neutral": "Versicherungsmakler*in", "female": "Versicherungsmaklerin", "male": "Versicherungsmakler"}, + { + "neutral": "Versicherungsmakler*in", + "female": "Versicherungsmaklerin", + "male": "Versicherungsmakler", + }, { "neutral": "Versicherungsmathematiker*in", "female": "Versicherungsmathematikerin", @@ -4738,10 +8870,26 @@ class Provider(BaseProvider): "female": "Versicherungsvertreterin", "male": "Versicherungsvertreter", }, - {"neutral": "Versorgungstechniker*in", "female": "Versorgungstechnikerin", "male": "Versorgungstechniker"}, - {"neutral": "Vertriebsingenieur*in", "female": "Vertriebsingenieurin", "male": "Vertriebsingenieur"}, - {"neutral": "Vertriebstechniker*in", "female": "Vertriebstechnikerin", "male": "Vertriebstechniker"}, - {"neutral": "Vertriebswirt*in", "female": "Vertriebswirtin", "male": "Vertriebswirt"}, + { + "neutral": "Versorgungstechniker*in", + "female": "Versorgungstechnikerin", + "male": "Versorgungstechniker", + }, + { + "neutral": "Vertriebsingenieur*in", + "female": "Vertriebsingenieurin", + "male": "Vertriebsingenieur", + }, + { + "neutral": "Vertriebstechniker*in", + "female": "Vertriebstechnikerin", + "male": "Vertriebstechniker", + }, + { + "neutral": "Vertriebswirt*in", + "female": "Vertriebswirtin", + "male": "Vertriebswirt", + }, { "neutral": "Vertriebswirt*in (Vertriebsaußendienst)", "female": "Vertriebswirtin (Vertriebsaußendienst)", @@ -4752,109 +8900,313 @@ class Provider(BaseProvider): "female": "Vertriebswirtin (Vertriebsinnendienst)", "male": "Vertriebswirt (Vertriebsinnendienst)", }, - {"neutral": "Verwaltungsassistent*in", "female": "Verwaltungsassistentin", "male": "Verwaltungsassistent"}, + { + "neutral": "Verwaltungsassistent*in", + "female": "Verwaltungsassistentin", + "male": "Verwaltungsassistent", + }, { "neutral": "Verwaltungsfachbeamter / Verwaltungsfachbeamtin", "female": "Verwaltungsfachbeamtin", "male": "Verwaltungsfachbeamter", }, - {"neutral": "Verwaltungsjurist*in", "female": "Verwaltungsjuristin", "male": "Verwaltungsjurist"}, - {"neutral": "Veterinärmediziner*in", "female": "Veterinärmedizinerin", "male": "Veterinärmediziner"}, - {"neutral": "Videojournalist*in", "female": "Videojournalistin", "male": "Videojournalist"}, + { + "neutral": "Verwaltungsjurist*in", + "female": "Verwaltungsjuristin", + "male": "Verwaltungsjurist", + }, + { + "neutral": "Veterinärmediziner*in", + "female": "Veterinärmedizinerin", + "male": "Veterinärmediziner", + }, + { + "neutral": "Videojournalist*in", + "female": "Videojournalistin", + "male": "Videojournalist", + }, {"neutral": "Viehhändler*in", "female": "Viehhändlerin", "male": "Viehhändler"}, - {"neutral": "Virtual Assistant", "female": "Virtual Assistant", "male": "Virtual Assistant"}, + { + "neutral": "Virtual Assistant", + "female": "Virtual Assistant", + "male": "Virtual Assistant", + }, {"neutral": "Visagist*in", "female": "Visagistin", "male": "Visagist"}, - {"neutral": "Visual Effects Artist", "female": "Visual Effects Artist", "male": "Visual Effects Artist"}, - {"neutral": "Vitaltrainer*in", "female": "Vitaltrainerin", "male": "Vitaltrainer"}, - {"neutral": "Volkskundler*in", "female": "Volkskundlerin", "male": "Volkskundler"}, - {"neutral": "Volksschullehrer*in", "female": "Volksschullehrerin", "male": "Volksschullehrer"}, + { + "neutral": "Visual Effects Artist", + "female": "Visual Effects Artist", + "male": "Visual Effects Artist", + }, + { + "neutral": "Vitaltrainer*in", + "female": "Vitaltrainerin", + "male": "Vitaltrainer", + }, + { + "neutral": "Volkskundler*in", + "female": "Volkskundlerin", + "male": "Volkskundler", + }, + { + "neutral": "Volksschullehrer*in", + "female": "Volksschullehrerin", + "male": "Volksschullehrer", + }, {"neutral": "Volkswirt*in", "female": "Volkswirtin", "male": "Volkswirt"}, - {"neutral": "Vollzeit-Betreuer*in", "female": "Vollzeit-Betreuerin", "male": "Vollzeit-Betreuer"}, + { + "neutral": "Vollzeit-Betreuer*in", + "female": "Vollzeit-Betreuerin", + "male": "Vollzeit-Betreuer", + }, {"neutral": "Vorarbeiter*in", "female": "Vorarbeiterin", "male": "Vorarbeiter"}, - {"neutral": "Vulkanisierung", "female": "Vulkanisierung", "male": "Vulkanisierung"}, - {"neutral": "Völkerkundler*in", "female": "Völkerkundlerin", "male": "Völkerkundler"}, - {"neutral": "Waagenhersteller*in", "female": "Waagenherstellerin", "male": "Waagenhersteller"}, - {"neutral": "Waffelbäcker*in", "female": "Waffelbäckerin", "male": "Waffelbäcker"}, + { + "neutral": "Vulkanisierung", + "female": "Vulkanisierung", + "male": "Vulkanisierung", + }, + { + "neutral": "Völkerkundler*in", + "female": "Völkerkundlerin", + "male": "Völkerkundler", + }, + { + "neutral": "Waagenhersteller*in", + "female": "Waagenherstellerin", + "male": "Waagenhersteller", + }, + { + "neutral": "Waffelbäcker*in", + "female": "Waffelbäckerin", + "male": "Waffelbäcker", + }, { "neutral": "Waffen- und Munitionshändler*in", "female": "Waffen- und Munitionshändlerin", "male": "Waffen- und Munitionshändler", }, - {"neutral": "Waffenbautechniker*in", "female": "Waffenbautechnikerin", "male": "Waffenbautechniker"}, - {"neutral": "Waffenmechaniker*in", "female": "Waffenmechanikerin", "male": "Waffenmechaniker"}, + { + "neutral": "Waffenbautechniker*in", + "female": "Waffenbautechnikerin", + "male": "Waffenbautechniker", + }, + { + "neutral": "Waffenmechaniker*in", + "female": "Waffenmechanikerin", + "male": "Waffenmechaniker", + }, {"neutral": "Wagner*in", "female": "Wagnerin", "male": "Wagner"}, - {"neutral": "Waldpädagoge / Waldpädagogin", "female": "Waldpädagogin", "male": "Waldpädagoge"}, - {"neutral": "Wasserbautechniker*in", "female": "Wasserbautechnikerin", "male": "Wasserbautechniker"}, + { + "neutral": "Waldpädagoge / Waldpädagogin", + "female": "Waldpädagogin", + "male": "Waldpädagoge", + }, + { + "neutral": "Wasserbautechniker*in", + "female": "Wasserbautechnikerin", + "male": "Wasserbautechniker", + }, { "neutral": "Wasserleitungsinstallateur*in", "female": "Wasserleitungsinstallateurin", "male": "Wasserleitungsinstallateur", }, - {"neutral": "Wasserschilehrer*in", "female": "Wasserschilehrerin", "male": "Wasserschilehrer"}, - {"neutral": "Web Content Manager*in", "female": "Web Content Managerin", "male": "Web Content Manager"}, - {"neutral": "Web Developer", "female": "Web Developer", "male": "Web Developer"}, + { + "neutral": "Wasserschilehrer*in", + "female": "Wasserschilehrerin", + "male": "Wasserschilehrer", + }, + { + "neutral": "Web Content Manager*in", + "female": "Web Content Managerin", + "male": "Web Content Manager", + }, + { + "neutral": "Web Developer", + "female": "Web Developer", + "male": "Web Developer", + }, {"neutral": "Webdesigner*in", "female": "Webdesignerin", "male": "Webdesigner"}, {"neutral": "Weber*in", "female": "Weberin", "male": "Weber"}, {"neutral": "Webmaster", "female": "Webmaster", "male": "Webmaster"}, - {"neutral": "Webshopbetreuer*in", "female": "Webshopbetreuerin", "male": "Webshopbetreuer"}, - {"neutral": "Webshopmanager*in", "female": "Webshopmanagerin", "male": "Webshopmanager"}, - {"neutral": "Webshopverkäufer*in", "female": "Webshopverkäuferin", "male": "Webshopverkäufer"}, - {"neutral": "Websitegestalter*in", "female": "Websitegestalterin", "male": "Websitegestalter"}, - {"neutral": "Websiteprogrammierer*in", "female": "Websiteprogrammiererin", "male": "Websiteprogrammierer"}, + { + "neutral": "Webshopbetreuer*in", + "female": "Webshopbetreuerin", + "male": "Webshopbetreuer", + }, + { + "neutral": "Webshopmanager*in", + "female": "Webshopmanagerin", + "male": "Webshopmanager", + }, + { + "neutral": "Webshopverkäufer*in", + "female": "Webshopverkäuferin", + "male": "Webshopverkäufer", + }, + { + "neutral": "Websitegestalter*in", + "female": "Websitegestalterin", + "male": "Websitegestalter", + }, + { + "neutral": "Websiteprogrammierer*in", + "female": "Websiteprogrammiererin", + "male": "Websiteprogrammierer", + }, { "neutral": "Weinbau und Kellerwirtschaft", "female": "Weinbau und Kellerwirtschaft", "male": "Weinbau und Kellerwirtschaft", }, - {"neutral": "Weinbauer / Weinbäuerin", "female": "Weinbäuerin", "male": "Weinbauer"}, - {"neutral": "Weinbautechniker*in", "female": "Weinbautechnikerin", "male": "Weinbautechniker"}, - {"neutral": "Weingartenarbeiter*in", "female": "Weingartenarbeiterin", "male": "Weingartenarbeiter"}, + { + "neutral": "Weinbauer / Weinbäuerin", + "female": "Weinbäuerin", + "male": "Weinbauer", + }, + { + "neutral": "Weinbautechniker*in", + "female": "Weinbautechnikerin", + "male": "Weinbautechniker", + }, + { + "neutral": "Weingartenarbeiter*in", + "female": "Weingartenarbeiterin", + "male": "Weingartenarbeiter", + }, {"neutral": "Weinhändler*in", "female": "Weinhändlerin", "male": "Weinhändler"}, { "neutral": "Weiß- und Sämischgerber*in", "female": "Weiß- und Sämischgerberin", "male": "Weiß- und Sämischgerber", }, - {"neutral": "Wellnesstrainer*in", "female": "Wellnesstrainerin", "male": "Wellnesstrainer"}, + { + "neutral": "Wellnesstrainer*in", + "female": "Wellnesstrainerin", + "male": "Wellnesstrainer", + }, { "neutral": "Werbe- und Medienvorlagenhersteller*in", "female": "Werbe- und Medienvorlagenherstellerin", "male": "Werbe- und Medienvorlagenhersteller", }, - {"neutral": "Werbeberater*in", "female": "Werbeberaterin", "male": "Werbeberater"}, - {"neutral": "Werbefachmann / Werbefachfrau", "female": "Werbefachfrau", "male": "Werbefachmann"}, - {"neutral": "Werbefotograf*in", "female": "Werbefotografin", "male": "Werbefotograf"}, - {"neutral": "Werbegestalter*in", "female": "Werbegestalterin", "male": "Werbegestalter"}, - {"neutral": "Werbegrafikdesigner*in", "female": "Werbegrafikdesignerin", "male": "Werbegrafikdesigner"}, - {"neutral": "Werbemittler*in", "female": "Werbemittlerin", "male": "Werbemittler"}, + { + "neutral": "Werbeberater*in", + "female": "Werbeberaterin", + "male": "Werbeberater", + }, + { + "neutral": "Werbefachmann / Werbefachfrau", + "female": "Werbefachfrau", + "male": "Werbefachmann", + }, + { + "neutral": "Werbefotograf*in", + "female": "Werbefotografin", + "male": "Werbefotograf", + }, + { + "neutral": "Werbegestalter*in", + "female": "Werbegestalterin", + "male": "Werbegestalter", + }, + { + "neutral": "Werbegrafikdesigner*in", + "female": "Werbegrafikdesignerin", + "male": "Werbegrafikdesigner", + }, + { + "neutral": "Werbemittler*in", + "female": "Werbemittlerin", + "male": "Werbemittler", + }, {"neutral": "Werbetexter*in", "female": "Werbetexterin", "male": "Werbetexter"}, {"neutral": "Werkmeister*in", "female": "Werkmeisterin", "male": "Werkmeister"}, - {"neutral": "Werkstoffingenieur*in", "female": "Werkstoffingenieurin", "male": "Werkstoffingenieur"}, - {"neutral": "Werkstofftechnik", "female": "Werkstofftechnik", "male": "Werkstofftechnik"}, + { + "neutral": "Werkstoffingenieur*in", + "female": "Werkstoffingenieurin", + "male": "Werkstoffingenieur", + }, + { + "neutral": "Werkstofftechnik", + "female": "Werkstofftechnik", + "male": "Werkstofftechnik", + }, { "neutral": "Werkstofftechnik - Werkstoffprüfung", "female": "Werkstofftechnik - Werkstoffprüfung", "male": "Werkstofftechnik - Werkstoffprüfung", }, - {"neutral": "Werkstofftechniker*in", "female": "Werkstofftechnikerin", "male": "Werkstofftechniker"}, + { + "neutral": "Werkstofftechniker*in", + "female": "Werkstofftechnikerin", + "male": "Werkstofftechniker", + }, { "neutral": "Werkstofftechniker*in - Schwerpunkt Verbundstoffe", "female": "Werkstofftechnikerin - Schwerpunkt Verbundstoffe", "male": "Werkstofftechniker - Schwerpunkt Verbundstoffe", }, - {"neutral": "Werkstättenleiter*in", "female": "Werkstättenleiterin", "male": "Werkstättenleiter"}, - {"neutral": "Werkzeugbautechnik", "female": "Werkzeugbautechnik", "male": "Werkzeugbautechnik"}, - {"neutral": "Werkzeugkonstrukteur*in", "female": "Werkzeugkonstrukteurin", "male": "Werkzeugkonstrukteur"}, - {"neutral": "Werkzeugmacher*in", "female": "Werkzeugmacherin", "male": "Werkzeugmacher"}, - {"neutral": "Werkzeugmaschineur*in", "female": "Werkzeugmaschineurin", "male": "Werkzeugmaschineur"}, - {"neutral": "Werkzeugmechanik", "female": "Werkzeugmechanik", "male": "Werkzeugmechanik"}, - {"neutral": "Wertpapieranalyst*in", "female": "Wertpapieranalystin", "male": "Wertpapieranalyst"}, - {"neutral": "Wertpapierberater*in", "female": "Wertpapierberaterin", "male": "Wertpapierberater"}, - {"neutral": "Wertpapierhändler*in", "female": "Wertpapierhändlerin", "male": "Wertpapierhändler"}, - {"neutral": "Wettannehmer*in", "female": "Wettannehmerin", "male": "Wettannehmer"}, + { + "neutral": "Werkstättenleiter*in", + "female": "Werkstättenleiterin", + "male": "Werkstättenleiter", + }, + { + "neutral": "Werkzeugbautechnik", + "female": "Werkzeugbautechnik", + "male": "Werkzeugbautechnik", + }, + { + "neutral": "Werkzeugkonstrukteur*in", + "female": "Werkzeugkonstrukteurin", + "male": "Werkzeugkonstrukteur", + }, + { + "neutral": "Werkzeugmacher*in", + "female": "Werkzeugmacherin", + "male": "Werkzeugmacher", + }, + { + "neutral": "Werkzeugmaschineur*in", + "female": "Werkzeugmaschineurin", + "male": "Werkzeugmaschineur", + }, + { + "neutral": "Werkzeugmechanik", + "female": "Werkzeugmechanik", + "male": "Werkzeugmechanik", + }, + { + "neutral": "Wertpapieranalyst*in", + "female": "Wertpapieranalystin", + "male": "Wertpapieranalyst", + }, + { + "neutral": "Wertpapierberater*in", + "female": "Wertpapierberaterin", + "male": "Wertpapierberater", + }, + { + "neutral": "Wertpapierhändler*in", + "female": "Wertpapierhändlerin", + "male": "Wertpapierhändler", + }, + { + "neutral": "Wettannehmer*in", + "female": "Wettannehmerin", + "male": "Wettannehmer", + }, {"neutral": "Winzer*in", "female": "Winzerin", "male": "Winzer"}, - {"neutral": "Wirbelsäulentrainer*in", "female": "Wirbelsäulentrainerin", "male": "Wirbelsäulentrainer"}, - {"neutral": "Wirkwarenerzeuger*in", "female": "Wirkwarenerzeugerin", "male": "Wirkwarenerzeuger"}, + { + "neutral": "Wirbelsäulentrainer*in", + "female": "Wirbelsäulentrainerin", + "male": "Wirbelsäulentrainer", + }, + { + "neutral": "Wirkwarenerzeuger*in", + "female": "Wirkwarenerzeugerin", + "male": "Wirkwarenerzeuger", + }, { "neutral": "Wirtschafter*in (Gastgewerbe)", "female": "Wirtschafterin (Gastgewerbe)", @@ -4865,22 +9217,46 @@ class Provider(BaseProvider): "female": "Wirtschafts- und Agrarfachkraft", "male": "Wirtschafts- und Agrarfachkraft", }, - {"neutral": "Wirtschaftsberater*in", "female": "Wirtschaftsberaterin", "male": "Wirtschaftsberater"}, - {"neutral": "Wirtschaftscoach", "female": "Wirtschaftscoach", "male": "Wirtschaftscoach"}, - {"neutral": "Wirtschaftsforscher*in", "female": "Wirtschaftsforscherin", "male": "Wirtschaftsforscher"}, - {"neutral": "Wirtschaftsgeograf*in", "female": "Wirtschaftsgeografin", "male": "Wirtschaftsgeograf"}, + { + "neutral": "Wirtschaftsberater*in", + "female": "Wirtschaftsberaterin", + "male": "Wirtschaftsberater", + }, + { + "neutral": "Wirtschaftscoach", + "female": "Wirtschaftscoach", + "male": "Wirtschaftscoach", + }, + { + "neutral": "Wirtschaftsforscher*in", + "female": "Wirtschaftsforscherin", + "male": "Wirtschaftsforscher", + }, + { + "neutral": "Wirtschaftsgeograf*in", + "female": "Wirtschaftsgeografin", + "male": "Wirtschaftsgeograf", + }, { "neutral": "Wirtschaftsinformatiker*in", "female": "Wirtschaftsinformatikerin", "male": "Wirtschaftsinformatiker", }, - {"neutral": "Wirtschaftsingenieur*in", "female": "Wirtschaftsingenieurin", "male": "Wirtschaftsingenieur"}, + { + "neutral": "Wirtschaftsingenieur*in", + "female": "Wirtschaftsingenieurin", + "male": "Wirtschaftsingenieur", + }, { "neutral": "Wirtschaftsmathematiker*in (Operations Research)", "female": "Wirtschaftsmathematikerin (Operations Research)", "male": "Wirtschaftsmathematiker (Operations Research)", }, - {"neutral": "Wirtschaftsprüfer*in", "female": "Wirtschaftsprüferin", "male": "Wirtschaftsprüfer"}, + { + "neutral": "Wirtschaftsprüfer*in", + "female": "Wirtschaftsprüferin", + "male": "Wirtschaftsprüfer", + }, { "neutral": "Wirtschaftspädagoge / Wirtschaftspädagogin", "female": "Wirtschaftspädagogin", @@ -4891,8 +9267,16 @@ class Provider(BaseProvider): "female": "Wirtschaftsstatistikerin", "male": "Wirtschaftsstatistiker", }, - {"neutral": "Wirtschaftstechniker*in", "female": "Wirtschaftstechnikerin", "male": "Wirtschaftstechniker"}, - {"neutral": "Wirtschaftstreuhänder*in", "female": "Wirtschaftstreuhänderin", "male": "Wirtschaftstreuhänder"}, + { + "neutral": "Wirtschaftstechniker*in", + "female": "Wirtschaftstechnikerin", + "male": "Wirtschaftstechniker", + }, + { + "neutral": "Wirtschaftstreuhänder*in", + "female": "Wirtschaftstreuhänderin", + "male": "Wirtschaftstreuhänder", + }, { "neutral": "Wissenschaftshistoriker*in", "female": "Wissenschaftshistorikerin", @@ -4908,24 +9292,44 @@ class Provider(BaseProvider): "female": "Wissenschaftstheoretikerin", "male": "Wissenschaftstheoretiker", }, - {"neutral": "Wissensmanager*in", "female": "Wissensmanagerin", "male": "Wissensmanager"}, + { + "neutral": "Wissensmanager*in", + "female": "Wissensmanagerin", + "male": "Wissensmanager", + }, { "neutral": "Wärme-, Kälte-, Schall- und Brandschutztechnik", "female": "Wärme-, Kälte-, Schall- und Brandschutztechnik", "male": "Wärme-, Kälte-, Schall- und Brandschutztechnik", }, - {"neutral": "Wärmebehandlungstechnik", "female": "Wärmebehandlungstechnik", "male": "Wärmebehandlungstechnik"}, + { + "neutral": "Wärmebehandlungstechnik", + "female": "Wärmebehandlungstechnik", + "male": "Wärmebehandlungstechnik", + }, {"neutral": "Wäschenäher*in", "female": "Wäschenäherin", "male": "Wäschenäher"}, { "neutral": "Wäscher*in und Wäschebügler*in", "female": "Wäscherin und Wäschebüglerin", "male": "Wäscher und Wäschebügler", }, - {"neutral": "Wäschewarenerzeuger*in", "female": "Wäschewarenerzeugerin", "male": "Wäschewarenerzeuger"}, + { + "neutral": "Wäschewarenerzeuger*in", + "female": "Wäschewarenerzeugerin", + "male": "Wäschewarenerzeuger", + }, {"neutral": "Yoga Lehrer*in", "female": "Yoga Lehrerin", "male": "Yoga Lehrer"}, {"neutral": "Youtuber", "female": "Youtuber", "male": "Youtuber"}, - {"neutral": "Zahnarzt / Zahnärztin", "female": "Zahnärztin", "male": "Zahnarzt"}, - {"neutral": "Zahnarzthelfer*in", "female": "Zahnarzthelferin", "male": "Zahnarzthelfer"}, + { + "neutral": "Zahnarzt / Zahnärztin", + "female": "Zahnärztin", + "male": "Zahnarzt", + }, + { + "neutral": "Zahnarzthelfer*in", + "female": "Zahnarzthelferin", + "male": "Zahnarzthelfer", + }, {"neutral": "Zahntechnik", "female": "Zahntechnik", "male": "Zahntechnik"}, { "neutral": "Zahntechnische Fachassistenz", @@ -4947,46 +9351,130 @@ class Provider(BaseProvider): "female": "Zahnärztliche Assistentin", "male": "Zahnärztlicher Assistent", }, - {"neutral": "Zauberkünstler*in", "female": "Zauberkünstlerin", "male": "Zauberkünstler"}, - {"neutral": "Zeitungszusteller*in", "female": "Zeitungszustellerin", "male": "Zeitungszusteller"}, - {"neutral": "Zellstoffhersteller*in", "female": "Zellstoffherstellerin", "male": "Zellstoffhersteller"}, - {"neutral": "Zellstofftechniker*in", "female": "Zellstofftechnikerin", "male": "Zellstofftechniker"}, - {"neutral": "Zentralheizungsbauer*in", "female": "Zentralheizungsbauerin", "male": "Zentralheizungsbauer"}, - {"neutral": "Zerspanungstechnik", "female": "Zerspanungstechnik", "male": "Zerspanungstechnik"}, + { + "neutral": "Zauberkünstler*in", + "female": "Zauberkünstlerin", + "male": "Zauberkünstler", + }, + { + "neutral": "Zeitungszusteller*in", + "female": "Zeitungszustellerin", + "male": "Zeitungszusteller", + }, + { + "neutral": "Zellstoffhersteller*in", + "female": "Zellstoffherstellerin", + "male": "Zellstoffhersteller", + }, + { + "neutral": "Zellstofftechniker*in", + "female": "Zellstofftechnikerin", + "male": "Zellstofftechniker", + }, + { + "neutral": "Zentralheizungsbauer*in", + "female": "Zentralheizungsbauerin", + "male": "Zentralheizungsbauer", + }, + { + "neutral": "Zerspanungstechnik", + "female": "Zerspanungstechnik", + "male": "Zerspanungstechnik", + }, {"neutral": "Zimmerei", "female": "Zimmerei", "male": "Zimmerei"}, - {"neutral": "Zimmereitechnik", "female": "Zimmereitechnik", "male": "Zimmereitechnik"}, + { + "neutral": "Zimmereitechnik", + "female": "Zimmereitechnik", + "male": "Zimmereitechnik", + }, {"neutral": "Zimmerer*in", "female": "Zimmererin", "male": "Zimmerer"}, - {"neutral": "Zimmermädchen / Roomboy", "female": "Zimmermädchen", "male": "Roomboy"}, + { + "neutral": "Zimmermädchen / Roomboy", + "female": "Zimmermädchen", + "male": "Roomboy", + }, {"neutral": "Zinngießer*in", "female": "Zinngießerin", "male": "Zinngießer"}, - {"neutral": "Ziviltechniker*in", "female": "Ziviltechnikerin", "male": "Ziviltechniker"}, - {"neutral": "Zollbeamter / Zollbeamtin", "female": "Zollbeamtin", "male": "Zollbeamter"}, - {"neutral": "Zolldeklarant*in", "female": "Zolldeklarantin", "male": "Zolldeklarant"}, + { + "neutral": "Ziviltechniker*in", + "female": "Ziviltechnikerin", + "male": "Ziviltechniker", + }, + { + "neutral": "Zollbeamter / Zollbeamtin", + "female": "Zollbeamtin", + "male": "Zollbeamter", + }, + { + "neutral": "Zolldeklarant*in", + "female": "Zolldeklarantin", + "male": "Zolldeklarant", + }, {"neutral": "Zollfahnder*in", "female": "Zollfahnderin", "male": "Zollfahnder"}, - {"neutral": "Zoofachhändler*in", "female": "Zoofachhändlerin", "male": "Zoofachhändler"}, + { + "neutral": "Zoofachhändler*in", + "female": "Zoofachhändlerin", + "male": "Zoofachhändler", + }, {"neutral": "Zoologe / Zoologin", "female": "Zoologin", "male": "Zoologe"}, - {"neutral": "Zugbegleiter*in", "female": "Zugbegleiterin", "male": "Zugbegleiter"}, + { + "neutral": "Zugbegleiter*in", + "female": "Zugbegleiterin", + "male": "Zugbegleiter", + }, {"neutral": "Zugrevisor*in", "female": "Zugrevisorin", "male": "Zugrevisor"}, - {"neutral": "Zweiradtechniker*in", "female": "Zweiradtechnikerin", "male": "Zweiradtechniker"}, + { + "neutral": "Zweiradtechniker*in", + "female": "Zweiradtechnikerin", + "male": "Zweiradtechniker", + }, {"neutral": "Übersetzer*in", "female": "Übersetzerin", "male": "Übersetzer"}, - {"neutral": "Übungsschullehrer*in", "female": "Übungsschullehrerin", "male": "Übungsschullehrer"}, + { + "neutral": "Übungsschullehrer*in", + "female": "Übungsschullehrerin", + "male": "Übungsschullehrer", + }, {"neutral": "Öko-Auditor*in", "female": "Öko-Auditorin", "male": "Öko-Auditor"}, - {"neutral": "Öko-Consultant", "female": "Öko-Consultant", "male": "Öko-Consultant"}, - {"neutral": "Öko-Designer*in", "female": "Öko-Designerin", "male": "Öko-Designer"}, - {"neutral": "Ökobaumeister*in", "female": "Ökobaumeisterin", "male": "Ökobaumeister"}, + { + "neutral": "Öko-Consultant", + "female": "Öko-Consultant", + "male": "Öko-Consultant", + }, + { + "neutral": "Öko-Designer*in", + "female": "Öko-Designerin", + "male": "Öko-Designer", + }, + { + "neutral": "Ökobaumeister*in", + "female": "Ökobaumeisterin", + "male": "Ökobaumeister", + }, { "neutral": "Ökoenergieinstallationstechniker*in", "female": "Ökoenergieinstallationstechnikerin", "male": "Ökoenergieinstallationstechniker", }, {"neutral": "Ökologe / Ökologin", "female": "Ökologin", "male": "Ökologe"}, - {"neutral": "Ökologieberater*in", "female": "Ökologieberaterin", "male": "Ökologieberater"}, + { + "neutral": "Ökologieberater*in", + "female": "Ökologieberaterin", + "male": "Ökologieberater", + }, { "neutral": "Ökosystemwissenschafter*in", "female": "Ökosystemwissenschafterin", "male": "Ökosystemwissenschafter", }, - {"neutral": "Ägyptologe / Ägyptologin", "female": "Ägyptologin", "male": "Ägyptologe"}, - {"neutral": "Änderungsschneider*in", "female": "Änderungsschneiderin", "male": "Änderungsschneider"}, + { + "neutral": "Ägyptologe / Ägyptologin", + "female": "Ägyptologin", + "male": "Ägyptologe", + }, + { + "neutral": "Änderungsschneider*in", + "female": "Änderungsschneiderin", + "male": "Änderungsschneider", + }, ) jobs: ElementsType[str] = [job["neutral"] for job in jobs_dict] diff --git a/faker/providers/lorem/__init__.py b/faker/providers/lorem/__init__.py index b8ccbcde41..2126e9bfa0 100644 --- a/faker/providers/lorem/__init__.py +++ b/faker/providers/lorem/__init__.py @@ -54,7 +54,9 @@ def get_words_list( word_list = ext_word_list elif part_of_speech: if part_of_speech not in self.parts_of_speech: # type: ignore[attr-defined] - raise ValueError(f"{part_of_speech} is not recognized as a part of speech.") + raise ValueError( + f"{part_of_speech} is not recognized as a part of speech." + ) else: word_list = self.parts_of_speech[part_of_speech] # type: ignore[attr-defined] else: @@ -90,7 +92,9 @@ def words( :sample: nb=4, ext_word_list=['abc', 'def', 'ghi', 'jkl'], unique=True """ - word_list = self.get_words_list(part_of_speech=part_of_speech, ext_word_list=ext_word_list) + word_list = self.get_words_list( + part_of_speech=part_of_speech, ext_word_list=ext_word_list + ) if unique: unique_samples = cast(List[str], self.random_sample(word_list, length=nb)) @@ -98,7 +102,11 @@ def words( samples = cast(List[str], self.random_choices(word_list, length=nb)) return samples - def word(self, part_of_speech: Optional[str] = None, ext_word_list: Optional[Sequence[str]] = None) -> str: + def word( + self, + part_of_speech: Optional[str] = None, + ext_word_list: Optional[Sequence[str]] = None, + ) -> str: """Generate a word. This method uses |words| under the hood with the ``nb`` argument set to @@ -112,7 +120,10 @@ def word(self, part_of_speech: Optional[str] = None, ext_word_list: Optional[Seq return self.words(1, word_list)[0] def sentence( - self, nb_words: int = 6, variable_nb_words: bool = True, ext_word_list: Optional[Sequence[str]] = None + self, + nb_words: int = 6, + variable_nb_words: bool = True, + ext_word_list: Optional[Sequence[str]] = None, ) -> str: """Generate a sentence. @@ -142,7 +153,9 @@ def sentence( return self.word_connector.join(words) + self.sentence_punctuation - def sentences(self, nb: int = 3, ext_word_list: Optional[Sequence[str]] = None) -> List[str]: + def sentences( + self, nb: int = 3, ext_word_list: Optional[Sequence[str]] = None + ) -> List[str]: """Generate a list of sentences. This method uses |sentence| under the hood to generate sentences, and @@ -157,7 +170,10 @@ def sentences(self, nb: int = 3, ext_word_list: Optional[Sequence[str]] = None) return [self.sentence(ext_word_list=ext_word_list) for _ in range(0, nb)] def paragraph( - self, nb_sentences: int = 3, variable_nb_sentences: bool = True, ext_word_list: Optional[Sequence[str]] = None + self, + nb_sentences: int = 3, + variable_nb_sentences: bool = True, + ext_word_list: Optional[Sequence[str]] = None, ) -> str: """Generate a paragraph. @@ -183,11 +199,15 @@ def paragraph( if variable_nb_sentences: nb_sentences = self.randomize_nb_elements(nb_sentences, min=1) - para = self.word_connector.join(self.sentences(nb_sentences, ext_word_list=ext_word_list)) + para = self.word_connector.join( + self.sentences(nb_sentences, ext_word_list=ext_word_list) + ) return para - def paragraphs(self, nb: int = 3, ext_word_list: Optional[Sequence[str]] = None) -> List[str]: + def paragraphs( + self, nb: int = 3, ext_word_list: Optional[Sequence[str]] = None + ) -> List[str]: """Generate a list of paragraphs. This method uses |paragraph| under the hood to generate paragraphs, and @@ -200,7 +220,9 @@ def paragraphs(self, nb: int = 3, ext_word_list: Optional[Sequence[str]] = None) """ return [self.paragraph(ext_word_list=ext_word_list) for _ in range(0, nb)] - def text(self, max_nb_chars: int = 200, ext_word_list: Optional[Sequence[str]] = None) -> str: + def text( + self, max_nb_chars: int = 200, ext_word_list: Optional[Sequence[str]] = None + ) -> str: """Generate a text string. The ``max_nb_chars`` argument controls the approximate number of @@ -225,7 +247,9 @@ def text(self, max_nb_chars: int = 200, ext_word_list: Optional[Sequence[str]] = # determine how many words are needed to reach the $max_nb_chars # once; while size < max_nb_chars: - word = (self.word_connector if size else "") + self.word(ext_word_list=ext_word_list) + word = (self.word_connector if size else "") + self.word( + ext_word_list=ext_word_list + ) text.append(word) size += len(word) text.pop() @@ -239,7 +263,9 @@ def text(self, max_nb_chars: int = 200, ext_word_list: Optional[Sequence[str]] = # determine how many sentences are needed to reach the # $max_nb_chars once while size < max_nb_chars: - sentence = (self.word_connector if size else "") + self.sentence(ext_word_list=ext_word_list) + sentence = (self.word_connector if size else "") + self.sentence( + ext_word_list=ext_word_list + ) text.append(sentence) size += len(sentence) text.pop() @@ -250,7 +276,9 @@ def text(self, max_nb_chars: int = 200, ext_word_list: Optional[Sequence[str]] = # determine how many paragraphs are needed to reach the # $max_nb_chars once while size < max_nb_chars: - paragraph = ("\n" if size else "") + self.paragraph(ext_word_list=ext_word_list) + paragraph = ("\n" if size else "") + self.paragraph( + ext_word_list=ext_word_list + ) text.append(paragraph) size += len(paragraph) text.pop() @@ -258,7 +286,10 @@ def text(self, max_nb_chars: int = 200, ext_word_list: Optional[Sequence[str]] = return "".join(text) def texts( - self, nb_texts: int = 3, max_nb_chars: int = 200, ext_word_list: Optional[Sequence[str]] = None + self, + nb_texts: int = 3, + max_nb_chars: int = 200, + ext_word_list: Optional[Sequence[str]] = None, ) -> List[str]: """Generate a list of text strings. diff --git a/faker/providers/lorem/en_PH/__init__.py b/faker/providers/lorem/en_PH/__init__.py index fedaf8c4ff..4915d4e0dd 100644 --- a/faker/providers/lorem/en_PH/__init__.py +++ b/faker/providers/lorem/en_PH/__init__.py @@ -37,7 +37,9 @@ def english_words(self, nb: int = 3, unique: bool = False) -> List[str]: return self.words(nb=nb, ext_word_list=word_list, unique=unique) - def english_sentence(self, nb_words: int = 6, variable_nb_words: bool = True) -> str: + def english_sentence( + self, nb_words: int = 6, variable_nb_words: bool = True + ) -> str: """Generate a sentence in English. :sample: nb_words=10 @@ -52,13 +54,17 @@ def english_sentences(self, nb: int = 3) -> List[str]: """ return self.sentences(nb, self.english_word_list) - def english_paragraph(self, nb_sentences: int = 3, variable_nb_sentences: bool = True) -> str: + def english_paragraph( + self, nb_sentences: int = 3, variable_nb_sentences: bool = True + ) -> str: """Generate a paragraph in English. :sample: nb_sentences=5 :sample: nb_sentences=5, variable_nb_sentences=False """ - return self.paragraph(nb_sentences, variable_nb_sentences, self.english_word_list) + return self.paragraph( + nb_sentences, variable_nb_sentences, self.english_word_list + ) def english_paragraphs(self, nb: int = 3) -> List[str]: """Generate a list of paragraphs in English. diff --git a/faker/providers/misc/__init__.py b/faker/providers/misc/__init__.py index 6ed2e958dd..2f4e5f0a61 100644 --- a/faker/providers/misc/__init__.py +++ b/faker/providers/misc/__init__.py @@ -125,7 +125,9 @@ def sha256(self, raw_output: bool = False) -> Union[bytes, str]: :sample: raw_output=False :sample: raw_output=True """ - res: hashlib._Hash = hashlib.sha256(str(self.generator.random.random()).encode()) + res: hashlib._Hash = hashlib.sha256( + str(self.generator.random.random()).encode() + ) if raw_output: return res.digest() return res.hexdigest() @@ -144,7 +146,9 @@ def uuid4(self, cast_to: Callable[[uuid.UUID], bytes]) -> bytes: ... def uuid4( self, - cast_to: Optional[Union[Callable[[uuid.UUID], str], Callable[[uuid.UUID], bytes]]] = str, + cast_to: Optional[ + Union[Callable[[uuid.UUID], str], Callable[[uuid.UUID], bytes]] + ] = str, ) -> Union[bytes, str, uuid.UUID]: """Generate a random UUID4 object and cast it to another type if specified using a callable ``cast_to``. @@ -156,7 +160,9 @@ def uuid4( :sample: cast_to=None """ # Based on http://stackoverflow.com/q/41186818 - generated_uuid: uuid.UUID = uuid.UUID(int=self.generator.random.getrandbits(128), version=4) + generated_uuid: uuid.UUID = uuid.UUID( + int=self.generator.random.getrandbits(128), version=4 + ) if cast_to is not None: return cast_to(generated_uuid) return generated_uuid @@ -196,7 +202,9 @@ def password( required_tokens.append(self.generator.random.choice(string.ascii_lowercase)) choices += string.ascii_lowercase - assert len(required_tokens) <= length, "Required length is shorter than required characters" + assert ( + len(required_tokens) <= length + ), "Required length is shorter than required characters" # Generate a first version of the password chars: str = self.random_choices(choices, length=length) # type: ignore @@ -263,13 +271,19 @@ def zip( zip_buffer = io.BytesIO() remaining_size = uncompressed_size - with zipfile.ZipFile(zip_buffer, mode="w", compression=compression_) as zip_handle: + with zipfile.ZipFile( + zip_buffer, mode="w", compression=compression_ + ) as zip_handle: for file_number in range(1, num_files + 1): filename = self.generator.pystr() + str(file_number) - max_allowed_size = remaining_size - (num_files - file_number) * min_file_size + max_allowed_size = ( + remaining_size - (num_files - file_number) * min_file_size + ) if file_number < num_files: - file_size = self.generator.random.randint(min_file_size, max_allowed_size) + file_size = self.generator.random.randint( + min_file_size, max_allowed_size + ) remaining_size = remaining_size - file_size else: file_size = remaining_size @@ -333,9 +347,13 @@ def tar( file_buffer = io.BytesIO() filename = self.generator.pystr() + str(file_number) - max_allowed_size = remaining_size - (num_files - file_number) * min_file_size + max_allowed_size = ( + remaining_size - (num_files - file_number) * min_file_size + ) if file_number < num_files: - file_size = self.generator.random.randint(min_file_size, max_allowed_size) + file_size = self.generator.random.randint( + min_file_size, max_allowed_size + ) remaining_size = remaining_size - file_size else: file_size = remaining_size @@ -377,13 +395,20 @@ def image( import PIL.Image import PIL.ImageDraw except ImportError: - raise UnsupportedFeature("`image` requires the `Pillow` python library.", "image") + raise UnsupportedFeature( + "`image` requires the `Pillow` python library.", "image" + ) (width, height) = size - image = PIL.Image.new("RGB", size, self.generator.color(hue=hue, luminosity=luminosity)) + image = PIL.Image.new( + "RGB", size, self.generator.color(hue=hue, luminosity=luminosity) + ) draw = PIL.ImageDraw.Draw(image) draw.polygon( - [(self.random_int(0, width), self.random_int(0, height)) for _ in range(self.random_int(3, 12))], + [ + (self.random_int(0, width), self.random_int(0, height)) + for _ in range(self.random_int(3, 12)) + ], fill=self.generator.color(hue=hue, luminosity=luminosity), outline=self.generator.color(hue=hue, luminosity=luminosity), ) @@ -437,7 +462,9 @@ def dsv( if not isinstance(header, (list, tuple)): raise TypeError("`header` must be a tuple or a list") if len(header) != len(data_columns): - raise ValueError("`header` and `data_columns` must have matching lengths") + raise ValueError( + "`header` and `data_columns` must have matching lengths" + ) dsv_buffer = io.StringIO() writer = csv.writer(dsv_buffer, dialect=dialect, **fmtparams) @@ -545,7 +572,9 @@ def json_bytes( For more information on the different arguments of this method, refer to :meth:`json() ` which is used under the hood. """ - return self.json(data_columns=data_columns, num_rows=num_rows, indent=indent, cls=cls).encode() + return self.json( + data_columns=data_columns, num_rows=num_rows, indent=indent, cls=cls + ).encode() def json( self, @@ -602,7 +631,9 @@ def json( "name": "{{name}}", "residency": "{{address}}", } - data_columns: Union[List, Dict] = data_columns if data_columns else default_data_columns + data_columns: Union[List, Dict] = ( + data_columns if data_columns else default_data_columns + ) def process_list_structure(data: Sequence[Any]) -> Any: entry: Dict[str, Any] = {} @@ -619,12 +650,16 @@ def process_list_structure(data: Sequence[Any]) -> Any: if isinstance(definition, tuple): entry[name] = process_list_structure(definition) elif isinstance(definition, (list, set)): - entry[name] = [process_list_structure([item]) for item in definition] + entry[name] = [ + process_list_structure([item]) for item in definition + ] else: entry[name] = self._value_format_selection(definition, **kwargs) return entry - def process_dict_structure(data: Union[int, float, bool, Dict[str, Any]]) -> Any: + def process_dict_structure( + data: Union[int, float, bool, Dict[str, Any]] + ) -> Any: entry: Dict[str, Any] = {} if isinstance(data, str): @@ -633,7 +668,9 @@ def process_dict_structure(data: Union[int, float, bool, Dict[str, Any]]) -> Any if isinstance(data, dict): for name, definition in data.items(): if isinstance(definition, (tuple, list, set)): - entry[name] = [process_dict_structure(item) for item in definition] + entry[name] = [ + process_dict_structure(item) for item in definition + ] elif isinstance(definition, (dict, int, float, bool)): entry[name] = process_dict_structure(definition) else: @@ -652,7 +689,9 @@ def create_json_structure(data_columns: Union[Dict, List]) -> dict: raise TypeError("Invalid data_columns type. Must be a dictionary or list") if num_rows == 1: - return json.dumps(create_json_structure(data_columns), indent=indent, cls=cls) + return json.dumps( + create_json_structure(data_columns), indent=indent, cls=cls + ) data = [create_json_structure(data_columns) for _ in range(num_rows)] return json.dumps(data, indent=indent, cls=cls) @@ -676,7 +715,9 @@ def xml( try: import xmltodict except ImportError: - raise UnsupportedFeature("`xml` requires the `xmltodict` Python library.", "xml") + raise UnsupportedFeature( + "`xml` requires the `xmltodict` Python library.", "xml" + ) _dict = self.generator.pydict( nb_elements=nb_elements, variable_nb_elements=variable_nb_elements, @@ -686,7 +727,12 @@ def xml( _dict = {self.generator.word(): _dict} return xmltodict.unparse(_dict) - def fixed_width(self, data_columns: Optional[DataColumns] = None, num_rows: int = 10, align: str = "left") -> str: + def fixed_width( + self, + data_columns: Optional[DataColumns] = None, + num_rows: int = 10, + align: str = "left", + ) -> str: """ Generate random fixed width values. @@ -750,7 +796,9 @@ def fixed_width(self, data_columns: Optional[DataColumns] = None, num_rows: int data.append("".join(row)) return "\n".join(data) - def _value_format_selection(self, definition: str, **kwargs: Any) -> Union[int, str]: + def _value_format_selection( + self, definition: str, **kwargs: Any + ) -> Union[int, str]: """ Formats the string in different ways depending on its contents. diff --git a/faker/providers/misc/en_PH/__init__.py b/faker/providers/misc/en_PH/__init__.py index f625e72dd6..f31ad5d47f 100644 --- a/faker/providers/misc/en_PH/__init__.py +++ b/faker/providers/misc/en_PH/__init__.py @@ -200,7 +200,9 @@ class Provider(MiscProvider): "Virgo", "Zodiac", ) - random_object_names = gemstone_names + mountain_names + plant_names + space_object_names + random_object_names = ( + gemstone_names + mountain_names + plant_names + space_object_names + ) def gemstone_name(self) -> str: return self.random_element(self.gemstone_names) diff --git a/faker/providers/passport/en_US/__init__.py b/faker/providers/passport/en_US/__init__.py index c17b5ed219..f464c7367c 100644 --- a/faker/providers/passport/en_US/__init__.py +++ b/faker/providers/passport/en_US/__init__.py @@ -40,22 +40,29 @@ def passport_dates(self, birthday: date = date.today()) -> Tuple[str, str, str]: age = (today - birthday).days // 365 if age < 16: expiry_years = 5 - issue_date = self.generator.date_time_between(today - timedelta(days=expiry_years * 365 - 1), today) + issue_date = self.generator.date_time_between( + today - timedelta(days=expiry_years * 365 - 1), today + ) # Checks if age is less than 5 so issue date is not before birthdate if age < 5: issue_date = self.generator.date_time_between(birthday, today) elif age >= 26: expiry_years = 10 - issue_date = self.generator.date_time_between(today - timedelta(days=expiry_years * 365 - 1), today) + issue_date = self.generator.date_time_between( + today - timedelta(days=expiry_years * 365 - 1), today + ) else: # In cases between age 16 and 26, the issue date is 5 years ago, but expiry may be in 10 or 5 years expiry_years = 5 issue_date = self.generator.date_time_between( - today - timedelta(days=expiry_years * 365 - 1), birthday + timedelta(days=16 * 365 - 1) + today - timedelta(days=expiry_years * 365 - 1), + birthday + timedelta(days=16 * 365 - 1), ) # all people over 21 must have been over 16 when they recieved passport or it will be expired otherwise if age >= 21: - issue_date = self.generator.date_time_between(today - timedelta(days=expiry_years * 365 - 1), today) + issue_date = self.generator.date_time_between( + today - timedelta(days=expiry_years * 365 - 1), today + ) expiry_years = 10 if issue_date.day == 29 and issue_date.month == 2: diff --git a/faker/providers/passport/ru_RU/__init__.py b/faker/providers/passport/ru_RU/__init__.py index 04637c28d2..82af4a0970 100644 --- a/faker/providers/passport/ru_RU/__init__.py +++ b/faker/providers/passport/ru_RU/__init__.py @@ -20,7 +20,9 @@ class Provider(BaseProvider): def passport_owner(self, gender: SexLiteral = "M") -> Tuple[str, str]: generator_string = GENDER_TO_GENERATOR[gender] - last_name, first_name, middle_name = self.generator.parse(generator_string).split() + last_name, first_name, middle_name = self.generator.parse( + generator_string + ).split() first_name_united_with_middle = first_name + " " + middle_name return last_name, first_name_united_with_middle diff --git a/faker/providers/person/__init__.py b/faker/providers/person/__init__.py index 54760558bb..b6f3ec1067 100644 --- a/faker/providers/person/__init__.py +++ b/faker/providers/person/__init__.py @@ -268,7 +268,11 @@ def last_name_female(self) -> str: def prefix(self) -> str: if hasattr(self, "prefixes"): return self.random_element(self.prefixes) # type: ignore[attr-defined] - if hasattr(self, "prefixes_male") and hasattr(self, "prefixes_female") and hasattr(self, "prefixes_nonbinary"): + if ( + hasattr(self, "prefixes_male") + and hasattr(self, "prefixes_female") + and hasattr(self, "prefixes_nonbinary") + ): prefixes = add_ordereddicts( self.prefixes_male, # type: ignore[attr-defined] self.prefixes_female, # type: ignore[attr-defined] @@ -298,7 +302,11 @@ def prefix_female(self) -> str: def suffix(self) -> str: if hasattr(self, "suffixes"): return self.random_element(self.suffixes) # type: ignore[attr-defined] - if hasattr(self, "suffixes_male") and hasattr(self, "suffixes_female") and hasattr(self, "suffixes_nonbinary"): + if ( + hasattr(self, "suffixes_male") + and hasattr(self, "suffixes_female") + and hasattr(self, "suffixes_nonbinary") + ): suffixes = add_ordereddicts( self.suffixes_male, # type: ignore[attr-defined] self.suffixes_female, # type: ignore[attr-defined] diff --git a/faker/providers/person/bn_BD/__init__.py b/faker/providers/person/bn_BD/__init__.py index 2cc5cbdb88..1d1adcb647 100644 --- a/faker/providers/person/bn_BD/__init__.py +++ b/faker/providers/person/bn_BD/__init__.py @@ -529,12 +529,20 @@ class Provider(PersonProvider): formats = formats_male + formats_female - first_names_male = first_names_male_common + first_names_male_hinduism + first_names_male_islamic - first_names_female = first_names_female_common + first_names_female_hinduism + first_names_female_islamic + first_names_male = ( + first_names_male_common + first_names_male_hinduism + first_names_male_islamic + ) + first_names_female = ( + first_names_female_common + + first_names_female_hinduism + + first_names_female_islamic + ) first_names = first_names_male + first_names_female last_names_male = last_names_common + last_names_hinduism + last_names_islamic - last_names_female = last_names_common + last_names_hinduism + last_names_female_islamic + last_names_female = ( + last_names_common + last_names_hinduism + last_names_female_islamic + ) last_names = last_names_male + last_names_female def first_name_male_common(self) -> str: diff --git a/faker/providers/person/cs_CZ/__init__.py b/faker/providers/person/cs_CZ/__init__.py index 8edef91d65..6bf5c9fc2f 100644 --- a/faker/providers/person/cs_CZ/__init__.py +++ b/faker/providers/person/cs_CZ/__init__.py @@ -531,7 +531,17 @@ class Provider(PersonProvider): # https://cs.wikipedia.org/wiki/Akademick%C3%BD_titul # https://eprehledy.cz/ceske_tituly.php - degrees = ("JUDr.", "Ing.", "Bc.", "Mgr.", "MUDr.", "RNDr.", "Ing. arch.", "MVDr.", "PhDr.") + degrees = ( + "JUDr.", + "Ing.", + "Bc.", + "Mgr.", + "MUDr.", + "RNDr.", + "Ing. arch.", + "MVDr.", + "PhDr.", + ) prefixes_male = ("pan",) + degrees diff --git a/faker/providers/person/en_NG/__init__.py b/faker/providers/person/en_NG/__init__.py index 93ff744006..65dec446ea 100644 --- a/faker/providers/person/en_NG/__init__.py +++ b/faker/providers/person/en_NG/__init__.py @@ -13,6 +13,7 @@ class Provider(PersonProvider): # Male first names first_names_male = [ + # Existing "John", "Emmanuel", "Peter", @@ -33,10 +34,57 @@ class Provider(PersonProvider): "Nathaniel", "Simon", "Cornelius", + # Yoruba + "Oluwaseun", + "Oluwafemi", + "Ayodele", + "Adekunle", + "Adewale", + "Olamide", + "Babajide", + "Segun", + "Tunde", + "Fisayo", + "Bamidele", + "Dotun", + # Igbo + "Chukwuemeka", + "Chinedu", + "Ifeanyi", + "Chibuzor", + "Obinna", + "Emeka", + "Uchenna", + "Kelechi", + "Tobechi", + "Somtochukwu", + # Hausa + "Abubakar", + "Ibrahim", + "Suleiman", + "Muhammad", + "Nasir", + "Kabiru", + "Ismail", + "Shehu", + "Bashir", + "Umar", + # Other Nigerian / multi-ethnic + "Efe", + "Ovie", + "Tari", + "Boma", + "Tamuno", + "Sesan", + "Kunle", + "Ekene", + "Okechukwu", + "Ayo", ] # Female first names first_names_female = [ + # Existing "Mary", "Grace", "Joy", @@ -57,6 +105,45 @@ class Provider(PersonProvider): "Ruth", "Angela", "Faith", + # Yoruba + "Oluwatoyin", + "Oluwaseun", + "Adejoke", + "Aderonke", + "Opeyemi", + "Yetunde", + "Abike", + "Dupe", + "Morayo", + "Yewande", + # Igbo + "Chiamaka", + "Ngozi", + "Amarachi", + "Chidera", + "Oluchi", + "Chinonso", + "Adaugo", + "Chisom", + "Ifunanya", + "Nkechi", + # Hausa + "Zainab", + "Aisha", + "Hadiza", + "Fatima", + "Halima", + "Maimuna", + "Rukaiya", + "Bilqis", + "Jamila", + "Asma'u", + # Other Nigerian / multi-ethnic + "Ebiere", + "Tamunomi", + "Alero", + "Fadekemi", + "Omasan", ] # Combined list diff --git a/faker/providers/person/es_CL/__init__.py b/faker/providers/person/es_CL/__init__.py index 1274141674..2a639ea7ed 100644 --- a/faker/providers/person/es_CL/__init__.py +++ b/faker/providers/person/es_CL/__init__.py @@ -1058,7 +1058,9 @@ def first_names(self): # type: ignore[override] """Returns a list of weighted first names, male and female.""" if not hasattr(self, "_first_names"): self._first_names = OrderedDict() - for a, b in zip_longest(self.first_names_male.items(), self.first_names_female.items()): + for a, b in zip_longest( + self.first_names_male.items(), self.first_names_female.items() + ): if a is not None: name, weight = a self._first_names[name] = weight / 2 diff --git a/faker/providers/person/fr_BE/__init__.py b/faker/providers/person/fr_BE/__init__.py index 553c79c3df..95728ececd 100644 --- a/faker/providers/person/fr_BE/__init__.py +++ b/faker/providers/person/fr_BE/__init__.py @@ -18,10 +18,16 @@ class Provider(PersonProvider): # # Below reflects these with an assumed 10% doubled name (for both genders). formats_male = OrderedDict( - (("{{first_name_male}} {{last_name}}", 90), ("{{first_name_male}} {{last_name}} {{last_name}}", 10)) + ( + ("{{first_name_male}} {{last_name}}", 90), + ("{{first_name_male}} {{last_name}} {{last_name}}", 10), + ) ) formats_female = OrderedDict( - (("{{first_name_female}} {{last_name}}", 90), ("{{first_name_female}} {{last_name}} {{last_name}}", 10)) + ( + ("{{first_name_female}} {{last_name}}", 90), + ("{{first_name_female}} {{last_name}} {{last_name}}", 10), + ) ) formats = OrderedDict(Counter(formats_male) + Counter(formats_female)) diff --git a/faker/providers/person/is_IS/__init__.py b/faker/providers/person/is_IS/__init__.py index 8c82226a3d..a0390dfbc5 100644 --- a/faker/providers/person/is_IS/__init__.py +++ b/faker/providers/person/is_IS/__init__.py @@ -4,7 +4,10 @@ class Provider(PersonProvider): - formats_male = ("{{first_name_male}} {{last_name_male}}", "{{first_name_male}} {{middle_name}} {{last_name_male}}") + formats_male = ( + "{{first_name_male}} {{last_name_male}}", + "{{first_name_male}} {{middle_name}} {{last_name_male}}", + ) formats_female = ( "{{first_name_female}} {{last_name_female}}", @@ -3788,7 +3791,9 @@ def last_name_female(self) -> str: # Icelandic male and female last names def last_name(self) -> str: - get_random_last_name = self.random_element((self.last_name_male, self.last_name_female)) + get_random_last_name = self.random_element( + (self.last_name_male, self.last_name_female) + ) return get_random_last_name() # Icelandic middle names diff --git a/faker/providers/person/ja_JP/__init__.py b/faker/providers/person/ja_JP/__init__.py index db430b3527..22cf02c3e6 100644 --- a/faker/providers/person/ja_JP/__init__.py +++ b/faker/providers/person/ja_JP/__init__.py @@ -156,7 +156,9 @@ class Provider(PersonProvider): romanized_formats_male = ("{{first_romanized_name_male}} {{last_romanized_name}}",) - romanized_formats_female = ("{{first_romanized_name_female}} {{last_romanized_name}}",) + romanized_formats_female = ( + "{{first_romanized_name_female}} {{last_romanized_name}}", + ) romanized_formats = romanized_formats_male + romanized_formats_female diff --git a/faker/providers/person/nl_BE/__init__.py b/faker/providers/person/nl_BE/__init__.py index bac5eace9d..a20974772e 100644 --- a/faker/providers/person/nl_BE/__init__.py +++ b/faker/providers/person/nl_BE/__init__.py @@ -18,10 +18,16 @@ class Provider(PersonProvider): # # Below reflects these with an assumed 10% doubled name (for both genders). formats_male = OrderedDict( - (("{{first_name_male}} {{last_name}}", 90), ("{{first_name_male}} {{last_name}} {{last_name}}", 10)) + ( + ("{{first_name_male}} {{last_name}}", 90), + ("{{first_name_male}} {{last_name}} {{last_name}}", 10), + ) ) formats_female = OrderedDict( - (("{{first_name_female}} {{last_name}}", 90), ("{{first_name_female}} {{last_name}} {{last_name}}", 10)) + ( + ("{{first_name_female}} {{last_name}}", 90), + ("{{first_name_female}} {{last_name}} {{last_name}}", 10), + ) ) formats = OrderedDict(Counter(formats_male) + Counter(formats_female)) diff --git a/faker/providers/person/pl_PL/__init__.py b/faker/providers/person/pl_PL/__init__.py index faca7f3986..47b0fecf22 100644 --- a/faker/providers/person/pl_PL/__init__.py +++ b/faker/providers/person/pl_PL/__init__.py @@ -10,9 +10,16 @@ def checksum_identity_card_number(characters: Sequence[Union[str, int]]) -> int: """ weights_for_check_digit = [7, 3, 1, 0, 7, 3, 1, 7, 3] integer_characters = [ - (ord(character) - 55) if isinstance(character, str) else character for character in characters + (ord(character) - 55) if isinstance(character, str) else character + for character in characters ] - check_digit = sum(weight * ch for weight, ch in zip(weights_for_check_digit, integer_characters)) % 10 + check_digit = ( + sum( + weight * ch + for weight, ch in zip(weights_for_check_digit, integer_characters) + ) + % 10 + ) return check_digit @@ -4119,7 +4126,9 @@ def pesel_compute_check_digit(self, pesel: str) -> int: checksum_values = [9, 7, 3, 1, 9, 7, 3, 1, 9, 7] return sum(int(a) * b for a, b in zip(pesel, checksum_values)) % 10 - def pesel(self, date_of_birth: Optional[datetime] = None, sex: Optional[str] = None) -> str: + def pesel( + self, date_of_birth: Optional[datetime] = None, sex: Optional[str] = None + ) -> str: """ Returns 11 characters of Universal Electronic System for Registration of the Population. Polish: Powszechny Elektroniczny System Ewidencji Ludności. diff --git a/faker/providers/person/sk_SK/__init__.py b/faker/providers/person/sk_SK/__init__.py index ff0c47f6d6..5594bf45da 100644 --- a/faker/providers/person/sk_SK/__init__.py +++ b/faker/providers/person/sk_SK/__init__.py @@ -2275,7 +2275,17 @@ class Provider(PersonProvider): last_names = last_names_male + last_names_female # Degrees from - degrees = ("JUDr.", "Ing.", "Bc.", "Mgr.", "MUDr.", "RNDr.", "Ing. arch.", "MVDr.", "PhDr.") + degrees = ( + "JUDr.", + "Ing.", + "Bc.", + "Mgr.", + "MUDr.", + "RNDr.", + "Ing. arch.", + "MVDr.", + "PhDr.", + ) prefixes_male = ("pán",) + degrees diff --git a/faker/providers/person/uk_UA/__init__.py b/faker/providers/person/uk_UA/__init__.py index 15268f1415..72d542910a 100644 --- a/faker/providers/person/uk_UA/__init__.py +++ b/faker/providers/person/uk_UA/__init__.py @@ -1313,7 +1313,9 @@ def middle_name_female(self) -> str: """ return self.random_element(self.middle_names_female) - def full_name(self, gender: Optional[SexLiteral] = None, short: Optional[bool] = False) -> str: + def full_name( + self, gender: Optional[SexLiteral] = None, short: Optional[bool] = False + ) -> str: """ Generate Full Name - gender = 'M' or 'F' optional params diff --git a/faker/providers/person/vi_VN/__init__.py b/faker/providers/person/vi_VN/__init__.py index 563c5df3e7..3557332efd 100644 --- a/faker/providers/person/vi_VN/__init__.py +++ b/faker/providers/person/vi_VN/__init__.py @@ -94,7 +94,18 @@ class Provider(PersonProvider): "Mai Bảo", ) - last_names = ("Nguyễn", "Trần", "Lê", "Phạm", "Vũ", "Đặng", "Bùi", "Dương", "Mai", "Hoàng") + last_names = ( + "Nguyễn", + "Trần", + "Lê", + "Phạm", + "Vũ", + "Đặng", + "Bùi", + "Dương", + "Mai", + "Hoàng", + ) # Typically, Vietnamese will be addressed with their given name and a prefix # https://en.wikipedia.org/wiki/Vietnamese_name#Given_name diff --git a/faker/providers/person/zh_TW/__init__.py b/faker/providers/person/zh_TW/__init__.py index ca6bf31b64..88a0c7d55f 100644 --- a/faker/providers/person/zh_TW/__init__.py +++ b/faker/providers/person/zh_TW/__init__.py @@ -900,7 +900,9 @@ class Provider(PersonProvider): (("{{last_romanized_name}} {{first_romanized_name_female}}", 1),) # 漢人 Han ) - romanized_formats_male = OrderedDict((("{{last_romanized_name}} {{first_romanized_name_male}}", 1),)) # 漢人 Han + romanized_formats_male = OrderedDict( + (("{{last_romanized_name}} {{first_romanized_name_male}}", 1),) + ) # 漢人 Han romanized_formats = romanized_formats_male.copy() romanized_formats.update(romanized_formats_female) diff --git a/faker/providers/phone_number/ar_AE/__init__.py b/faker/providers/phone_number/ar_AE/__init__.py index 6c85049a14..7cf32c553d 100644 --- a/faker/providers/phone_number/ar_AE/__init__.py +++ b/faker/providers/phone_number/ar_AE/__init__.py @@ -38,7 +38,9 @@ class Provider(PhoneNumberProvider): "922", ) - formats = cellphone_formats + telephone_formats + services_phones_formats + toll_formats + formats = ( + cellphone_formats + telephone_formats + services_phones_formats + toll_formats + ) def cellphone_provider_code(self) -> str: return self.random_element( diff --git a/faker/providers/phone_number/ar_PS/__init__.py b/faker/providers/phone_number/ar_PS/__init__.py index afc74f5781..f990eb188c 100644 --- a/faker/providers/phone_number/ar_PS/__init__.py +++ b/faker/providers/phone_number/ar_PS/__init__.py @@ -88,7 +88,9 @@ class Provider(PhoneNumberProvider): "102", ) - formats = cellphone_formats + telephone_formats + services_phones_formats + toll_formats + formats = ( + cellphone_formats + telephone_formats + services_phones_formats + toll_formats + ) def provider_code(self) -> str: return self.random_element( diff --git a/faker/providers/phone_number/de_LU/__init__.py b/faker/providers/phone_number/de_LU/__init__.py index 9097cf3512..40c4bf201c 100644 --- a/faker/providers/phone_number/de_LU/__init__.py +++ b/faker/providers/phone_number/de_LU/__init__.py @@ -34,4 +34,6 @@ class Provider(PhoneNumberProvider): prefixes = ("+352 ", "") def phone_number(self) -> str: - return self.random_element(self.prefixes) + self.numerify(self.random_element(self.formats)) + return self.random_element(self.prefixes) + self.numerify( + self.random_element(self.formats) + ) diff --git a/faker/providers/phone_number/en_NG/__init__.py b/faker/providers/phone_number/en_NG/__init__.py new file mode 100644 index 0000000000..d7f182728e --- /dev/null +++ b/faker/providers/phone_number/en_NG/__init__.py @@ -0,0 +1,42 @@ +from .. import Provider as PhoneNumberProvider + + +class Provider(PhoneNumberProvider): + # source: + # https://en.wikipedia.org/wiki/Telephone_numbers_in_Nigeria + + cellphone_formats = ( + "0803#######", + "0806#######", + "0703#######", + "0706#######", + "0813#######", + "0816#######", + "0810#######", + "0814#######", + "0903#######", + "0906#######", + "0913#######", + "0916#######", + "0805#######", + "0807#######", + "0705#######", + "0815#######", + "0811#######", + "0905#######", + "0915#######", + "0802#######", + "0808#######", + "0708#######", + "0812#######", + "0902#######", + "0907#######", + "0901#######", + "0912#######", + "0911#######", + "0809#######", + "0818#######", + "0817#######", + "0909#######", + "0908#######", + ) diff --git a/faker/providers/phone_number/en_NG/__init__.pyi b/faker/providers/phone_number/en_NG/__init__.pyi new file mode 100644 index 0000000000..e69de29bb2 diff --git a/faker/providers/phone_number/en_PH/__init__.py b/faker/providers/phone_number/en_PH/__init__.py index 97ea46cda9..c0dc65ce27 100644 --- a/faker/providers/phone_number/en_PH/__init__.py +++ b/faker/providers/phone_number/en_PH/__init__.py @@ -123,13 +123,17 @@ class Provider(BaseProvider): "+63{{sun_mobile_number_prefix}}-###-####", ) mobile_number_formats: Tuple[str, ...] = ( - globe_mobile_number_formats + smart_mobile_number_formats + sun_mobile_number_formats + globe_mobile_number_formats + + smart_mobile_number_formats + + sun_mobile_number_formats ) - bayantel_landline_identifiers: Tuple[str, ...] = tuple(str(x) for x in range(3000, 3500)) - misc_landline_identifiers: Tuple[str, ...] = tuple(str(x) for x in range(5300, 5800)) + tuple( - str(x) for x in range(6000, 6700) + bayantel_landline_identifiers: Tuple[str, ...] = tuple( + str(x) for x in range(3000, 3500) ) + misc_landline_identifiers: Tuple[str, ...] = tuple( + str(x) for x in range(5300, 5800) + ) + tuple(str(x) for x in range(6000, 6700)) non_area2_landline_area_codes: Tuple[str, ...] = ( "32", "33", @@ -194,7 +198,9 @@ class Provider(BaseProvider): "0{{non_area2_landline_area_code}}-###-####", "+63{{non_area2_landline_area_code}}-###-####", ) - landline_number_formats: Tuple[str, ...] = area2_landline_number_formats + non_area2_landline_number_formats + landline_number_formats: Tuple[str, ...] = ( + area2_landline_number_formats + non_area2_landline_number_formats + ) def _create_phone_number(self, formats: Sequence[str]) -> str: pattern: str = self.random_element(formats) diff --git a/faker/providers/phone_number/es_ES/__init__.py b/faker/providers/phone_number/es_ES/__init__.py index 34b3283268..e5b5492cf6 100644 --- a/faker/providers/phone_number/es_ES/__init__.py +++ b/faker/providers/phone_number/es_ES/__init__.py @@ -124,5 +124,6 @@ class Provider(PhoneNumberProvider): "+34xxx ## ## ##", ) formats = tuple( - phone_format.replace("xxx", prefix) for (prefix, phone_format) in itertools.product(PREFIXES, PHONE_FORMATS) + phone_format.replace("xxx", prefix) + for (prefix, phone_format) in itertools.product(PREFIXES, PHONE_FORMATS) ) diff --git a/faker/providers/profile/__init__.py b/faker/providers/profile/__init__.py index f94da113bb..765f1a77fe 100644 --- a/faker/providers/profile/__init__.py +++ b/faker/providers/profile/__init__.py @@ -14,7 +14,9 @@ class Provider(BaseProvider): """ - def simple_profile(self, sex: Optional[SexLiteral] = None) -> Dict[str, Union[str, date, SexLiteral]]: + def simple_profile( + self, sex: Optional[SexLiteral] = None + ) -> Dict[str, Union[str, date, SexLiteral]]: """ Generates a basic profile with personal information """ @@ -48,7 +50,11 @@ def profile( "ssn": self.generator.ssn(), "residence": self.generator.address(), "current_location": (self.generator.latitude(), self.generator.longitude()), - "blood_group": "".join(self.random_element(list(itertools.product(["A", "B", "AB", "O"], ["+", "-"])))), + "blood_group": "".join( + self.random_element( + list(itertools.product(["A", "B", "AB", "O"], ["+", "-"])) + ) + ), "website": [self.generator.url() for _ in range(1, self.random_int(2, 5))], } diff --git a/faker/providers/python/__init__.py b/faker/providers/python/__init__.py index 1ff733192d..f5243622a5 100644 --- a/faker/providers/python/__init__.py +++ b/faker/providers/python/__init__.py @@ -36,7 +36,9 @@ class Provider(BaseProvider): "email", ) - def _check_signature(self, value_types: Optional[TypesSpec], allowed_types: Optional[TypesSpec]) -> TypesSpec: + def _check_signature( + self, value_types: Optional[TypesSpec], allowed_types: Optional[TypesSpec] + ) -> TypesSpec: if value_types is not None and not isinstance(value_types, (list, tuple)): value_types = (value_types,) warnings.warn( @@ -59,7 +61,9 @@ def _check_signature(self, value_types: Optional[TypesSpec], allowed_types: Opti def pyobject( self, - object_type: Optional[Type[Union[bool, str, float, int, tuple, set, list, Iterable, dict]]] = None, + object_type: Optional[ + Type[Union[bool, str, float, int, tuple, set, list, Iterable, dict]] + ] = None, ) -> Optional[Union[bool, str, float, int, tuple, set, list, Iterable, dict]]: """ Generates a random object passing the type desired. @@ -89,7 +93,9 @@ def pyobject( elif object_type == dict: return self.pydict() else: - raise ValueError(f"Object type `{object_type}` is not supported by `pyobject` function") + raise ValueError( + f"Object type `{object_type}` is not supported by `pyobject` function" + ) def pybool(self, truth_probability: int = 50) -> bool: """ @@ -100,7 +106,9 @@ def pybool(self, truth_probability: int = 50) -> bool: :raises ValueError: If invalid `truth_probability` is provided. """ if truth_probability < 0 or truth_probability > 100: - raise ValueError("Invalid `truth_probability` value: must be between `0` and `100` inclusive") + raise ValueError( + "Invalid `truth_probability` value: must be between `0` and `100` inclusive" + ) return self.random_int(1, 100) <= truth_probability @@ -123,7 +131,9 @@ def pystr( if min_chars is None: chars = "".join(self.random_letters(length=max_chars)) else: - assert max_chars >= min_chars, "Maximum length must be greater than or equal to minimum length" + assert ( + max_chars >= min_chars + ), "Maximum length must be greater than or equal to minimum length" chars = "".join( self.random_letters( length=self.generator.random.randint(min_chars, max_chars), @@ -149,9 +159,13 @@ def pyfloat( max_value: Optional[Union[float, int]] = None, ) -> float: if left_digits is not None and left_digits < 0: - raise ValueError("A float number cannot have less than 0 digits in its integer part") + raise ValueError( + "A float number cannot have less than 0 digits in its integer part" + ) if right_digits is not None and right_digits < 0: - raise ValueError("A float number cannot have less than 0 digits in its fractional part") + raise ValueError( + "A float number cannot have less than 0 digits in its fractional part" + ) if left_digits == 0 and right_digits == 0: raise ValueError("A float number cannot have less than 0 digits in total") if min_value is not None and max_value is not None: @@ -160,15 +174,27 @@ def pyfloat( if None not in (min_value, max_value) and min_value == max_value: raise ValueError("Min and max value cannot be the same") if positive and min_value is not None and min_value <= 0: - raise ValueError("Cannot combine positive=True with negative or zero min_value") - if left_digits is not None and max_value and math.ceil(math.log10(abs(max_value))) > left_digits: + raise ValueError( + "Cannot combine positive=True with negative or zero min_value" + ) + if ( + left_digits is not None + and max_value + and math.ceil(math.log10(abs(max_value))) > left_digits + ): raise ValueError("Max value must fit within left digits") - if left_digits is not None and min_value and math.ceil(math.log10(abs(min_value))) > left_digits: + if ( + left_digits is not None + and min_value + and math.ceil(math.log10(abs(min_value))) > left_digits + ): raise ValueError("Min value must fit within left digits") # Make sure at least either left or right is set if left_digits is None and right_digits is None: - needed_left_digits = max(1, math.ceil(math.log10(max(abs(max_value or 1), abs(min_value or 1))))) + needed_left_digits = max( + 1, math.ceil(math.log10(max(abs(max_value or 1), abs(min_value or 1)))) + ) right_digits = self.random_int(1, sys.float_info.dig - needed_left_digits) # If only one side is set, choose #digits for other side @@ -193,12 +219,18 @@ def pyfloat( # Make sure left_digits still respected if left_digits is not None: if max_value is None: - left_max_value = 10**left_digits # minus smallest representable, adjusted later + left_max_value = ( + 10**left_digits + ) # minus smallest representable, adjusted later if min_value is None: - left_min_value = -(10**left_digits) # plus smallest representable, adjusted later + left_min_value = -( + 10**left_digits + ) # plus smallest representable, adjusted later if max_value is not None and max_value < 0: - left_max_value += 1 # as the random_int will be generated up to max_value - 1 + left_max_value += ( + 1 # as the random_int will be generated up to max_value - 1 + ) if min_value is not None and min_value < 0: left_min_value += 1 # as we then append digits after the left_number left_number = self._safe_random_int( @@ -224,8 +256,12 @@ def pyfloat( result += sys.float_info.epsilon if right_digits: - result = min(result, 10**left_digits - float(f'0.{"0" * (right_digits - 1)}1')) - result = max(result, -(10**left_digits + float(f'0.{"0" * (right_digits - 1)}1'))) + result = min( + result, 10**left_digits - float(f'0.{"0" * (right_digits - 1)}1') + ) + result = max( + result, -(10**left_digits + float(f'0.{"0" * (right_digits - 1)}1')) + ) else: result = min(result, 10**left_digits - 1) result = max(result, -(10**left_digits + 1)) @@ -236,14 +272,24 @@ def pyfloat( # Ensure the variance is bound by the difference between the max and min if max_value is not None: if result > max_value: - result = result - (result - max_value + self.generator.random.uniform(0, max_value - min_value)) + result = result - ( + result + - max_value + + self.generator.random.uniform(0, max_value - min_value) + ) if min_value is not None: if result < min_value: - result = result + (min_value - result + self.generator.random.uniform(0, max_value - min_value)) + result = result + ( + min_value + - result + + self.generator.random.uniform(0, max_value - min_value) + ) return result - def _safe_random_int(self, min_value: float, max_value: float, positive: bool) -> int: + def _safe_random_int( + self, min_value: float, max_value: float, positive: bool + ) -> int: orig_min_value = min_value orig_max_value = max_value @@ -290,17 +336,25 @@ def pydecimal( max_value: Optional[BasicNumber] = None, ) -> Decimal: if left_digits is not None and left_digits < 0: - raise ValueError("A decimal number cannot have less than 0 digits in its integer part") + raise ValueError( + "A decimal number cannot have less than 0 digits in its integer part" + ) if right_digits is not None and right_digits < 0: - raise ValueError("A decimal number cannot have less than 0 digits in its fractional part") - if (left_digits is not None and left_digits == 0) and (right_digits is not None and right_digits == 0): + raise ValueError( + "A decimal number cannot have less than 0 digits in its fractional part" + ) + if (left_digits is not None and left_digits == 0) and ( + right_digits is not None and right_digits == 0 + ): raise ValueError("A decimal number cannot have 0 digits in total") if min_value is not None and max_value is not None and min_value > max_value: raise ValueError("Min value cannot be greater than max value") if min_value is not None and max_value is not None and min_value == max_value: raise ValueError("Min and max value cannot be the same") if positive and min_value is not None and min_value <= 0: - raise ValueError("Cannot combine positive=True with negative or zero min_value") + raise ValueError( + "Cannot combine positive=True with negative or zero min_value" + ) if ( left_digits is not None and max_value @@ -335,11 +389,15 @@ def pydecimal( if sign == "+": if max_value is not None: - left_number = str(self.random_int(int(max(min_value or 0, 0)), int(max_value))) + left_number = str( + self.random_int(int(max(min_value or 0, 0)), int(max_value)) + ) else: min_left_digits = math.ceil(math.log10(max(min_value or 1, 1))) if left_digits is None: - left_digits = self.random_int(min_left_digits, max_left_random_digits) + left_digits = self.random_int( + min_left_digits, max_left_random_digits + ) left_number = str(self._random_int_of_length(left_digits)) else: if min_value is not None: @@ -352,13 +410,17 @@ def pydecimal( else: min_left_digits = math.ceil(math.log10(abs(min(max_value or 1, 1)))) # type: ignore[arg-type] if left_digits is None: - left_digits = self.random_int(min_left_digits, max_left_random_digits) + left_digits = self.random_int( + min_left_digits, max_left_random_digits + ) left_number = str(self._random_int_of_length(left_digits)) if right_digits is None: right_digits = self.random_int(0, max_random_digits) - right_number = "".join([str(self.random_digit()) for _ in range(0, right_digits)]) + right_number = "".join( + [str(self.random_digit()) for _ in range(0, right_digits)] + ) result = Decimal(f"{sign}{left_number}.{right_number}") @@ -454,7 +516,11 @@ def _pyiterable( value_types: TypesSpec = self._check_signature(value_types, allowed_types) value_types: TypesNames = [ - t if isinstance(t, str) else getattr(t, "__name__", type(t).__name__).lower() + ( + t + if isinstance(t, str) + else getattr(t, "__name__", type(t).__name__).lower() + ) for t in value_types # avoid recursion if t not in ["iterable", "list", "tuple", "dict", "set"] @@ -517,7 +583,11 @@ def pystruct( value_types: TypesSpec = self._check_signature(value_types, allowed_types) value_types: TypesNames = [ - t if isinstance(t, str) else getattr(t, "__name__", type(t).__name__).lower() + ( + t + if isinstance(t, str) + else getattr(t, "__name__", type(t).__name__).lower() + ) for t in value_types # avoid recursion if t != "struct" @@ -569,6 +639,8 @@ def enum(self, enum_cls: Type[TEnum]) -> TEnum: members: List[TEnum] = list(cast(Iterable[TEnum], enum_cls)) if len(members) < 1: - raise EmptyEnumException(f"The provided Enum: '{enum_cls.__name__}' has no members.") + raise EmptyEnumException( + f"The provided Enum: '{enum_cls.__name__}' has no members." + ) return self.random_element(members) diff --git a/faker/providers/sbn/__init__.py b/faker/providers/sbn/__init__.py index e816d15948..a388fac80e 100644 --- a/faker/providers/sbn/__init__.py +++ b/faker/providers/sbn/__init__.py @@ -29,7 +29,9 @@ def _body(self) -> List[str]: return [registrant, publication] @staticmethod - def _registrant_publication(reg_pub: str, rules: List[RegistrantRule]) -> Tuple[str, str]: + def _registrant_publication( + reg_pub: str, rules: List[RegistrantRule] + ) -> Tuple[str, str]: """Separate the registration from the publication in a given string. :param reg_pub: A string of digits representing a registration diff --git a/faker/providers/sbn/sbn.py b/faker/providers/sbn/sbn.py index d7ab921a11..c2aeadac43 100644 --- a/faker/providers/sbn/sbn.py +++ b/faker/providers/sbn/sbn.py @@ -31,7 +31,9 @@ def _check_digit(self) -> str: instead of 1 to 10. """ weights = range(1, 9) - body = "".join([part for part in [self.registrant, self.publication] if part is not None]) + body = "".join( + [part for part in [self.registrant, self.publication] if part is not None] + ) remainder = sum(int(b) * w for b, w in zip(body, weights)) % 11 check_digit = "X" if remainder == 10 else str(remainder) return str(check_digit) diff --git a/faker/providers/ssn/cs_CZ/__init__.py b/faker/providers/ssn/cs_CZ/__init__.py index 804439a8de..47ef5799be 100644 --- a/faker/providers/ssn/cs_CZ/__init__.py +++ b/faker/providers/ssn/cs_CZ/__init__.py @@ -11,7 +11,9 @@ class Provider(BaseProvider): "CZ##########", ) - national_id_months: List[str] = ["%.2d" % i for i in range(1, 13)] + ["%.2d" % i for i in range(51, 63)] + national_id_months: List[str] = ["%.2d" % i for i in range(1, 13)] + [ + "%.2d" % i for i in range(51, 63) + ] def vat_id(self) -> str: """ diff --git a/faker/providers/ssn/el_GR/__init__.py b/faker/providers/ssn/el_GR/__init__.py index 4fd4469293..7101b7b66a 100644 --- a/faker/providers/ssn/el_GR/__init__.py +++ b/faker/providers/ssn/el_GR/__init__.py @@ -46,7 +46,9 @@ def vat_id(self, prefix: bool = True) -> str: vat_id = "EL" if prefix else "" vat_id_starting_numbers = ("7", "8", "9", "0") - vat_id = vat_id + random.choice(vat_id_starting_numbers) + self.numerify("#######") + vat_id = ( + vat_id + random.choice(vat_id_starting_numbers) + self.numerify("#######") + ) return vat_id + str(tin_checksum(vat_id[2:] if prefix else vat_id)) def tin(self) -> str: diff --git a/faker/providers/ssn/en_US/__init__.py b/faker/providers/ssn/en_US/__init__.py index 4f9d5a98ec..067b556f9c 100644 --- a/faker/providers/ssn/en_US/__init__.py +++ b/faker/providers/ssn/en_US/__init__.py @@ -26,7 +26,9 @@ def itin(self) -> str: serial = self.random_int(min=0, max=9999) # The group number must be between 70 and 99 inclusively but not 89 or 93 - group: int = self.random_element([x for x in range(70, 100) if x not in [89, 93]]) + group: int = self.random_element( + [x for x in range(70, 100) if x not in [89, 93]] + ) itin = f"{area:03d}-{group:02d}-{serial:04d}" return itin @@ -196,7 +198,9 @@ def invalid_ssn(self) -> str: group = self.random_int(0, 99) serial = self.random_int(0, 9999) else: - group = self.random_element([x for x in range(0, 100) if x not in itin_group_numbers]) + group = self.random_element( + [x for x in range(0, 100) if x not in itin_group_numbers] + ) serial = self.random_int(0, 9999) invalid_ssn = f"{area:03d}-{group:02d}-{serial:04d}" diff --git a/faker/providers/ssn/es_ES/__init__.py b/faker/providers/ssn/es_ES/__init__.py index f8f9b9fbe5..b8fe3a1147 100644 --- a/faker/providers/ssn/es_ES/__init__.py +++ b/faker/providers/ssn/es_ES/__init__.py @@ -45,7 +45,9 @@ def nif(self) -> str: :sample: """ - nie_body = str(random.randrange(0, 100000000)) # generate a number of a maximum of 8 characters long + nie_body = str( + random.randrange(0, 100000000) + ) # generate a number of a maximum of 8 characters long return nie_body.zfill(8) + self._calculate_control_doi(nie_body) def cif(self) -> str: diff --git a/faker/providers/ssn/es_MX/__init__.py b/faker/providers/ssn/es_MX/__init__.py index c45d5059c5..0f4655b803 100644 --- a/faker/providers/ssn/es_MX/__init__.py +++ b/faker/providers/ssn/es_MX/__init__.py @@ -128,7 +128,10 @@ def curp_checksum(characters: str) -> int: Calculate the checksum for the mexican CURP. """ start = 18 - return -sum((start - i) * CURP_CHARACTERS.index(n) for i, n in enumerate(characters)) % 10 + return ( + -sum((start - i) * CURP_CHARACTERS.index(n) for i, n in enumerate(characters)) + % 10 + ) class Provider(BaseProvider): @@ -217,11 +220,17 @@ def rfc(self, natural: bool = True) -> str: name_initials = FORBIDDEN_WORDS.get(name_initials, name_initials) else: name_initials = ( - self.random_uppercase_letter() + self.random_uppercase_letter() + self.random_uppercase_letter() + self.random_uppercase_letter() + + self.random_uppercase_letter() + + self.random_uppercase_letter() ) birth_date = birthday.strftime("%y%m%d") - disambiguation_code = random.choice(ALPHANUMERIC) + random.choice(ALPHANUMERIC) + random.choice(ALPHANUMERIC) + disambiguation_code = ( + random.choice(ALPHANUMERIC) + + random.choice(ALPHANUMERIC) + + random.choice(ALPHANUMERIC) + ) random_rfc = name_initials + birth_date + disambiguation_code diff --git a/faker/providers/ssn/et_EE/__init__.py b/faker/providers/ssn/et_EE/__init__.py index bd45f9e465..4e69294424 100644 --- a/faker/providers/ssn/et_EE/__init__.py +++ b/faker/providers/ssn/et_EE/__init__.py @@ -47,7 +47,9 @@ def ssn(self, min_age: int = 16, max_age: int = 90) -> str: https://en.wikipedia.org/wiki/National_identification_number#Estonia """ - age = datetime.timedelta(days=self.generator.random.randrange(min_age * 365, max_age * 365)) + age = datetime.timedelta( + days=self.generator.random.randrange(min_age * 365, max_age * 365) + ) birthday = datetime.date.today() - age if birthday.year < 2000: ik = self.generator.random.choice(("3", "4")) diff --git a/faker/providers/ssn/fi_FI/__init__.py b/faker/providers/ssn/fi_FI/__init__.py index 286dd5ceea..0fa3c337e9 100644 --- a/faker/providers/ssn/fi_FI/__init__.py +++ b/faker/providers/ssn/fi_FI/__init__.py @@ -4,7 +4,9 @@ class Provider(SsnProvider): - def ssn(self, min_age: int = 0, max_age: int = 105, artificial: bool = False) -> str: + def ssn( + self, min_age: int = 0, max_age: int = 105, artificial: bool = False + ) -> str: """ Returns 11 character Finnish personal identity code (Henkilötunnus, HETU, Swedish: Personbeteckning). This function assigns random @@ -29,7 +31,9 @@ def _checksum(hetu): if min_age == max_age: age = datetime.timedelta(days=min_age * 365) else: - age = datetime.timedelta(days=self.generator.random.randrange(min_age * 365, max_age * 365)) + age = datetime.timedelta( + days=self.generator.random.randrange(min_age * 365, max_age * 365) + ) birthday = datetime.date.today() - age # format %y requires year >= 1900 on Windows hetu_date = "%02d%02d%s" % ( @@ -54,7 +58,9 @@ def _get_century_code(year: int) -> str: elif 1800 <= year < 1900: separator = "+" else: - raise ValueError("Finnish SSN do not support people born before the year 1800 or after the year 2999") + raise ValueError( + "Finnish SSN do not support people born before the year 1800 or after the year 2999" + ) return separator vat_id_formats = ("FI########",) diff --git a/faker/providers/ssn/hu_HU/__init__.py b/faker/providers/ssn/hu_HU/__init__.py index cdfb5dd1be..5051a93ce1 100644 --- a/faker/providers/ssn/hu_HU/__init__.py +++ b/faker/providers/ssn/hu_HU/__init__.py @@ -11,7 +11,9 @@ def zfix(d: int) -> str: class Provider(SsnProvider): - def ssn(self, dob: Optional[str] = None, gender: Optional[SexLiteral] = None) -> str: + def ssn( + self, dob: Optional[str] = None, gender: Optional[SexLiteral] = None + ) -> str: """ Generates Hungarian SSN equivalent (személyazonosító szám or, colloquially, személyi szám) diff --git a/faker/providers/ssn/it_IT/__init__.py b/faker/providers/ssn/it_IT/__init__.py index aefd42a09e..ba3c39f47b 100644 --- a/faker/providers/ssn/it_IT/__init__.py +++ b/faker/providers/ssn/it_IT/__init__.py @@ -8005,7 +8005,14 @@ def checksum(value: str) -> str: Calculates the checksum char used for the 16th char. Author: Vincenzo Palazzo """ - return chr(65 + sum(CHECKSUM_TABLE[index % 2][ALPHANUMERICS_DICT[char]] for index, char in enumerate(value)) % 26) + return chr( + 65 + + sum( + CHECKSUM_TABLE[index % 2][ALPHANUMERICS_DICT[char]] + for index, char in enumerate(value) + ) + % 26 + ) class Provider(SsnProvider): @@ -8021,7 +8028,9 @@ def ssn(self) -> str: is_leap_year: bool = self.is_leap_year(int(year)) month: str = self.random_element(MONTHS_LIST) max_day: int = self._get_max_day(is_leap_year=is_leap_year, month=month) - day: str = "%02d" % (self.random_int(min=1, max=max_day) + (40 if sex == 1 else 0)) + day: str = "%02d" % ( + self.random_int(min=1, max=max_day) + (40 if sex == 1 else 0) + ) municipality: str = self.random_element(MUNICIPALITIES_LIST) code: str = f"{surname}{name}{year}{month}{day}{municipality}" return code + checksum(code) @@ -8063,7 +8072,9 @@ def _get_name_letters(self, sex: int) -> str: name_consonants = self._get_consonants(name) cons_len = len(name_consonants) if cons_len >= 4: - name_part = "".join([name_consonants[0], name_consonants[1], name_consonants[3]]) + name_part = "".join( + [name_consonants[0], name_consonants[1], name_consonants[3]] + ) elif cons_len < 3: name_part = "".join(name_consonants + self._get_vowels(name))[:3] else: diff --git a/faker/providers/ssn/lv_LV/__init__.py b/faker/providers/ssn/lv_LV/__init__.py index dee57d7504..55e2fa93ba 100644 --- a/faker/providers/ssn/lv_LV/__init__.py +++ b/faker/providers/ssn/lv_LV/__init__.py @@ -17,7 +17,10 @@ def ssn(self, min_age: int = 0, max_age: int = 105) -> str: def _checksum(ssn_without_checksum): weights = [1, 6, 3, 7, 9, 10, 5, 8, 4, 2] - weighted_sum = sum(int(digit) * weight for digit, weight in zip(ssn_without_checksum, weights)) + weighted_sum = sum( + int(digit) * weight + for digit, weight in zip(ssn_without_checksum, weights) + ) reminder = (1 - weighted_sum) % 11 if reminder == 10: return 0 @@ -25,7 +28,9 @@ def _checksum(ssn_without_checksum): return reminder + 11 return reminder - age = datetime.timedelta(days=self.generator.random.randrange(min_age * 365, max_age * 365)) + age = datetime.timedelta( + days=self.generator.random.randrange(min_age * 365, max_age * 365) + ) birthday = datetime.date.today() - age ssn_date = f"{birthday:%d%m%y}" century = self._get_century_code(birthday.year) # Century @@ -44,7 +49,9 @@ def _get_century_code(year: int) -> int: elif 1800 <= year < 1900: code = 0 else: - raise ValueError("SSN do not support people born before the year 1800 or after the year 2999") + raise ValueError( + "SSN do not support people born before the year 1800 or after the year 2999" + ) return code """ diff --git a/faker/providers/ssn/nl_BE/__init__.py b/faker/providers/ssn/nl_BE/__init__.py index b7e130cd4d..d57e87ebad 100644 --- a/faker/providers/ssn/nl_BE/__init__.py +++ b/faker/providers/ssn/nl_BE/__init__.py @@ -65,8 +65,12 @@ def vat_id(self) -> str: https://en.wikipedia.org/wiki/VAT_identification_number :return: A random Belgian VAT ID starting with 0 or 1 and has a correct checksum with a modulo 97 check """ - generated_initial_number: str = self.random_element(vat_id_possible_initial_numbers) - vat_without_check = self.bothify(f"{generated_initial_number}{vat_id_random_section}") + generated_initial_number: str = self.random_element( + vat_id_possible_initial_numbers + ) + vat_without_check = self.bothify( + f"{generated_initial_number}{vat_id_random_section}" + ) vat_as_int = int(vat_without_check) vat_check = 97 - (vat_as_int % 97) vat_check_str = f"{vat_check:0>2}" diff --git a/faker/providers/ssn/no_NO/__init__.py b/faker/providers/ssn/no_NO/__init__.py index ff0d83869a..568660656b 100644 --- a/faker/providers/ssn/no_NO/__init__.py +++ b/faker/providers/ssn/no_NO/__init__.py @@ -30,7 +30,9 @@ class Provider(SsnProvider): scale1 = (3, 7, 6, 1, 8, 9, 4, 5, 2) scale2 = (5, 4, 3, 2, 7, 6, 5, 4, 3, 2) - def ssn(self, dob: Optional[str] = None, gender: Optional[SexLiteral] = None) -> str: + def ssn( + self, dob: Optional[str] = None, gender: Optional[SexLiteral] = None + ) -> str: """ Returns 11 character Norwegian personal identity code (Fødselsnummer). @@ -51,7 +53,9 @@ def ssn(self, dob: Optional[str] = None, gender: Optional[SexLiteral] = None) -> if dob: birthday = datetime.datetime.strptime(dob, "%Y%m%d") else: - age = datetime.timedelta(days=self.generator.random.randrange(18 * 365, 90 * 365)) + age = datetime.timedelta( + days=self.generator.random.randrange(18 * 365, 90 * 365) + ) birthday = datetime.datetime.now() - age if not gender: gender = self.generator.random.choice(("F", "M")) diff --git a/faker/providers/ssn/sk_SK/__init__.py b/faker/providers/ssn/sk_SK/__init__.py index a9a73018d5..184d43f052 100644 --- a/faker/providers/ssn/sk_SK/__init__.py +++ b/faker/providers/ssn/sk_SK/__init__.py @@ -10,7 +10,9 @@ class Provider(BaseProvider): vat_id_formats = ("SK##########",) - national_id_months = ["%.2d" % i for i in range(1, 13)] + ["%.2d" % i for i in range(51, 63)] + national_id_months = ["%.2d" % i for i in range(1, 13)] + [ + "%.2d" % i for i in range(51, 63) + ] def vat_id(self) -> str: """ diff --git a/faker/providers/ssn/sv_SE/__init__.py b/faker/providers/ssn/sv_SE/__init__.py index fd0b881b1f..e528e74c09 100644 --- a/faker/providers/ssn/sv_SE/__init__.py +++ b/faker/providers/ssn/sv_SE/__init__.py @@ -36,7 +36,9 @@ def ssn( http://en.wikipedia.org/wiki/Personal_identity_number_(Sweden) """ - age = datetime.timedelta(days=self.generator.random.randrange(min_age * 365, max_age * 365)) + age = datetime.timedelta( + days=self.generator.random.randrange(min_age * 365, max_age * 365) + ) birthday = datetime.datetime.now() - age yr_fmt = "%Y" if long else "%y" pnr_date = f"{birthday:{yr_fmt}%m%d}" diff --git a/faker/providers/ssn/th_TH/__init__.py b/faker/providers/ssn/th_TH/__init__.py index 47255f036d..bd30d6704e 100644 --- a/faker/providers/ssn/th_TH/__init__.py +++ b/faker/providers/ssn/th_TH/__init__.py @@ -27,7 +27,9 @@ def ssn(self) -> str: birth_book = randint(1, 99999) birth_sheet = randint(1, 99) - digits = f"{category:01d}{province:02d}{amphoe:02d}{birth_book:05d}{birth_sheet:02d}" + digits = ( + f"{category:01d}{province:02d}{amphoe:02d}{birth_book:05d}{birth_sheet:02d}" + ) checksum = ( (int(digits[0]) * 13) + (int(digits[1]) * 12) diff --git a/faker/providers/ssn/uk_UA/__init__.py b/faker/providers/ssn/uk_UA/__init__.py index e647be2da1..85a711f269 100644 --- a/faker/providers/ssn/uk_UA/__init__.py +++ b/faker/providers/ssn/uk_UA/__init__.py @@ -28,7 +28,9 @@ def calculate_check_sum(val: str) -> int: class Provider(SsnProvider): - def ssn(self, birthday: Optional[str] = None, gender: Optional[SexLiteral] = None) -> str: + def ssn( + self, birthday: Optional[str] = None, gender: Optional[SexLiteral] = None + ) -> str: """ Ukrainian "Реєстраційний номер облікової картки платника податків" also known as "Ідентифікаційний номер фізичної особи". diff --git a/faker/providers/ssn/zh_CN/__init__.py b/faker/providers/ssn/zh_CN/__init__.py index 30bf868d87..5676fc4f12 100644 --- a/faker/providers/ssn/zh_CN/__init__.py +++ b/faker/providers/ssn/zh_CN/__init__.py @@ -3527,7 +3527,11 @@ class Provider(SsnProvider): ] def ssn( - self, min_age: int = 18, max_age: int = 90, gender: Optional[SexLiteral] = None, area_code: str = "" + self, + min_age: int = 18, + max_age: int = 90, + gender: Optional[SexLiteral] = None, + area_code: str = "", ) -> str: """ Return 18 character chinese personal identity code diff --git a/faker/providers/ssn/zh_TW/__init__.py b/faker/providers/ssn/zh_TW/__init__.py index 1b56527171..2aa5ab0b0b 100644 --- a/faker/providers/ssn/zh_TW/__init__.py +++ b/faker/providers/ssn/zh_TW/__init__.py @@ -40,6 +40,8 @@ def _get_alphabet_weight(c: str) -> int: class Provider(SsnProvider): def ssn(self) -> str: - ssn_without_last_char = self.numerify(self.random_uppercase_letter() + str(self.random_int(1, 2)) + "#######") + ssn_without_last_char = self.numerify( + self.random_uppercase_letter() + str(self.random_int(1, 2)) + "#######" + ) last_char = str((10 - checksum(ssn_without_last_char) % 10) % 10) return ssn_without_last_char + last_char diff --git a/faker/providers/user_agent/__init__.py b/faker/providers/user_agent/__init__.py index f2fa43424e..9349304b92 100644 --- a/faker/providers/user_agent/__init__.py +++ b/faker/providers/user_agent/__init__.py @@ -175,10 +175,16 @@ def chrome( build_to: int = 899, ) -> str: """Generate a Chrome web browser user agent string.""" - saf: str = f"{self.generator.random.randint(531, 536)}.{self.generator.random.randint(0, 2)}" + saf: str = ( + f"{self.generator.random.randint(531, 536)}.{self.generator.random.randint(0, 2)}" + ) bld: str = self.lexify(self.numerify("##?###"), string.ascii_uppercase) - tmplt: str = "({0}) AppleWebKit/{1} (KHTML, like Gecko) Chrome/{2}.0.{3}.0 Safari/{4}" - tmplt_ios: str = "({0}) AppleWebKit/{1} (KHTML, like Gecko) CriOS/{2}.0.{3}.0 Mobile/{4} Safari/{1}" + tmplt: str = ( + "({0}) AppleWebKit/{1} (KHTML, like Gecko) Chrome/{2}.0.{3}.0 Safari/{4}" + ) + tmplt_ios: str = ( + "({0}) AppleWebKit/{1} (KHTML, like Gecko) CriOS/{2}.0.{3}.0 Mobile/{4} Safari/{1}" + ) platforms: ElementsType[str] = ( tmplt.format( self.linux_platform_token(), @@ -236,8 +242,12 @@ def firefox(self) -> str: tmplt_lin: str = "({0}; rv:1.9.{1}.20) {2}" tmplt_mac: str = "({0}; rv:1.9.{1}.20) {2}" tmplt_and: str = "({0}; Mobile; rv:{1}.0) Gecko/{1}.0 Firefox/{1}.0" - tmplt_ios: str = "({0}) AppleWebKit/{1} (KHTML, like Gecko) FxiOS/{2}.{3}.0 Mobile/{4} Safari/{1}" - saf: str = f"{self.generator.random.randint(531, 536)}.{self.generator.random.randint(0, 2)}" + tmplt_ios: str = ( + "({0}) AppleWebKit/{1} (KHTML, like Gecko) FxiOS/{2}.{3}.0 Mobile/{4} Safari/{1}" + ) + saf: str = ( + f"{self.generator.random.randint(531, 536)}.{self.generator.random.randint(0, 2)}" + ) bld: str = self.lexify(self.numerify("##?###"), string.ascii_uppercase) bld2: str = self.lexify(self.numerify("#?####"), string.ascii_lowercase) platforms: ElementsType[str] = ( @@ -257,7 +267,9 @@ def firefox(self) -> str: self.generator.random.randint(2, 6), self.generator.random.choice(ver), ), - tmplt_and.format(self.android_platform_token(), self.generator.random.randint(5, 68)), + tmplt_and.format( + self.android_platform_token(), self.generator.random.randint(5, 68) + ), tmplt_ios.format( self.ios_platform_token(), saf, @@ -283,8 +295,12 @@ def safari(self) -> str: else f"{self.generator.random.randint(4, 5)}.0.{self.generator.random.randint(1, 5)}" ) - tmplt_win: str = "(Windows; U; {0}) AppleWebKit/{1} (KHTML, like Gecko) Version/{2} Safari/{3}" - tmplt_mac: str = "({0} rv:{1}.0; {2}) AppleWebKit/{3} (KHTML, like Gecko) Version/{4} Safari/{5}" + tmplt_win: str = ( + "(Windows; U; {0}) AppleWebKit/{1} (KHTML, like Gecko) Version/{2} Safari/{3}" + ) + tmplt_mac: str = ( + "({0} rv:{1}.0; {2}) AppleWebKit/{3} (KHTML, like Gecko) Version/{4} Safari/{5}" + ) tmplt_ipod: str = ( "(iPod; U; CPU iPhone OS {0}_{1} like Mac OS X; {2})" " AppleWebKit/{3} (KHTML, like Gecko) Version/{4}.0.5" @@ -317,7 +333,9 @@ def safari(self) -> str: def opera(self) -> str: """Generate an Opera web browser user agent string.""" token: str = ( - self.linux_platform_token() if self.generator.random.getrandbits(1) else self.windows_platform_token() + self.linux_platform_token() + if self.generator.random.getrandbits(1) + else self.windows_platform_token() ) locale: str = self.generator.locale().replace("_", "-") platform: str = ( @@ -357,4 +375,7 @@ def ios_platform_token(self) -> str: """Generate an iOS platform token used in user agent strings.""" apple_device: str = self.random_element(self.apple_devices) ios_version: str = self.random_element(self.ios_versions) - return f"{apple_device}; CPU {apple_device} " f'OS {ios_version.replace(".", "_")} like Mac OS X' + return ( + f"{apple_device}; CPU {apple_device} " + f'OS {ios_version.replace(".", "_")} like Mac OS X' + ) diff --git a/faker/proxy.py b/faker/proxy.py index 758e9bf83b..bacb62ad5d 100644 --- a/faker/proxy.py +++ b/faker/proxy.py @@ -25,7 +25,9 @@ class Faker: cache_pattern: Pattern = re.compile(r"^_cached_\w*_mapping$") generator_attrs = [ - attr for attr in dir(Generator) if not attr.startswith("__") and attr not in ["seed", "seed_instance", "random"] + attr + for attr in dir(Generator) + if not attr.startswith("__") and attr not in ["seed", "seed_instance", "random"] ] def __init__( @@ -129,7 +131,10 @@ def __getattr__(self, attr: str) -> Any: if len(self._factories) == 1: return getattr(self._factories[0], attr) elif attr in self.generator_attrs: - msg = "Proxying calls to `%s` is not implemented in multiple locale mode." % attr + msg = ( + "Proxying calls to `%s` is not implemented in multiple locale mode." + % attr + ) raise NotImplementedError(msg) elif self.cache_pattern.match(attr): msg = "Cached attribute `%s` does not exist" % attr @@ -146,7 +151,9 @@ def __deepcopy__(self, memodict): result._factory_map = copy.deepcopy(self._factory_map) result._weights = copy.deepcopy(self._weights) result._unique_proxy = UniqueProxy(self) - result._unique_proxy._seen = {k: {result._unique_proxy._sentinel} for k in self._unique_proxy._seen.keys()} + result._unique_proxy._seen = { + k: {result._unique_proxy._sentinel} for k in self._unique_proxy._seen.keys() + } return result def __setstate__(self, state: Any) -> None: @@ -188,7 +195,9 @@ def _select_factory_distribution(self, factories, weights): def _select_factory_choice(self, factories): return random.choice(factories) - def _map_provider_method(self, method_name: str) -> tuple[list[Factory], list[float] | None]: + def _map_provider_method( + self, method_name: str + ) -> tuple[list[Factory], list[float] | None]: """ Creates a 2-tuple of factories and weights for the given provider method name @@ -357,7 +366,9 @@ def wrapper(*args, **kwargs): retval = function(*args, **kwargs) hashable_retval = self._make_hashable(retval) else: - raise UniquenessException(f"Got duplicated values after {_UNIQUE_ATTEMPTS:,} iterations.") + raise UniquenessException( + f"Got duplicated values after {_UNIQUE_ATTEMPTS:,} iterations." + ) generated.add(hashable_retval) @@ -379,7 +390,9 @@ def __getattr__(self, name: str) -> Any: if callable(obj): return self._wrap(name, obj) else: - raise TypeError("Accessing non-functions through .optional is not supported.") + raise TypeError( + "Accessing non-functions through .optional is not supported." + ) def __getstate__(self): # Copy the object's state from self.__dict__ which contains @@ -391,11 +404,17 @@ def __getstate__(self): def __setstate__(self, state): self.__dict__.update(state) - def _wrap(self, name: str, function: Callable[..., RetType]) -> Callable[..., RetType | None]: + def _wrap( + self, name: str, function: Callable[..., RetType] + ) -> Callable[..., RetType | None]: @functools.wraps(function) def wrapper(*args: Any, prob: float = 0.5, **kwargs: Any) -> RetType | None: if not 0 < prob <= 1.0: raise ValueError("prob must be between 0 and 1") - return function(*args, **kwargs) if self._proxy.boolean(chance_of_getting_true=int(prob * 100)) else None + return ( + function(*args, **kwargs) + if self._proxy.boolean(chance_of_getting_true=int(prob * 100)) + else None + ) return wrapper diff --git a/faker/proxy.pyi b/faker/proxy.pyi index f9f46c8c0d..4e92d63eee 100644 --- a/faker/proxy.pyi +++ b/faker/proxy.pyi @@ -210,7 +210,9 @@ class Faker: ... def random_choices( - self, elements: Union[Collection[T], OrderedDict[T, float]] = ..., length: Optional[int] = ... + self, + elements: Union[Collection[T], OrderedDict[T, float]] = ..., + length: Optional[int] = ..., ) -> Sequence[T]: """ Generate a list of objects randomly sampled from ``elements`` with replacement. @@ -272,7 +274,9 @@ class Faker: """ ... - def random_element(self, elements: Union[Collection[T], OrderedDict[T, float]] = ...) -> T: + def random_element( + self, elements: Union[Collection[T], OrderedDict[T, float]] = ... + ) -> T: """ Generate a randomly sampled object from ``elements``. @@ -409,7 +413,9 @@ class Faker: ... def random_sample( - self, elements: Union[Collection[T], OrderedDict[T, float]] = ..., length: Optional[int] = ... + self, + elements: Union[Collection[T], OrderedDict[T, float]] = ..., + length: Optional[int] = ..., ) -> Sequence[T]: """ Generate a list of objects randomly sampled from ``elements`` without replacement. @@ -430,7 +436,12 @@ class Faker: ... def randomize_nb_elements( - self, number: int = ..., le: bool = ..., ge: bool = ..., min: Optional[int] = ..., max: Optional[int] = ... + self, + number: int = ..., + le: bool = ..., + ge: bool = ..., + min: Optional[int] = ..., + max: Optional[int] = ..., ) -> int: """ Generate a random integer near ``number`` according to the following rules: @@ -457,7 +468,11 @@ class Faker: def secondary_address(self) -> str: ... def state(self) -> str: ... - def state_abbr(self, include_territories: bool = ..., include_freely_associated_states: bool = ...) -> str: + def state_abbr( + self, + include_territories: bool = ..., + include_freely_associated_states: bool = ..., + ) -> str: """ :returns: A random two-letter USPS postal code @@ -534,7 +549,9 @@ class Faker: """ ... - def swift(self, length: Optional[int] = ..., primary: bool = ..., use_dataset: bool = ...) -> str: + def swift( + self, length: Optional[int] = ..., primary: bool = ..., use_dataset: bool = ... + ) -> str: """ Generate a SWIFT code. @@ -597,7 +614,11 @@ class Faker: """ ... - def ean(self, length: int = ..., prefixes: Tuple[Union[int, str, Tuple[Union[int, str], ...]], ...] = ...) -> str: + def ean( + self, + length: int = ..., + prefixes: Tuple[Union[int, str, Tuple[Union[int, str], ...]], ...] = ..., + ) -> str: """ Generate an EAN barcode of the specified ``length``. @@ -652,7 +673,9 @@ class Faker: """ ... - def ean8(self, prefixes: Tuple[Union[int, str, Tuple[Union[int, str], ...]], ...] = ...) -> str: + def ean8( + self, prefixes: Tuple[Union[int, str, Tuple[Union[int, str], ...]], ...] = ... + ) -> str: """ Generate an EAN-8 barcode. @@ -704,7 +727,10 @@ class Faker: ... def upc_a( - self, upc_ae_mode: bool = ..., base: Optional[str] = ..., number_system_digit: Optional[int] = ... + self, + upc_ae_mode: bool = ..., + base: Optional[str] = ..., + number_system_digit: Optional[int] = ..., ) -> str: """ Generate a 12-digit UPC-A barcode. @@ -742,7 +768,12 @@ class Faker: """ ... - def upc_e(self, base: Optional[str] = ..., number_system_digit: Optional[int] = ..., safe_mode: bool = ...) -> str: + def upc_e( + self, + base: Optional[str] = ..., + number_system_digit: Optional[int] = ..., + safe_mode: bool = ..., + ) -> str: """ Generate an 8-digit UPC-E barcode. @@ -834,7 +865,9 @@ class Faker: ... def color_hsl( - self, hue: Union[str, float, int, Sequence[int], None] = ..., luminosity: Optional[str] = ... + self, + hue: Union[str, float, int, Sequence[int], None] = ..., + luminosity: Optional[str] = ..., ) -> Tuple[int, int, int]: """ Generate a HSL color tuple. @@ -846,7 +879,9 @@ class Faker: ... def color_hsv( - self, hue: Union[str, float, int, Sequence[int], None] = ..., luminosity: Optional[str] = ... + self, + hue: Union[str, float, int, Sequence[int], None] = ..., + luminosity: Optional[str] = ..., ) -> Tuple[int, int, int]: """ Generate a HSV color tuple. @@ -866,7 +901,9 @@ class Faker: ... def color_rgb( - self, hue: Union[str, float, int, Sequence[int], None] = ..., luminosity: Optional[str] = ... + self, + hue: Union[str, float, int, Sequence[int], None] = ..., + luminosity: Optional[str] = ..., ) -> Tuple[int, int, int]: """ Generate a RGB color tuple of integers. @@ -878,7 +915,9 @@ class Faker: ... def color_rgb_float( - self, hue: Union[str, float, int, Sequence[int], None] = ..., luminosity: Optional[str] = ... + self, + hue: Union[str, float, int, Sequence[int], None] = ..., + luminosity: Optional[str] = ..., ) -> Tuple[float, float, float]: """ Generate a RGB color tuple of floats. @@ -955,8 +994,12 @@ class Faker: def credit_card_expire( self, - start: Union[datetime.date, datetime.datetime, datetime.timedelta, str, int] = ..., - end: Union[datetime.date, datetime.datetime, datetime.timedelta, str, int] = ..., + start: Union[ + datetime.date, datetime.datetime, datetime.timedelta, str, int + ] = ..., + end: Union[ + datetime.date, datetime.datetime, datetime.timedelta, str, int + ] = ..., date_format: str = ..., ) -> str: """ @@ -1022,7 +1065,9 @@ class Faker: def date( self, pattern: str = ..., - end_datetime: Union[datetime.date, datetime.datetime, datetime.timedelta, str, int, None] = ..., + end_datetime: Union[ + datetime.date, datetime.datetime, datetime.timedelta, str, int, None + ] = ..., ) -> str: """ Get a date string between January 1, 1970 and now. @@ -1038,8 +1083,12 @@ class Faker: def date_between( self, - start_date: Union[datetime.date, datetime.datetime, datetime.timedelta, str, int] = ..., - end_date: Union[datetime.date, datetime.datetime, datetime.timedelta, str, int] = ..., + start_date: Union[ + datetime.date, datetime.datetime, datetime.timedelta, str, int + ] = ..., + end_date: Union[ + datetime.date, datetime.datetime, datetime.timedelta, str, int + ] = ..., ) -> datetime.date: """ Get a Date object based on a random date between two given dates. @@ -1056,8 +1105,12 @@ class Faker: def date_between_dates( self, - date_start: Union[datetime.date, datetime.datetime, datetime.timedelta, str, int, None] = ..., - date_end: Union[datetime.date, datetime.datetime, datetime.timedelta, str, int, None] = ..., + date_start: Union[ + datetime.date, datetime.datetime, datetime.timedelta, str, int, None + ] = ..., + date_end: Union[ + datetime.date, datetime.datetime, datetime.timedelta, str, int, None + ] = ..., ) -> datetime.date: """ Get a random date between the two given dates. @@ -1069,7 +1122,9 @@ class Faker: """ ... - def date_object(self, end_datetime: Optional[datetime.datetime] = ...) -> datetime.date: + def date_object( + self, end_datetime: Optional[datetime.datetime] = ... + ) -> datetime.date: """ Get a date object between January 1, 1970 and now @@ -1081,7 +1136,10 @@ class Faker: ... def date_of_birth( - self, tzinfo: Optional[datetime.tzinfo] = ..., minimum_age: int = ..., maximum_age: int = ... + self, + tzinfo: Optional[datetime.tzinfo] = ..., + minimum_age: int = ..., + maximum_age: int = ..., ) -> datetime.date: """ Generate a random date of birth represented as a Date object, @@ -1097,7 +1155,9 @@ class Faker: """ ... - def date_this_century(self, before_today: bool = ..., after_today: bool = ...) -> datetime.date: + def date_this_century( + self, before_today: bool = ..., after_today: bool = ... + ) -> datetime.date: """ Gets a Date object for the current century. @@ -1109,7 +1169,9 @@ class Faker: """ ... - def date_this_decade(self, before_today: bool = ..., after_today: bool = ...) -> datetime.date: + def date_this_decade( + self, before_today: bool = ..., after_today: bool = ... + ) -> datetime.date: """ Gets a Date object for the decade year. @@ -1121,7 +1183,9 @@ class Faker: """ ... - def date_this_month(self, before_today: bool = ..., after_today: bool = ...) -> datetime.date: + def date_this_month( + self, before_today: bool = ..., after_today: bool = ... + ) -> datetime.date: """ Gets a Date object for the current month. @@ -1133,7 +1197,9 @@ class Faker: """ ... - def date_this_year(self, before_today: bool = ..., after_today: bool = ...) -> datetime.date: + def date_this_year( + self, before_today: bool = ..., after_today: bool = ... + ) -> datetime.date: """ Gets a Date object for the current year. @@ -1148,7 +1214,9 @@ class Faker: def date_time( self, tzinfo: Optional[datetime.tzinfo] = ..., - end_datetime: Union[datetime.date, datetime.datetime, datetime.timedelta, str, int, None] = ..., + end_datetime: Union[ + datetime.date, datetime.datetime, datetime.timedelta, str, int, None + ] = ..., ) -> datetime.datetime: """ Get a datetime object for a date between January 1, 1970 and a specified end_datetime @@ -1163,8 +1231,12 @@ class Faker: def date_time_ad( self, tzinfo: Optional[datetime.tzinfo] = ..., - end_datetime: Union[datetime.date, datetime.datetime, datetime.timedelta, str, int, None] = ..., - start_datetime: Union[datetime.date, datetime.datetime, datetime.timedelta, str, int, None] = ..., + end_datetime: Union[ + datetime.date, datetime.datetime, datetime.timedelta, str, int, None + ] = ..., + start_datetime: Union[ + datetime.date, datetime.datetime, datetime.timedelta, str, int, None + ] = ..., ) -> datetime.datetime: """ Get a datetime object for a date between January 1, 0001 and now @@ -1180,8 +1252,12 @@ class Faker: def date_time_between( self, - start_date: Union[datetime.date, datetime.datetime, datetime.timedelta, str, int] = ..., - end_date: Union[datetime.date, datetime.datetime, datetime.timedelta, str, int] = ..., + start_date: Union[ + datetime.date, datetime.datetime, datetime.timedelta, str, int + ] = ..., + end_date: Union[ + datetime.date, datetime.datetime, datetime.timedelta, str, int + ] = ..., tzinfo: Optional[datetime.tzinfo] = ..., ) -> datetime.datetime: """ @@ -1198,8 +1274,12 @@ class Faker: def date_time_between_dates( self, - datetime_start: Union[datetime.date, datetime.datetime, datetime.timedelta, str, int, None] = ..., - datetime_end: Union[datetime.date, datetime.datetime, datetime.timedelta, str, int, None] = ..., + datetime_start: Union[ + datetime.date, datetime.datetime, datetime.timedelta, str, int, None + ] = ..., + datetime_end: Union[ + datetime.date, datetime.datetime, datetime.timedelta, str, int, None + ] = ..., tzinfo: Optional[datetime.tzinfo] = ..., ) -> datetime.datetime: """ @@ -1216,7 +1296,10 @@ class Faker: ... def date_time_this_century( - self, before_now: bool = ..., after_now: bool = ..., tzinfo: Optional[datetime.tzinfo] = ... + self, + before_now: bool = ..., + after_now: bool = ..., + tzinfo: Optional[datetime.tzinfo] = ..., ) -> datetime.datetime: """ Gets a datetime object for the current century. @@ -1231,7 +1314,10 @@ class Faker: ... def date_time_this_decade( - self, before_now: bool = ..., after_now: bool = ..., tzinfo: Optional[datetime.tzinfo] = ... + self, + before_now: bool = ..., + after_now: bool = ..., + tzinfo: Optional[datetime.tzinfo] = ..., ) -> datetime.datetime: """ Gets a datetime object for the decade year. @@ -1246,7 +1332,10 @@ class Faker: ... def date_time_this_month( - self, before_now: bool = ..., after_now: bool = ..., tzinfo: Optional[datetime.tzinfo] = ... + self, + before_now: bool = ..., + after_now: bool = ..., + tzinfo: Optional[datetime.tzinfo] = ..., ) -> datetime.datetime: """ Gets a datetime object for the current month. @@ -1261,7 +1350,10 @@ class Faker: ... def date_time_this_year( - self, before_now: bool = ..., after_now: bool = ..., tzinfo: Optional[datetime.tzinfo] = ... + self, + before_now: bool = ..., + after_now: bool = ..., + tzinfo: Optional[datetime.tzinfo] = ..., ) -> datetime.datetime: """ Gets a datetime object for the current year. @@ -1288,7 +1380,10 @@ class Faker: ... def future_date( - self, end_date: Union[datetime.date, datetime.datetime, datetime.timedelta, str, int] = ... + self, + end_date: Union[ + datetime.date, datetime.datetime, datetime.timedelta, str, int + ] = ..., ) -> datetime.date: """ Get a Date object based on a random date between 1 day from now and a @@ -1304,7 +1399,9 @@ class Faker: def future_datetime( self, - end_date: Union[datetime.date, datetime.datetime, datetime.timedelta, str, int] = ..., + end_date: Union[ + datetime.date, datetime.datetime, datetime.timedelta, str, int + ] = ..., tzinfo: Optional[datetime.tzinfo] = ..., ) -> datetime.datetime: """ @@ -1322,7 +1419,9 @@ class Faker: def iso8601( self, tzinfo: Optional[datetime.tzinfo] = ..., - end_datetime: Union[datetime.date, datetime.datetime, datetime.timedelta, str, int, None] = ..., + end_datetime: Union[ + datetime.date, datetime.datetime, datetime.timedelta, str, int, None + ] = ..., sep: str = ..., timespec: str = ..., ) -> str: @@ -1352,7 +1451,9 @@ class Faker: def past_date( self, - start_date: Union[datetime.date, datetime.datetime, datetime.timedelta, str, int] = ..., + start_date: Union[ + datetime.date, datetime.datetime, datetime.timedelta, str, int + ] = ..., tzinfo: Optional[datetime.tzinfo] = ..., ) -> datetime.date: """ @@ -1369,7 +1470,9 @@ class Faker: def past_datetime( self, - start_date: Union[datetime.date, datetime.datetime, datetime.timedelta, str, int] = ..., + start_date: Union[ + datetime.date, datetime.datetime, datetime.timedelta, str, int + ] = ..., tzinfo: Optional[datetime.tzinfo] = ..., ) -> datetime.datetime: """ @@ -1398,7 +1501,9 @@ class Faker: def time( self, pattern: str = ..., - end_datetime: Union[datetime.date, datetime.datetime, datetime.timedelta, str, int, None] = ..., + end_datetime: Union[ + datetime.date, datetime.datetime, datetime.timedelta, str, int, None + ] = ..., ) -> str: """ Get a time string (24h format by default) @@ -1412,7 +1517,10 @@ class Faker: ... def time_delta( - self, end_datetime: Union[datetime.date, datetime.datetime, datetime.timedelta, str, int, None] = ... + self, + end_datetime: Union[ + datetime.date, datetime.datetime, datetime.timedelta, str, int, None + ] = ..., ) -> datetime.timedelta: """ Get a random timedelta object of duration between the current date and time and `end_datetime` @@ -1425,7 +1533,10 @@ class Faker: ... def time_object( - self, end_datetime: Union[datetime.date, datetime.datetime, datetime.timedelta, str, int, None] = ... + self, + end_datetime: Union[ + datetime.date, datetime.datetime, datetime.timedelta, str, int, None + ] = ..., ) -> datetime.time: """ Get a time object @@ -1439,8 +1550,12 @@ class Faker: def time_series( self, - start_date: Union[datetime.date, datetime.datetime, datetime.timedelta, str, int] = ..., - end_date: Union[datetime.date, datetime.datetime, datetime.timedelta, str, int] = ..., + start_date: Union[ + datetime.date, datetime.datetime, datetime.timedelta, str, int + ] = ..., + end_date: Union[ + datetime.date, datetime.datetime, datetime.timedelta, str, int + ] = ..., precision: Optional[float] = ..., distrib: Optional[Callable[[datetime.datetime], float]] = ..., tzinfo: Optional[datetime.tzinfo] = ..., @@ -1471,8 +1586,12 @@ class Faker: def unix_time( self, - end_datetime: Union[datetime.date, datetime.datetime, datetime.timedelta, str, int, None] = ..., - start_datetime: Union[datetime.date, datetime.datetime, datetime.timedelta, str, int, None] = ..., + end_datetime: Union[ + datetime.date, datetime.datetime, datetime.timedelta, str, int, None + ] = ..., + start_datetime: Union[ + datetime.date, datetime.datetime, datetime.timedelta, str, int, None + ] = ..., ) -> float: """ Get a timestamp between January 1, 1970 and now, unless passed @@ -1522,7 +1641,9 @@ class Faker: """ ... - def file_name(self, category: Optional[str] = ..., extension: Optional[str] = ...) -> str: + def file_name( + self, category: Optional[str] = ..., extension: Optional[str] = ... + ) -> str: """ Generate a random file name with extension. @@ -1620,7 +1741,9 @@ class Faker: """ ... - def coordinate(self, center: Optional[float] = ..., radius: Union[float, int] = ...) -> Decimal: + def coordinate( + self, center: Optional[float] = ..., radius: Union[float, int] = ... + ) -> Decimal: """ Optionally center the coord and pick a point within radius. """ @@ -1628,7 +1751,9 @@ class Faker: def latitude(self) -> Decimal: ... def latlng(self) -> Tuple[Decimal, Decimal]: ... - def local_latlng(self, country_code: str = ..., coords_only: bool = ...) -> Optional[Tuple[str, ...]]: + def local_latlng( + self, country_code: str = ..., coords_only: bool = ... + ) -> Optional[Tuple[str, ...]]: """ Returns a location known to exist on land in a country specified by `country_code`. Defaults to 'en_US'. See the `land_coords` list for available locations/countries. @@ -1732,7 +1857,10 @@ class Faker: ... def image_url( - self, width: Optional[int] = ..., height: Optional[int] = ..., placeholder_url: Optional[str] = ... + self, + width: Optional[int] = ..., + height: Optional[int] = ..., + placeholder_url: Optional[str] = ..., ) -> str: """ Returns URL to placeholder image @@ -1747,7 +1875,12 @@ class Faker: """ ... - def ipv4(self, network: bool = ..., address_class: Optional[str] = ..., private: Optional[str] = ...) -> str: + def ipv4( + self, + network: bool = ..., + address_class: Optional[str] = ..., + private: Optional[str] = ..., + ) -> str: """ Returns a random IPv4 address or network with a valid CIDR. @@ -1766,7 +1899,9 @@ class Faker: """ ... - def ipv4_private(self, network: bool = ..., address_class: Optional[str] = ...) -> str: + def ipv4_private( + self, network: bool = ..., address_class: Optional[str] = ... + ) -> str: """ Returns a private IPv4. @@ -1776,7 +1911,9 @@ class Faker: """ ... - def ipv4_public(self, network: bool = ..., address_class: Optional[str] = ...) -> str: + def ipv4_public( + self, network: bool = ..., address_class: Optional[str] = ... + ) -> str: """ Returns a public IPv4 excluding private blocks. @@ -1818,7 +1955,9 @@ class Faker: """ ... - def port_number(self, is_system: bool = ..., is_user: bool = ..., is_dynamic: bool = ...) -> int: + def port_number( + self, is_system: bool = ..., is_user: bool = ..., is_dynamic: bool = ... + ) -> int: """ Returns a network port number https://tools.ietf.org/html/rfc6335 @@ -1887,7 +2026,9 @@ class Faker: def job_female(self) -> str: ... def job_male(self) -> str: ... def get_words_list( - self, part_of_speech: Optional[str] = ..., ext_word_list: Optional[Sequence[str]] = ... + self, + part_of_speech: Optional[str] = ..., + ext_word_list: Optional[Sequence[str]] = ..., ) -> List[str]: """ Get list of words. @@ -1914,7 +2055,10 @@ class Faker: ... def paragraph( - self, nb_sentences: int = ..., variable_nb_sentences: bool = ..., ext_word_list: Optional[Sequence[str]] = ... + self, + nb_sentences: int = ..., + variable_nb_sentences: bool = ..., + ext_word_list: Optional[Sequence[str]] = ..., ) -> str: """ Generate a paragraph. @@ -1937,7 +2081,9 @@ class Faker: """ ... - def paragraphs(self, nb: int = ..., ext_word_list: Optional[Sequence[str]] = ...) -> List[str]: + def paragraphs( + self, nb: int = ..., ext_word_list: Optional[Sequence[str]] = ... + ) -> List[str]: """ Generate a list of paragraphs. @@ -1952,7 +2098,10 @@ class Faker: ... def sentence( - self, nb_words: int = ..., variable_nb_words: bool = ..., ext_word_list: Optional[Sequence[str]] = ... + self, + nb_words: int = ..., + variable_nb_words: bool = ..., + ext_word_list: Optional[Sequence[str]] = ..., ) -> str: """ Generate a sentence. @@ -1973,7 +2122,9 @@ class Faker: """ ... - def sentences(self, nb: int = ..., ext_word_list: Optional[Sequence[str]] = ...) -> List[str]: + def sentences( + self, nb: int = ..., ext_word_list: Optional[Sequence[str]] = ... + ) -> List[str]: """ Generate a list of sentences. @@ -1988,7 +2139,9 @@ class Faker: """ ... - def text(self, max_nb_chars: int = ..., ext_word_list: Optional[Sequence[str]] = ...) -> str: + def text( + self, max_nb_chars: int = ..., ext_word_list: Optional[Sequence[str]] = ... + ) -> str: """ Generate a text string. @@ -2006,7 +2159,10 @@ class Faker: ... def texts( - self, nb_texts: int = ..., max_nb_chars: int = ..., ext_word_list: Optional[Sequence[str]] = ... + self, + nb_texts: int = ..., + max_nb_chars: int = ..., + ext_word_list: Optional[Sequence[str]] = ..., ) -> List[str]: """ Generate a list of text strings. @@ -2023,7 +2179,11 @@ class Faker: """ ... - def word(self, part_of_speech: Optional[str] = ..., ext_word_list: Optional[Sequence[str]] = ...) -> str: + def word( + self, + part_of_speech: Optional[str] = ..., + ext_word_list: Optional[Sequence[str]] = ..., + ) -> str: """ Generate a word. @@ -2147,7 +2307,9 @@ class Faker: def fixed_width( self, - data_columns: Optional[List[Union[Tuple[int, str], Tuple[int, str, Dict[str, Any]]]]] = ..., + data_columns: Optional[ + List[Union[Tuple[int, str], Tuple[int, str, Dict[str, Any]]]] + ] = ..., num_rows: int = ..., align: str = ..., ) -> str: @@ -2692,7 +2854,9 @@ class Faker: def phone_number(self) -> str: ... def profile( - self, fields: Optional[List[str]] = ..., sex: Optional[Literal["M", "F", "X"]] = ... + self, + fields: Optional[List[str]] = ..., + sex: Optional[Literal["M", "F", "X"]] = ..., ) -> Dict[str, Union[str, Tuple[Decimal, Decimal], List[str], datetime.date]]: """ Generates a complete profile. @@ -2759,7 +2923,9 @@ class Faker: min_value: Union[float, int, None] = ..., max_value: Union[float, int, None] = ..., ) -> float: ... - def pyint(self, min_value: int = ..., max_value: int = ..., step: int = ...) -> int: ... + def pyint( + self, min_value: int = ..., max_value: int = ..., step: int = ... + ) -> int: ... def pyiterable( self, nb_elements: int = ..., @@ -2775,7 +2941,10 @@ class Faker: allowed_types: Union[List[Type], Tuple[Type, ...], None] = ..., ) -> List[Any]: ... def pyobject( - self, object_type: Optional[Type[Union[bool, str, float, int, tuple, set, list, Iterable, dict]]] = ... + self, + object_type: Optional[ + Type[Union[bool, str, float, int, tuple, set, list, Iterable, dict]] + ] = ..., ) -> Union[bool, str, float, int, tuple, set, list, Iterable, dict, None]: """ Generates a random object passing the type desired. @@ -2793,7 +2962,13 @@ class Faker: value_types: Union[List[Type], Tuple[Type, ...], None] = ..., allowed_types: Union[List[Type], Tuple[Type, ...], None] = ..., ) -> Set[Any]: ... - def pystr(self, min_chars: Optional[int] = ..., max_chars: int = ..., prefix: str = ..., suffix: str = ...) -> str: + def pystr( + self, + min_chars: Optional[int] = ..., + max_chars: int = ..., + prefix: str = ..., + suffix: str = ..., + ) -> str: """ Generates a random string of upper and lowercase letters. @@ -2880,7 +3055,13 @@ class Faker: """ ... - def chrome(self, version_from: int = ..., version_to: int = ..., build_from: int = ..., build_to: int = ...) -> str: + def chrome( + self, + version_from: int = ..., + version_to: int = ..., + build_from: int = ..., + build_to: int = ..., + ) -> str: """ Generate a Chrome web browser user agent string. """ @@ -3272,7 +3453,9 @@ class Faker: """ ... - def pincode_in_state(self, state_abbr: Optional[str] = ..., include_union_territories: bool = ...) -> int: + def pincode_in_state( + self, state_abbr: Optional[str] = ..., include_union_territories: bool = ... + ) -> int: """ Random PIN Code within provided state abbreviation @@ -3377,7 +3560,9 @@ class Faker: def random_company_adjective(self) -> str: ... def random_company_noun_chain(self) -> str: ... def random_company_product(self) -> str: ... - def english_paragraph(self, nb_sentences: int = ..., variable_nb_sentences: bool = ...) -> str: + def english_paragraph( + self, nb_sentences: int = ..., variable_nb_sentences: bool = ... + ) -> str: """ Generate a paragraph in English. @@ -3394,7 +3579,9 @@ class Faker: """ ... - def english_sentence(self, nb_words: int = ..., variable_nb_words: bool = ...) -> str: + def english_sentence( + self, nb_words: int = ..., variable_nb_words: bool = ... + ) -> str: """ Generate a sentence in English. @@ -4246,7 +4433,9 @@ class Faker: """ ... - def pesel(self, date_of_birth: Optional[datetime.datetime] = ..., sex: Optional[str] = ...) -> str: + def pesel( + self, date_of_birth: Optional[datetime.datetime] = ..., sex: Optional[str] = ... + ) -> str: """ Returns 11 characters of Universal Electronic System for Registration of the Population. Polish: Powszechny Elektroniczny System Ewidencji Ludności. @@ -4546,7 +4735,11 @@ class Faker: """ ... - def full_name(self, gender: Optional[Literal["M", "F", "X"]] = ..., short: Optional[bool] = ...) -> str: + def full_name( + self, + gender: Optional[Literal["M", "F", "X"]] = ..., + short: Optional[bool] = ..., + ) -> str: """ Generate Full Name - gender = 'M' or 'F' optional params diff --git a/faker/sphinx/docstring.py b/faker/sphinx/docstring.py index 350771e9ae..e335e723e9 100644 --- a/faker/sphinx/docstring.py +++ b/faker/sphinx/docstring.py @@ -11,13 +11,24 @@ logger = logging.getLogger(__name__) _fake = Faker(AVAILABLE_LOCALES) -_base_provider_method_pattern: Pattern = re.compile(r"^faker\.providers\.BaseProvider\.(?P\w+)$") -_standard_provider_method_pattern: Pattern = re.compile(r"^faker\.providers\.\w+\.Provider\.(?P\w+)$") +_base_provider_method_pattern: Pattern = re.compile( + r"^faker\.providers\.BaseProvider\.(?P\w+)$" +) +_standard_provider_method_pattern: Pattern = re.compile( + r"^faker\.providers\.\w+\.Provider\.(?P\w+)$" +) _locale_provider_method_pattern: Pattern = re.compile( - r"^faker\.providers\.\w+" r"\.(?P[a-z]{2,3}_[A-Z]{2})" r"\.Provider" r"\.(?P\w+)$", + r"^faker\.providers\.\w+" + r"\.(?P[a-z]{2,3}_[A-Z]{2})" + r"\.Provider" + r"\.(?P\w+)$", ) _sample_line_pattern: Pattern = re.compile( - r"^:sample" r"(?: size=(?P[1-9][0-9]*))?" r"(?: seed=(?P[0-9]+))?" r":" r"(?: ?(?P.*))?$", + r"^:sample" + r"(?: size=(?P[1-9][0-9]*))?" + r"(?: seed=(?P[0-9]+))?" + r":" + r"(?: ?(?P.*))?$", ) _command_template = "generator.{method}({kwargs})" _sample_output_template = ( @@ -184,7 +195,9 @@ def _generate_samples(self): output = "" eval_scope = self._generate_eval_scope() for sample in self._samples: - command = _command_template.format(method=self._method, kwargs=sample.kwargs) + command = _command_template.format( + method=self._method, kwargs=sample.kwargs + ) validator = SampleCodeValidator(command) if validator.errors: msg = ( @@ -196,7 +209,12 @@ def _generate_samples(self): try: Faker.seed(sample.seed) - results = "\n".join([self._stringify_result(eval(command, eval_scope)) for _ in range(sample.size)]) + results = "\n".join( + [ + self._stringify_result(eval(command, eval_scope)) + for _ in range(sample.size) + ] + ) except Exception: msg = f"Sample generation failed for method `{self._method}` with arguments `{sample.kwargs}`." self._log_warning(msg) diff --git a/faker/sphinx/documentor.py b/faker/sphinx/documentor.py index 410848f688..9c5d32a8e3 100644 --- a/faker/sphinx/documentor.py +++ b/faker/sphinx/documentor.py @@ -10,7 +10,10 @@ if os.environ.get("READTHEDOCS", False): version = os.environ["READTHEDOCS_VERSION"] - HOME = Path("/home/docs/checkouts/readthedocs.org/user_builds/faker/checkouts") / version + HOME = ( + Path("/home/docs/checkouts/readthedocs.org/user_builds/faker/checkouts") + / version + ) DOCS_ROOT = HOME / "docs" else: DOCS_ROOT = Path(__file__).resolve().parents[2] / "docs" @@ -26,7 +29,9 @@ """ BASE_PROVIDER_METHOD_NAMES = [ - name for name, method in inspect.getmembers(BaseProvider, inspect.isfunction) if not name.startswith("_") + name + for name, method in inspect.getmembers(BaseProvider, inspect.isfunction) + if not name.startswith("_") ] diff --git a/faker/typing.py b/faker/typing.py index d6fcfc8252..e2063aa24c 100644 --- a/faker/typing.py +++ b/faker/typing.py @@ -40,4 +40,13 @@ class Country: capital: str -__all__ = ["OrderedDictType", "CreditCard", "CardType", "Country", "DateParseType", "HueType", "SexLiteral", "SeedType"] +__all__ = [ + "OrderedDictType", + "CreditCard", + "CardType", + "Country", + "DateParseType", + "HueType", + "SexLiteral", + "SeedType", +] diff --git a/faker/utils/checksums.py b/faker/utils/checksums.py index 015aefed55..ba83f3cb7b 100644 --- a/faker/utils/checksums.py +++ b/faker/utils/checksums.py @@ -10,7 +10,9 @@ def luhn_checksum(number: float) -> int: odd_digits = digits[-1::-2] even_digits = digits[-2::-2] - checksum = sum(odd_digits) + sum(sum(_digits_of(digit * 2)) for digit in even_digits) + checksum = sum(odd_digits) + sum( + sum(_digits_of(digit * 2)) for digit in even_digits + ) return checksum % 10 diff --git a/faker/utils/distribution.py b/faker/utils/distribution.py index 83ef320a38..61513c6f95 100644 --- a/faker/utils/distribution.py +++ b/faker/utils/distribution.py @@ -36,7 +36,9 @@ def choices_distribution_unique( assert p is not None assert len(a) == len(p) - assert len(a) >= length, "You can't request more unique samples than elements in the dataset." + assert ( + len(a) >= length + ), "You can't request more unique samples than elements in the dataset." choices = [] items = list(a) diff --git a/faker/utils/loading.py b/faker/utils/loading.py index 0ea54eedc6..afb6cb26bb 100644 --- a/faker/utils/loading.py +++ b/faker/utils/loading.py @@ -54,7 +54,9 @@ def find_available_providers(modules: List[ModuleType]) -> List[str]: for providers_mod in modules: if providers_mod.__package__: providers = [ - ".".join([providers_mod.__package__, mod]) for mod in list_module(providers_mod) if mod != "__pycache__" + ".".join([providers_mod.__package__, mod]) + for mod in list_module(providers_mod) + if mod != "__pycache__" ] available_providers.update(providers) return sorted(available_providers) diff --git a/faker/utils/text.py b/faker/utils/text.py index 50839185a8..63cc9c1e55 100644 --- a/faker/utils/text.py +++ b/faker/utils/text.py @@ -23,6 +23,8 @@ def slugify(value: str, allow_dots: bool = False, allow_unicode: bool = False) - value = unicodedata.normalize("NFKC", value) value = pattern.sub("", value).strip().lower() return _re_spaces.sub("-", value) - value = unicodedata.normalize("NFKD", value).encode("ascii", "ignore").decode("ascii") + value = ( + unicodedata.normalize("NFKD", value).encode("ascii", "ignore").decode("ascii") + ) value = pattern.sub("", value).strip().lower() return _re_spaces.sub("-", value) diff --git a/generate_stubs.py b/generate_stubs.py index b5dfb6aa48..71e0b73c5b 100644 --- a/generate_stubs.py +++ b/generate_stubs.py @@ -25,16 +25,23 @@ imports["faker.generator"] = {"Generator"} -def get_module_and_member_to_import(cls: Type, locale: Optional[str] = None) -> Tuple[str, str]: +def get_module_and_member_to_import( + cls: Type, locale: Optional[str] = None +) -> Tuple[str, str]: cls_name = getattr(cls, "__name__", getattr(cls, "_name", str(cls))) module, member = cls.__module__, cls_name if cls_name is None: qualified_type = re.findall(r"([a-zA-Z_0-9]+)\.([a-zA-Z_0-9]+)", str(cls)) if len(qualified_type) > 0: - if imports[qualified_type[0][0]] is None or qualified_type[0][1] not in imports[qualified_type[0][0]]: + if ( + imports[qualified_type[0][0]] is None + or qualified_type[0][1] not in imports[qualified_type[0][0]] + ): module, member = qualified_type[0] else: - unqualified_type = re.findall(r"[^\.a-zA-Z0-9_]([A-Z][a-zA-Z0-9_]+)[^\.a-zA-Z0-9_]", f" {cls} ") + unqualified_type = re.findall( + r"[^\.a-zA-Z0-9_]([A-Z][a-zA-Z0-9_]+)[^\.a-zA-Z0-9_]", f" {cls} " + ) if len(unqualified_type) > 0 and unqualified_type[0] != "NoneType": cls_str = str(cls).replace(".en_US", "").replace("faker.", ".") if " if locale is not None: cls_str = cls_str.replace("." + locale, "") - if imports[cls_str] is None or unqualified_type[0] not in imports[cls_str]: + if ( + imports[cls_str] is None + or unqualified_type[0] not in imports[cls_str] + ): module, member = cls_str, unqualified_type[0] if module in MODULES_TO_FULLY_QUALIFY: member = None @@ -68,7 +78,9 @@ def __init__(self, cls: type, funcs: Dict[str, Any], vars: Dict[str, Any]): seen_vars = seen_vars.union(self.vars.keys()) -def get_member_functions_and_variables(cls: object, include_mangled: bool = False) -> UniqueMemberFunctionsAndVariables: +def get_member_functions_and_variables( + cls: object, include_mangled: bool = False +) -> UniqueMemberFunctionsAndVariables: members = [ (name, value) for (name, value) in inspect.getmembers(cls) @@ -84,13 +96,22 @@ def get_member_functions_and_variables(cls: object, include_mangled: bool = Fals # I haven't implemented logic # for generating descriptor signatures yet continue - elif not include_mangled or type(value).__name__ not in GENERIC_MANGLE_TYPES_TO_IGNORE: + elif ( + not include_mangled + or type(value).__name__ not in GENERIC_MANGLE_TYPES_TO_IGNORE + ): vars[name] = value return UniqueMemberFunctionsAndVariables(cls, funcs, vars) -def get_signatures_for_func(func_value, func_name, locale, is_overload: bool = False, comment: Optional[str] = None): +def get_signatures_for_func( + func_value, + func_name, + locale, + is_overload: bool = False, + comment: Optional[str] = None, +): """Return the signatures for the given function, recursing as necessary to handle overloads.""" signatures = [] @@ -106,7 +127,9 @@ def get_signatures_for_func(func_value, func_name, locale, is_overload: bool = F if overloads: for overload in overloads: signatures.extend( - get_signatures_for_func(overload, func_name, locale, is_overload=True, comment=comment) + get_signatures_for_func( + overload, func_name, locale, is_overload=True, comment=comment + ) ) return signatures @@ -137,7 +160,10 @@ def get_signatures_for_func(func_value, func_name, locale, is_overload: bool = F annotation = hints.get(key, new_parm.annotation) if parm_val.default is not inspect.Parameter.empty: new_parm = parm_val.replace(default=...) - if annotation is not inspect.Parameter.empty and annotation.__module__ not in BUILTIN_MODULES_TO_IGNORE: + if ( + annotation is not inspect.Parameter.empty + and annotation.__module__ not in BUILTIN_MODULES_TO_IGNORE + ): module, member = get_module_and_member_to_import(annotation, locale) if module not in [None, "types"]: if imports[module] is None: @@ -147,7 +173,9 @@ def get_signatures_for_func(func_value, func_name, locale, is_overload: bool = F new_parms.append(new_parm) sig = sig.replace(parameters=new_parms) - sig_str = str(sig).replace("Ellipsis", "...").replace("NoneType", "None").replace("~", "") + sig_str = ( + str(sig).replace("Ellipsis", "...").replace("NoneType", "None").replace("~", "") + ) for module in imports.keys(): if module in MODULES_TO_FULLY_QUALIFY: continue @@ -179,7 +207,8 @@ def get_signatures_for_func(func_value, func_name, locale, is_overload: bool = F classes_and_locales_to_use_for_stub.append((prov_cls, locale)) all_members: List[Tuple[UniqueMemberFunctionsAndVariables, str]] = [ - (get_member_functions_and_variables(cls), locale) for cls, locale in classes_and_locales_to_use_for_stub + (get_member_functions_and_variables(cls), locale) + for cls, locale in classes_and_locales_to_use_for_stub ] + [(get_member_functions_and_variables(Faker, include_mangled=True), None)] # Use the accumulated seen_funcs and seen_vars to remove all variables that have the same name as a function somewhere @@ -195,7 +224,9 @@ def get_signatures_for_func(func_value, func_name, locale, is_overload: bool = F for mbr_funcs_and_vars, locale in all_members: for func_name, func_value in mbr_funcs_and_vars.funcs.items(): - signatures_with_comments.extend(get_signatures_for_func(func_value, func_name, locale)) + signatures_with_comments.extend( + get_signatures_for_func(func_value, func_name, locale) + ) signatures_with_comments_as_str = [] for sig, comment, is_preceding_comment in signatures_with_comments: @@ -204,7 +235,10 @@ def get_signatures_for_func(func_value, func_name, locale, is_overload: bool = F elif comment is not None: sig_without_final_ellipsis = sig.strip(" .") signatures_with_comments_as_str.append( - sig_without_final_ellipsis + '\n """\n ' + comment.replace("\n", "\n ") + '\n """\n ...' + sig_without_final_ellipsis + + '\n """\n ' + + comment.replace("\n", "\n ") + + '\n """\n ...' ) else: signatures_with_comments_as_str.append(sig) @@ -217,7 +251,9 @@ def get_import_str(module: str, members: Optional[Set[str]]) -> str: return f"from {module} import {', '.join(members)}" -imports_block = "\n".join([get_import_str(module, names) for module, names in imports.items()]) +imports_block = "\n".join( + [get_import_str(module, names) for module, names in imports.items()] +) member_signatures_block = " " + "\n ".join( [sig.replace("\n", "\n ") for sig in signatures_with_comments_as_str] ) diff --git a/tests/providers/__init__.py b/tests/providers/__init__.py index efc9dec67f..e50ea6f558 100644 --- a/tests/providers/__init__.py +++ b/tests/providers/__init__.py @@ -48,7 +48,9 @@ def test_random_digit_or_empty(self, faker, num_samples): def test_random_digit_not_null_or_empty(self, faker, num_samples): expected = set(range(1, 10)) expected.add("") - samples = [faker.random_digit_not_null_or_empty() for _ in range(num_samples * 10)] + samples = [ + faker.random_digit_not_null_or_empty() for _ in range(num_samples * 10) + ] assert set(samples) == expected def test_random_number(self, faker): @@ -104,7 +106,11 @@ def test_numerify(self, faker, num_samples, text, pattern): ("abcd", string.ascii_letters, r"abcd"), ("???", string.ascii_letters, r"[0-9a-zA-Z]{3}"), ("???", "aBcDeFgHiJ12345", r"[1-5aBcDeFgHiJ]{3}"), - ("??Xr^#7p??", "AbCdخあ5漢7Я", r"[AbCdخあ5漢7Я]{2}Xr\^#7p[AbCdخあ5漢7Я]{2}"), + ( + "??Xr^#7p??", + "AbCdخあ5漢7Я", + r"[AbCdخあ5漢7Я]{2}Xr\^#7p[AbCdخあ5漢7Я]{2}", + ), ], ids=[ "empty_string", diff --git a/tests/providers/test_address.py b/tests/providers/test_address.py index 24812dc147..098e186192 100644 --- a/tests/providers/test_address.py +++ b/tests/providers/test_address.py @@ -119,7 +119,9 @@ def test_country_code_all_locales(self): def test_current_country_errors(self): dt = providers.date_time countries_duplicated = [*dt.Provider.countries, *dt.Provider.countries] - with mock.patch.object(dt.Provider, "countries", countries_duplicated), pytest.raises(ValueError) as e: + with mock.patch.object( + dt.Provider, "countries", countries_duplicated + ), pytest.raises(ValueError) as e: Faker("en_US").current_country() assert "Ambiguous" in str(e) country_code = "faker.providers.address.Provider.current_country_code" @@ -473,7 +475,9 @@ def test_town(self, faker, num_samples): class TestEnCa: """Test en_CA address provider methods""" - valid_postcode_letter_re = r"[{}]".format("".join(EnCaAddressProvider.postal_code_letters)) + valid_postcode_letter_re = r"[{}]".format( + "".join(EnCaAddressProvider.postal_code_letters) + ) valid_postcode_re = r"{0}[0-9]{0} ?[0-9]{0}[0-9]".format(valid_postcode_letter_re) def test_postcode(self, faker, num_samples): @@ -486,7 +490,10 @@ def test_postcode_in_province(self, faker, num_samples): for _ in range(num_samples): for province_abbr in EnCaAddressProvider.provinces_abbr: code = faker.postcode_in_province(province_abbr) - assert code[0] in EnCaAddressProvider.provinces_postcode_prefixes[province_abbr] + assert ( + code[0] + in EnCaAddressProvider.provinces_postcode_prefixes[province_abbr] + ) with pytest.raises(Exception): faker.postcode_in_province("XX") @@ -550,7 +557,9 @@ def test_postcode(self, faker, num_samples): for _ in range(num_samples): postcode = faker.postcode() assert isinstance(postcode, str) - assert re.fullmatch(r"(?:^[AC-FHKNPRTV-Y][0-9]{2}|D6W)[ -]?[0-9AC-FHKNPRTV-Y]{4}$", postcode) + assert re.fullmatch( + r"(?:^[AC-FHKNPRTV-Y][0-9]{2}|D6W)[ -]?[0-9AC-FHKNPRTV-Y]{4}$", postcode + ) def test_county(self, faker, num_samples): for _ in range(num_samples): @@ -583,7 +592,9 @@ def test_state_abbr(self, faker, num_samples): def test_state_abbr_states_only(self, faker, num_samples): for _ in range(num_samples): - state_abbr = faker.state_abbr(include_territories=False, include_freely_associated_states=False) + state_abbr = faker.state_abbr( + include_territories=False, include_freely_associated_states=False + ) assert isinstance(state_abbr, str) assert state_abbr in EnUsAddressProvider.states_abbr @@ -600,7 +611,10 @@ def test_state_abbr_no_freely_associated_states(self, faker, num_samples): for _ in range(num_samples): state_abbr = faker.state_abbr(include_freely_associated_states=False) assert isinstance(state_abbr, str) - assert state_abbr in EnUsAddressProvider.states_abbr or state_abbr in EnUsAddressProvider.territories_abbr + assert ( + state_abbr in EnUsAddressProvider.states_abbr + or state_abbr in EnUsAddressProvider.territories_abbr + ) def test_postcode(self, faker, num_samples): for _ in range(num_samples): @@ -708,14 +722,19 @@ def test_department(self, faker, num_samples): assert department in EsCoAddressProvider.departments.values() def test_municipality_code(self, faker, num_samples): - municipality_codes = {municipality_code for municipality_code, _ in EsCoAddressProvider.municipalities} + municipality_codes = { + municipality_code + for municipality_code, _ in EsCoAddressProvider.municipalities + } for _ in range(num_samples): municipality_code = faker.municipality_code() assert isinstance(municipality_code, str) assert municipality_code in municipality_codes def test_municipality(self, faker, num_samples): - municipalities = {municipality for _, municipality in EsCoAddressProvider.municipalities} + municipalities = { + municipality for _, municipality in EsCoAddressProvider.municipalities + } for _ in range(num_samples): municipality = faker.municipality() city = faker.city() @@ -854,7 +873,9 @@ def test_state(self, faker, num_samples): assert state in states def test_state_abbr(self, faker, num_samples): - state_abbrs = [state_abbr for state_abbr, state_name in EsMxAddressProvider.states] + state_abbrs = [ + state_abbr for state_abbr, state_name in EsMxAddressProvider.states + ] for _ in range(num_samples): state_abbr = faker.state_abbr() assert isinstance(state_abbr, str) @@ -911,21 +932,27 @@ def test_department(self, faker, num_samples): assert department in FrFrAddressProvider.departments def test_department_name(self, faker, num_samples): - department_names = [dept_name for dept_num, dept_name in FrFrAddressProvider.departments] + department_names = [ + dept_name for dept_num, dept_name in FrFrAddressProvider.departments + ] for _ in range(num_samples): department_name = faker.department_name() assert isinstance(department_name, str) assert department_name in department_names def test_department_number(self, faker, num_samples): - department_numbers = [dept_num for dept_num, dept_name in FrFrAddressProvider.departments] + department_numbers = [ + dept_num for dept_num, dept_name in FrFrAddressProvider.departments + ] for _ in range(num_samples): department_number = faker.department_number() assert isinstance(department_number, str) assert department_number in department_numbers def test_postcode(self, faker, num_samples): - department_numbers = [dept_num for dept_num, dept_name in FrFrAddressProvider.departments] + department_numbers = [ + dept_num for dept_num, dept_name in FrFrAddressProvider.departments + ] for _ in range(num_samples): postcode = faker.postcode() assert isinstance(postcode, str) @@ -1151,7 +1178,10 @@ def test_postcode_city_province(self, faker, num_samples): for _ in range(num_samples): postcode_city_province = faker.postcode_city_province() assert isinstance(postcode_city_province, str) - match = re.fullmatch(r"(?P\d{5}), (?P.*) \((?P[A-Z]{2})\)", postcode_city_province) + match = re.fullmatch( + r"(?P\d{5}), (?P.*) \((?P[A-Z]{2})\)", + postcode_city_province, + ) assert match assert match.group("cap") in ItItAddressProvider.postcode_formats assert match.group("city") in ItItAddressProvider.cities @@ -1529,14 +1559,18 @@ def test_estado(self, faker, num_samples): assert estado in PtBrAddressProvider.estados def test_estado_nome(self, faker, num_samples): - state_names = [state_name for state_abbr, state_name in PtBrAddressProvider.estados] + state_names = [ + state_name for state_abbr, state_name in PtBrAddressProvider.estados + ] for _ in range(num_samples): estado_nome = faker.estado_nome() assert isinstance(estado_nome, str) assert estado_nome in state_names def test_estado_sigla(self, faker, num_samples): - state_abbrs = [state_abbr for state_abbr, state_name in PtBrAddressProvider.estados] + state_abbrs = [ + state_abbr for state_abbr, state_name in PtBrAddressProvider.estados + ] for _ in range(num_samples): estado_sigla = faker.estado_sigla() assert isinstance(estado_sigla, str) @@ -1606,7 +1640,9 @@ def setup_class(cls): cls.metro_manila_postcodes = EnPhAddressProvider.metro_manila_postcodes cls.luzon_province_postcodes = EnPhAddressProvider.luzon_province_postcodes cls.visayas_province_postcodes = EnPhAddressProvider.visayas_province_postcodes - cls.mindanao_province_postcodes = EnPhAddressProvider.mindanao_province_postcodes + cls.mindanao_province_postcodes = ( + EnPhAddressProvider.mindanao_province_postcodes + ) cls.postcodes = EnPhAddressProvider.postcodes cls.provinces = EnPhAddressProvider.provinces cls.province_lgus = EnPhAddressProvider.province_lgus @@ -1622,11 +1658,17 @@ def test_luzon_province_postcode(self, faker, num_samples): def test_visayas_province_postcode(self, faker, num_samples): for _ in range(num_samples): - assert int(faker.visayas_province_postcode()) in self.visayas_province_postcodes + assert ( + int(faker.visayas_province_postcode()) + in self.visayas_province_postcodes + ) def test_mindanao_province_postcode(self, faker, num_samples): for _ in range(num_samples): - assert int(faker.mindanao_province_postcode()) in self.mindanao_province_postcodes + assert ( + int(faker.mindanao_province_postcode()) + in self.mindanao_province_postcodes + ) def test_postcode(self, faker, num_samples): for _ in range(num_samples): @@ -1676,7 +1718,9 @@ def setup_class(cls): cls.metro_manila_postcodes = EnPhAddressProvider.metro_manila_postcodes cls.luzon_province_postcodes = EnPhAddressProvider.luzon_province_postcodes cls.visayas_province_postcodes = EnPhAddressProvider.visayas_province_postcodes - cls.mindanao_province_postcodes = EnPhAddressProvider.mindanao_province_postcodes + cls.mindanao_province_postcodes = ( + EnPhAddressProvider.mindanao_province_postcodes + ) cls.postcodes = EnPhAddressProvider.postcodes cls.provinces = EnPhAddressProvider.provinces cls.province_lgus = EnPhAddressProvider.province_lgus @@ -1692,11 +1736,17 @@ def test_luzon_province_postcode(self, faker, num_samples): def test_visayas_province_postcode(self, faker, num_samples): for _ in range(num_samples): - assert int(faker.visayas_province_postcode()) in self.visayas_province_postcodes + assert ( + int(faker.visayas_province_postcode()) + in self.visayas_province_postcodes + ) def test_mindanao_province_postcode(self, faker, num_samples): for _ in range(num_samples): - assert int(faker.mindanao_province_postcode()) in self.mindanao_province_postcodes + assert ( + int(faker.mindanao_province_postcode()) + in self.mindanao_province_postcodes + ) def test_postcode(self, faker, num_samples): for _ in range(num_samples): @@ -1768,7 +1818,8 @@ def test_region(self, faker, num_samples): groupdict = match.groupdict() assert any( [ - groupdict.get("region_republic") in RuRuAddressProvider.region_republics, + groupdict.get("region_republic") + in RuRuAddressProvider.region_republics, groupdict.get("region_krai") in RuRuAddressProvider.region_krai, groupdict.get("region_oblast") in RuRuAddressProvider.region_oblast, groupdict.get("region_ao") in RuRuAddressProvider.region_ao, @@ -1914,7 +1965,9 @@ def test_union_territories(self, faker, num_samples): assert isinstance(union_territory, str) assert (union_territory,) in EnInAddressProvider.union_territories - @pytest.mark.parametrize("pincodes", ["pincode_in_state", "zipcode_in_state", "postcode_in_state"]) + @pytest.mark.parametrize( + "pincodes", ["pincode_in_state", "zipcode_in_state", "postcode_in_state"] + ) def test_pincodes_in_state(self, faker, num_samples, pincodes): """Test `pincodes` for state and union territories""" @@ -1998,13 +2051,17 @@ def test_canton_name(self, faker, num_samples): for _ in range(num_samples): canton_name = faker.canton_name() assert isinstance(canton_name, str) - assert any(canton_name == cantons[1] for cantons in DeChAddressProvider.cantons) + assert any( + canton_name == cantons[1] for cantons in DeChAddressProvider.cantons + ) def test_canton_code(self, faker, num_samples): for _ in range(num_samples): canton_code = faker.canton_code() assert isinstance(canton_code, str) - assert any(canton_code == cantons[0] for cantons in DeChAddressProvider.cantons) + assert any( + canton_code == cantons[0] for cantons in DeChAddressProvider.cantons + ) def test_canton(self, faker, num_samples): for _ in range(num_samples): @@ -2078,7 +2135,9 @@ def test_state(self, faker, num_samples): assert state in states def test_state_abbr(self, faker, num_samples): - state_abbrs = [state_abbr for state_abbr, state_name in RoRoAddressProvider.states] + state_abbrs = [ + state_abbr for state_abbr, state_name in RoRoAddressProvider.states + ] for _ in range(num_samples): state_abbr = faker.state_abbr() assert isinstance(state_abbr, str) @@ -2166,8 +2225,12 @@ def test_postcode_in_state(self, faker, num_samples): for state_abbr in EnMsAddressProvider.states.keys(): code = faker.postcode_in_state(state_abbr) assert re.fullmatch(r"\d{5}", code) - assert int(code) >= EnMsAddressProvider.states_postcode[state_abbr][0][0] - assert int(code) <= EnMsAddressProvider.states_postcode[state_abbr][-1][1] + assert ( + int(code) >= EnMsAddressProvider.states_postcode[state_abbr][0][0] + ) + assert ( + int(code) <= EnMsAddressProvider.states_postcode[state_abbr][-1][1] + ) with pytest.raises(KeyError): faker.postcode_in_state("XX") @@ -2191,13 +2254,18 @@ def test_reo_first(self, faker, num_samples): for _ in range(num_samples): te_reo_first = faker.te_reo_first() assert isinstance(te_reo_first, str) - assert te_reo_first in [str(i).capitalize() for i in EnNzAddressProvider.te_reo_parts] + assert te_reo_first in [ + str(i).capitalize() for i in EnNzAddressProvider.te_reo_parts + ] def test_reo_ending(self, faker, num_samples): for _ in range(num_samples): te_reo_ending = faker.te_reo_ending() assert isinstance(te_reo_ending, str) - assert te_reo_ending in EnNzAddressProvider.te_reo_parts or EnNzAddressProvider.te_reo_endings + assert ( + te_reo_ending in EnNzAddressProvider.te_reo_parts + or EnNzAddressProvider.te_reo_endings + ) def test_city_prefix(self, faker, num_samples): for _ in range(num_samples): @@ -2233,13 +2301,17 @@ def test_canton_name(self, faker, num_samples): for _ in range(num_samples): canton_name = faker.canton_name() assert isinstance(canton_name, str) - assert any(canton_name == cantons[1] for cantons in FrChAddressProvider.cantons) + assert any( + canton_name == cantons[1] for cantons in FrChAddressProvider.cantons + ) def test_canton_code(self, faker, num_samples): for _ in range(num_samples): canton_code = faker.canton_code() assert isinstance(canton_code, str) - assert any(canton_code == cantons[0] for cantons in FrChAddressProvider.cantons) + assert any( + canton_code == cantons[0] for cantons in FrChAddressProvider.cantons + ) def test_canton(self, faker, num_samples): for _ in range(num_samples): @@ -2261,7 +2333,10 @@ def test_street_address_with_county(self, faker, num_samples): for _ in range(num_samples): street_address_with_county = faker.street_address_with_county() assert isinstance(street_address_with_county, str) - match = re.fullmatch(r".* \d*.\n.* [A-Za-zÀ-ȕ]*\nH-\d{4} [A-Za-zÀ-ȕ]*", street_address_with_county) + match = re.fullmatch( + r".* \d*.\n.* [A-Za-zÀ-ȕ]*\nH-\d{4} [A-Za-zÀ-ȕ]*", + street_address_with_county, + ) assert match def test_city_prefix(self, faker, num_samples): @@ -2512,8 +2587,14 @@ def test_postcode_in_state(self, faker, num_samples): for state_abbr in ViVNAddressProvider.provinces_abbr: postcode = faker.postcode_in_state(state_abbr) assert re.fullmatch(r"\d{6}", postcode) - assert int(postcode) >= ViVNAddressProvider.provinces_postcode[state_abbr][0] - assert int(postcode) <= ViVNAddressProvider.provinces_postcode[state_abbr][1] + assert ( + int(postcode) + >= ViVNAddressProvider.provinces_postcode[state_abbr][0] + ) + assert ( + int(postcode) + <= ViVNAddressProvider.provinces_postcode[state_abbr][1] + ) with pytest.raises(ValueError): faker.postcode_in_state("XX") diff --git a/tests/providers/test_automotive.py b/tests/providers/test_automotive.py index 618593dc7f..88a1f20ea4 100644 --- a/tests/providers/test_automotive.py +++ b/tests/providers/test_automotive.py @@ -34,8 +34,12 @@ def test_vin(self, faker, num_samples): assert len(vin_number) == 17 # verify checksum: vin_number[8] - front_part_weight = calculate_vin_str_weight(vin_number[:8], [8, 7, 6, 5, 4, 3, 2, 10]) - rear_part_weight = calculate_vin_str_weight(vin_number[9:], [9, 8, 7, 6, 5, 4, 3, 2]) + front_part_weight = calculate_vin_str_weight( + vin_number[:8], [8, 7, 6, 5, 4, 3, 2, 10] + ) + rear_part_weight = calculate_vin_str_weight( + vin_number[9:], [9, 8, 7, 6, 5, 4, 3, 2] + ) checksum = (front_part_weight + rear_part_weight) % 11 checksum_str = "X" if checksum == 10 else str(checksum) assert vin_number[8] == checksum_str @@ -58,7 +62,9 @@ class TestAzAz(_SimpleAutomotiveTestMixin): class TestDeAt(_SimpleAutomotiveTestMixin): """Test de_AT automotive provider methods""" - license_plate_pattern: Pattern = re.compile(r"(?P[A-Z]{1,2})-[1-9]{1}[0-9]{0,4} [A-Z]{1,3}") + license_plate_pattern: Pattern = re.compile( + r"(?P[A-Z]{1,2})-[1-9]{1}[0-9]{0,4} [A-Z]{1,3}" + ) def perform_extra_checks(self, license_plate, match): assert match.group("prefix") in DeAtAutomotiveProvider.license_plate_prefix @@ -113,14 +119,18 @@ def test_protocol_plate(self, faker, num_samples): class TestEsCo(_SimpleAutomotiveTestMixin): """Test es_CO automotive provider methods""" - license_plate_pattern = re.compile(r"[A-Z]{3}\d{3}|[A-Z]{3}\d{2}[A-Z]|T\d{4}|[A-Z]{2}\d{4}|R\d{5}|S\d{5}") + license_plate_pattern = re.compile( + r"[A-Z]{3}\d{3}|[A-Z]{3}\d{2}[A-Z]|T\d{4}|[A-Z]{2}\d{4}|R\d{5}|S\d{5}" + ) class TestEsEs: """Test es_ES automotive provider methods""" new_format_pattern: Pattern = re.compile(r"\d{4}\s[A-Z]{3}") - old_format_pattern: Pattern = re.compile(r"(?P[A-Z]{1,2})\s\d{4}\s[A-Z]{2}") + old_format_pattern: Pattern = re.compile( + r"(?P[A-Z]{1,2})\s\d{4}\s[A-Z]{2}" + ) def test_plate_new_format(self, faker, num_samples): for _ in range(num_samples): @@ -134,7 +144,9 @@ def test_plate_old_format(self, faker, num_samples): assert isinstance(plate, str) match = self.old_format_pattern.match(plate) assert match - assert match.group("province_prefix") in EsEsAutomotiveProvider.province_prefix + assert ( + match.group("province_prefix") in EsEsAutomotiveProvider.province_prefix + ) def test_plate_old_format_explicit_province_prefix(self, faker, num_samples): for _ in range(num_samples): @@ -147,7 +159,9 @@ def test_plate_format(self, faker, num_samples): for _ in range(num_samples): plate = faker.license_plate() assert isinstance(plate, str) - assert self.new_format_pattern.match(plate) or self.old_format_pattern.match(plate) + assert self.new_format_pattern.match( + plate + ) or self.old_format_pattern.match(plate) class TestFiFi(_SimpleAutomotiveTestMixin): @@ -165,11 +179,15 @@ class TestFilPh(TestEnPh): class TestFrFr(_SimpleAutomotiveTestMixin): """Test fr_FR automotive provider methods""" - license_plate_pattern: Pattern = re.compile(r"\d{3}-[A-Z]{3}-\d{2}|[A-Z]{2}-\d{3}-[A-Z]{2}") + license_plate_pattern: Pattern = re.compile( + r"\d{3}-[A-Z]{3}-\d{2}|[A-Z]{2}-\d{3}-[A-Z]{2}" + ) class TestHeIl(_SimpleAutomotiveTestMixin): - license_plate_pattern: Pattern = re.compile(r"(\d{3}-\d{2}-\d{3})|(\d{2}-\d{3}-\d{2})") + license_plate_pattern: Pattern = re.compile( + r"(\d{3}-\d{2}-\d{3})|(\d{2}-\d{3}-\d{2})" + ) class TestHuHu(_SimpleAutomotiveTestMixin): @@ -205,7 +223,9 @@ class TestKoKr(_SimpleAutomotiveTestMixin): class TestNlBe(_SimpleAutomotiveTestMixin): """Test nl_BE automotive provider methods""" - license_plate_pattern: Pattern = re.compile(r"(\d{3}-[A-Z]{3})|" r"([A-Z]{3}-\d{3})|" r"([1-2]-[A-Z]{3}-\d{3})") + license_plate_pattern: Pattern = re.compile( + r"(\d{3}-[A-Z]{3})|" r"([A-Z]{3}-\d{3})|" r"([1-2]-[A-Z]{3}-\d{3})" + ) class TestNlNl(_SimpleAutomotiveTestMixin): @@ -224,7 +244,9 @@ class TestNlNl(_SimpleAutomotiveTestMixin): ) license_plate_pattern = re.compile( - license_plate_car_pattern.pattern + "|" + license_plate_motorbike_pattern.pattern, + license_plate_car_pattern.pattern + + "|" + + license_plate_motorbike_pattern.pattern, ) def test_plate_car(self, faker, num_samples): @@ -248,7 +270,9 @@ class TestNoNo(_SimpleAutomotiveTestMixin): class TestPlPl: def test_License_plate(self, faker, num_samples): - pattern: Pattern = re.compile(r"{patterns}".format(patterns="|".join(faker.license_plate_regex_formats()))) + pattern: Pattern = re.compile( + r"{patterns}".format(patterns="|".join(faker.license_plate_regex_formats())) + ) for _ in range(num_samples): plate = faker.license_plate() assert pattern.fullmatch(plate) @@ -264,14 +288,19 @@ class TestPtPt(_SimpleAutomotiveTestMixin): """Test pt_PT automotive provider methods""" license_plate_pattern: Pattern = re.compile( - r"\d{2}-\d{2}-[A-Z]{2}|" r"\d{2}-[A-Z]{2}-\d{2}|" r"[A-Z]{2}-\d{2}-\d{2}|" r"[A-Z]{2}-\d{2}-[A-Z]{2}", + r"\d{2}-\d{2}-[A-Z]{2}|" + r"\d{2}-[A-Z]{2}-\d{2}|" + r"[A-Z]{2}-\d{2}-\d{2}|" + r"[A-Z]{2}-\d{2}-[A-Z]{2}", ) class TestRoRo(_SimpleAutomotiveTestMixin): """Test ro_RO automotive provider methods""" - license_plate_pattern: Pattern = re.compile(r"(?P[A-Z]{1,2})-\d{2,3}-[A-Z]{3}") + license_plate_pattern: Pattern = re.compile( + r"(?P[A-Z]{1,2})-\d{2,3}-[A-Z]{3}" + ) def perform_extra_checks(self, license_plate, match): assert match.group("prefix") in RoRoAutomotiveProvider.license_plate_prefix @@ -356,7 +385,10 @@ class TestTrTr(_SimpleAutomotiveTestMixin): def perform_extra_checks(self, license_plate, match): [city_code, letters, _] = license_plate.split(" ") assert int(city_code) in range(1, 82) - assert all(letter in TrTrAutomotiveProvider.ascii_uppercase_turkish for letter in letters) + assert all( + letter in TrTrAutomotiveProvider.ascii_uppercase_turkish + for letter in letters + ) class TestUkUa(_SimpleAutomotiveTestMixin): @@ -385,7 +417,9 @@ def test_prefix(self, faker): for _ in range(10): temporary = faker.plate_letter_prefix(region_name="Lviv") assert len(temporary) == 2 - assert temporary in UkUaAutomotiveProvider.license_region_data.get("Lviv")[0] + assert ( + temporary in UkUaAutomotiveProvider.license_region_data.get("Lviv")[0] + ) def test_region_code(self, faker): assert "14" == faker.plate_region_code(region_name="Lviv") diff --git a/tests/providers/test_bank.py b/tests/providers/test_bank.py index 60fdd4a6e0..770245bd90 100644 --- a/tests/providers/test_bank.py +++ b/tests/providers/test_bank.py @@ -475,7 +475,10 @@ def test_iban(self, faker, num_samples): assert iban[:2] == NlBeBankProvider.country_code assert re.fullmatch(r"\d{2}\d{12}", iban[2:]) rearranged_iban = iban[4:] + iban[:4] - numeric_iban = "".join(str(ord(char) - 55) if char.isalpha() else char for char in rearranged_iban) + numeric_iban = "".join( + str(ord(char) - 55) if char.isalpha() else char + for char in rearranged_iban + ) assert int(numeric_iban) % 97 == 1 def test_swift8_use_dataset(self, faker, num_samples): diff --git a/tests/providers/test_barcode.py b/tests/providers/test_barcode.py index 87c083aea3..f0bd548325 100644 --- a/tests/providers/test_barcode.py +++ b/tests/providers/test_barcode.py @@ -71,7 +71,9 @@ def test_ean13_leading_zero(self, faker, num_samples): @pytest.fixture(scope="class") def provider_class(request): - if hasattr(request.cls, "get_provider_class") and callable(request.cls.get_provider_class): + if hasattr(request.cls, "get_provider_class") and callable( + request.cls.get_provider_class + ): _provider_class = request.cls.get_provider_class() if isinstance(_provider_class, type): return _provider_class @@ -96,8 +98,12 @@ def assert_prefix(barcode_digits, prefixes): if all(a == b for a, b in zip(barcode_digits, map(int, prefix))): return str_barc = "".join(str(x) for x in barcode_digits) - str_pref = ", ".join(map(lambda _prefix: "".join(str(x) for x in _prefix)), prefixes) - raise AssertionError(f"{str_barc} doesn't match any of the prefixes: {str_pref}") + str_pref = ", ".join( + map(lambda _prefix: "".join(str(x) for x in _prefix)), prefixes + ) + raise AssertionError( + f"{str_barc} doesn't match any of the prefixes: {str_pref}" + ) def test_localized_ean(self, faker, num_samples, provider): for _ in range(num_samples): @@ -220,7 +226,9 @@ def test_upc_a2e2a(self, faker, num_samples, provider): assert int(upc_a[-1]) == int(upc_e[-1]) # Create a new UPC-A barcode based on the UPC-E barcode - new_upc_a = faker.upc_a(upc_ae_mode=True, base=upc_e[1:-1], number_system_digit=int(upc_e[0])) + new_upc_a = faker.upc_a( + upc_ae_mode=True, base=upc_e[1:-1], number_system_digit=int(upc_e[0]) + ) # New UPC-A barcode must be the same as the original assert upc_a == new_upc_a @@ -231,7 +239,9 @@ def test_upc_e2a2e(self, faker, num_samples, provider): assert self.upc_e_pattern.fullmatch(upc_e) # Create a new UPC-A barcode based on the UPC-E barcode - upc_a = faker.upc_a(upc_ae_mode=True, base=upc_e[1:-1], number_system_digit=int(upc_e[0])) + upc_a = faker.upc_a( + upc_ae_mode=True, base=upc_e[1:-1], number_system_digit=int(upc_e[0]) + ) # Number system and check digits must be the same assert int(upc_a[0]) == int(upc_e[0]) diff --git a/tests/providers/test_color.py b/tests/providers/test_color.py index 53b0442dca..266ecaaca0 100644 --- a/tests/providers/test_color.py +++ b/tests/providers/test_color.py @@ -31,10 +31,15 @@ class TestColorProvider: num_samples = 10000 def test_safe_hex_color(self, faker, num_samples): - assert all(re.fullmatch(r"#(?:([0-9a-f])\1){3}", faker.safe_hex_color()) for _ in range(num_samples)) + assert all( + re.fullmatch(r"#(?:([0-9a-f])\1){3}", faker.safe_hex_color()) + for _ in range(num_samples) + ) def test_hex_color(self, faker, num_samples): - assert all(re.fullmatch(r"#[0-9a-f]{6}", faker.hex_color()) for _ in range(num_samples)) + assert all( + re.fullmatch(r"#[0-9a-f]{6}", faker.hex_color()) for _ in range(num_samples) + ) def test_rgb_color(self, faker, num_samples): for _ in range(num_samples): @@ -97,13 +102,22 @@ class TestRandomColor: num_samples = 1000 seed = 4761 hsv_color_pattern: Pattern = re.compile( - r"hsv\(" r"(?P\d|[1-9]\d|[1-3]\d{2}), " r"(?P\d|[1-9]\d|100), " r"(?P\d|[1-9]\d|100)\)", + r"hsv\(" + r"(?P\d|[1-9]\d|[1-3]\d{2}), " + r"(?P\d|[1-9]\d|100), " + r"(?P\d|[1-9]\d|100)\)", ) hsl_color_pattern: Pattern = re.compile( - r"hsl\(" r"(?P\d|[1-9]\d|[1-3]\d{2}), " r"(?P\d|[1-9]\d|[1-3]\d{2}), " r"(?P\d|[1-9]\d|[1-3]\d{2})\)", + r"hsl\(" + r"(?P\d|[1-9]\d|[1-3]\d{2}), " + r"(?P\d|[1-9]\d|[1-3]\d{2}), " + r"(?P\d|[1-9]\d|[1-3]\d{2})\)", ) rgb_color_pattern: Pattern = re.compile( - r"rgb\(" r"(?P\d|[1-9]\d|[1-3]\d{2}), " r"(?P\d|[1-9]\d|[1-3]\d{2}), " r"(?P\d|[1-9]\d|[1-3]\d{2})\)", + r"rgb\(" + r"(?P\d|[1-9]\d|[1-3]\d{2}), " + r"(?P\d|[1-9]\d|[1-3]\d{2}), " + r"(?P\d|[1-9]\d|[1-3]\d{2})\)", ) hex_color_pattern: Pattern = re.compile(r"#[0-9a-f]{6}") @@ -189,7 +203,10 @@ def test_hsv(self, num_samples): def test_hue_integer(self): # HSV format is used, because whatever hue value supplied must be present in the output for hue in range(360): - colors = [self.random_color.generate(hue=hue, color_format="hsv") for _ in range(10)] + colors = [ + self.random_color.generate(hue=hue, color_format="hsv") + for _ in range(10) + ] for color in colors: match = self.hsv_color_pattern.fullmatch(color) assert match @@ -243,16 +260,22 @@ def test_hue_word(self): def test_hue_tuple_beyond_limits(self, num_samples): baseline_random_color = RandomColor(seed=self.seed) - expected = [baseline_random_color.generate(hue=[0, 360]) for _ in range(num_samples)] + expected = [ + baseline_random_color.generate(hue=[0, 360]) for _ in range(num_samples) + ] # Using a tuple with values not between 0 and 360 should yield the same results # as using a tuple with clamped values for a given seed - colors = [self.random_color.generate(hue=[-100, 4500]) for _ in range(num_samples)] + colors = [ + self.random_color.generate(hue=[-100, 4500]) for _ in range(num_samples) + ] assert colors == expected def test_hue_tuple_inverted_values(self, num_samples): baseline_random_color = RandomColor(seed=self.seed) - expected = [baseline_random_color.generate(hue=[45, 75]) for _ in range(num_samples)] + expected = [ + baseline_random_color.generate(hue=[45, 75]) for _ in range(num_samples) + ] # Using a tuple with inverted values should yield the same results # as using the correctly ordered tuple for a given seed @@ -294,7 +317,10 @@ def test_luminosity_invalid(self, num_samples): baseline_random_color = RandomColor(seed=self.seed) expected = [baseline_random_color.generate() for _ in range(num_samples)] - colors = [self.random_color.generate(luminosity="invalid_value") for _ in range(num_samples)] + colors = [ + self.random_color.generate(luminosity="invalid_value") + for _ in range(num_samples) + ] assert colors == expected def test_bad_color_map(self): diff --git a/tests/providers/test_company.py b/tests/providers/test_company.py index e916172564..0e69ede175 100644 --- a/tests/providers/test_company.py +++ b/tests/providers/test_company.py @@ -21,11 +21,7 @@ from faker.providers.company.nl_BE import Provider as NlBeCompanyProvider from faker.providers.company.nl_NL import Provider as NlNlCompanyProvider from faker.providers.company.pl_PL import Provider as PlPlCompanyProvider -from faker.providers.company.pl_PL import ( - company_vat_checksum, - local_regon_checksum, - regon_checksum, -) +from faker.providers.company.pl_PL import company_vat_checksum, local_regon_checksum, regon_checksum from faker.providers.company.pt_BR import company_id_checksum from faker.providers.company.ro_RO import Provider as RoRoCompanyProvider from faker.providers.company.ru_RU import Provider as RuRuCompanyProvider @@ -120,7 +116,9 @@ def test_company_vat(self, faker, num_samples): for _ in range(num_samples): vat_number = faker.company_vat() assert isinstance(vat_number, str) - match = re.fullmatch(r"FR (?P\d\d) (?P\d{3} \d{3} \d{3})", vat_number) + match = re.fullmatch( + r"FR (?P\d\d) (?P\d{3} \d{3} \d{3})", vat_number + ) assert match generated_checksum = int(match.group("checksum")) siren = match.group("siren") @@ -140,19 +138,27 @@ def test_ape_code(self, faker, num_samples): # default version is "naf-2003" code = faker.ape_code() assert isinstance(code, str) - assert self.APE_2003_PATTERN.fullmatch(code), f"Invalid NAF 2003 APE code format: {code}" + assert self.APE_2003_PATTERN.fullmatch( + code + ), f"Invalid NAF 2003 APE code format: {code}" # version naf-2003 code = faker.ape_code(version="naf-2003") assert isinstance(code, str) - assert self.APE_2003_PATTERN.fullmatch(code), f"Invalid NAF 2003 APE code format: {code}" + assert self.APE_2003_PATTERN.fullmatch( + code + ), f"Invalid NAF 2003 APE code format: {code}" # version naf-2025 code = faker.ape_code(version="naf-2025") assert isinstance(code, str) - assert self.APE_2025_PATTERN.fullmatch(code), f"Invalid NAF 2025 APE code format: {code}" + assert self.APE_2025_PATTERN.fullmatch( + code + ), f"Invalid NAF 2025 APE code format: {code}" # Possibly invalid numbers code = faker.ape_code(version=None) assert isinstance(code, str) - assert self.APE_GENERIC_PATTERN.fullmatch(code), f"Invalid APE code format: {code}" + assert self.APE_GENERIC_PATTERN.fullmatch( + code + ), f"Invalid APE code format: {code}" with pytest.raises(ValueError): faker.ape_code(version="naf-1984") @@ -205,7 +211,10 @@ def test_company(self, faker, num_samples): company.startswith(prefix) or company.endswith(prefix) for prefix in JaJpCompanyProvider.company_prefixes ) - assert any(category in company for category in JaJpCompanyProvider.company_categories) + assert any( + category in company + for category in JaJpCompanyProvider.company_categories + ) class TestPtBr: @@ -321,7 +330,9 @@ def setup_class(cls): cls.company_types = EnPhCompanyProvider.company_types cls.company_suffixes = EnPhCompanyProvider.company_suffixes.keys() cls.company_products = EnPhCompanyProvider.company_products - cls.national_corporation_pattern: Pattern = re.compile(r"^National (.*?) Corporation of the Philippines$") + cls.national_corporation_pattern: Pattern = re.compile( + r"^National (.*?) Corporation of the Philippines$" + ) def test_random_company_noun_chain(self, faker, num_samples): for _ in range(num_samples): @@ -336,11 +347,19 @@ def test_random_company_acronym(self, faker, num_samples): def test_company(self, faker, num_samples): for _ in range(num_samples): company = faker.company() - if company.split()[-1] in self.company_suffixes and company.split()[-2] in self.company_types: + if ( + company.split()[-1] in self.company_suffixes + and company.split()[-2] in self.company_types + ): continue else: - national_corporation_match = self.national_corporation_pattern.fullmatch(company) - assert national_corporation_match and national_corporation_match.group(1) in self.company_products + national_corporation_match = ( + self.national_corporation_pattern.fullmatch(company) + ) + assert ( + national_corporation_match + and national_corporation_match.group(1) in self.company_products + ) class TestFilPh(TestEnPh): @@ -349,7 +368,10 @@ class TestFilPh(TestEnPh): def test_PH_random_good_service_adjective_chain(self, faker, num_samples): for _ in range(num_samples): adjectives = faker.random_good_service_adjective_chain().split(" at ") - assert all(adjective in FilPhCompanyProvider.good_service_adjectives for adjective in adjectives) + assert all( + adjective in FilPhCompanyProvider.good_service_adjectives + for adjective in adjectives + ) class TestTlPh(TestFilPh): diff --git a/tests/providers/test_credit_card.py b/tests/providers/test_credit_card.py index 8d7ac170d7..173f8a6bcc 100644 --- a/tests/providers/test_credit_card.py +++ b/tests/providers/test_credit_card.py @@ -196,7 +196,9 @@ class TestZhCn: r"(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}" ) visa_pattern: Pattern = re.compile(r"4[0-9]{12}([0-9]{3}){0,2}") - unionpay_pattern: Pattern = re.compile(r"62[0-9]{14,17}") # UnionPay typically starts with 62 + unionpay_pattern: Pattern = re.compile( + r"62[0-9]{14,17}" + ) # UnionPay typically starts with 62 def test_mastercard(self, faker, num_samples): for _ in range(num_samples): @@ -216,5 +218,7 @@ def test_unionpay(self, faker, num_samples): def test_credit_card_full(self, faker, num_samples): for _ in range(num_samples): card_data = faker.credit_card_full("unionpay").split("\n") - assert re.match(r"[\u4e00-\u9fff]+", card_data[1]) # Check if owner has Chinese characters + assert re.match( + r"[\u4e00-\u9fff]+", card_data[1] + ) # Check if owner has Chinese characters assert card_data[0] == "UnionPay" # Ensure correct provider name diff --git a/tests/providers/test_currency.py b/tests/providers/test_currency.py index b9ca42c40f..4116286d97 100644 --- a/tests/providers/test_currency.py +++ b/tests/providers/test_currency.py @@ -18,7 +18,9 @@ def setup_class(cls): cls.currencies = cls.provider.currencies cls.cryptocurrencies = cls.provider.cryptocurrencies cls.currency_codes, cls.currency_names = tuple(zip(*cls.currencies)) - cls.cryptocurrency_codes, cls.cryptocurrency_names = tuple(zip(*cls.cryptocurrencies)) + cls.cryptocurrency_codes, cls.cryptocurrency_names = tuple( + zip(*cls.cryptocurrencies) + ) def test_currency(self, faker, num_samples): for _ in range(num_samples): @@ -166,8 +168,12 @@ def setup_class(cls): cls.provider = DeAtCurrencyProvider cls.currencies = cls.provider.currencies - cls.currency_names = [currency_name for currency_code, currency_name in cls.currencies] - cls.currency_codes = [currency_code for currency_code, currency_name in cls.currencies] + cls.currency_names = [ + currency_name for currency_code, currency_name in cls.currencies + ] + cls.currency_codes = [ + currency_code for currency_code, currency_name in cls.currencies + ] def test_pricetag(self, faker, num_samples): for _ in range(num_samples): @@ -201,8 +207,12 @@ def setup_class(cls): cls.provider = DeChCurrencyProvider cls.currencies = cls.provider.currencies - cls.currency_names = [currency_name for currency_code, currency_name in cls.currencies] - cls.currency_codes = [currency_code for currency_code, currency_name in cls.currencies] + cls.currency_names = [ + currency_name for currency_code, currency_name in cls.currencies + ] + cls.currency_codes = [ + currency_code for currency_code, currency_name in cls.currencies + ] def test_pricetag(self, faker, num_samples): for _ in range(num_samples): @@ -236,8 +246,12 @@ def setup_class(cls): cls.provider = DeDeCurrencyProvider cls.currencies = cls.provider.currencies - cls.currency_names = [currency_name for currency_code, currency_name in cls.currencies] - cls.currency_codes = [currency_code for currency_code, currency_name in cls.currencies] + cls.currency_names = [ + currency_name for currency_code, currency_name in cls.currencies + ] + cls.currency_codes = [ + currency_code for currency_code, currency_name in cls.currencies + ] def test_pricetag(self, faker, num_samples): for _ in range(num_samples): @@ -609,7 +623,9 @@ def setup_class(cls): cls.currencies = cls.provider.currencies cls.cryptocurrencies = cls.provider.cryptocurrencies cls.currency_codes, cls.currency_names = tuple(zip(*cls.currencies)) - cls.cryptocurrency_codes, cls.cryptocurrency_names = tuple(zip(*cls.cryptocurrencies)) + cls.cryptocurrency_codes, cls.cryptocurrency_names = tuple( + zip(*cls.cryptocurrencies) + ) class TestUzUz: diff --git a/tests/providers/test_date_time.py b/tests/providers/test_date_time.py index 58152b6752..488cabdc6f 100644 --- a/tests/providers/test_date_time.py +++ b/tests/providers/test_date_time.py @@ -136,9 +136,13 @@ def test_parse_date_time(self): from_delta = DatetimeProvider._parse_date_time(delta) from_int = DatetimeProvider._parse_date_time(timestamp) - assert datetime.fromtimestamp(from_delta).date() == (datetime.fromtimestamp(timestamp).date()) + assert datetime.fromtimestamp(from_delta).date() == ( + datetime.fromtimestamp(timestamp).date() + ) - assert datetime.fromtimestamp(from_int).date() == (datetime.fromtimestamp(timestamp).date()) + assert datetime.fromtimestamp(from_int).date() == ( + datetime.fromtimestamp(timestamp).date() + ) def test_parse_date(self): parsed = DatetimeProvider._parse_date("+30d") @@ -258,11 +262,15 @@ def test_date_time_between_dates_with_tzinfo(self): datetime_start = datetime.fromtimestamp(timestamp_start, utc) datetime_end = datetime.fromtimestamp(timestamp_end, utc) - random_date_naive = self.fake.date_time_between_dates(datetime_start, datetime_end) + random_date_naive = self.fake.date_time_between_dates( + datetime_start, datetime_end + ) with pytest.raises(TypeError): datetime_start <= random_date_naive - random_date = self.fake.date_time_between_dates(datetime_start, datetime_end, utc) + random_date = self.fake.date_time_between_dates( + datetime_start, datetime_end, utc + ) assert datetime_start <= random_date assert datetime_end >= random_date @@ -292,14 +300,16 @@ def test_date_time_this_period(self): datetime(datetime.now().year - (datetime.now().year % 100), 1, 1), ) - assert self._datetime_to_time(self.fake.date_time_this_century(after_now=False)) <= self._datetime_to_time( - datetime.now() - ) + assert self._datetime_to_time( + self.fake.date_time_this_century(after_now=False) + ) <= self._datetime_to_time(datetime.now()) assert self._datetime_to_time( self.fake.date_time_this_century(before_now=False, after_now=True) ) >= self._datetime_to_time(datetime.now()) assert ( - self._datetime_to_time(self.fake.date_time_this_century(before_now=True, after_now=True)) + self._datetime_to_time( + self.fake.date_time_this_century(before_now=True, after_now=True) + ) >= this_century_start ) @@ -308,9 +318,9 @@ def test_date_time_this_period(self): datetime(datetime.now().year - (datetime.now().year % 10), 1, 1), ) - assert self._datetime_to_time(self.fake.date_time_this_decade(after_now=False)) <= self._datetime_to_time( - datetime.now() - ) + assert self._datetime_to_time( + self.fake.date_time_this_decade(after_now=False) + ) <= self._datetime_to_time(datetime.now()) assert self._datetime_to_time( self.fake.date_time_this_decade(before_now=False, after_now=True) ) >= self._datetime_to_time(datetime.now()) @@ -318,13 +328,15 @@ def test_date_time_this_period(self): self.fake.date_time_this_decade(before_now=False, after_now=False) ) == self._datetime_to_time(datetime.now()) assert ( - self._datetime_to_time(self.fake.date_time_this_decade(before_now=True, after_now=True)) + self._datetime_to_time( + self.fake.date_time_this_decade(before_now=True, after_now=True) + ) >= this_decade_start ) # test year - assert self._datetime_to_time(self.fake.date_time_this_year(after_now=False)) <= self._datetime_to_time( - datetime.now() - ) + assert self._datetime_to_time( + self.fake.date_time_this_year(after_now=False) + ) <= self._datetime_to_time(datetime.now()) assert self._datetime_to_time( self.fake.date_time_this_year(before_now=False, after_now=True) ) >= self._datetime_to_time(datetime.now()) @@ -332,9 +344,9 @@ def test_date_time_this_period(self): self.fake.date_time_this_year(before_now=False, after_now=False) ) == self._datetime_to_time(datetime.now()) # test month - assert self._datetime_to_time(self.fake.date_time_this_month(after_now=False)) <= self._datetime_to_time( - datetime.now() - ) + assert self._datetime_to_time( + self.fake.date_time_this_month(after_now=False) + ) <= self._datetime_to_time(datetime.now()) assert self._datetime_to_time( self.fake.date_time_this_month(before_now=False, after_now=True) ) >= self._datetime_to_time(datetime.now()) @@ -346,83 +358,161 @@ def test_date_time_this_period(self): def test_date_time_this_period_with_tzinfo(self): # ensure all methods provide timezone aware datetimes with pytest.raises(TypeError): - self.fake.date_time_this_century(before_now=False, after_now=True, tzinfo=utc) >= datetime.now() + self.fake.date_time_this_century( + before_now=False, after_now=True, tzinfo=utc + ) >= datetime.now() with pytest.raises(TypeError): - self.fake.date_time_this_decade(after_now=False, tzinfo=utc) <= datetime.now() + self.fake.date_time_this_decade( + after_now=False, tzinfo=utc + ) <= datetime.now() with pytest.raises(TypeError): self.fake.date_time_this_year(after_now=False, tzinfo=utc) <= datetime.now() with pytest.raises(TypeError): - self.fake.date_time_this_month(after_now=False, tzinfo=utc) <= datetime.now() + self.fake.date_time_this_month( + after_now=False, tzinfo=utc + ) <= datetime.now() # test century - assert self.fake.date_time_this_century(after_now=False, tzinfo=utc) <= datetime.now(utc) - assert self.fake.date_time_this_century(before_now=False, after_now=True, tzinfo=utc) >= datetime.now(utc) - assert self.fake.date_time_this_century(before_now=False, after_now=False, tzinfo=utc).replace( + assert self.fake.date_time_this_century( + after_now=False, tzinfo=utc + ) <= datetime.now(utc) + assert self.fake.date_time_this_century( + before_now=False, after_now=True, tzinfo=utc + ) >= datetime.now(utc) + assert self.fake.date_time_this_century( + before_now=False, after_now=False, tzinfo=utc + ).replace(second=0, microsecond=0) == datetime.now(utc).replace( second=0, microsecond=0 - ) == datetime.now(utc).replace(second=0, microsecond=0) + ) # test decade - assert self.fake.date_time_this_decade(after_now=False, tzinfo=utc) <= datetime.now(utc) - assert self.fake.date_time_this_decade(before_now=False, after_now=True, tzinfo=utc) >= datetime.now(utc) - - assert self.fake.date_time_this_decade(before_now=False, after_now=False, tzinfo=utc).replace( + assert self.fake.date_time_this_decade( + after_now=False, tzinfo=utc + ) <= datetime.now(utc) + assert self.fake.date_time_this_decade( + before_now=False, after_now=True, tzinfo=utc + ) >= datetime.now(utc) + + assert self.fake.date_time_this_decade( + before_now=False, after_now=False, tzinfo=utc + ).replace(second=0, microsecond=0) == datetime.now(utc).replace( second=0, microsecond=0 - ) == datetime.now(utc).replace(second=0, microsecond=0) + ) # test year - assert self.fake.date_time_this_year(after_now=False, tzinfo=utc) <= datetime.now(utc) - assert self.fake.date_time_this_year(before_now=False, after_now=True, tzinfo=utc) >= datetime.now(utc) - assert self.fake.date_time_this_year(before_now=False, after_now=False, tzinfo=utc).replace( + assert self.fake.date_time_this_year( + after_now=False, tzinfo=utc + ) <= datetime.now(utc) + assert self.fake.date_time_this_year( + before_now=False, after_now=True, tzinfo=utc + ) >= datetime.now(utc) + assert self.fake.date_time_this_year( + before_now=False, after_now=False, tzinfo=utc + ).replace(second=0, microsecond=0) == datetime.now(utc).replace( second=0, microsecond=0 - ) == datetime.now(utc).replace(second=0, microsecond=0) - assert self.fake.date_time_this_year(before_now=True, after_now=True, tzinfo=utc).year == datetime.now(utc).year + ) + assert ( + self.fake.date_time_this_year( + before_now=True, after_now=True, tzinfo=utc + ).year + == datetime.now(utc).year + ) # test month - assert self.fake.date_time_this_month(after_now=False, tzinfo=utc) <= datetime.now(utc) - assert self.fake.date_time_this_month(before_now=False, after_now=True, tzinfo=utc) >= datetime.now(utc) - assert self.fake.date_time_this_month(before_now=False, after_now=False, tzinfo=utc).replace( + assert self.fake.date_time_this_month( + after_now=False, tzinfo=utc + ) <= datetime.now(utc) + assert self.fake.date_time_this_month( + before_now=False, after_now=True, tzinfo=utc + ) >= datetime.now(utc) + assert self.fake.date_time_this_month( + before_now=False, after_now=False, tzinfo=utc + ).replace(second=0, microsecond=0) == datetime.now(utc).replace( second=0, microsecond=0 - ) == datetime.now(utc).replace(second=0, microsecond=0) + ) assert ( - self.fake.date_time_this_month(before_now=True, after_now=True, tzinfo=utc).month == datetime.now(utc).month + self.fake.date_time_this_month( + before_now=True, after_now=True, tzinfo=utc + ).month + == datetime.now(utc).month ) and ( - self.fake.date_time_this_month(before_now=True, after_now=True, tzinfo=utc).year == datetime.now(utc).year + self.fake.date_time_this_month( + before_now=True, after_now=True, tzinfo=utc + ).year + == datetime.now(utc).year ) @unittest.skipUnless(is64bit(), "requires 64bit") def test_date_this_period(self): # test century assert ( - self.fake.date_this_century(before_today=True, after_today=True).strftime("%G")[:2] + self.fake.date_this_century(before_today=True, after_today=True).strftime( + "%G" + )[:2] == datetime.now().strftime("%G")[:2] ) assert self.fake.date_this_century(after_today=False) <= date.today() - assert self.fake.date_this_century(before_today=False, after_today=True) >= date.today() - assert self.fake.date_this_century(before_today=False, after_today=False) == date.today() + assert ( + self.fake.date_this_century(before_today=False, after_today=True) + >= date.today() + ) + assert ( + self.fake.date_this_century(before_today=False, after_today=False) + == date.today() + ) # test decade assert ( - self.fake.date_this_decade(before_today=True, after_today=True).strftime("%G")[:3] + self.fake.date_this_decade(before_today=True, after_today=True).strftime( + "%G" + )[:3] == datetime.now().strftime("%G")[:3] ) assert self.fake.date_this_decade(after_today=False) <= date.today() - assert self.fake.date_this_decade(before_today=False, after_today=True) >= date.today() - assert self.fake.date_this_decade(before_today=False, after_today=False) == date.today() + assert ( + self.fake.date_this_decade(before_today=False, after_today=True) + >= date.today() + ) + assert ( + self.fake.date_this_decade(before_today=False, after_today=False) + == date.today() + ) # test year - assert self.fake.date_this_year(before_today=True, after_today=True).year == datetime.now().year + assert ( + self.fake.date_this_year(before_today=True, after_today=True).year + == datetime.now().year + ) assert self.fake.date_this_year(after_today=False) <= date.today() - assert self.fake.date_this_year(before_today=False, after_today=True) >= date.today() - assert self.fake.date_this_year(before_today=False, after_today=False) == date.today() + assert ( + self.fake.date_this_year(before_today=False, after_today=True) + >= date.today() + ) + assert ( + self.fake.date_this_year(before_today=False, after_today=False) + == date.today() + ) # test month - assert (self.fake.date_this_month(before_today=True, after_today=True).month == datetime.now().month) and ( - self.fake.date_this_month(before_today=True, after_today=True).year == datetime.now().year + assert ( + self.fake.date_this_month(before_today=True, after_today=True).month + == datetime.now().month + ) and ( + self.fake.date_this_month(before_today=True, after_today=True).year + == datetime.now().year ) assert self.fake.date_this_month(after_today=False) <= date.today() - assert self.fake.date_this_month(before_today=False, after_today=True) >= date.today() - assert self.fake.date_this_month(before_today=False, after_today=False) == date.today() + assert ( + self.fake.date_this_month(before_today=False, after_today=True) + >= date.today() + ) + assert ( + self.fake.date_this_month(before_today=False, after_today=False) + == date.today() + ) def test_date_time_between(self): now = datetime.now() _30_years_ago = change_year(now, -30) _20_years_ago = change_year(now, -20) - random_datetime = self.fake.date_time_between(start_date="-30y", end_date="-20y") + random_datetime = self.fake.date_time_between( + start_date="-30y", end_date="-20y" + ) assert isinstance(random_datetime, datetime) self.assertBetween(random_datetime, _30_years_ago, _20_years_ago) @@ -430,7 +520,9 @@ def test_date_time_between(self): _30_years_ago = change_year(now, -30) _20_years_ago = change_year(now, -20) - random_datetime = self.fake.date_time_between(start_date="-30y", end_date="-20y", tzinfo=utc) + random_datetime = self.fake.date_time_between( + start_date="-30y", end_date="-20y", tzinfo=utc + ) assert isinstance(random_datetime, datetime) self.assertBetween(random_datetime, _30_years_ago, _20_years_ago) @@ -501,7 +593,9 @@ def test_time_series(self): end = datetime.now(utc).replace(microsecond=0) start = end - timedelta(days=15) - series = list(self.fake.time_series(start_date=start, end_date=end, tzinfo=start.tzinfo)) + series = list( + self.fake.time_series(start_date=start, end_date=end, tzinfo=start.tzinfo) + ) assert series[0][0] == start def test_unix_time(self): @@ -515,7 +609,9 @@ def test_unix_time(self): start_datetime = datetime(2001, 1, 1, tzinfo=utc) end_datetime = datetime(2001, 1, 2, tzinfo=utc) - constrained_unix_time = self.fake.unix_time(end_datetime=end_datetime, start_datetime=start_datetime) + constrained_unix_time = self.fake.unix_time( + end_datetime=end_datetime, start_datetime=start_datetime + ) self.assertIsInstance(constrained_unix_time, (int, float)) self.assertBetween( @@ -539,7 +635,9 @@ def test_unix_time(self): # Ensure relative unix_times partially-constrained by an end time are generated correctly one_day_after_epoch_start = datetime(1970, 1, 2, tzinfo=utc) - distant_unix_time = self.fake.unix_time(end_datetime=one_day_after_epoch_start) + distant_unix_time = self.fake.unix_time( + end_datetime=one_day_after_epoch_start + ) self.assertIsInstance(distant_unix_time, (int, float)) self.assertBetween( @@ -753,7 +851,9 @@ def test_identical_age_range(self): days_since_dob = now - dob assert isinstance(dob, date) - assert days_since_six_years_ago > days_since_dob >= days_since_five_years_ago + assert ( + days_since_six_years_ago > days_since_dob >= days_since_five_years_ago + ) def test_distant_age_range(self): for _ in range(100): @@ -766,7 +866,11 @@ def test_distant_age_range(self): days_since_dob = now - dob assert isinstance(dob, date) - assert days_since_one_hundred_eleven_years_ago > days_since_dob >= days_since_one_hundred_years_ago + assert ( + days_since_one_hundred_eleven_years_ago + > days_since_dob + >= days_since_one_hundred_years_ago + ) class TestFilPh(unittest.TestCase): diff --git a/tests/providers/test_enum.py b/tests/providers/test_enum.py index 750093b724..9d9dba625e 100644 --- a/tests/providers/test_enum.py +++ b/tests/providers/test_enum.py @@ -30,8 +30,12 @@ def test_enum(self, faker, num_samples): assert actual in (_TestEnum.A, _TestEnum.B, _TestEnum.C) def test_enum_single(self, faker): - assert faker.enum(_TestEnumWithSingleElement) == _TestEnumWithSingleElement.Single - assert faker.enum(_TestEnumWithSingleElement) == _TestEnumWithSingleElement.Single + assert ( + faker.enum(_TestEnumWithSingleElement) == _TestEnumWithSingleElement.Single + ) + assert ( + faker.enum(_TestEnumWithSingleElement) == _TestEnumWithSingleElement.Single + ) def test_empty_enum_raises(self, faker): with pytest.raises( diff --git a/tests/providers/test_file.py b/tests/providers/test_file.py index eb8935e5f9..dfb0db657d 100644 --- a/tests/providers/test_file.py +++ b/tests/providers/test_file.py @@ -36,7 +36,9 @@ def test_file_path(self): assert re.search(r"\/\w+\/\w+\/\w+\.\w+", file_path) file_path = self.fake.file_path(extension="pdf") assert re.search(r"\/\w+\/\w+\.pdf$", file_path) - file_path = self.fake.file_path(extension=["a", "bc", "def", "ghij", "klmno"]) + file_path = self.fake.file_path( + extension=["a", "bc", "def", "ghij", "klmno"] + ) assert re.search(r"\/\w+\/\w+\.(a|bc|def|ghij|klmno)$", file_path) file_path = self.fake.file_path(extension=None) assert re.search(r"\/\w+\/\w+\.\w+", file_path) @@ -48,7 +50,9 @@ def test_file_path(self): assert re.search(r"\/\w+\/\w+\.(bmp|gif|jpeg|jpg|png|tiff)", file_path) file_path = self.fake.file_path(file_system_rule="windows") assert re.search(r"\\\w+\\\w+\.\w+", file_path) - file_path = self.fake.file_path(file_system_rule="windows", category="image", absolute=True) + file_path = self.fake.file_path( + file_system_rule="windows", category="image", absolute=True + ) assert re.search(r"^[a-zA-Z]:\\\w+\\\w+\.\w+", file_path) assert re.search(r"\\\w+\\\w+\.(bmp|gif|jpeg|jpg|png|tiff)$", file_path) diff --git a/tests/providers/test_geo.py b/tests/providers/test_geo.py index 8e303494e1..49749d8674 100644 --- a/tests/providers/test_geo.py +++ b/tests/providers/test_geo.py @@ -65,7 +65,9 @@ def test_location_on_land(self): loc = self.fake.location_on_land() assert isinstance(loc, tuple) assert len(loc) == 5 - assert Decimal(loc[0]) # Should be able to cast first two elements of tuple to Decimal + assert Decimal( + loc[0] + ) # Should be able to cast first two elements of tuple to Decimal assert Decimal(loc[1]) assert isinstance(loc[2], str) # Place is a string assert isinstance(loc[3], str) # Country code is a string @@ -76,7 +78,9 @@ def test_location_on_land_coords_only(self): loc = self.fake.location_on_land(coords_only=True) assert isinstance(loc, tuple) assert len(loc) == 2 - assert Decimal(loc[0]) # Should be able to cast first two elements of tuple to Decimal + assert Decimal( + loc[0] + ) # Should be able to cast first two elements of tuple to Decimal assert Decimal(loc[1]) @@ -89,7 +93,9 @@ def test_location_on_land(self): loc = self.fake.location_on_land() assert isinstance(loc, tuple) assert len(loc) == 5 - assert Decimal(loc[0]) # Should be able to cast first two elements of tuple to Decimal + assert Decimal( + loc[0] + ) # Should be able to cast first two elements of tuple to Decimal assert Decimal(loc[1]) assert isinstance(loc[2], str) # Place is a string assert isinstance(loc[3], str) # Country code is a string @@ -106,7 +112,9 @@ def test_location_on_land(self): loc = self.fake.location_on_land() assert isinstance(loc, tuple) assert len(loc) == 5 - assert Decimal(loc[0]) # Should be able to cast first two elements of tuple to Decimal + assert Decimal( + loc[0] + ) # Should be able to cast first two elements of tuple to Decimal assert Decimal(loc[1]) assert isinstance(loc[2], str) # Place is a string assert isinstance(loc[3], str) # Country code is a string @@ -139,7 +147,9 @@ def test_location_on_land(self): loc = self.fake.location_on_land() assert isinstance(loc, tuple) assert len(loc) == 5 - assert Decimal(loc[0]) # Should be able to cast first two elements of tuple to Decimal + assert Decimal( + loc[0] + ) # Should be able to cast first two elements of tuple to Decimal assert Decimal(loc[1]) assert isinstance(loc[2], str) # Place is a string assert isinstance(loc[3], str) # Country code is a string diff --git a/tests/providers/test_internet.py b/tests/providers/test_internet.py index 4e0ecc6914..8775eb85a4 100644 --- a/tests/providers/test_internet.py +++ b/tests/providers/test_internet.py @@ -28,7 +28,8 @@ class TestInternetProvider: num_samples = 100 ipv4_pattern: Pattern = re.compile( - r"^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}" r"(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$", + r"^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}" + r"(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$", ) ipv4_network_pattern: Pattern = re.compile( r"^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}" @@ -271,8 +272,12 @@ def test_ipv4_distribution_selection(self): 11, # Not a list or valid iterable ] - with patch("faker.providers.internet.choices_distribution", wraps=choices_distribution) as mock_choices_fn: - with patch("faker.generator.random.choice", wraps=random.choice) as mock_random_choice: + with patch( + "faker.providers.internet.choices_distribution", wraps=choices_distribution + ) as mock_choices_fn: + with patch( + "faker.generator.random.choice", wraps=random.choice + ) as mock_random_choice: # If weights argument is valid, only `choices_distribution` should be called provider._random_ipv4_address_from_subnets(subnets, valid_weights) assert mock_choices_fn.call_count == 1 @@ -302,7 +307,9 @@ def test_ipv6(self, faker, num_samples): address = provider.ipv6(network=True) assert len(address) >= 4 # ::/8 assert len(address) <= 39 + 4 - assert re.compile(r"^([0-9a-f]{0,4}:){2,7}[0-9a-f]{0,4}/\d{1,3}$").search(address) + assert re.compile(r"^([0-9a-f]{0,4}:){2,7}[0-9a-f]{0,4}/\d{1,3}$").search( + address + ) def test_mac_address(self, faker): provider = InternetProvider(faker) @@ -353,7 +360,10 @@ def test_dga(self, faker): assert faker.dga() != faker.dga() expected_domain = "cqphixmpdfpptskr.com" - assert faker.dga(day=1, month=1, year=1000, tld="com", length=16) == expected_domain + assert ( + faker.dga(day=1, month=1, year=1000, tld="com", length=16) + == expected_domain + ) def test_iana_id(self, faker, num_samples): for _ in range(num_samples): @@ -561,7 +571,9 @@ def test_domain_name_one_level_after_tld(self, faker): @patch("faker.providers.internet.zh_CN.Provider.domain_word") @patch("faker.providers.internet.Provider.tld") - def test_domain_name_two_levels_after_cn_tld(self, mock_tld, mock_domain_word, faker): + def test_domain_name_two_levels_after_cn_tld( + self, mock_tld, mock_domain_word, faker + ): provider = ZhCnInternetProvider(faker) # If tld() returns cn, second level name should be selected from second_level_domains @@ -580,7 +592,9 @@ def test_domain_name_two_levels_after_cn_tld(self, mock_tld, mock_domain_word, f @patch("faker.providers.internet.zh_CN.Provider.domain_word") @patch("faker.providers.internet.Provider.tld") - def test_domain_name_two_levels_after_non_cn_tld(self, mock_tld, mock_domain_word, faker): + def test_domain_name_two_levels_after_non_cn_tld( + self, mock_tld, mock_domain_word, faker + ): # If tld() does not return cn, domain_word() will be called twice mock_domain_word.reset_mock() mock_tld.return_value = "net" @@ -591,7 +605,9 @@ def test_domain_name_two_levels_after_non_cn_tld(self, mock_tld, mock_domain_wor @patch("faker.providers.internet.zh_CN.Provider.domain_word") @patch("faker.providers.internet.Provider.tld") - def test_domain_name_more_than_two_levels_after_cn_tld(self, mock_tld, mock_domain_word, faker): + def test_domain_name_more_than_two_levels_after_cn_tld( + self, mock_tld, mock_domain_word, faker + ): provider = ZhCnInternetProvider(faker) mock_tld.return_value = "cn" @@ -622,7 +638,9 @@ def test_domain_name_more_than_two_levels_after_cn_tld(self, mock_tld, mock_doma @patch("faker.providers.internet.zh_CN.Provider.domain_word") @patch("faker.providers.internet.Provider.tld") - def test_domain_name_more_than_two_levels_after_non_cn_tld(self, mock_tld, mock_domain_word, faker): + def test_domain_name_more_than_two_levels_after_non_cn_tld( + self, mock_tld, mock_domain_word, faker + ): mock_tld.return_value = "net" mock_domain_word.return_value = "li" for levels in range(3, 10): diff --git a/tests/providers/test_lorem.py b/tests/providers/test_lorem.py index 0182f229be..3a1d41bcb7 100644 --- a/tests/providers/test_lorem.py +++ b/tests/providers/test_lorem.py @@ -61,12 +61,17 @@ def test_words_with_custom_word_list(self, faker, num_samples): words = faker.words(num_words, ext_word_list=self.custom_word_list) assert isinstance(words, list) assert len(words) == 5 - assert all(isinstance(word, str) and word in self.custom_word_list for word in words) + assert all( + isinstance(word, str) and word in self.custom_word_list + for word in words + ) def test_words_with_unique_sampling(self, faker, num_samples): num_words = 5 for _ in range(num_samples): - words = faker.words(num_words, ext_word_list=self.custom_word_list, unique=True) + words = faker.words( + num_words, ext_word_list=self.custom_word_list, unique=True + ) assert isinstance(words, list) assert len(words) == 5 @@ -99,16 +104,24 @@ def test_sentence_with_custom_word_list(self, faker, num_samples): for _ in range(num_samples): sentence = faker.sentence(ext_word_list=self.custom_word_list) words = sentence.lower().replace(".", "").split() - assert all(isinstance(word, str) and word in self.custom_word_list for word in words) + assert all( + isinstance(word, str) and word in self.custom_word_list + for word in words + ) def test_sentences(self, faker, num_samples): num_sentences = 5 for _ in range(num_samples): - sentences = faker.sentences(nb=num_sentences, ext_word_list=self.custom_word_list) + sentences = faker.sentences( + nb=num_sentences, ext_word_list=self.custom_word_list + ) assert len(sentences) == num_sentences for sentence in sentences: words = sentence.lower().replace(".", "").split() - assert all(isinstance(word, str) and word in self.custom_word_list for word in words) + assert all( + isinstance(word, str) and word in self.custom_word_list + for word in words + ) def test_sentence_single_word(self, faker): word = faker.sentence(1) @@ -123,12 +136,16 @@ def test_paragraph_with_inexact_sentence_count(self, faker, num_samples): for _ in range(num_samples): paragraph = faker.paragraph(nb_sentences=num_sentences) sentences = paragraph.split(". ") - assert int(num_sentences * 0.6) <= len(sentences) <= int(num_sentences * 1.4) + assert ( + int(num_sentences * 0.6) <= len(sentences) <= int(num_sentences * 1.4) + ) def test_paragraph_with_exact_sentence_count(self, faker, num_samples): num_sentences = 10 for _ in range(num_samples): - paragraph = faker.paragraph(nb_sentences=num_sentences, variable_nb_sentences=False) + paragraph = faker.paragraph( + nb_sentences=num_sentences, variable_nb_sentences=False + ) sentences = paragraph.split(". ") assert len(sentences) == num_sentences @@ -136,16 +153,24 @@ def test_paragraph_with_custom_word_list(self, faker, num_samples): for _ in range(num_samples): paragraph = faker.paragraph(ext_word_list=self.custom_word_list) words = paragraph.lower().replace(".", "").split() - assert all(isinstance(word, str) and word in self.custom_word_list for word in words) + assert all( + isinstance(word, str) and word in self.custom_word_list + for word in words + ) def test_paragraphs(self, faker, num_samples): num_paragraphs = 5 for _ in range(num_samples): - paragraphs = faker.paragraphs(nb=num_paragraphs, ext_word_list=self.custom_word_list) + paragraphs = faker.paragraphs( + nb=num_paragraphs, ext_word_list=self.custom_word_list + ) assert len(paragraphs) == num_paragraphs for paragraph in paragraphs: words = paragraph.lower().replace(".", "").split() - assert all(isinstance(word, str) and word in self.custom_word_list for word in words) + assert all( + isinstance(word, str) and word in self.custom_word_list + for word in words + ) def test_text_with_less_than_four_characters(self, faker, num_samples): for _ in range(num_samples): @@ -199,7 +224,10 @@ def test_get_default_words_list(self, faker): ) def test_get_words_list_part_of_speech(self, faker, part_of_speech): words_list = faker.get_words_list(part_of_speech=part_of_speech) - assert (word in EnUsLoremProvider.parts_of_speech[part_of_speech] for word in words_list) + assert ( + word in EnUsLoremProvider.parts_of_speech[part_of_speech] + for word in words_list + ) def test_get_words_list_invalid_part_of_speech(self, faker): part_of_speech = "invalid part of speech" @@ -208,10 +236,15 @@ def test_get_words_list_invalid_part_of_speech(self, faker): faker.get_words_list(part_of_speech=part_of_speech) assert exc_info.type is ValueError - assert exc_info.value.args[0] == f"{part_of_speech} is not recognized as a part of speech." + assert ( + exc_info.value.args[0] + == f"{part_of_speech} is not recognized as a part of speech." + ) def test_get_words_list_part_of_speech_ignored(self, faker): - words = faker.get_words_list(part_of_speech="ignored part of speech", ext_word_list=self.custom_word_list) + words = faker.get_words_list( + part_of_speech="ignored part of speech", ext_word_list=self.custom_word_list + ) assert all(word in self.custom_word_list for word in words) @@ -281,7 +314,10 @@ def test_words(self, faker, num_samples): num_words = 5 for _ in range(num_samples): words = faker.words(num_words) - assert all(isinstance(word, str) and word in CsCzLoremProvider.word_list for word in words) + assert all( + isinstance(word, str) and word in CsCzLoremProvider.word_list + for word in words + ) class TestAzAz: @@ -350,7 +386,10 @@ def test_words(self, faker, num_samples): num_words = 5 for _ in range(num_samples): words = faker.words(num_words) - assert all(isinstance(word, str) and word in AzAzLoremProvider.word_list for word in words) + assert all( + isinstance(word, str) and word in AzAzLoremProvider.word_list + for word in words + ) class TestFaIr: @@ -419,7 +458,10 @@ def test_words(self, faker, num_samples): num_words = 5 for _ in range(num_samples): words = faker.words(num_words) - assert all(isinstance(word, str) and word in FaIrLoremProvider.word_list for word in words) + assert all( + isinstance(word, str) and word in FaIrLoremProvider.word_list + for word in words + ) class TestBnBd: @@ -528,7 +570,10 @@ def test_words(self, faker, num_samples): num_words = 5 for _ in range(num_samples): words = faker.words(num_words) - assert all(isinstance(word, str) and word in DeDeLoremProvider.word_list for word in words) + assert all( + isinstance(word, str) and word in DeDeLoremProvider.word_list + for word in words + ) class TestDeAt: @@ -597,7 +642,10 @@ def test_words(self, faker, num_samples): num_words = 5 for _ in range(num_samples): words = faker.words(num_words) - assert all(isinstance(word, str) and word in DeAtLoremProvider.word_list for word in words) + assert all( + isinstance(word, str) and word in DeAtLoremProvider.word_list + for word in words + ) class TestNlBe: @@ -669,7 +717,10 @@ def test_words(self, faker, num_samples): num_words = 5 for _ in range(num_samples): words = faker.words(num_words) - assert all(isinstance(word, str) and word in NlBeLoremProvider.word_list for word in words) + assert all( + isinstance(word, str) and word in NlBeLoremProvider.word_list + for word in words + ) class TestUkUa: @@ -738,7 +789,10 @@ def test_words(self, faker, num_samples): num_words = 5 for _ in range(num_samples): words = faker.words(num_words) - assert all(isinstance(word, str) and word in UkUaLoremProvider.word_list for word in words) + assert all( + isinstance(word, str) and word in UkUaLoremProvider.word_list + for word in words + ) class TestViVn: @@ -807,7 +861,10 @@ def test_words(self, faker, num_samples): num_words = 5 for _ in range(num_samples): words = faker.words(num_words) - assert all(isinstance(word, str) and word in ViVNLoremProvider.word_list for word in words) + assert all( + isinstance(word, str) and word in ViVNLoremProvider.word_list + for word in words + ) class TestItIt: @@ -876,7 +933,10 @@ def test_words(self, faker, num_samples): num_words = 5 for _ in range(num_samples): words = faker.words(num_words) - assert all(isinstance(word, str) and word in ItItLoremProvider.word_list for word in words) + assert all( + isinstance(word, str) and word in ItItLoremProvider.word_list + for word in words + ) class TestEsEs: @@ -945,7 +1005,10 @@ def test_words(self, faker, num_samples): num_words = 5 for _ in range(num_samples): words = faker.words(num_words) - assert all(isinstance(word, str) and word in EsEsLoremProvider.word_list for word in words) + assert all( + isinstance(word, str) and word in EsEsLoremProvider.word_list + for word in words + ) class TestEsAr: @@ -1014,7 +1077,10 @@ def test_words(self, faker, num_samples): num_words = 5 for _ in range(num_samples): words = faker.words(num_words) - assert all(isinstance(word, str) and word in EsEsLoremProvider.word_list for word in words) + assert all( + isinstance(word, str) and word in EsEsLoremProvider.word_list + for word in words + ) class TestEsMx: @@ -1083,4 +1149,7 @@ def test_words(self, faker, num_samples): num_words = 5 for _ in range(num_samples): words = faker.words(num_words) - assert all(isinstance(word, str) and word in EsEsLoremProvider.word_list for word in words) + assert all( + isinstance(word, str) and word in EsEsLoremProvider.word_list + for word in words + ) diff --git a/tests/providers/test_misc.py b/tests/providers/test_misc.py index df735eee4f..0f8d641cc4 100644 --- a/tests/providers/test_misc.py +++ b/tests/providers/test_misc.py @@ -68,7 +68,9 @@ class TestMiscProvider: num_samples = 10 def test_uuid4_str(self, faker, num_samples): - pattern: Pattern = re.compile(r"[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}") + pattern: Pattern = re.compile( + r"[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}" + ) for _ in range(num_samples): assert pattern.fullmatch(faker.uuid4()) @@ -423,7 +425,9 @@ def test_dsv_with_row_ids(self, faker, num_samples): def test_dsv_data_columns(self, faker): num_rows = 10 data_columns = ["{{name}}", "#??-####", "{{address}}", "{{phone_number}}"] - with patch.object(faker["en_US"].factories[0], "pystr_format") as mock_pystr_format: + with patch.object( + faker["en_US"].factories[0], "pystr_format" + ) as mock_pystr_format: mock_pystr_format.assert_not_called() faker.dsv(data_columns=data_columns, num_rows=num_rows) @@ -584,7 +588,10 @@ def test_json_invalid_data_columns(self, faker_with_foobar): } with pytest.raises(TypeError) as excinfo: json.loads(faker_with_foobar.json(**kwargs)) - assert str(excinfo.value) == "Invalid data_columns type. Must be a dictionary or list" + assert ( + str(excinfo.value) + == "Invalid data_columns type. Must be a dictionary or list" + ) def test_json_list_format_invalid_arguments_type(self, faker_with_foobar): kwargs = { diff --git a/tests/providers/test_person.py b/tests/providers/test_person.py index 44822ed07d..d02c0b6269 100644 --- a/tests/providers/test_person.py +++ b/tests/providers/test_person.py @@ -362,7 +362,9 @@ def test_suffix(self): # Traditional suffix -- provider does not offer a nonbinary suffix at this time suffix = self.fake.suffix() self.assertIsInstance(suffix, str) - assert suffix in EnProvider.suffixes_male or suffix in EnProvider.suffixes_female + assert ( + suffix in EnProvider.suffixes_male or suffix in EnProvider.suffixes_female + ) class TestEnGB(unittest.TestCase): @@ -535,7 +537,9 @@ def test_first_name(self): def test_last_name(self): """Test if the last name is from the predefined list.""" last_name = self.fake.last_name() - self.assertGreater(len(last_name), 1, "Last name should have more than 1 character.") + self.assertGreater( + len(last_name), 1, "Last name should have more than 1 character." + ) self.assertIn(last_name, EnPKprovider.last_names) def test_full_name(self): @@ -549,7 +553,9 @@ def test_name_format(self): """Test if the generated name format is as expected.""" name = self.fake.name() name_parts = name.split() - self.assertGreaterEqual(len(name_parts), 2, "Full name should have at least a first and last name.") + self.assertGreaterEqual( + len(name_parts), 2, "Full name should have at least a first and last name." + ) if len(name_parts) == 2: self.assertIn(name_parts[0], EnPKprovider.first_names) self.assertIn(name_parts[-1], EnPKprovider.last_names) @@ -1072,7 +1078,11 @@ def test_name(self): assert all(isinstance(n, str) for n in name) - prefixes = HiINProvider.prefixes_male + HiINProvider.prefixes_female + HiINProvider.prefixes + prefixes = ( + HiINProvider.prefixes_male + + HiINProvider.prefixes_female + + HiINProvider.prefixes + ) # name should always be 2-3 words. If 3, first word should be a prefix. if len(name) == 3: @@ -1903,9 +1913,13 @@ def test_transliteration(self): assert self.translit("Демʼян") == "Demian" assert self.translit("Марʼяна") == "Mariana" assert ( - self.translit("абвгґдеєжзиіїйклмнопрстуфхцчшщьюяєʼ'-") == "abvhgdeiezhzyiiiklmnoprstufkhtschshshchiuiaie'-" + self.translit("абвгґдеєжзиіїйклмнопрстуфхцчшщьюяєʼ'-") + == "abvhgdeiezhzyiiiklmnoprstufkhtschshshchiuiaie'-" + ) + assert ( + self.translit("АБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯ") + == "ABVHGDEYeZhZYIYiYKLMNOPRSTUFKhTsChShShchYuYa" ) - assert self.translit("АБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯ") == "ABVHGDEYeZhZYIYiYKLMNOPRSTUFKhTsChShShchYuYa" def test_full_name_male(self): for _ in range(10): @@ -2041,7 +2055,9 @@ def test_full_name(self): first_name = full_name_parts[1] last_name = full_name_parts[2] - self.assertIn(prefix, YoNGProvider.prefixes_female + YoNGProvider.prefixes_male) + self.assertIn( + prefix, YoNGProvider.prefixes_female + YoNGProvider.prefixes_male + ) self.assertIn(first_name, YoNGProvider.first_names) self.assertIn(last_name, YoNGProvider.last_names) else: @@ -2119,7 +2135,9 @@ def test_name(self): assert name self.assertIsInstance(name, str) assert name[0] in ZhCNProvider.last_names or name[:2] in ZhCNProvider.last_names - assert name[1:] in ZhCNProvider.first_names or name[2:] in ZhCNProvider.first_names + assert ( + name[1:] in ZhCNProvider.first_names or name[2:] in ZhCNProvider.first_names + ) # Full romanized name name = self.fake.romanized_name() @@ -2201,13 +2219,17 @@ def test_name(self): assert name self.assertIsInstance(name, str) assert name[0] in ZhTWProvider.last_names or name[:2] in ZhTWProvider.last_names - assert name[1:] in ZhTWProvider.first_names or name[2:] in ZhTWProvider.first_names + assert ( + name[1:] in ZhTWProvider.first_names or name[2:] in ZhTWProvider.first_names + ) # Full romanized name name = self.fake.romanized_name() assert name self.assertIsInstance(name, str) - last_romanized_name, first_romanized_name = name.split(" ") # 'WANG SHU-FEN' or 'SHU-FEN, WANG' are both okay. + last_romanized_name, first_romanized_name = name.split( + " " + ) # 'WANG SHU-FEN' or 'SHU-FEN, WANG' are both okay. # first_romanized_name, last_romanized_name = name.split(" ") assert first_romanized_name in ZhTWProvider.first_romanized_names assert last_romanized_name in ZhTWProvider.last_romanized_names @@ -2310,7 +2332,9 @@ def test_full_name(self): first_name = full_name_parts[1] last_name = full_name_parts[2] - self.assertIn(prefix, ZuZAProvider.prefixes_female + ZuZAProvider.prefixes_male) + self.assertIn( + prefix, ZuZAProvider.prefixes_female + ZuZAProvider.prefixes_male + ) self.assertIn(first_name, ZuZAProvider.first_names) self.assertIn(last_name, ZuZAProvider.last_names) else: diff --git a/tests/providers/test_phone_number.py b/tests/providers/test_phone_number.py index bfd3603465..d756bc8c5d 100644 --- a/tests/providers/test_phone_number.py +++ b/tests/providers/test_phone_number.py @@ -27,8 +27,12 @@ def test_msisdn(self, faker, num_samples): class TestArAe: """Test ar_AE phone number provider methods""" - cellphone_pattern: str = r"(?:\+|00)971\s?5[024568]\s?\d{3}\s?\d{4}|" r"05[024568]\s?\d{3}\s?\d{4}" - telephone_pattern: str = r"(?:\+|00)971\s?[1234679]\s?\d{3}\s?\d{4}|" r"0[1234679]\s?\d{3}\s?\d{4}" + cellphone_pattern: str = ( + r"(?:\+|00)971\s?5[024568]\s?\d{3}\s?\d{4}|" r"05[024568]\s?\d{3}\s?\d{4}" + ) + telephone_pattern: str = ( + r"(?:\+|00)971\s?[1234679]\s?\d{3}\s?\d{4}|" r"0[1234679]\s?\d{3}\s?\d{4}" + ) toll_pattern: str = r"200\d{4}|" r"600\d{6}|" r"800\d{3,7}" service_phone_pattern: str = r"9(?:9(?:9|8|7|6|1)|01|22)" @@ -84,7 +88,9 @@ def test_phone_number(self, faker, num_samples): for _ in range(num_samples): phone_number = faker.phone_number() assert isinstance(phone_number, str) - assert self.cellphone_patterns.fullmatch(phone_number) or self.landline_patterns.fullmatch(phone_number) + assert self.cellphone_patterns.fullmatch( + phone_number + ) or self.landline_patterns.fullmatch(phone_number) def test_cellphone_number(self, faker, num_samples): for _ in range(num_samples): @@ -102,7 +108,8 @@ def test_landline_number(self, faker, num_samples): class TestFrCh: def test_phone_number(self, faker, num_samples): pattern: Pattern = re.compile( - r"((0041|\+41) ?)?((\(0\)|0)?\d{2})? ?[0-9]{3} ?[0-9]{2} ?[0-9]{2}|" r"0[89][0-9]{2} ?[0-9]{3} ?[0-9]{3}" + r"((0041|\+41) ?)?((\(0\)|0)?\d{2})? ?[0-9]{3} ?[0-9]{2} ?[0-9]{2}|" + r"0[89][0-9]{2} ?[0-9]{3} ?[0-9]{3}" ) for _ in range(num_samples): phone_number = faker.phone_number() @@ -112,7 +119,8 @@ def test_phone_number(self, faker, num_samples): class TestItCh: def test_phone_number(self, faker, num_samples): pattern: Pattern = re.compile( - r"((0041|\+41) ?)?((\(0\)|0)?\d{2})? ?[0-9]{3} ?[0-9]{2} ?[0-9]{2}|" r"0[89][0-9]{2} ?[0-9]{3} ?[0-9]{3}" + r"((0041|\+41) ?)?((\(0\)|0)?\d{2})? ?[0-9]{3} ?[0-9]{2} ?[0-9]{2}|" + r"0[89][0-9]{2} ?[0-9]{3} ?[0-9]{3}" ) for _ in range(num_samples): phone_number = faker.phone_number() @@ -123,7 +131,9 @@ class TestCsCz: """Test cs_CZ phone number provider methods""" def test_phone_number(self, faker, num_samples): - pattern: Pattern = re.compile(r"^(00420|\+420)? ?[6-7][0-9]{2} ?[0-9]{3} ?[0-9]{3}$") + pattern: Pattern = re.compile( + r"^(00420|\+420)? ?[6-7][0-9]{2} ?[0-9]{3} ?[0-9]{3}$" + ) for _ in range(num_samples): phone_number = faker.phone_number() assert pattern.fullmatch(phone_number) @@ -132,8 +142,12 @@ def test_phone_number(self, faker, num_samples): class TestDeAt: """Test de_AT phone number provider methods""" - landline_pattern: Pattern = re.compile(r"(\+43( \(0\))?|\(?0)\s?(?P[0-9]{1,4})\)?\s?\/?[0-9 ]+") - cellphone_pattern: Pattern = re.compile(r"(\+43( \(0\))?|0)\s?(?P[0-9]{3})\s?\/?[0-9 ]+") + landline_pattern: Pattern = re.compile( + r"(\+43( \(0\))?|\(?0)\s?(?P[0-9]{1,4})\)?\s?\/?[0-9 ]+" + ) + cellphone_pattern: Pattern = re.compile( + r"(\+43( \(0\))?|0)\s?(?P[0-9]{3})\s?\/?[0-9 ]+" + ) def test_phone_number(self, faker, num_samples): for _ in range(num_samples): @@ -153,19 +167,27 @@ def test_cellphone_number(self, faker, num_samples): class TestDeCh: """Test de_CH phone number provider methods""" - pattern: Pattern = re.compile(r"(\+41|0) ?(?P\d{2}) \d{3} \d{2} \d{2}") + pattern: Pattern = re.compile( + r"(\+41|0) ?(?P\d{2}) \d{3} \d{2} \d{2}" + ) def test_phone_number(self, faker, num_samples): for _ in range(num_samples): phone_number = faker.phone_number() assert self.pattern.fullmatch(phone_number) - assert self.pattern.match(phone_number).group("dialing_code") in DeChPhoneNumberProvider.landline_codes + assert ( + self.pattern.match(phone_number).group("dialing_code") + in DeChPhoneNumberProvider.landline_codes + ) def test_cellphone_number(self, faker, num_samples): for _ in range(num_samples): cellphone_number = faker.cellphone_number() assert self.pattern.fullmatch(cellphone_number) - assert self.pattern.match(cellphone_number).group("dialing_code") in DeChPhoneNumberProvider.dialing_codes + assert ( + self.pattern.match(cellphone_number).group("dialing_code") + in DeChPhoneNumberProvider.dialing_codes + ) class TestEnPh: @@ -173,18 +195,38 @@ class TestEnPh: @classmethod def setup_class(cls): - cls.mobile_number_pattern: Pattern = re.compile(r"^(?:0|\+63)(\d+)-\d{3}-\d{4}$") - cls.area2_landline_number_pattern: Pattern = re.compile(r"^(?:0|\+63)2-(\d{4})-\d{4}") - cls.non_area2_landline_number_pattern: Pattern = re.compile(r"^(?:0|\+63)(\d{2})-(\d{3})-\d{4}") - cls.globe_mobile_number_prefixes = EnPhPhoneNumberProvider.globe_mobile_number_prefixes - cls.smart_mobile_number_prefixes = EnPhPhoneNumberProvider.smart_mobile_number_prefixes - cls.sun_mobile_number_prefixes = EnPhPhoneNumberProvider.sun_mobile_number_prefixes + cls.mobile_number_pattern: Pattern = re.compile( + r"^(?:0|\+63)(\d+)-\d{3}-\d{4}$" + ) + cls.area2_landline_number_pattern: Pattern = re.compile( + r"^(?:0|\+63)2-(\d{4})-\d{4}" + ) + cls.non_area2_landline_number_pattern: Pattern = re.compile( + r"^(?:0|\+63)(\d{2})-(\d{3})-\d{4}" + ) + cls.globe_mobile_number_prefixes = ( + EnPhPhoneNumberProvider.globe_mobile_number_prefixes + ) + cls.smart_mobile_number_prefixes = ( + EnPhPhoneNumberProvider.smart_mobile_number_prefixes + ) + cls.sun_mobile_number_prefixes = ( + EnPhPhoneNumberProvider.sun_mobile_number_prefixes + ) cls.mobile_number_prefixes = ( - cls.globe_mobile_number_prefixes + cls.smart_mobile_number_prefixes + cls.sun_mobile_number_prefixes + cls.globe_mobile_number_prefixes + + cls.smart_mobile_number_prefixes + + cls.sun_mobile_number_prefixes + ) + cls.bayantel_landline_identifiers = ( + EnPhPhoneNumberProvider.bayantel_landline_identifiers + ) + cls.misc_landline_identifiers = ( + EnPhPhoneNumberProvider.misc_landline_identifiers + ) + cls.non_area2_landline_area_codes = ( + EnPhPhoneNumberProvider.non_area2_landline_area_codes ) - cls.bayantel_landline_identifiers = EnPhPhoneNumberProvider.bayantel_landline_identifiers - cls.misc_landline_identifiers = EnPhPhoneNumberProvider.misc_landline_identifiers - cls.non_area2_landline_area_codes = EnPhPhoneNumberProvider.non_area2_landline_area_codes def test_globe_mobile_number(self, faker, num_samples): for _ in range(num_samples): @@ -374,7 +416,13 @@ class TestHuHu: def test_phone_number(self, faker, num_samples): pattern: Pattern = re.compile( - r"(?:" r"\+36 \d{2} |" r"\(06\)\d{2}/|" r"\(\d{2}\)/|" r"\d{2}/|" r"06-\d{1,2}/" r")\d{3}[- ]\d{4}", + r"(?:" + r"\+36 \d{2} |" + r"\(06\)\d{2}/|" + r"\(\d{2}\)/|" + r"\d{2}/|" + r"06-\d{1,2}/" + r")\d{3}[- ]\d{4}", ) for _ in range(num_samples): phone_number = faker.phone_number() @@ -387,7 +435,8 @@ class TestHyAm: def test_phone_number(self, faker, num_samples): pattern: Pattern = re.compile( - r"(?:[23]\d{2}-|\([23]\d{2}\) |[23]\d{2}\.)\d{5}|" r"(?:(?:10|9\d)-|\((?:10|9\d)\) |(?:10|9\d)\.)\d{6}", + r"(?:[23]\d{2}-|\([23]\d{2}\) |[23]\d{2}\.)\d{5}|" + r"(?:(?:10|9\d)-|\((?:10|9\d)\) |(?:10|9\d)\.)\d{6}", ) for _ in range(num_samples): phone_number = faker.phone_number() @@ -434,7 +483,10 @@ class TestPtBr: def test_phone_number(self, faker, num_samples): pattern: Pattern = re.compile( - r"(?:\+55 )?" r"(?:[1-8]1|84|\((?:0[1-8]1|084)\))" r" \d{4}[ -]\d{4}|" r"\d{4}?[ -]\d{3}[ -]\d{4}", + r"(?:\+55 )?" + r"(?:[1-8]1|84|\((?:0[1-8]1|084)\))" + r" \d{4}[ -]\d{4}|" + r"\d{4}?[ -]\d{3}[ -]\d{4}", ) for _ in range(num_samples): phone_number = faker.phone_number() diff --git a/tests/providers/test_python.py b/tests/providers/test_python.py index 43e108a7be..6286504f5d 100644 --- a/tests/providers/test_python.py +++ b/tests/providers/test_python.py @@ -12,7 +12,9 @@ from faker import Faker -@pytest.mark.parametrize("object_type", (None, bool, str, float, int, tuple, set, list, Iterable, dict)) +@pytest.mark.parametrize( + "object_type", (None, bool, str, float, int, tuple, set, list, Iterable, dict) +) def test_pyobject( object_type: Optional[ Union[ @@ -37,7 +39,10 @@ def test_pyobject( @pytest.mark.parametrize("object_type", (object, type, callable)) def test_pyobject_with_unknown_object_type(object_type): - with pytest.raises(ValueError, match=f"Object type `{object_type}` is not supported by `pyobject` function"): + with pytest.raises( + ValueError, + match=f"Object type `{object_type}` is not supported by `pyobject` function", + ): assert Faker().pyobject(object_type=object_type) @@ -51,13 +56,17 @@ def test_pyobject_with_unknown_object_type(object_type): ("0123", 1, "1"), ), ) -def test_pyfloat_right_and_left_digits_positive(mock_random_number_source, right_digits, expected_decimal_part): +def test_pyfloat_right_and_left_digits_positive( + mock_random_number_source, right_digits, expected_decimal_part +): # Remove the randomness from the test by mocking the `BaseProvider.random_number` value def mock_random_number(self, digits=None, fix_len=False): return int(mock_random_number_source[: digits or 1]) with patch("faker.providers.BaseProvider.random_number", mock_random_number): - result = Faker().pyfloat(left_digits=1, right_digits=right_digits, positive=True) + result = Faker().pyfloat( + left_digits=1, right_digits=right_digits, positive=True + ) decimal_part = str(result).split(".")[1] assert decimal_part == expected_decimal_part @@ -123,7 +132,9 @@ def test_float_min_and_max_value_does_not_crash( Float arguments to randrange are deprecated from Python 3.10. This is a regression test to check that `pydecimal` does not cause a crash on any code path. """ - Faker().pydecimal(left_digits, right_digits, min_value=min_value, max_value=max_value) + Faker().pydecimal( + left_digits, right_digits, min_value=min_value, max_value=max_value + ) class TestPyint(unittest.TestCase): @@ -280,7 +291,9 @@ def test_positive_and_min_value_incompatible(self): a negative min_value is provided. """ - expected_message = "Cannot combine positive=True with negative or zero min_value" + expected_message = ( + "Cannot combine positive=True with negative or zero min_value" + ) with self.assertRaises(ValueError) as raises: self.fake.pyfloat(min_value=-100, positive=True) @@ -376,7 +389,9 @@ def test_positive(self): result = self.fake.pydecimal(positive=True) self.assertGreater(result, 0) - abs_result = -result if result < 0 else result # abs() result returns scientific notation + abs_result = ( + -result if result < 0 else result + ) # abs() result returns scientific notation self.assertEqual(result, abs_result) def test_min_value(self): @@ -465,7 +480,9 @@ def test_positive_and_min_value_incompatible(self): a negative min_value is provided. """ - expected_message = "Cannot combine positive=True with negative or zero min_value" + expected_message = ( + "Cannot combine positive=True with negative or zero min_value" + ) with self.assertRaises(ValueError) as raises: self.fake.pydecimal(min_value=-100, positive=True) @@ -482,22 +499,30 @@ def test_positive_doesnt_return_zero(self): def test_min_value_zero_doesnt_return_negative(self): Faker.seed("1") - result = self.fake.pydecimal(left_digits=3, right_digits=2, min_value=0, max_value=999) + result = self.fake.pydecimal( + left_digits=3, right_digits=2, min_value=0, max_value=999 + ) self.assertGreater(result, 0) def test_min_value_one_hundred_doesnt_return_negative(self): Faker.seed("1") - result = self.fake.pydecimal(left_digits=3, right_digits=2, min_value=100, max_value=999) + result = self.fake.pydecimal( + left_digits=3, right_digits=2, min_value=100, max_value=999 + ) self.assertGreater(result, 100) def test_min_value_minus_one_doesnt_return_positive(self): Faker.seed("5") - result = self.fake.pydecimal(left_digits=3, right_digits=2, min_value=-999, max_value=0) + result = self.fake.pydecimal( + left_digits=3, right_digits=2, min_value=-999, max_value=0 + ) self.assertLess(result, 0) def test_min_value_minus_one_hundred_doesnt_return_positive(self): Faker.seed("5") - result = self.fake.pydecimal(left_digits=3, right_digits=2, min_value=-999, max_value=-100) + result = self.fake.pydecimal( + left_digits=3, right_digits=2, min_value=-999, max_value=-100 + ) self.assertLess(result, -100) def test_min_value_10_pow_1000_return_greater_number(self): @@ -505,11 +530,17 @@ def test_min_value_10_pow_1000_return_greater_number(self): result = self.fake.pydecimal(min_value=10**1000) self.assertGreater(result, 10**1000) - def test_min_value_and_max_value_have_different_signs_return_evenly_distributed_values(self): + def test_min_value_and_max_value_have_different_signs_return_evenly_distributed_values( + self, + ): result = [] boundary_value = 10 for _ in range(1000): - result.append(self.fake.pydecimal(min_value=-boundary_value, max_value=boundary_value, right_digits=0)) + result.append( + self.fake.pydecimal( + min_value=-boundary_value, max_value=boundary_value, right_digits=0 + ) + ) self.assertEqual(len(Counter(result)), 2 * boundary_value + 1) def test_min_value_and_max_value_negative_return_evenly_distributed_values(self): @@ -517,7 +548,11 @@ def test_min_value_and_max_value_negative_return_evenly_distributed_values(self) min_value = -60 max_value = -50 for _ in range(1000): - result.append(self.fake.pydecimal(min_value=min_value, max_value=max_value, right_digits=0)) + result.append( + self.fake.pydecimal( + min_value=min_value, max_value=max_value, right_digits=0 + ) + ) self.assertGreater(len(Counter(result)), max_value - min_value) def test_min_value_and_max_value_positive_return_evenly_distributed_values(self): @@ -525,17 +560,25 @@ def test_min_value_and_max_value_positive_return_evenly_distributed_values(self) min_value = 50 max_value = 60 for _ in range(1000): - result.append(self.fake.pydecimal(min_value=min_value, max_value=max_value, right_digits=0)) + result.append( + self.fake.pydecimal( + min_value=min_value, max_value=max_value, right_digits=0 + ) + ) self.assertGreater(len(Counter(result)), max_value - min_value) def test_min_value_float_returns_correct_digit_number(self): Faker.seed("6") - result = self.fake.pydecimal(left_digits=1, right_digits=1, min_value=0.2, max_value=0.3) + result = self.fake.pydecimal( + left_digits=1, right_digits=1, min_value=0.2, max_value=0.3 + ) self.assertEqual(decimal.Decimal("0.2"), result) def test_max_value_float_returns_correct_digit_number(self): Faker.seed("3") - result = self.fake.pydecimal(left_digits=1, right_digits=1, min_value=0.2, max_value=0.3) + result = self.fake.pydecimal( + left_digits=1, right_digits=1, min_value=0.2, max_value=0.3 + ) self.assertEqual(decimal.Decimal("0.3"), result) @@ -582,7 +625,9 @@ def test_suffix(self): assert len(some_string) == 24 def test_prefix_and_suffix(self): - some_string = self.fake.pystr(min_chars=9, max_chars=20, prefix="START_", suffix="_END") + some_string = self.fake.pystr( + min_chars=9, max_chars=20, prefix="START_", suffix="_END" + ) assert isinstance(some_string, str) assert some_string.startswith("START_") assert some_string.endswith("_END") @@ -596,12 +641,18 @@ def setUp(self): def test_formatter_invocation(self): with patch.object(self.fake["en_US"].factories[0], "foo") as mock_foo: - with patch("faker.providers.BaseProvider.bothify", wraps=self.fake.bothify) as mock_bothify: + with patch( + "faker.providers.BaseProvider.bothify", wraps=self.fake.bothify + ) as mock_bothify: mock_foo.return_value = "barbar" - value = self.fake.pystr_format("{{foo}}?#?{{foo}}?#?{{foo}}", letters="abcde") + value = self.fake.pystr_format( + "{{foo}}?#?{{foo}}?#?{{foo}}", letters="abcde" + ) assert value.count("barbar") == 3 assert mock_foo.call_count == 3 - mock_bothify.assert_called_once_with("barbar?#?barbar?#?barbar", letters="abcde") + mock_bothify.assert_called_once_with( + "barbar?#?barbar?#?barbar", letters="abcde" + ) class TestPython(unittest.TestCase): @@ -654,7 +705,9 @@ def __test_pybool_invalid_truth_probability(self, truth_probability: int): with pytest.raises(ValueError) as exception: self.factory.pybool(truth_probability=truth_probability) - message_expected = "Invalid `truth_probability` value: must be between `0` and `100` inclusive" + message_expected = ( + "Invalid `truth_probability` value: must be between `0` and `100` inclusive" + ) message_actual = str(exception.value) assert message_expected == message_actual @@ -676,7 +729,9 @@ def mock_pyint(self, *args, **kwargs): return 1 with patch("faker.providers.python.Provider.pyint", mock_pyint): - some_tuple = Faker().pytuple(nb_elements=3, variable_nb_elements=False, value_types=[int]) + some_tuple = Faker().pytuple( + nb_elements=3, variable_nb_elements=False, value_types=[int] + ) assert some_tuple == (1, 1, 1) def test_pylist(self): diff --git a/tests/providers/test_ssn.py b/tests/providers/test_ssn.py index 85b47b0d37..3db469c813 100644 --- a/tests/providers/test_ssn.py +++ b/tests/providers/test_ssn.py @@ -57,7 +57,9 @@ def ssn_checksum(self, ssn): return False mult_factors = cycle([2, 1]) - final_sum = sum(self.partial_sum(int(char), mf) for char, mf in zip(ssn[:9], mult_factors)) + final_sum = sum( + self.partial_sum(int(char), mf) for char, mf in zip(ssn[:9], mult_factors) + ) chksum = -final_sum % 10 return chksum == int(ssn[-1]) @@ -71,7 +73,9 @@ def validate_date_string(self, date_str): return False try: - if date_str != datetime.strptime(date_str, f"{year_fmt}%m%d").strftime(f"{year_fmt}%m%d"): + if date_str != datetime.strptime(date_str, f"{year_fmt}%m%d").strftime( + f"{year_fmt}%m%d" + ): raise ValueError return True except ValueError: @@ -268,7 +272,10 @@ def test_vat_id(self): vat_id = self.fake.vat_id(prefix=prefix) assert re.search(r"^(EL)?\d{9}$", vat_id) assert vat_id[2 if prefix else 0] in ("7", "8", "9", "0") - assert str(gr_tin_checksum(vat_id[2:-1] if prefix else vat_id[:-1])) == vat_id[-1] + assert ( + str(gr_tin_checksum(vat_id[2:-1] if prefix else vat_id[:-1])) + == vat_id[-1] + ) def test_tin(self): for _ in range(100): @@ -471,7 +478,11 @@ def test_itin(self): [area, group, serial] = itin.split("-") assert 900 <= int(area) <= 999 - assert 70 <= int(group) <= 88 or 90 <= int(group) <= 92 or 94 <= int(group) <= 99 + assert ( + 70 <= int(group) <= 88 + or 90 <= int(group) <= 92 + or 94 <= int(group) <= 99 + ) assert 0 <= int(serial) <= 9999 def test_ein(self): @@ -610,7 +621,9 @@ def test_nuip(self): def test_natural_person_nit_with_check_digit(self): for _ in range(100): - natural_person_nit, check_digit = self.fake.natural_person_nit_with_check_digit().split("-") + natural_person_nit, check_digit = ( + self.fake.natural_person_nit_with_check_digit().split("-") + ) assert self._NATURAL_PERSON_NIT_REGEX.fullmatch(natural_person_nit) assert self._CHECK_DIGIT_REGEX.fullmatch(check_digit) assert nit_check_digit(natural_person_nit) == check_digit @@ -621,7 +634,9 @@ def test_legal_person_nit(self): def test_legal_person_nit_with_check_digit(self): for _ in range(100): - legal_person_nit, check_digit = self.fake.legal_person_nit_with_check_digit().split("-") + legal_person_nit, check_digit = ( + self.fake.legal_person_nit_with_check_digit().split("-") + ) assert self._LEGAL_PERSON_NIT_REGEX.fullmatch(legal_person_nit) assert self._CHECK_DIGIT_REGEX.fullmatch(check_digit) assert nit_check_digit(legal_person_nit) == check_digit @@ -652,7 +667,9 @@ def setUp(self): def test_vat_id(self): for _ in range(100): - assert re.search(r"^ES\w\d{8}$|^ES\d{8}\w$|^ES\w\d{7}\w$", self.fake.vat_id()) + assert re.search( + r"^ES\w\d{8}$|^ES\d{8}\w$|^ES\w\d{7}\w$", self.fake.vat_id() + ) def test_nie(self): for _ in range(100): @@ -987,7 +1004,9 @@ def test_vat_id(self): def test_ssn(self): for _ in range(100): - assert re.search(r"^[A-Z]{6}\d{2}[ABCDEHLMPRST][0-7]\d[A-Z]\d{3}[A-Z]$", self.fake.ssn()) + assert re.search( + r"^[A-Z]{6}\d{2}[ABCDEHLMPRST][0-7]\d[A-Z]\d{3}[A-Z]$", self.fake.ssn() + ) def test_checksum(self) -> None: assert it_checksum("MDDMRA80L41H501") == "R" diff --git a/tests/providers/test_user_agent.py b/tests/providers/test_user_agent.py index 51ac2d5a39..ac64119d81 100644 --- a/tests/providers/test_user_agent.py +++ b/tests/providers/test_user_agent.py @@ -13,11 +13,16 @@ class TestUserAgentProvider: """Test user agent provider methods""" num_samples = 1000 - android_token_pattern: Pattern = re.compile(r"Android (?P\d+(?:\.\d){0,2})") + android_token_pattern: Pattern = re.compile( + r"Android (?P\d+(?:\.\d){0,2})" + ) ios_token_pattern: Pattern = re.compile( - r"^(?P.*?); CPU \1 OS " + r"(?P\d+(?:_\d){0,2}) like Mac OS X" + r"^(?P.*?); CPU \1 OS " + + r"(?P\d+(?:_\d){0,2}) like Mac OS X" + ) + mac_token_pattern: Pattern = re.compile( + r"Macintosh; (?P.*?) Mac OS X 10_([5-9]|1[0-2])_(\d)" ) - mac_token_pattern: Pattern = re.compile(r"Macintosh; (?P.*?) Mac OS X 10_([5-9]|1[0-2])_(\d)") one_day = dt.timedelta(1.0) def test_android_platform_token(self, faker, num_samples): @@ -29,7 +34,9 @@ def test_ios_platform_token(self, faker, num_samples): for _ in range(num_samples): match = self.ios_token_pattern.fullmatch(faker.ios_platform_token()) assert match.group("apple_device") in UaProvider.apple_devices - assert match.group("ios_version").replace("_", ".") in UaProvider.ios_versions + assert ( + match.group("ios_version").replace("_", ".") in UaProvider.ios_versions + ) def test_mac_platform_token(self, faker, num_samples): for _ in range(num_samples): diff --git a/tests/sphinx/test_docstring.py b/tests/sphinx/test_docstring.py index 9c5ddf5d78..b6d8f7824f 100644 --- a/tests/sphinx/test_docstring.py +++ b/tests/sphinx/test_docstring.py @@ -293,7 +293,9 @@ def test_end_to_end_sample_generation(self, mock_warning, faker): assert output[4] == "... fake.bothify(text='???###')" assert output[5] == "..." for i in range(6, 11): - assert output[i] == docstring._stringify_result(faker.bothify(text="???###")) + assert output[i] == docstring._stringify_result( + faker.bothify(text="???###") + ) # 2nd sample generation faker.seed_instance(3210) @@ -303,7 +305,9 @@ def test_end_to_end_sample_generation(self, mock_warning, faker): assert output[14] == "... fake.bothify(letters='abcde')" assert output[15] == "..." for i in range(16, 21): - assert output[i] == docstring._stringify_result(faker.bothify(letters="abcde")) + assert output[i] == docstring._stringify_result( + faker.bothify(letters="abcde") + ) # 3rd sample generation faker.seed_instance(1234) @@ -313,7 +317,9 @@ def test_end_to_end_sample_generation(self, mock_warning, faker): assert output[24] == "... fake.bothify(text='???###', letters='abcde')" assert output[25] == "..." for i in range(26, 46): - assert output[i] == docstring._stringify_result(faker.bothify(text="???###", letters="abcde")) + assert output[i] == docstring._stringify_result( + faker.bothify(text="???###", letters="abcde") + ) calls = mock_warning.call_args_list assert len(calls) == 4 @@ -322,13 +328,19 @@ def test_end_to_end_sample_generation(self, mock_warning, faker): args, kwargs = calls[0] assert len(args) == 1 assert not kwargs - assert args[0] == "The section `:sample 1234jdbvhjdbygdvbhxjhx` is malformed and will be discarded." + assert ( + args[0] + == "The section `:sample 1234jdbvhjdbygdvbhxjhx` is malformed and will be discarded." + ) # 2nd call to _log_warning args, kwargs = calls[1] assert len(args) == 1 assert not kwargs - assert args[0] == "Sample generation failed for method `bothify` with arguments `invalid_arg='value'`." + assert ( + args[0] + == "Sample generation failed for method `bothify` with arguments `invalid_arg='value'`." + ) # 3rd call to _log_warning args, kwargs = calls[2] @@ -343,4 +355,7 @@ def test_end_to_end_sample_generation(self, mock_warning, faker): args, kwargs = calls[3] assert len(args) == 1 assert not kwargs - assert args[0] == "Sample generation failed for method `bothify` with arguments `abcd='abcd'`." + assert ( + args[0] + == "Sample generation failed for method `bothify` with arguments `abcd='abcd'`." + ) diff --git a/tests/sphinx/test_validator.py b/tests/sphinx/test_validator.py index a19c437e90..76199b13d9 100644 --- a/tests/sphinx/test_validator.py +++ b/tests/sphinx/test_validator.py @@ -35,10 +35,14 @@ def test_ordereddict_variable_access_exception(self): validator = SampleCodeValidator("[OrderedDict, variable1]") assert not validator.errors - validator = SampleCodeValidator("[OrderedDict, OrderedDict, OrderedDict, OrderedDict]") + validator = SampleCodeValidator( + "[OrderedDict, OrderedDict, OrderedDict, OrderedDict]" + ) assert not validator.errors - validator = SampleCodeValidator("[OrderedDict, OrderedDict, OrderedDict, OrderedDict, variable1]") + validator = SampleCodeValidator( + "[OrderedDict, OrderedDict, OrderedDict, OrderedDict, variable1]" + ) assert not validator.errors validator = SampleCodeValidator("[OrderedDict, variable1, variable2]") @@ -71,7 +75,9 @@ def test_ordereddict_constructor_exception(self): validator = SampleCodeValidator("variable.method1(OrderedDict2())") assert validator.errors - validator = SampleCodeValidator("variable.method1(OrderedDict(), OrderedDict(), OrderedDict())") + validator = SampleCodeValidator( + "variable.method1(OrderedDict(), OrderedDict(), OrderedDict())" + ) assert not validator.errors validator = SampleCodeValidator("variable.method1().method2(OrderedDict())") diff --git a/tests/test_factory.py b/tests/test_factory.py index 4c226f41a4..249423814f 100644 --- a/tests/test_factory.py +++ b/tests/test_factory.py @@ -176,7 +176,9 @@ def __init__(self, *args, **kwargs): from faker.config import DEFAULT_LOCALE print(f"requested locale = {locale} , DEFAULT LOCALE {DEFAULT_LOCALE}") - expected_locale = locale if expected_used else ("ar_EG" if with_default else "ko_KR") + expected_locale = ( + locale if expected_used else ("ar_EG" if with_default else "ko_KR") + ) assert factory.providers[0].__lang__ == expected_locale def test_lang_localized_provider_without_default(self): @@ -322,13 +324,17 @@ def test_negative_pyfloat(self): fake = Faker() fake.seed_instance(32167) assert any(fake.pyfloat(left_digits=0, positive=False) < 0 for _ in range(100)) - assert any(fake.pydecimal(left_digits=0, positive=False) < 0 for _ in range(100)) + assert any( + fake.pydecimal(left_digits=0, positive=False) < 0 for _ in range(100) + ) def test_arbitrary_digits_pydecimal(self): # tests for https://github.com/joke2k/faker/issues/1462 fake = Faker() assert any( - len(str(fake.pydecimal(left_digits=sys.float_info.dig + i))) > sys.float_info.dig for i in range(100) + len(str(fake.pydecimal(left_digits=sys.float_info.dig + i))) + > sys.float_info.dig + for i in range(100) ) assert any(len(str(fake.pydecimal())) > sys.float_info.dig for _ in range(100)) diff --git a/tests/test_generator.py b/tests/test_generator.py index 39aed2ac1e..e6b3eb6f3b 100644 --- a/tests/test_generator.py +++ b/tests/test_generator.py @@ -41,7 +41,9 @@ def test_get_formatter_with_unknown_formatter(self, generator): fake = Faker("it_IT") with pytest.raises(AttributeError) as excinfo: fake.get_formatter("barFormatter") - assert str(excinfo.value) == "Unknown formatter 'barFormatter' with locale 'it_IT'" + assert ( + str(excinfo.value) == "Unknown formatter 'barFormatter' with locale 'it_IT'" + ) def test_format_calls_formatter_on_provider(self, generator): assert generator.format("foo_formatter") == "foobar" @@ -59,7 +61,9 @@ def test_parse_without_formatter_tokens(self, generator): assert generator.parse("fooBar#?") == "fooBar#?" def test_parse_with_valid_formatter_tokens(self, generator): - result = generator.parse('This is {{foo_formatter}} a text with "{{ foo_formatter }}"') + result = generator.parse( + 'This is {{foo_formatter}} a text with "{{ foo_formatter }}"' + ) assert result == 'This is foobar a text with "foobar"' def test_arguments_group_with_values(self, generator): @@ -87,7 +91,9 @@ def test_arguments_group_with_invalid_argument_type(self, generator): def test_parse_with_valid_formatter_arguments(self, generator): generator.set_arguments("format_name", {"param": "foo", "append": "bar"}) - result = generator.parse('This is "{{foo_formatter_with_arguments:format_name}}"') + result = generator.parse( + 'This is "{{foo_formatter_with_arguments:format_name}}"' + ) generator.del_arguments("format_name") assert result == 'This is "bazfoobar"' diff --git a/tests/test_optional.py b/tests/test_optional.py index f84bcdb3c5..349bb62598 100644 --- a/tests/test_optional.py +++ b/tests/test_optional.py @@ -40,5 +40,8 @@ def test_functions_only(self): fake = Faker() - with pytest.raises(TypeError, match="Accessing non-functions through .optional is not supported."): + with pytest.raises( + TypeError, + match="Accessing non-functions through .optional is not supported.", + ): fake.optional.locales diff --git a/tests/test_proxy.py b/tests/test_proxy.py index 8b4b6d6316..b0a1f11f0a 100644 --- a/tests/test_proxy.py +++ b/tests/test_proxy.py @@ -227,7 +227,9 @@ def test_multiple_locale_proxy_behavior(self): def test_multiple_locale_caching_behavior(self): fake = Faker(["de_DE", "en-US", "en-PH", "ja_JP"]) - with patch("faker.proxy.Faker._map_provider_method", wraps=fake._map_provider_method) as mock_map_method: + with patch( + "faker.proxy.Faker._map_provider_method", wraps=fake._map_provider_method + ) as mock_map_method: mock_map_method.assert_not_called() assert not hasattr(fake, "_cached_name_mapping") @@ -237,7 +239,9 @@ def test_multiple_locale_caching_behavior(self): mock_map_method.assert_called_once_with("name") # Test subsequent cache access - with patch.object(Faker, "_cached_name_mapping", create=True, new_callable=PropertyMock) as mock_cached_map: + with patch.object( + Faker, "_cached_name_mapping", create=True, new_callable=PropertyMock + ) as mock_cached_map: # Keep test fast by patching the cached mapping to return something simpler mock_cached_map.return_value = [fake["en_US"]], [1] for _ in range(100): @@ -249,12 +253,16 @@ def test_multiple_locale_caching_behavior(self): @patch("faker.proxy.Faker._select_factory_choice") @patch("faker.proxy.Faker._select_factory_distribution") - def test_multiple_locale_factory_selection_no_weights(self, mock_factory_distribution, mock_factory_choice): + def test_multiple_locale_factory_selection_no_weights( + self, mock_factory_distribution, mock_factory_choice + ): fake = Faker(["de_DE", "en-US", "en-PH", "ja_JP"]) # There are no distribution weights, so factory selection logic will use `random.choice` # if multiple factories have the specified provider method - with patch("faker.proxy.Faker._select_factory", wraps=fake._select_factory) as mock_select_factory: + with patch( + "faker.proxy.Faker._select_factory", wraps=fake._select_factory + ) as mock_select_factory: mock_select_factory.assert_not_called() mock_factory_distribution.assert_not_called() mock_factory_choice.assert_not_called() @@ -288,7 +296,9 @@ def test_multiple_locale_factory_selection_no_weights(self, mock_factory_distrib @patch("faker.proxy.Faker._select_factory_choice") @patch("faker.proxy.Faker._select_factory_distribution") - def test_multiple_locale_factory_selection_with_weights(self, mock_factory_distribution, mock_factory_choice): + def test_multiple_locale_factory_selection_with_weights( + self, mock_factory_distribution, mock_factory_choice + ): locale = OrderedDict( [ ("de_DE", 3), @@ -303,16 +313,22 @@ def test_multiple_locale_factory_selection_with_weights(self, mock_factory_distr # Distribution weights have been specified, so factory selection logic will use # `choices_distribution` if multiple factories have the specified provider method - with patch("faker.proxy.Faker._select_factory", wraps=fake._select_factory) as mock_select_factory: + with patch( + "faker.proxy.Faker._select_factory", wraps=fake._select_factory + ) as mock_select_factory: # All factories for the listed locales have the `name` provider method fake.name() mock_select_factory.assert_called_once_with("name") - mock_factory_distribution.assert_called_once_with(fake.factories, fake.weights) + mock_factory_distribution.assert_called_once_with( + fake.factories, fake.weights + ) mock_factory_choice.assert_not_called() @patch("faker.proxy.Faker._select_factory_choice") @patch("faker.proxy.Faker._select_factory_distribution") - def test_multiple_locale_factory_selection_single_provider(self, mock_factory_distribution, mock_factory_choice): + def test_multiple_locale_factory_selection_single_provider( + self, mock_factory_distribution, mock_factory_choice + ): locale = OrderedDict( [ ("de_DE", 3), @@ -325,7 +341,9 @@ def test_multiple_locale_factory_selection_single_provider(self, mock_factory_di # Distribution weights have been specified, so factory selection logic will use # `choices_distribution` if multiple factories have the specified provider method - with patch("faker.proxy.Faker._select_factory", wraps=fake._select_factory) as mock_select_factory: + with patch( + "faker.proxy.Faker._select_factory", wraps=fake._select_factory + ) as mock_select_factory: # Only `en_PH` factory has provider method `luzon_province`, so there is no # need for `choices_distribution` factory selection logic to run fake.luzon_province() @@ -335,7 +353,9 @@ def test_multiple_locale_factory_selection_single_provider(self, mock_factory_di @patch("faker.proxy.Faker._select_factory_choice") @patch("faker.proxy.Faker._select_factory_distribution") - def test_multiple_locale_factory_selection_shared_providers(self, mock_factory_distribution, mock_factory_choice): + def test_multiple_locale_factory_selection_shared_providers( + self, mock_factory_distribution, mock_factory_choice + ): locale = OrderedDict( [ ("de_DE", 3), @@ -346,11 +366,15 @@ def test_multiple_locale_factory_selection_shared_providers(self, mock_factory_d ) fake = Faker(locale) - with patch("faker.proxy.Faker._select_factory", wraps=fake._select_factory) as mock_select_factory: + with patch( + "faker.proxy.Faker._select_factory", wraps=fake._select_factory + ) as mock_select_factory: # Both `en_US` and `ja_JP` factories have provider method `zipcode` fake.zipcode() mock_select_factory.assert_called_once_with("zipcode") - mock_factory_distribution.assert_called_once_with([fake["en_US"], fake["ja_JP"]], [2, 5]) + mock_factory_distribution.assert_called_once_with( + [fake["en_US"], fake["ja_JP"]], [2, 5] + ) mock_factory_choice.assert_not_called() def test_multiple_locale_factory_selection_unsupported_method(self): diff --git a/tests/test_unique.py b/tests/test_unique.py index 633c091131..8751f61e4a 100644 --- a/tests/test_unique.py +++ b/tests/test_unique.py @@ -23,7 +23,9 @@ def test_sanity_escape(self): # Those of you who are especially astute may realise # there are only 2 booleans, so the third boolean cannot # be unique. - with pytest.raises(UniquenessException, match=r"Got duplicated values after [\d,]+ iterations."): + with pytest.raises( + UniquenessException, match=r"Got duplicated values after [\d,]+ iterations." + ): for i in range(3): _ = fake.unique.boolean() @@ -58,7 +60,9 @@ def test_functions_only(self): fake = Faker() - with pytest.raises(TypeError, match="Accessing non-functions through .unique is not supported."): + with pytest.raises( + TypeError, match="Accessing non-functions through .unique is not supported." + ): fake.unique.locales def test_complex_return_types_is_supported(self): @@ -93,5 +97,7 @@ def test_unique_locale_access(self): assert value not in generated generated.add(value) - with pytest.raises(UniquenessException, match=r"Got duplicated values after [\d,]+ iterations."): + with pytest.raises( + UniquenessException, match=r"Got duplicated values after [\d,]+ iterations." + ): fake.unique["ja_JP"].random_int(min=1, max=10) diff --git a/tests/utils/test_utils.py b/tests/utils/test_utils.py index bf9c3d3284..5aed1a21ff 100644 --- a/tests/utils/test_utils.py +++ b/tests/utils/test_utils.py @@ -38,7 +38,9 @@ def test_choice_distribution(self): boundaries = [] tolerance = 5 for probability in p: - boundaries.append([100 * probability + tolerance, 100 * probability - tolerance]) + boundaries.append( + [100 * probability + tolerance, 100 * probability - tolerance] + ) assert boundaries[0][0] > a_pop > boundaries[0][1] assert boundaries[1][0] > b_pop > boundaries[1][1]