Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/faker/providers/profile/__init__.py: 31%

22 statements  

« prev     ^ index     » next       coverage.py v6.4.4, created at 2023-07-17 14:22 -0600

1import itertools 

2 

3from datetime import date 

4from decimal import Decimal 

5from typing import Dict, List, Optional, Tuple, Union 

6 

7from ...typing import SexLiteral 

8from .. import BaseProvider 

9 

10 

11class Provider(BaseProvider): 

12 """ 

13 This provider is a collection of functions to generate personal profiles and identities. 

14 

15 """ 

16 

17 def simple_profile(self, sex: Optional[SexLiteral] = None) -> Dict[str, Union[str, date, SexLiteral]]: 

18 """ 

19 Generates a basic profile with personal informations 

20 """ 

21 sex_ = self.random_element(["F", "M"]) if sex is None else sex 

22 if sex_ == "F": 

23 name = self.generator.name_female() 

24 elif sex_ == "M": 

25 name = self.generator.name_male() 

26 return { 

27 "username": self.generator.user_name(), 

28 "name": name, 

29 "sex": sex_, 

30 "address": self.generator.address(), 

31 "mail": self.generator.free_email(), 

32 "birthdate": self.generator.date_of_birth(), 

33 } 

34 

35 def profile( 

36 self, fields: Optional[List[str]] = None, sex: Optional[SexLiteral] = None 

37 ) -> Dict[str, Union[str, Tuple[Decimal, Decimal], List[str], date]]: 

38 """ 

39 Generates a complete profile. 

40 If "fields" is not empty, only the fields in the list will be returned 

41 """ 

42 if fields is None: 

43 fields = [] 

44 

45 d = { 

46 "job": self.generator.job(), 

47 "company": self.generator.company(), 

48 "ssn": self.generator.ssn(), 

49 "residence": self.generator.address(), 

50 "current_location": (self.generator.latitude(), self.generator.longitude()), 

51 "blood_group": "".join(self.random_element(list(itertools.product(["A", "B", "AB", "O"], ["+", "-"])))), 

52 "website": [self.generator.url() for _ in range(1, self.random_int(2, 5))], 

53 } 

54 

55 d = dict(d, **self.generator.simple_profile(sex)) 

56 # field selection 

57 if len(fields) > 0: 

58 d = {k: v for k, v in d.items() if k in fields} 

59 

60 return d