123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import itertools
- from datetime import date
- from decimal import Decimal
- from typing import Dict, List, Optional, Tuple, Union
- from ...typing import GenderType
- from .. import BaseProvider
- class Provider(BaseProvider):
- """
- This provider is a collection of functions to generate personal profiles and identities.
- """
- def simple_profile(self, sex: Optional[GenderType] = None) -> Dict[str, Union[str, date, GenderType]]:
- """
- Generates a basic profile with personal informations
- """
- sex_ = self.random_element(["F", "M"]) if sex is None else sex
- if sex_ == "F":
- name = self.generator.name_female()
- elif sex_ == "M":
- name = self.generator.name_male()
- return {
- "username": self.generator.user_name(),
- "name": name,
- "sex": sex_,
- "address": self.generator.address(),
- "mail": self.generator.free_email(),
- "birthdate": self.generator.date_of_birth(),
- }
- def profile(
- self, fields: Optional[List[str]] = None, sex: Optional[GenderType] = None
- ) -> Dict[str, Union[str, Tuple[Decimal, Decimal], List[str], date]]:
- """
- Generates a complete profile.
- If "fields" is not empty, only the fields in the list will be returned
- """
- if fields is None:
- fields = []
- d = {
- "job": self.generator.job(),
- "company": self.generator.company(),
- "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"], ["+", "-"])))),
- "website": [self.generator.url() for _ in range(1, self.random_int(2, 5))],
- }
- d = dict(d, **self.generator.simple_profile(sex))
- # field selection
- if len(fields) > 0:
- d = {k: v for k, v in d.items() if k in fields}
- return d
|