value-object-pattern 0.9.0__tar.gz → 0.9.2__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.9.0 → value_object_pattern-0.9.2}/PKG-INFO +1 -1
  2. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/__init__.py +1 -1
  3. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/models/base_model.py +24 -3
  4. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/.gitignore +0 -0
  5. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/LICENSE.md +0 -0
  6. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/README.md +0 -0
  7. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/pyproject.toml +0 -0
  8. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/decorators/__init__.py +0 -0
  9. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/decorators/value_object_process.py +0 -0
  10. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/decorators/value_object_validation.py +0 -0
  11. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/models/__init__.py +0 -0
  12. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/models/collections/__init__.py +0 -0
  13. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/models/collections/collection_value_object.py +0 -0
  14. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/models/collections/iterable_value_object.py +0 -0
  15. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/models/collections/not_empty_sequence_value_object.py +0 -0
  16. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/models/collections/sequence_value_object.py +0 -0
  17. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/models/enumeration_value_object.py +0 -0
  18. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/models/value_object.py +0 -0
  19. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/py.typed +0 -0
  20. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/__init__.py +0 -0
  21. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/dates/__init__.py +0 -0
  22. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/dates/date/__init__.py +0 -0
  23. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/dates/date/date_value_object.py +0 -0
  24. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/dates/date/string_date_value_object.py +0 -0
  25. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/dates/datetime/__init__.py +0 -0
  26. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/dates/datetime/datetime_value_object.py +0 -0
  27. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/dates/datetime/string_datetime_value_object.py +0 -0
  28. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/dates/timezone/__init__.py +0 -0
  29. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/dates/timezone/string_timezone_value_object.py +0 -0
  30. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/dates/timezone/timezone_value_object.py +0 -0
  31. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/identifiers/__init__.py +0 -0
  32. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/identifiers/countries/__init__.py +0 -0
  33. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/identifiers/countries/spain/__init__.py +0 -0
  34. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/identifiers/countries/spain/dni_value_object.py +0 -0
  35. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/identifiers/string_uuid_value_object.py +0 -0
  36. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/identifiers/uuid_value_object.py +0 -0
  37. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/internet/__init__.py +0 -0
  38. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/internet/aws_cloud_region_value_object.py +0 -0
  39. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/internet/domain_value_object.py +0 -0
  40. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/internet/host_value_object.py +0 -0
  41. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/internet/ipv4_address_value_object.py +0 -0
  42. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/internet/ipv4_network_value_object.py +0 -0
  43. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/internet/ipv6_address_value_object.py +0 -0
  44. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/internet/ipv6_network_value_object.py +0 -0
  45. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/internet/mac_address_value_object.py +0 -0
  46. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/internet/port_value_object.py +0 -0
  47. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/internet/uri/__init__.py +0 -0
  48. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/internet/uri/http_https_url_value_object.py +0 -0
  49. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/internet/uri/http_url_value_object.py +0 -0
  50. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/internet/uri/https_url_value_object.py +0 -0
  51. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/internet/uri/url_value_object.py +0 -0
  52. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/__init__.py +0 -0
  53. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/boolean/__init__.py +0 -0
  54. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/boolean/boolean_value_object.py +0 -0
  55. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/boolean/false_value_object.py +0 -0
  56. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/boolean/true_value_object.py +0 -0
  57. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/bytes/__init__.py +0 -0
  58. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/bytes/bytes_value_object.py +0 -0
  59. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/float/__init__.py +0 -0
  60. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/float/float_value_object.py +0 -0
  61. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/float/negative_float_value_object.py +0 -0
  62. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/float/positive_float_value_object.py +0 -0
  63. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/integer/__init__.py +0 -0
  64. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/integer/even_integer_value_object.py +0 -0
  65. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/integer/integer_value_object.py +0 -0
  66. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/integer/negative_integer_value_object.py +0 -0
  67. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/integer/odd_integer_value_object.py +0 -0
  68. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/integer/positive_integer_value_object.py +0 -0
  69. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/none/__init__.py +0 -0
  70. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/none/none_value_object.py +0 -0
  71. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/none/not_none_value_object.py +0 -0
  72. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/string/__init__.py +0 -0
  73. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/string/alpha_value_object.py +0 -0
  74. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/string/alphanumeric_value_object.py +0 -0
  75. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/string/digit_value_object.py +0 -0
  76. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/string/lowercase_string_value_object.py +0 -0
  77. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/string/non_empty_string_value_object.py +0 -0
  78. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/string/printable_string_value_object.py +0 -0
  79. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/string/string_value_object.py +0 -0
  80. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/value_object_pattern/usables/primitives/string/trimmed_string_value_object.py +0 -0
  81. {value_object_pattern-0.9.0 → value_object_pattern-0.9.2}/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.9.0
