value-object-pattern 0.7.4__tar.gz → 0.8.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.7.4 → value_object_pattern-0.8.0}/PKG-INFO +1 -1
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/__init__.py +1 -1
- value_object_pattern-0.8.0/value_object_pattern/models/collections/__init__.py +11 -0
- value_object_pattern-0.8.0/value_object_pattern/models/collections/collection_value_object.py +107 -0
- value_object_pattern-0.8.0/value_object_pattern/models/collections/iterable_value_object.py +71 -0
- value_object_pattern-0.8.0/value_object_pattern/models/collections/not_empty_sequence_value_object.py +51 -0
- value_object_pattern-0.8.0/value_object_pattern/models/collections/sequence_value_object.py +143 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/models/enumeration_value_object.py +2 -2
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/.gitignore +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/LICENSE.md +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/README.md +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/pyproject.toml +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/decorators/__init__.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/decorators/value_object_process.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/decorators/value_object_validation.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/models/__init__.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/models/base_model.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/models/value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/py.typed +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/__init__.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/dates/__init__.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/dates/date/__init__.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/dates/date/date_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/dates/date/string_date_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/dates/datetime/__init__.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/dates/datetime/datetime_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/dates/datetime/string_datetime_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/dates/timezone/__init__.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/dates/timezone/string_timezone_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/dates/timezone/timezone_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/identifiers/__init__.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/identifiers/countries/__init__.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/identifiers/countries/spain/__init__.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/identifiers/countries/spain/dni_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/identifiers/string_uuid_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/identifiers/uuid_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/internet/__init__.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/internet/aws_cloud_region_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/internet/domain_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/internet/host_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/internet/ipv4_address_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/internet/ipv4_network_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/internet/ipv6_address_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/internet/ipv6_network_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/internet/mac_address_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/internet/port_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/internet/uri/__init__.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/internet/uri/http_https_url_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/internet/uri/http_url_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/internet/uri/https_url_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/internet/uri/url_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/__init__.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/boolean/__init__.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/boolean/boolean_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/boolean/false_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/boolean/true_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/bytes/__init__.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/bytes/bytes_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/float/__init__.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/float/float_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/float/negative_float_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/float/positive_float_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/integer/__init__.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/integer/even_integer_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/integer/integer_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/integer/negative_integer_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/integer/odd_integer_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/integer/positive_integer_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/none/__init__.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/none/none_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/none/not_none_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/string/__init__.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/string/alpha_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/string/alphanumeric_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/string/digit_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/string/lowercase_string_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/string/non_empty_string_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/string/printable_string_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/string/string_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/string/trimmed_string_value_object.py +0 -0
- {value_object_pattern-0.7.4 → value_object_pattern-0.8.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.8.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
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from .collection_value_object import CollectionValueObject
|
|
2
|
+
from .iterable_value_object import IterableValueObject
|
|
3
|
+
from .not_empty_sequence_value_object import NotEmptySequenceValueObject
|
|
4
|
+
from .sequence_value_object import SequenceValueObject
|
|
5
|
+
|
|
6
|
+
__all__ = (
|
|
7
|
+
'CollectionValueObject',
|
|
8
|
+
'IterableValueObject',
|
|
9
|
+
'NotEmptySequenceValueObject',
|
|
10
|
+
'SequenceValueObject',
|
|
11
|
+
)
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"""
|
|
2
|
+
CollectionValueObject module.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from collections.abc import Collection
|
|
6
|
+
from typing import Any, NoReturn
|
|
7
|
+
|
|
8
|
+
from value_object_pattern.decorators import validation
|
|
9
|
+
from value_object_pattern.models.value_object import ValueObject
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class CollectionValueObject(ValueObject[Collection[Any]]):
|
|
13
|
+
"""
|
|
14
|
+
CollectionValueObject is a value object that ensures the provided value is from a collection.
|
|
15
|
+
|
|
16
|
+
Example:
|
|
17
|
+
```python
|
|
18
|
+
from value_object_pattern.models.collections import CollectionValueObject
|
|
19
|
+
|
|
20
|
+
collection = CollectionValueObject(value=[1, 2, 3])
|
|
21
|
+
print(collection)
|
|
22
|
+
# >>> [1, 2, 3]
|
|
23
|
+
```
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
def __contains__(self, item: Any) -> bool:
|
|
27
|
+
"""
|
|
28
|
+
Returns True if the value object value contains the item, otherwise False.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
item (Any): The item to check.
|
|
32
|
+
|
|
33
|
+
Returns:
|
|
34
|
+
bool: True if the value object value contains the item, otherwise False.
|
|
35
|
+
|
|
36
|
+
Example:
|
|
37
|
+
```python
|
|
38
|
+
from value_object_pattern.models.collections import CollectionValueObject
|
|
39
|
+
|
|
40
|
+
collection = CollectionValueObject(value=[1, 2, 3])
|
|
41
|
+
print(1 in collection)
|
|
42
|
+
# >>> True
|
|
43
|
+
```
|
|
44
|
+
"""
|
|
45
|
+
return item in self._value
|
|
46
|
+
|
|
47
|
+
def __len__(self) -> int:
|
|
48
|
+
"""
|
|
49
|
+
Returns the length of the value object value.
|
|
50
|
+
|
|
51
|
+
Returns:
|
|
52
|
+
int: The length of the value object value.
|
|
53
|
+
|
|
54
|
+
Example:
|
|
55
|
+
```python
|
|
56
|
+
from value_object_pattern.models.collections import CollectionValueObject
|
|
57
|
+
|
|
58
|
+
collection = CollectionValueObject(value=[1, 2, 3])
|
|
59
|
+
print(len(collection))
|
|
60
|
+
# >>> 3
|
|
61
|
+
```
|
|
62
|
+
"""
|
|
63
|
+
return len(self._value)
|
|
64
|
+
|
|
65
|
+
@validation(order=0)
|
|
66
|
+
def _ensure_value_is_from_collection(self, value: Collection[Any]) -> None:
|
|
67
|
+
"""
|
|
68
|
+
Ensures the value object `value` is a collection.
|
|
69
|
+
|
|
70
|
+
Args:
|
|
71
|
+
value (Collection[Any]): The provided value.
|
|
72
|
+
|
|
73
|
+
Raises:
|
|
74
|
+
TypeError: If the `value` is not a collection.
|
|
75
|
+
"""
|
|
76
|
+
if not isinstance(value, Collection):
|
|
77
|
+
self._raise_value_is_not_collection(value=value)
|
|
78
|
+
|
|
79
|
+
def _raise_value_is_not_collection(self, value: Any) -> NoReturn:
|
|
80
|
+
"""
|
|
81
|
+
Raises a TypeError if the value object `value` is not a collection.
|
|
82
|
+
|
|
83
|
+
Args:
|
|
84
|
+
value (Any): The provided value.
|
|
85
|
+
|
|
86
|
+
Raises:
|
|
87
|
+
TypeError: If the `value` is not a collection.
|
|
88
|
+
"""
|
|
89
|
+
raise TypeError(f'CollectionValueObject value <<<{value}>>> must be a collection. Got <<<{type(value).__name__}>>> type.') # noqa: E501 # fmt: skip
|
|
90
|
+
|
|
91
|
+
def is_empty(self) -> bool:
|
|
92
|
+
"""
|
|
93
|
+
Returns True if the value object value is empty, otherwise False.
|
|
94
|
+
|
|
95
|
+
Returns:
|
|
96
|
+
bool: True if the value object value is empty, otherwise False.
|
|
97
|
+
|
|
98
|
+
Example:
|
|
99
|
+
```python
|
|
100
|
+
from value_object_pattern.models.collections import CollectionValueObject
|
|
101
|
+
|
|
102
|
+
collection = CollectionValueObject(value=[])
|
|
103
|
+
print(collection.is_empty())
|
|
104
|
+
# >>> True
|
|
105
|
+
```
|
|
106
|
+
"""
|
|
107
|
+
return not self._value
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"""
|
|
2
|
+
IterableValueObject module.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from collections.abc import Iterable
|
|
6
|
+
from typing import Any, NoReturn
|
|
7
|
+
|
|
8
|
+
from value_object_pattern.decorators import validation
|
|
9
|
+
from value_object_pattern.models.value_object import ValueObject
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class IterableValueObject(ValueObject[Iterable[Any]]):
|
|
13
|
+
"""
|
|
14
|
+
IterableValueObject is a value object that ensures the provided value is from an iterable.
|
|
15
|
+
|
|
16
|
+
Example:
|
|
17
|
+
```python
|
|
18
|
+
from value_object_pattern.models.collections import IterableValueObject
|
|
19
|
+
|
|
20
|
+
iterable = IterableValueObject(value=[1, 2, 3])
|
|
21
|
+
print(iterable)
|
|
22
|
+
# >>> [1, 2, 3]
|
|
23
|
+
```
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
def __contains__(self, item: Any) -> bool:
|
|
27
|
+
"""
|
|
28
|
+
Returns True if the value object value contains the item, otherwise False.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
item (Any): The item to check.
|
|
32
|
+
|
|
33
|
+
Returns:
|
|
34
|
+
bool: True if the value object value contains the item, otherwise False.
|
|
35
|
+
|
|
36
|
+
Example:
|
|
37
|
+
```python
|
|
38
|
+
from value_object_pattern.models.collections import IterableValueObject
|
|
39
|
+
|
|
40
|
+
iterable = IterableValueObject(value=[1, 2, 3])
|
|
41
|
+
print(1 in iterable)
|
|
42
|
+
# >>> True
|
|
43
|
+
```
|
|
44
|
+
"""
|
|
45
|
+
return item in self._value
|
|
46
|
+
|
|
47
|
+
@validation(order=0)
|
|
48
|
+
def _ensure_value_is_from_iterable(self, value: Iterable[Any]) -> None:
|
|
49
|
+
"""
|
|
50
|
+
Ensures the value object `value` is an iterable.
|
|
51
|
+
|
|
52
|
+
Args:
|
|
53
|
+
value (Iterable[Any]): The provided value.
|
|
54
|
+
|
|
55
|
+
Raises:
|
|
56
|
+
TypeError: If the `value` is not an iterable.
|
|
57
|
+
"""
|
|
58
|
+
if not isinstance(value, Iterable):
|
|
59
|
+
self._raise_value_is_not_iterable(value=value)
|
|
60
|
+
|
|
61
|
+
def _raise_value_is_not_iterable(self, value: Any) -> NoReturn:
|
|
62
|
+
"""
|
|
63
|
+
Raises a TypeError if the value object `value` is not an iterable.
|
|
64
|
+
|
|
65
|
+
Args:
|
|
66
|
+
value (Any): The provided value.
|
|
67
|
+
|
|
68
|
+
Raises:
|
|
69
|
+
TypeError: If the `value` is not an iterable.
|
|
70
|
+
"""
|
|
71
|
+
raise TypeError(f'IterableValueObject value <<<{value}>>> must be an iterable. Got <<<{type(value).__name__}>>> type.') # noqa: E501 # fmt: skip
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"""
|
|
2
|
+
NotEmptySequenceValueObject module.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from collections.abc import Sequence
|
|
6
|
+
from typing import Any, NoReturn
|
|
7
|
+
|
|
8
|
+
from value_object_pattern.decorators import validation
|
|
9
|
+
|
|
10
|
+
from .sequence_value_object import SequenceValueObject
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class NotEmptySequenceValueObject(SequenceValueObject):
|
|
14
|
+
"""
|
|
15
|
+
NotEmptySequenceValueObject is a value object that ensures the provided value is from a sequence.
|
|
16
|
+
|
|
17
|
+
Example:
|
|
18
|
+
```python
|
|
19
|
+
from value_object_pattern.models.collections import NotEmptySequenceValueObject
|
|
20
|
+
|
|
21
|
+
sequence = NotEmptySequenceValueObject(value=[1, 2, 3])
|
|
22
|
+
print(sequence)
|
|
23
|
+
# >>> [1, 2, 3]
|
|
24
|
+
```
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
@validation(order=0)
|
|
28
|
+
def _ensure_value_is_not_empty_sequence(self, value: Sequence[Any]) -> None:
|
|
29
|
+
"""
|
|
30
|
+
Ensures the value object `value` is not an empty sequence.
|
|
31
|
+
|
|
32
|
+
Args:
|
|
33
|
+
value (Sequence[Any]): The provided value.
|
|
34
|
+
|
|
35
|
+
Raises:
|
|
36
|
+
TypeError: If the `value` is an empty sequence.
|
|
37
|
+
"""
|
|
38
|
+
if not value:
|
|
39
|
+
self._raise_value_is_empty_sequence(value=value)
|
|
40
|
+
|
|
41
|
+
def _raise_value_is_empty_sequence(self, value: Any) -> NoReturn:
|
|
42
|
+
"""
|
|
43
|
+
Raises a TypeError if the value object `value` is an empty sequence.
|
|
44
|
+
|
|
45
|
+
Args:
|
|
46
|
+
value (Any): The provided value.
|
|
47
|
+
|
|
48
|
+
Raises:
|
|
49
|
+
TypeError: If the `value` is an empty sequence.
|
|
50
|
+
"""
|
|
51
|
+
raise TypeError(f'NotEmptySequenceValueObject value <<<{value}>>> must not be an empty sequence.')
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"""
|
|
2
|
+
SequenceValueObject module.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from collections.abc import Iterator, Sequence
|
|
6
|
+
from typing import Any, NoReturn
|
|
7
|
+
|
|
8
|
+
from value_object_pattern.decorators import validation
|
|
9
|
+
from value_object_pattern.models.value_object import ValueObject
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class SequenceValueObject(ValueObject[Sequence[Any]]):
|
|
13
|
+
"""
|
|
14
|
+
SequenceValueObject is a value object that ensures the provided value is from a sequence.
|
|
15
|
+
|
|
16
|
+
Example:
|
|
17
|
+
```python
|
|
18
|
+
from value_object_pattern.models.collections import SequenceValueObject
|
|
19
|
+
|
|
20
|
+
sequence = SequenceValueObject(value=[1, 2, 3])
|
|
21
|
+
print(sequence)
|
|
22
|
+
# >>> [1, 2, 3]
|
|
23
|
+
```
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
def __contains__(self, item: Any) -> bool:
|
|
27
|
+
"""
|
|
28
|
+
Returns True if the value object value contains the item, otherwise False.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
item (Any): The item to check.
|
|
32
|
+
|
|
33
|
+
Returns:
|
|
34
|
+
bool: True if the value object value contains the item, otherwise False.
|
|
35
|
+
|
|
36
|
+
Example:
|
|
37
|
+
```python
|
|
38
|
+
from value_object_pattern.models.collections import SequenceValueObject
|
|
39
|
+
|
|
40
|
+
sequence = SequenceValueObject(value=[1, 2, 3])
|
|
41
|
+
print(1 in sequence)
|
|
42
|
+
# >>> True
|
|
43
|
+
```
|
|
44
|
+
"""
|
|
45
|
+
return item in self._value
|
|
46
|
+
|
|
47
|
+
def __iter__(self) -> Iterator[Any]:
|
|
48
|
+
"""
|
|
49
|
+
Returns an iterator over the value object value.
|
|
50
|
+
|
|
51
|
+
Returns:
|
|
52
|
+
Iterator[Any]: An iterator over the value object value.
|
|
53
|
+
|
|
54
|
+
Example:
|
|
55
|
+
```python
|
|
56
|
+
from value_object_pattern.models.collections import SequenceValueObject
|
|
57
|
+
|
|
58
|
+
sequence = SequenceValueObject(value=[1, 2, 3])
|
|
59
|
+
print(list(sequence))
|
|
60
|
+
# >>> [1, 2, 3]
|
|
61
|
+
```
|
|
62
|
+
"""
|
|
63
|
+
return iter(self._value)
|
|
64
|
+
|
|
65
|
+
def __len__(self) -> int:
|
|
66
|
+
"""
|
|
67
|
+
Returns the length of the value object value.
|
|
68
|
+
|
|
69
|
+
Returns:
|
|
70
|
+
int: The length of the value object value.
|
|
71
|
+
|
|
72
|
+
Example:
|
|
73
|
+
```python
|
|
74
|
+
from value_object_pattern.models.collections import SequenceValueObject
|
|
75
|
+
|
|
76
|
+
sequence = SequenceValueObject(value=[1, 2, 3])
|
|
77
|
+
print(len(sequence))
|
|
78
|
+
# >>> 3
|
|
79
|
+
```
|
|
80
|
+
"""
|
|
81
|
+
return len(self._value)
|
|
82
|
+
|
|
83
|
+
def __reversed__(self) -> Iterator[Any]:
|
|
84
|
+
"""
|
|
85
|
+
Returns a reversed iterator over the value object value.
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
Iterator[Any]: A reversed iterator over the value object value.
|
|
89
|
+
|
|
90
|
+
Example:
|
|
91
|
+
```python
|
|
92
|
+
from value_object_pattern.models.collections import SequenceValueObject
|
|
93
|
+
|
|
94
|
+
sequence = SequenceValueObject(value=[1, 2, 3])
|
|
95
|
+
print(list(reversed(sequence)))
|
|
96
|
+
# >>> [3, 2, 1]
|
|
97
|
+
```
|
|
98
|
+
"""
|
|
99
|
+
return reversed(self._value)
|
|
100
|
+
|
|
101
|
+
@validation(order=0)
|
|
102
|
+
def _ensure_value_is_from_sequence(self, value: Sequence[Any]) -> None:
|
|
103
|
+
"""
|
|
104
|
+
Ensures the value object `value` is a sequence.
|
|
105
|
+
|
|
106
|
+
Args:
|
|
107
|
+
value (Sequence[Any]): The provided value.
|
|
108
|
+
|
|
109
|
+
Raises:
|
|
110
|
+
TypeError: If the `value` is not a sequence.
|
|
111
|
+
"""
|
|
112
|
+
if not isinstance(value, Sequence):
|
|
113
|
+
self._raise_value_is_not_sequence(value=value)
|
|
114
|
+
|
|
115
|
+
def _raise_value_is_not_sequence(self, value: Any) -> NoReturn:
|
|
116
|
+
"""
|
|
117
|
+
Raises a TypeError if the value object `value` is not a sequence.
|
|
118
|
+
|
|
119
|
+
Args:
|
|
120
|
+
value (Any): The provided value.
|
|
121
|
+
|
|
122
|
+
Raises:
|
|
123
|
+
TypeError: If the `value` is not a sequence.
|
|
124
|
+
"""
|
|
125
|
+
raise TypeError(f'SequenceValueObject value <<<{value}>>> must be a sequence. Got <<<{type(value).__name__}>>> type.') # noqa: E501 # fmt: skip
|
|
126
|
+
|
|
127
|
+
def is_empty(self) -> bool:
|
|
128
|
+
"""
|
|
129
|
+
Returns True if the value object value is empty, otherwise False.
|
|
130
|
+
|
|
131
|
+
Returns:
|
|
132
|
+
bool: True if the value object value is empty, otherwise False.
|
|
133
|
+
|
|
134
|
+
Example:
|
|
135
|
+
```python
|
|
136
|
+
from value_object_pattern.models.collections import SequenceValueObject
|
|
137
|
+
|
|
138
|
+
sequence = SequenceValueObject(value=[])
|
|
139
|
+
print(sequence.is_empty())
|
|
140
|
+
# >>> True
|
|
141
|
+
```
|
|
142
|
+
"""
|
|
143
|
+
return not self._value
|
|
@@ -165,7 +165,7 @@ class EnumerationValueObject(ValueObject[Any | E], Generic[E]): # noqa: UP046
|
|
|
165
165
|
if member.value == value:
|
|
166
166
|
return member
|
|
167
167
|
|
|
168
|
-
raise TypeError(f'EnumerationValueObject value <<<{value}>>> must be from the enumeration <<<{self.
|
|
168
|
+
raise TypeError(f'EnumerationValueObject value <<<{value}>>> must be from the enumeration <<<{self._enumeration.__name__}>>>. Got <<<{type(value).__name__}>>> type.') # noqa: E501 # fmt: skip
|
|
169
169
|
|
|
170
170
|
@validation(order=0)
|
|
171
171
|
def _ensure_value_is_from_enumeration(self, value: Any | E) -> None:
|
|
@@ -184,7 +184,7 @@ class EnumerationValueObject(ValueObject[Any | E], Generic[E]): # noqa: UP046
|
|
|
184
184
|
if any(value == member.value for member in self._enumeration):
|
|
185
185
|
return
|
|
186
186
|
|
|
187
|
-
raise TypeError(f'EnumerationValueObject value <<<{value}>>> must be from the enumeration <<<{self.
|
|
187
|
+
raise TypeError(f'EnumerationValueObject value <<<{value}>>> must be from the enumeration <<<{self._enumeration.__name__}>>>. Got <<<{type(value).__name__}>>> type.') # noqa: E501 # fmt: skip
|
|
188
188
|
|
|
189
189
|
@override
|
|
190
190
|
@property
|
|
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.7.4 → value_object_pattern-0.8.0}/value_object_pattern/models/__init__.py
RENAMED
|
File without changes
|
{value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/models/base_model.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{value_object_pattern-0.7.4 → value_object_pattern-0.8.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|