Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 84 additions & 0 deletions faker/providers/address/es_PE/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
from ..es import Provider as AddressProvider

class Provider(AddressProvider):
"""
A Faker provider for the Spanish-Peru (es_PE) locale.
This inherits from the base 'es' provider and adds Peru-specific data.

Sources:
- Departments: https://en.wikipedia.org/wiki/Departments_of_Peru
- Cities: https://en.wikipedia.org/wiki/List_of_cities_in_Peru
- Street Prefixes: Common knowledge of Peruvian addresses.
"""

# Define the structure of addresses in Peru
city_formats = ('{{city_name}}',)
street_name_formats = (
'{{street_prefix}} {{first_name}} {{last_name}}',
'{{street_prefix}} {{last_name}}',
'{{street_prefix}} de {{last_name}}',
)
street_address_formats = (
'{{street_name}} #{{building_number}}',
'{{street_name}} #{{building_number}}, {{secondary_address}}',
)
address_formats = (
'{{street_address}}\n{{city}}, {{department}}',
)

# Postcode format for Peru is 5 digits
postcode_formats = ('#####',)

# Common secondary address indicators
secondary_address_formats = (
'Dpto. ###', 'Of. ###', 'Int. ##', 'Piso #',
)

# Common street prefixes in Peru
street_prefixes = (
'Avenida', 'Av.', 'Jirón', 'Jr.', 'Calle', 'Paseo', 'Alameda', 'Malecón',
)

# Building number formats
building_number_formats = ('###', '####', '##')

# The 24 Departments of Peru + the Constitutional Province of Callao
departments = (
'Amazonas', 'Áncash', 'Apurímac', 'Arequipa', 'Ayacucho', 'Cajamarca',
'Callao', 'Cusco', 'Huancavelica', 'Huánuco', 'Ica', 'Junín',
'La Libertad', 'Lambayeque', 'Lima', 'Loreto', 'Madre de Dios',
'Moquegua', 'Pasco', 'Piura', 'Puno', 'San Martín', 'Tacna',
'Tumbes', 'Ucayali',
)

# A list of major cities in Peru
cities = (
'Arequipa', 'Ayacucho', 'Cajamarca', 'Callao', 'Chiclayo', 'Chimbote',
'Cusco', 'Huancayo', 'Huánuco', 'Huaraz', 'Ica', 'Iquitos', 'Juliaca',
'Lima', 'Piura', 'Pucallpa', 'Puno', 'Tacna', 'Trujillo', 'Tumbes',
)

# Methods to be called by Faker
def department(self) -> str:
"""
Returns a random Peruvian department.
"""
return self.random_element(self.departments)

def city_name(self) -> str:
"""
Returns a random Peruvian city name.
"""
return self.random_element(self.cities)

def street_prefix(self) -> str:
"""
Returns a random street prefix.
"""
return self.random_element(self.street_prefixes)

def secondary_address(self) -> str:
"""
Returns a random secondary address (apartment, office, etc.).
"""
return self.numerify(self.random_element(self.secondary_address_formats))
49 changes: 49 additions & 0 deletions faker/providers/automotive/es_PE/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# faker/providers/automotive/es_PE/__init__.py

from .. import Provider as AutomotiveProvider


class Provider(AutomotiveProvider):
"""
Implement automotive provider for ``es_PE`` locale.

Sources:
- https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Peru

.. |license_plate_modern| replace::
:meth:`license_plate_modern() <faker.providers.automotive.es_PE.Provider.license_plate_modern>`

.. |license_plate_previous| replace::
:meth:`license_plate_previous() <faker.providers.automotive.es_PE.Provider.license_plate_previous>`
"""

# Format from 2010 onwards (most common)
license_format_modern = "???-###"

# Format from 1995 to 2010
license_format_previous = "??-####"

def license_plate_modern(self) -> str:
"""
Generate a modern Peruvian license plate (format: LLL-NNN).
This format has been in use since 2010.
"""
return self.bothify(self.license_format_modern)

def license_plate_previous(self) -> str:
"""
Generate a previous-generation Peruvian license plate (format: LL-NNNN).
This format was in use from 1995 to 2010.
"""
return self.bothify(self.license_format_previous)

def license_plate(self) -> str:
"""
Generate a random Peruvian license plate.

This method randomly chooses between the modern format (75% chance)
and the previous format (25% chance) to generate the result.
"""
if self.generator.random.randint(1, 4) > 1:
return self.license_plate_modern()
return self.license_plate_previous()
39 changes: 39 additions & 0 deletions faker/providers/bank/es_PE/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# faker/providers/bank/es_PE/__init__.py

from .. import Provider as BankProvider


class Provider(BankProvider):
"""
Implement bank provider for ``es_PE`` locale.

Sources:
- CCI Format: https://www.bcrp.gob.pe/sistema-de-pagos/codigo-de-cuenta-interbancario.html
- Bank Names: https://www.sbs.gob.pe/sistema-financiero-y-de-seguros/sistema-financiero/empresas-en-el-sistema-financiero/
"""

# The Peruvian "Código de Cuenta Interbancario" (CCI) has 20 digits.
bban_format = "####################"
country_code = "PE"