3
+ Version: 0.9.2
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.9.0'
1
+ __version__ = '0.9.2'
2
2
 
3
3
  from .decorators import process, validation
4
4
  from .models import BaseModel, EnumerationValueObject, ValueObject
@@ -11,7 +11,9 @@ else:
11
11
 
12
12
  from abc import ABC, abstractmethod
13
13
  from enum import Enum
14
- from typing import Any, Self
14
+ from typing import Any, NoReturn, Self
15
+
16
+ from .value_object import ValueObject
15
17
 
16
18
 
17
19
  class BaseModel(ABC):
@@ -263,6 +265,9 @@ class BaseModel(ABC):
263
265
  Args:
264
266
  primitives (dict[str, Any]): Dictionary to create the instance from.
265
267
 
268
+ Raises:
269
+ TypeError: If the `primitives` is not a dictionary of strings.
270
+
266
271
  Returns:
267
272
  Self: Instance of the class.
268
273
 
@@ -289,8 +294,24 @@ class BaseModel(ABC):
289
294
  # >>> {'name': 'John Doe', 'birthdate': '1900-01-01T00:00:00+00:00'}
290
295
  ```
291
296
  """ # noqa: E501
297
+ if not isinstance(primitives, dict) or not all(isinstance(key, str) for key in primitives): # type: ignore[redundant-expr]
298
+ cls._raise_value_is_not_dict_of_strings(value=primitives)
299
+
292
300
  return cls(**primitives)
293
301
 
302
+ @classmethod
303
+ def _raise_value_is_not_dict_of_strings(cls, value: Any) -> NoReturn:
304
+ """
305
+ Raises a TypeError if the value object `value` is not a dictionary of strings.
306
+
307
+ Args:
308
+ value (Any): The provided value.
309
+
310
+ Raises:
311
+ TypeError: If the `value` is not a dictionary of strings.
312
+ """
313
+ raise TypeError(f'{cls.__name__} primitives <<<{value}>>> must be a dictionary of strings. Got <<<{type(value).__name__}>>> type.') # noqa: E501 # fmt: skip
314
+
294
315
  def to_primitives(self) -> dict[str, Any]:
295
316
  """
296
317
  Returns the class as a dictionary of its primitives. Private attributes that start with "__" are not included,
@@ -327,13 +348,13 @@ class BaseModel(ABC):
327
348
 
328
349
  dictionary = self._to_dict(ignore_private=True)
329
350
  for key, value in dictionary.items():
330
- if isinstance(value, BaseModel):
351
+ if isinstance(value, BaseModel) or hasattr(value, 'to_primitives'):
331
352
  value = value.to_primitives()
332
353
 
333
354
  elif isinstance(value, Enum):
334
355
  value = value.value
335
356
 
336
- elif hasattr(value, 'value'):
357
+ elif isinstance(value, ValueObject) or hasattr(value, 'value'):
337
358
  value = value.value
338
359
 
339
360
  if isinstance(value, Enum):