Coverage for audoma/examples.py: 50%
32 statements
« prev ^ index » next coverage.py v6.4.2, created at 2022-08-08 06:12 +0000
« prev ^ index » next coverage.py v6.4.2, created at 2022-08-08 06:12 +0000
1import random
2from typing import (
3 Any,
4 Type,
5)
7import exrex
9from django.core import validators
12class DEFAULT:
13 pass
16class Example:
17 """
18 Class that represents an example for a field.
19 It allows to add example to the field during initialization.
20 """
22 def __init__(self, field, example=DEFAULT) -> None:
23 self.field = field
24 self.example = example
26 def generate_value(self) -> Type[DEFAULT]:
27 return DEFAULT
29 def get_value(self) -> Any:
30 if self.example is not DEFAULT:
31 if callable(self.example):
32 return self.example()
33 return self.example
34 return self.generate_value()
36 def to_representation(self, value) -> Any:
37 return self.field.to_representation(value)
40class NumericExample(Example):
41 def generate_value(self) -> float:
42 """
43 Extracts information from the field and generates a random value
44 based on min_value and max_value.
46 Returns:
47 Random value between min_value and max_value
48 """
49 min_val = getattr(self.field, "min_value", 1) or 1
50 max_val = getattr(self.field, "max_value", 1000) or 1000
51 return random.uniform(min_val, max_val)
54class RegexExample(Example):
55 def generate_value(self) -> str:
56 """
57 Extracts information from the field and generates a random value
58 based on field's RegexValidators.
60 Returns:
61 Generated regex string if regex is found, otherwise returns None
62 """
63 regex_validators = [
64 validator
65 for validator in self.field.validators
66 if isinstance(validator, validators.RegexValidator)
67 ]
68 if regex_validators:
69 regex_validator = regex_validators[0]
70 return exrex.getone(regex_validator.regex.pattern)
71 return None