value-object-pattern 0.3.0__tar.gz → 0.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/PKG-INFO +1 -1
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/__init__.py +1 -1
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/models/enumeration_value_object.py +1 -1
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/models/value_object.py +54 -5
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/.gitignore +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/LICENSE.md +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/README.md +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/pyproject.toml +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/decorators/__init__.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/decorators/value_object_process.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/decorators/value_object_validation.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/models/__init__.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/py.typed +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/__init__.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/dates/__init__.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/dates/date/__init__.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/dates/date/date_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/dates/date/string_date_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/dates/datetime/__init__.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/dates/datetime/datetime_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/dates/datetime/string_datetime_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/identifiers/__init__.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/identifiers/countries/__init__.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/identifiers/countries/spain/__init__.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/identifiers/countries/spain/dni_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/identifiers/string_uuid_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/identifiers/uuid_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/internet/__init__.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/internet/aws_cloud_region_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/internet/domain_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/internet/host_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/internet/ipv4_address_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/internet/ipv4_network_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/internet/ipv6_address_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/internet/ipv6_network_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/internet/mac_address_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/internet/port_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/internet/uri/__init__.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/internet/uri/http_https_url_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/internet/uri/http_url_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/internet/uri/https_url_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/internet/uri/url_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/primitives/__init__.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/primitives/boolean/__init__.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/primitives/boolean/boolean_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/primitives/boolean/false_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/primitives/boolean/true_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/primitives/bytes/__init__.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/primitives/bytes/bytes_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/primitives/float/__init__.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/primitives/float/float_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/primitives/float/negative_float_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/primitives/float/positive_float_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/primitives/integer/__init__.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/primitives/integer/even_integer_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/primitives/integer/integer_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/primitives/integer/negative_integer_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/primitives/integer/odd_integer_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/primitives/integer/positive_integer_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/primitives/string/__init__.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/primitives/string/alpha_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/primitives/string/alphanumeric_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/primitives/string/digit_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/primitives/string/lowercase_string_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/primitives/string/non_empty_string_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/primitives/string/printable_string_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/primitives/string/string_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/primitives/string/trimmed_string_value_object.py +0 -0
- {value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/primitives/string/uppercase_string_value_object.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: value-object-pattern
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.4.0
|
4
4
|
Summary: The Value Object Pattern is a Python package that streamlines the creation and management of value objects in your projects.
|
5
5
|
Project-URL: Homepage, https://github.com/adriamontoto/value-object-pattern
|
6
6
|
Project-URL: Repository, https://github.com/adriamontoto/value-object-pattern
|
@@ -18,7 +18,7 @@ from value_object_pattern.models.value_object import ValueObject
|
|
18
18
|
E = TypeVar('E', bound=Enum)
|
19
19
|
|
20
20
|
|
21
|
-
class EnumerationValueObject(ValueObject[str | E], Generic[E]):
|
21
|
+
class EnumerationValueObject(ValueObject[str | E], Generic[E]): # noqa: UP046
|
22
22
|
"""
|
23
23
|
EnumerationValueObject is a value object that ensures the provided value is from an enumeration.
|
24
24
|
|
@@ -15,7 +15,7 @@ else:
|
|
15
15
|
T = TypeVar('T')
|
16
16
|
|
17
17
|
|
18
|
-
class ValueObject(ABC, Generic[T]):
|
18
|
+
class ValueObject(ABC, Generic[T]): # noqa: UP046
|
19
19
|
"""
|
20
20
|
ValueObject generic type.
|
21
21
|
|
@@ -34,13 +34,14 @@ class ValueObject(ABC, Generic[T]):
|
|
34
34
|
```
|
35
35
|
"""
|
36
36
|
|
37
|
-
__slots__ = ('_title', '_value')
|
38
|
-
__match_args__ = ('_title', '_value')
|
37
|
+
__slots__ = ('_parameter', '_title', '_value')
|
38
|
+
__match_args__ = ('_parameter', '_title', '_value')
|
39
39
|
|
40
40
|
_value: T
|
41
41
|
_title: str
|
42
|
+
_parameter: str
|
42
43
|
|
43
|
-
def __init__(self, *, value: T, title: str | None = None) -> None:
|
44
|
+
def __init__(self, *, value: T, title: str | None = None, parameter: str | None = None) -> None:
|
44
45
|
"""
|
45
46
|
ValueObject value object constructor.
|
46
47
|
|
@@ -48,10 +49,16 @@ class ValueObject(ABC, Generic[T]):
|
|
48
49
|
value (T): The value to store in the value object.
|
49
50
|
title (str | None, optional): The title of the value object when raising exceptions, if title is None, the
|
50
51
|
class name is used instead. Defaults to None.
|
52
|
+
parameter (str | None, optional): The parameter name of the value object when raising exceptions, if
|
53
|
+
parameter is None, the string "value" is used instead. Defaults to None.
|
51
54
|
|
52
55
|
Raises:
|
53
56
|
TypeError: If the title is not a string.
|
57
|
+
ValueError: If the title is an empty string.
|
54
58
|
ValueError: If the title contains leading or trailing whitespaces.
|
59
|
+
TypeError: If the parameter is not a string.
|
60
|
+
ValueError: If the parameter is an empty string.
|
61
|
+
ValueError: If the parameter contains leading or trailing whitespaces.
|
55
62
|
|
56
63
|
Example:
|
57
64
|
```python
|
@@ -71,12 +78,28 @@ class ValueObject(ABC, Generic[T]):
|
|
71
78
|
title = self.__class__.__name__
|
72
79
|
|
73
80
|
if type(title) is not str:
|
74
|
-
raise TypeError(f'ValueObject
|
81
|
+
raise TypeError(f'ValueObject title <<<{title}>>> must be a string. Got <<<{type(title).__name__}>>> instead.') # noqa: E501 # fmt: skip
|
82
|
+
|
83
|
+
if title == '':
|
84
|
+
raise ValueError(f'ValueObject title <<<{title}>>> must not be an empty string.') # noqa: E501 # fmt: skip
|
75
85
|
|
76
86
|
if title.strip() != title:
|
77
87
|
raise ValueError(f'ValueObject title <<<{title}>>> contains leading or trailing whitespaces. Only trimmed values are allowed.') # noqa: E501 # fmt: skip
|
78
88
|
|
89
|
+
if parameter is None:
|
90
|
+
parameter = 'value'
|
91
|
+
|
92
|
+
if type(parameter) is not str:
|
93
|
+
raise TypeError(f'ValueObject parameter <<<{parameter}>>> must be a string. Got <<<{type(parameter).__name__}>>> instead.') # noqa: E501 # fmt: skip
|
94
|
+
|
95
|
+
if parameter == '':
|
96
|
+
raise ValueError(f'ValueObject parameter <<<{parameter}>>> must not be an empty string.') # noqa: E501 # fmt: skip
|
97
|
+
|
98
|
+
if parameter.strip() != parameter:
|
99
|
+
raise ValueError(f'ValueObject parameter <<<{parameter}>>> contains leading or trailing whitespaces. Only trimmed values are allowed.') # noqa: E501 # fmt: skip
|
100
|
+
|
79
101
|
object.__setattr__(self, '_title', title)
|
102
|
+
object.__setattr__(self, '_parameter', parameter)
|
80
103
|
|
81
104
|
self._validate(value=value)
|
82
105
|
value = self._process(value=value)
|
@@ -247,6 +270,8 @@ class ValueObject(ABC, Generic[T]):
|
|
247
270
|
for class_name in {cls.__name__ for cls in classes}:
|
248
271
|
error.args = (str(object=error.args[0]).replace(class_name, self.title),)
|
249
272
|
|
273
|
+
error.args = (str(object=error.args[0]).replace('value', self.parameter, 1),)
|
274
|
+
|
250
275
|
raise error
|
251
276
|
|
252
277
|
def _post_order_dfs_mro(self, cls: type, visited: set[type] | None = None, cut_off: type = object) -> list[type]:
|
@@ -381,3 +406,27 @@ class ValueObject(ABC, Generic[T]):
|
|
381
406
|
```
|
382
407
|
"""
|
383
408
|
return self._title
|
409
|
+
|
410
|
+
@property
|
411
|
+
def parameter(self) -> str:
|
412
|
+
"""
|
413
|
+
Returns the value object parameter name.
|
414
|
+
|
415
|
+
Returns:
|
416
|
+
str: The value object parameter name.
|
417
|
+
|
418
|
+
Example:
|
419
|
+
```python
|
420
|
+
from value_object_pattern import ValueObject
|
421
|
+
|
422
|
+
|
423
|
+
class IntegerValueObject(ValueObject[int]):
|
424
|
+
pass
|
425
|
+
|
426
|
+
|
427
|
+
integer = IntegerValueObject(value=10)
|
428
|
+
print(integer.parameter)
|
429
|
+
# >>> value
|
430
|
+
```
|
431
|
+
"""
|
432
|
+
return self._parameter
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/models/__init__.py
RENAMED
File without changes
|
File without changes
|
{value_object_pattern-0.3.0 → value_object_pattern-0.4.0}/value_object_pattern/usables/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|