Coverage for /home/martinb/.local/share/virtualenvs/camcops/lib/python3.6/site-packages/faker/generator.py : 20%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1import random as random_module
2import re
4_re_token = re.compile(r'\{\{(\s?)(\w+)(\s?)\}\}')
5random = random_module.Random()
6mod_random = random # compat with name released in 0.8
9class Generator:
11 __config = {}
13 def __init__(self, **config):
14 self.providers = []
15 self.__config = dict(
16 list(self.__config.items()) + list(config.items()))
17 self.__random = random
19 def add_provider(self, provider):
21 if isinstance(provider, type):
22 provider = provider(self)
24 self.providers.insert(0, provider)
26 for method_name in dir(provider):
27 # skip 'private' method
28 if method_name.startswith('_'):
29 continue
31 faker_function = getattr(provider, method_name)
33 if callable(faker_function):
34 # add all faker method to generator
35 self.set_formatter(method_name, faker_function)
37 def provider(self, name):
38 try:
39 lst = [p for p in self.get_providers()
40 if p.__provider__ == name.lower()]
41 return lst[0]
42 except IndexError:
43 return None
45 def get_providers(self):
46 """Returns added providers."""
47 return self.providers
49 @property
50 def random(self):
51 return self.__random
53 @random.setter
54 def random(self, value):
55 self.__random = value
57 def seed_instance(self, seed=None):
58 """Calls random.seed"""
59 if self.__random == random:
60 # create per-instance random obj when first time seed_instance() is
61 # called
62 self.__random = random_module.Random()
63 self.__random.seed(seed)
64 return self
66 @classmethod
67 def seed(cls, seed=None):
68 random.seed(seed)
70 def format(self, formatter, *args, **kwargs):
71 """
72 This is a secure way to make a fake from another Provider.
73 """
74 # TODO: data export?
75 return self.get_formatter(formatter)(*args, **kwargs)
77 def get_formatter(self, formatter):
78 try:
79 return getattr(self, formatter)
80 except AttributeError:
81 if 'locale' in self.__config:
82 msg = 'Unknown formatter "{}" with locale "{}"'.format(
83 formatter, self.__config['locale'],
84 )
85 else:
86 raise AttributeError('Unknown formatter "{}"'.format(
87 formatter,
88 ))
89 raise AttributeError(msg)
91 def set_formatter(self, name, method):
92 """
93 This method adds a provider method to generator.
94 Override this method to add some decoration or logging stuff.
95 """
96 setattr(self, name, method)
98 def parse(self, text):
99 """
100 Replaces tokens (like '{{ tokenName }}' or '{{tokenName}}')
101 with the result from the token method call.
102 """
103 return _re_token.sub(self.__format_token, text)
105 def __format_token(self, matches):
106 formatter = list(matches.groups())
107 formatter[1] = str(self.format(formatter[1]))
108 return ''.join(formatter)