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.
Files changed (81) hide show
  1. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/PKG-INFO +1 -1
  2. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/__init__.py +1 -1
  3. value_object_pattern-0.8.0/value_object_pattern/models/collections/__init__.py +11 -0
  4. value_object_pattern-0.8.0/value_object_pattern/models/collections/collection_value_object.py +107 -0
  5. value_object_pattern-0.8.0/value_object_pattern/models/collections/iterable_value_object.py +71 -0
  6. value_object_pattern-0.8.0/value_object_pattern/models/collections/not_empty_sequence_value_object.py +51 -0
  7. value_object_pattern-0.8.0/value_object_pattern/models/collections/sequence_value_object.py +143 -0
  8. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/models/enumeration_value_object.py +2 -2
  9. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/.gitignore +0 -0
  10. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/LICENSE.md +0 -0
  11. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/README.md +0 -0
  12. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/pyproject.toml +0 -0
  13. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/decorators/__init__.py +0 -0
  14. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/decorators/value_object_process.py +0 -0
  15. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/decorators/value_object_validation.py +0 -0
  16. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/models/__init__.py +0 -0
  17. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/models/base_model.py +0 -0
  18. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/models/value_object.py +0 -0
  19. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/py.typed +0 -0
  20. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/__init__.py +0 -0
  21. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/dates/__init__.py +0 -0
  22. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/dates/date/__init__.py +0 -0
  23. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/dates/date/date_value_object.py +0 -0
  24. {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
  25. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/dates/datetime/__init__.py +0 -0
  26. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/dates/datetime/datetime_value_object.py +0 -0
  27. {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
  28. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/dates/timezone/__init__.py +0 -0
  29. {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
  30. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/dates/timezone/timezone_value_object.py +0 -0
  31. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/identifiers/__init__.py +0 -0
  32. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/identifiers/countries/__init__.py +0 -0
  33. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/identifiers/countries/spain/__init__.py +0 -0
  34. {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
  35. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/identifiers/string_uuid_value_object.py +0 -0
  36. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/identifiers/uuid_value_object.py +0 -0
  37. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/internet/__init__.py +0 -0
  38. {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
  39. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/internet/domain_value_object.py +0 -0
  40. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/internet/host_value_object.py +0 -0
  41. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/internet/ipv4_address_value_object.py +0 -0
  42. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/internet/ipv4_network_value_object.py +0 -0
  43. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/internet/ipv6_address_value_object.py +0 -0
  44. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/internet/ipv6_network_value_object.py +0 -0
  45. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/internet/mac_address_value_object.py +0 -0
  46. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/internet/port_value_object.py +0 -0
  47. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/internet/uri/__init__.py +0 -0
  48. {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
  49. {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
  50. {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
  51. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/internet/uri/url_value_object.py +0 -0
  52. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/__init__.py +0 -0
  53. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/boolean/__init__.py +0 -0
  54. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/boolean/boolean_value_object.py +0 -0
  55. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/boolean/false_value_object.py +0 -0
  56. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/boolean/true_value_object.py +0 -0
  57. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/bytes/__init__.py +0 -0
  58. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/bytes/bytes_value_object.py +0 -0
  59. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/float/__init__.py +0 -0
  60. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/float/float_value_object.py +0 -0
  61. {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
  62. {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
  63. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/integer/__init__.py +0 -0
  64. {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
  65. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/integer/integer_value_object.py +0 -0
  66. {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
  67. {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
  68. {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
  69. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/none/__init__.py +0 -0
  70. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/none/none_value_object.py +0 -0
  71. {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
  72. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/string/__init__.py +0 -0
  73. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/string/alpha_value_object.py +0 -0
  74. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/string/alphanumeric_value_object.py +0 -0
  75. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/string/digit_value_object.py +0 -0
  76. {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
  77. {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
  78. {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
  79. {value_object_pattern-0.7.4 → value_object_pattern-0.8.0}/value_object_pattern/usables/primitives/string/string_value_object.py +0 -0
  80. {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
  81. {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.7.4
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
@@ -1,4 +1,4 @@
1
- __version__ = '0.7.4'
1
+ __version__ = '0.8.0'
2
2
 
3
3
  from .decorators import process, validation
4
4
  from .models import BaseModel, EnumerationValueObject, ValueObject
@@ -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._title}>>>.')
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._title}>>>.')
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