# List of major banks operating in Peru
banks = (
"Banco de Crédito del Perú (BCP)",
"Interbank",
"Scotiabank Perú",
"BBVA Perú",
"Banco de la Nación",
"MiBanco",
"Banco Pichincha",
"BanBif",
"Banco Ripley",
"Banco Falabella",
"Banco GNB Perú",
"Banco de Comercio",
)

def bank(self) -> str:
"""
Returns a random Peruvian bank name.
"""
return self.random_element(self.banks)
7 changes: 7 additions & 0 deletions faker/providers/color/es_PE/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from ..es import Provider as ColorProvider

localized = True


class Provider(ColorProvider):
pass
124 changes: 124 additions & 0 deletions faker/providers/company/es_PE/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
# faker/providers/company/es_PE/__init__.py

from collections import OrderedDict

from .. import Provider as CompanyProvider


class Provider(CompanyProvider):
"""
Provider for company names for es_PE locale.

Company naming scheme and probabilities are inspired by and/or based on
existing companies in Peru.

Sources:
- https://www.gob.pe/295-tipos-de-empresa
- General knowledge of Peruvian company structures.
"""

# These formats are generic enough to apply well to Peru.
formats = (
"{{company_prefix}} {{last_name}} {{company_suffix}}",
"{{company_type}} {{random_company_acronym}} {{company_suffix}}",
"{{company_type}} {{last_name}} {{company_suffix}}",
"{{company_type}} {{random_company_adjective}} {{company_suffix}}",
"{{company_type}} {{last_name}} {{random_name_complements}} {{company_suffix}}",
"{{last_name}} {{random_name_complements}} {{company_suffix}}",
"{{last_name}} y {{last_name}} {{company_suffix}}",
"{{first_name}} {{last_name}} {{last_name}} {{company_suffix}}",
)

# Common legal entity types in Peru, with S.A.C. and S.R.L. being very common.
company_suffixes = OrderedDict(
[
("S.A.C.", 0.40), # Sociedad Anónima Cerrada
("S.R.L.", 0.25), # Sociedad de Responsabilidad Limitada
("S.A.", 0.15), # Sociedad Anónima
("E.I.R.L.", 0.10),# Empresa Individual de Responsabilidad Limitada
("S.A.A.", 0.05), # Sociedad Anónima Abierta
("S.C.", 0.05), # Sociedad Civil
]
)

# Prefixes are largely the same in Spanish-speaking countries.
company_prefixes = (
"Grupo",
"Hermanos",
"Hnos",
"Familia",
"Corporación",
)

# Common business sectors in Peru.
company_types = (
"Agroindustrial",
"Alimentación",
"Banca",
"Comercial",
"Comercializadora",
"Constructora",
"Consultoría",
"Desarrollo",
"Distribuciones",
"Exportadora",
"Financiera",
"Hotelera",
"Industrias",
"Inmobiliaria",
"Inversiones",
"Logística",
"Manufacturas",
"Minería",
"Pesquera",
"Promotora",
"Restaurante",
"Servicios",
"Soluciones",
"Suministros",
"Supermercados",
"Talleres",
"Tecnología",
"Transportes",
)

# Universal complements.
name_complements = (
"& Asociados",
"y Asociados",
"e Hijos",
)

# Adjectives relevant to Peru.
company_adjectives = (
"Andina",
"Andinos",
"Globales",
"Integrales",
"Internacional",
"Nacional",
"del Norte",
"del Pacífico",
"Peruana",
"Peruanos",
"del Sur",
)

def company_type(self) -> str:
return self.random_element(self.company_types)

def company_suffix(self) -> str:
return self.random_element(self.company_suffixes)

def random_name_complements(self) -> str:
return self.random_element(self.name_complements)

def random_company_adjective(self) -> str:
return self.random_element(self.company_adjectives)

def random_company_acronym(self) -> str:
letters = self.random_letters(self.random_int(2, 4))
return "".join(letters).upper()

def company_prefix(self) -> str:
return self.random_element(self.company_prefixes)
8 changes: 8 additions & 0 deletions faker/providers/currency/es_PE/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from ..es import Provider as CurrencyProvider


class Provider(CurrencyProvider):
price_formats = ["#,##", "%#,##", "%##,##", "%.###,##", "%#.###,##"]

def pricetag(self) -> str:
return self.numerify(self.random_element(self.price_formats))
5 changes: 5 additions & 0 deletions faker/providers/date_time/es_PE/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from ..es import Provider as DateTimeProvider


class Provider(DateTimeProvider):
pass
27 changes: 27 additions & 0 deletions faker/providers/internet/es_PE/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
from .. import Provider as InternetProvider

class Provider(InternetProvider):

# Safe TLDs for generating emails
safe_email_tlds = ("com", "net", "org", "pe")

# Top-level domains for Peru, with .com and .pe being the most common.
tlds = ("com", "com", "com", "net", "org", "pe", "pe", "pe")

# Replacements for Spanish accented characters are the same.
# This helps in generating clean user names and domain names.
replacements = (
("à", "a"),
("â", "a"),
("ã", "a"),
("á", "a"),
("ç", "c"),
("é", "e"),
("ê", "e"),
("í", "i"),
("ô", "o"),
("ö", "o"),
("õ", "o"),
("ó", "o"),
("ú", "u"),
)
5 changes: 5 additions & 0 deletions faker/providers/job/es_PE/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from ..es import Provider as BaseProvider


class Provider(BaseProvider):
pass
Loading