python-datamodel 0.10.2__tar.gz → 0.10.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.
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/PKG-INFO +1 -1
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/abstract.py +27 -10
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/base.py +4 -3
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/converters.c +6062 -4591
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/converters.html +4454 -3505
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/converters.pyx +145 -84
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/fields.cpp +559 -519
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/fields.html +529 -523
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/fields.pyx +4 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/rs_parsers/src/lib.rs +31 -1
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/validation.cpp +596 -532
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/validation.html +527 -497
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/validation.pyx +30 -4
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/version.py +1 -1
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/python_datamodel.egg-info/PKG-INFO +1 -1
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/python_datamodel.egg-info/SOURCES.txt +1 -0
- python_datamodel-0.10.3/tests/test_dashboards.py +274 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/CHANGELOG.md +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/CONTRIBUTING.md +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/LICENSE +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/MANIFEST.in +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/Makefile +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/README.md +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/SECURITY.md +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/__init__.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/adaptive/__init__.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/adaptive/models.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/aliases/__init__.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/exceptions.c +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/exceptions.html +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/exceptions.pxd +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/exceptions.pyx +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/functions.cpp +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/functions.html +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/functions.pxd +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/functions.pyx +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/jsonld/__init__.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/jsonld/models.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/libs/__init__.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/libs/mapping.c +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/libs/mapping.html +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/libs/mapping.pxd +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/libs/mapping.pyx +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/libs/mutables.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/models.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/parsers/__init__.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/parsers/encoders.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/parsers/json.cpp +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/parsers/json.html +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/parsers/json.pyx +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/profiler.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/py.typed +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/rs_core/Cargo.toml +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/rs_core/src/lib.rs +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/rs_parsers/Cargo.toml +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/rs_validators/Cargo.toml +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/rs_validators/src/lib.rs +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/typedefs/__init__.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/typedefs/singleton.c +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/typedefs/singleton.html +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/typedefs/singleton.pxd +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/typedefs/singleton.pyx +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/typedefs/types.c +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/typedefs/types.html +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/typedefs/types.pxd +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/typedefs/types.pyx +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/types.c +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/types.html +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/datamodel/types.pyx +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/pyproject.toml +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/python_datamodel.egg-info/dependency_links.txt +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/python_datamodel.egg-info/not-zip-safe +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/python_datamodel.egg-info/requires.txt +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/python_datamodel.egg-info/top_level.txt +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/setup.cfg +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/setup.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/tests/__init__.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/tests/test_aliases.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/tests/test_classdict.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/tests/test_converter.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/tests/test_data.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/tests/test_descriptors.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/tests/test_dict.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/tests/test_field.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/tests/test_inherit.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/tests/test_json.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/tests/test_method.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/tests/test_model.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/tests/test_primitives.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/tests/test_qsdriver.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/tests/test_qsmodel.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/tests/test_qsobject.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/tests/test_ticket.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/tests/test_tickets.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/tests/test_tuples.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/tests/test_type_user.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/tests/test_types.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/tests/test_valid_callables.py +0 -0
- {python_datamodel-0.10.2 → python_datamodel-0.10.3}/tests/test_validations.py +0 -0
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import contextlib
|
|
2
2
|
import logging
|
|
3
|
-
from typing import
|
|
3
|
+
from typing import (
|
|
4
|
+
Optional,
|
|
5
|
+
Any,
|
|
6
|
+
List,
|
|
7
|
+
Dict,
|
|
8
|
+
Union,
|
|
9
|
+
get_args,
|
|
10
|
+
get_origin,
|
|
11
|
+
ClassVar
|
|
12
|
+
)
|
|
4
13
|
from types import GenericAlias
|
|
5
14
|
from collections import OrderedDict
|
|
6
15
|
from collections.abc import Callable
|
|
@@ -59,9 +68,10 @@ def _dc_method_setattr_(self, name: str, value: Any) -> None:
|
|
|
59
68
|
This version separates the known-field assignment (with optional validation)
|
|
60
69
|
from the “extra field” assignment and uses a helper to perform conversion/validation.
|
|
61
70
|
"""
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
object.__setattr__(self,
|
|
71
|
+
if (name.startswith('__') and name.endswith('__')):
|
|
72
|
+
# or check explicitly if name in ('__values__', '__valid__', ...)
|
|
73
|
+
object.__setattr__(self, name, value)
|
|
74
|
+
return
|
|
65
75
|
|
|
66
76
|
# Check whether we are assigning to a known field.
|
|
67
77
|
if name in self.__fields__:
|
|
@@ -84,8 +94,6 @@ def _dc_method_setattr_(self, name: str, value: Any) -> None:
|
|
|
84
94
|
# For extra attributes, store them as usual.
|
|
85
95
|
# (Note: here we “neutralize” any callable value to None if needed.)
|
|
86
96
|
object.__setattr__(self, name, None if callable(value) else value)
|
|
87
|
-
if name == '__values__':
|
|
88
|
-
return
|
|
89
97
|
|
|
90
98
|
# If the field isn’t known yet:
|
|
91
99
|
if name not in self.__fields__:
|
|
@@ -245,6 +253,7 @@ class ModelMeta(type):
|
|
|
245
253
|
_type_category = 'dataclass'
|
|
246
254
|
elif _is_typing or _is_alias: # noqa
|
|
247
255
|
if df.origin is not None and (df.origin is list and df.args):
|
|
256
|
+
df._inner_targs = df.args
|
|
248
257
|
df._inner_type = args[0]
|
|
249
258
|
df._inner_origin = get_origin(df._inner_type)
|
|
250
259
|
df._typing_args = get_args(df._inner_type)
|
|
@@ -254,11 +263,19 @@ class ModelMeta(type):
|
|
|
254
263
|
except (TypeError, KeyError):
|
|
255
264
|
df._encoder_fn = None
|
|
256
265
|
if origin is list:
|
|
257
|
-
|
|
266
|
+
df._inner_targs = df.args
|
|
267
|
+
df._inner_type = args[0]
|
|
258
268
|
try:
|
|
259
|
-
df._encoder_fn = encoders[
|
|
269
|
+
df._encoder_fn = encoders[df._inner_type]
|
|
260
270
|
except (TypeError, KeyError):
|
|
261
271
|
df._encoder_fn = None
|
|
272
|
+
elif origin is Union:
|
|
273
|
+
df._inner_targs = df.args
|
|
274
|
+
df._inner_type = args[0]
|
|
275
|
+
df._inner_is_dc = is_dataclass(df._inner_type)
|
|
276
|
+
df._inner_priv = is_primitive(df._inner_type)
|
|
277
|
+
df._inner_origin = get_origin(df._inner_type)
|
|
278
|
+
df._typing_args = get_args(df._inner_type)
|
|
262
279
|
_type_category = 'typing'
|
|
263
280
|
elif isclass(_type):
|
|
264
281
|
_type_category = 'class'
|
|
@@ -341,10 +358,10 @@ class ModelMeta(type):
|
|
|
341
358
|
# Set additional attributes:
|
|
342
359
|
dc.__columns__ = cols
|
|
343
360
|
dc.__fields__ = list(_columns)
|
|
344
|
-
dc.__values__ = {}
|
|
345
361
|
dc.__encoder__ = JSONContent
|
|
346
362
|
dc.__valid__ = False
|
|
347
|
-
dc.__errors__ =
|
|
363
|
+
dc.__errors__ = {}
|
|
364
|
+
dc.__values__ = {}
|
|
348
365
|
dc.__frozen__ = strict
|
|
349
366
|
dc.__initialised__ = False
|
|
350
367
|
dc.__field_types__ = _types
|
|
@@ -47,10 +47,11 @@ class BaseModel(ModelMixin, metaclass=ModelMeta):
|
|
|
47
47
|
Hint: please check the "payload" attribute in the exception.""",
|
|
48
48
|
payload=errors
|
|
49
49
|
)
|
|
50
|
-
self
|
|
51
|
-
object.__setattr__(self,
|
|
50
|
+
object.__setattr__(self, '__errors__', errors)
|
|
51
|
+
object.__setattr__(self, '__valid__', False)
|
|
52
52
|
else:
|
|
53
|
-
object.__setattr__(self,
|
|
53
|
+
object.__setattr__(self, '__valid__', True)
|
|
54
|
+
return
|
|
54
55
|
|
|
55
56
|
@classmethod
|
|
56
57
|
def register_parser(
|