value-object-pattern 0.9.2__tar.gz → 0.9.3__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.9.2 → value_object_pattern-0.9.3}/PKG-INFO +1 -1
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/__init__.py +1 -1
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/models/base_model.py +34 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/.gitignore +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/LICENSE.md +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/README.md +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/pyproject.toml +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/decorators/__init__.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/decorators/value_object_process.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/decorators/value_object_validation.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/models/__init__.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/models/collections/__init__.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/models/collections/collection_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/models/collections/iterable_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/models/collections/not_empty_sequence_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/models/collections/sequence_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/models/enumeration_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/models/value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/py.typed +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/__init__.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/dates/__init__.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/dates/date/__init__.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/dates/date/date_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/dates/date/string_date_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/dates/datetime/__init__.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/dates/datetime/datetime_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/dates/datetime/string_datetime_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/dates/timezone/__init__.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/dates/timezone/string_timezone_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/dates/timezone/timezone_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/identifiers/__init__.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/identifiers/countries/__init__.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/identifiers/countries/spain/__init__.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/identifiers/countries/spain/dni_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/identifiers/string_uuid_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/identifiers/uuid_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/internet/__init__.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/internet/aws_cloud_region_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/internet/domain_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/internet/host_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/internet/ipv4_address_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/internet/ipv4_network_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/internet/ipv6_address_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/internet/ipv6_network_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/internet/mac_address_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/internet/port_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/internet/uri/__init__.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/internet/uri/http_https_url_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/internet/uri/http_url_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/internet/uri/https_url_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/internet/uri/url_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/__init__.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/boolean/__init__.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/boolean/boolean_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/boolean/false_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/boolean/true_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/bytes/__init__.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/bytes/bytes_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/float/__init__.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/float/float_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/float/negative_float_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/float/positive_float_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/integer/__init__.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/integer/even_integer_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/integer/integer_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/integer/negative_integer_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/integer/odd_integer_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/integer/positive_integer_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/none/__init__.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/none/none_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/none/not_none_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/string/__init__.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/string/alpha_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/string/alphanumeric_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/string/digit_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/string/lowercase_string_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/string/non_empty_string_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/string/printable_string_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/string/string_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/usables/primitives/string/trimmed_string_value_object.py +0 -0
- {value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/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.
|
|
3
|
+
Version: 0.9.3
|
|
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
|
{value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/value_object_pattern/models/base_model.py
RENAMED
|
@@ -11,6 +11,7 @@ else:
|
|
|
11
11
|
|
|
12
12
|
from abc import ABC, abstractmethod
|
|
13
13
|
from enum import Enum
|
|
14
|
+
from inspect import Parameter, _empty, signature
|
|
14
15
|
from typing import Any, NoReturn, Self
|
|
15
16
|
|
|
16
17
|
from .value_object import ValueObject
|
|
@@ -267,6 +268,7 @@ class BaseModel(ABC):
|
|
|
267
268
|
|
|
268
269
|
Raises:
|
|
269
270
|
TypeError: If the `primitives` is not a dictionary of strings.
|
|
271
|
+
ValueError: If the `primitives` does not have all the required attributes.
|
|
270
272
|
|
|
271
273
|
Returns:
|
|
272
274
|
Self: Instance of the class.
|
|
@@ -297,6 +299,14 @@ class BaseModel(ABC):
|
|
|
297
299
|
if not isinstance(primitives, dict) or not all(isinstance(key, str) for key in primitives): # type: ignore[redundant-expr]
|
|
298
300
|
cls._raise_value_is_not_dict_of_strings(value=primitives)
|
|
299
301
|
|
|
302
|
+
constructor_signature = signature(obj=cls.__init__)
|
|
303
|
+
parameters: dict[str, Parameter] = {parameter.name: parameter for parameter in constructor_signature.parameters.values() if parameter.name != 'self'} # noqa: E501 # fmt: skip
|
|
304
|
+
missing = {name for name, parameter in parameters.items() if parameter.default is _empty and name not in primitives} # noqa: E501 # fmt: skip
|
|
305
|
+
extra = set(primitives) - parameters.keys()
|
|
306
|
+
|
|
307
|
+
if missing or extra:
|
|
308
|
+
cls._raise_value_constructor_parameters_mismatch(primitives=set(primitives), missing=missing, extra=extra)
|
|
309
|
+
|
|
300
310
|
return cls(**primitives)
|
|
301
311
|
|
|
302
312
|
@classmethod
|
|
@@ -312,6 +322,30 @@ class BaseModel(ABC):
|
|
|
312
322
|
"""
|
|
313
323
|
raise TypeError(f'{cls.__name__} primitives <<<{value}>>> must be a dictionary of strings. Got <<<{type(value).__name__}>>> type.') # noqa: E501 # fmt: skip
|
|
314
324
|
|
|
325
|
+
@classmethod
|
|
326
|
+
def _raise_value_constructor_parameters_mismatch(
|
|
327
|
+
cls,
|
|
328
|
+
primitives: set[str],
|
|
329
|
+
missing: set[str],
|
|
330
|
+
extra: set[str],
|
|
331
|
+
) -> NoReturn:
|
|
332
|
+
"""
|
|
333
|
+
Raises a ValueError if the value object constructor parameters do not match the provided primitives.
|
|
334
|
+
|
|
335
|
+
Args:
|
|
336
|
+
primitives (set[str]): Set of primitives keys. Only the keys are used to not expose private attributes.
|
|
337
|
+
missing (set[str]): Set of missing parameters.
|
|
338
|
+
extra (set[str]): Set of extra parameters.
|
|
339
|
+
|
|
340
|
+
Raises:
|
|
341
|
+
ValueError: If the constructor parameters do not match the provided primitives.
|
|
342
|
+
"""
|
|
343
|
+
primitives_names = ', '.join(sorted(primitives))
|
|
344
|
+
missing_names = ', '.join(sorted(missing))
|
|
345
|
+
extra_names = ', '.join(sorted(extra))
|
|
346
|
+
|
|
347
|
+
raise ValueError(f'{cls.__name__} primitives <<<{primitives_names}>>> must contain all constructor parameters. Missing parameters: <<<{missing_names}>> and extra parameters: <<<{extra_names}>>>.') # noqa: E501 # fmt: skip
|
|
348
|
+
|
|
315
349
|
def to_primitives(self) -> dict[str, Any]:
|
|
316
350
|
"""
|
|
317
351
|
Returns the class as a dictionary of its primitives. Private attributes that start with "__" are not included,
|
|
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.9.2 → value_object_pattern-0.9.3}/value_object_pattern/models/__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
|
{value_object_pattern-0.9.2 → value_object_pattern-0.9.3}/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
|