python-datamodel 0.10.2__tar.gz → 0.10.4__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 (99) hide show
  1. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/PKG-INFO +1 -1
  2. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/abstract.py +33 -14
  3. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/base.py +4 -3
  4. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/converters.c +8187 -5803
  5. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/converters.html +5478 -4262
  6. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/converters.pyx +260 -122
  7. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/fields.cpp +1447 -850
  8. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/fields.html +1111 -801
  9. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/fields.pyx +50 -21
  10. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/models.py +145 -0
  11. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/rs_parsers/src/lib.rs +31 -1
  12. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/validation.cpp +596 -532
  13. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/validation.html +527 -497
  14. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/validation.pyx +30 -4
  15. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/version.py +1 -1
  16. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/python_datamodel.egg-info/PKG-INFO +1 -1
  17. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/python_datamodel.egg-info/SOURCES.txt +1 -0
  18. python_datamodel-0.10.4/tests/test_dashboards.py +274 -0
  19. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/CHANGELOG.md +0 -0
  20. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/CONTRIBUTING.md +0 -0
  21. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/LICENSE +0 -0
  22. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/MANIFEST.in +0 -0
  23. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/Makefile +0 -0
  24. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/README.md +0 -0
  25. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/SECURITY.md +0 -0
  26. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/__init__.py +0 -0
  27. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/adaptive/__init__.py +0 -0
  28. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/adaptive/models.py +0 -0
  29. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/aliases/__init__.py +0 -0
  30. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/exceptions.c +0 -0
  31. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/exceptions.html +0 -0
  32. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/exceptions.pxd +0 -0
  33. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/exceptions.pyx +0 -0
  34. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/functions.cpp +0 -0
  35. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/functions.html +0 -0
  36. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/functions.pxd +0 -0
  37. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/functions.pyx +0 -0
  38. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/jsonld/__init__.py +0 -0
  39. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/jsonld/models.py +0 -0
  40. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/libs/__init__.py +0 -0
  41. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/libs/mapping.c +0 -0
  42. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/libs/mapping.html +0 -0
  43. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/libs/mapping.pxd +0 -0
  44. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/libs/mapping.pyx +0 -0
  45. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/libs/mutables.py +0 -0
  46. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/parsers/__init__.py +0 -0
  47. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/parsers/encoders.py +0 -0
  48. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/parsers/json.cpp +0 -0
  49. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/parsers/json.html +0 -0
  50. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/parsers/json.pyx +0 -0
  51. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/profiler.py +0 -0
  52. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/py.typed +0 -0
  53. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/rs_core/Cargo.toml +0 -0
  54. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/rs_core/src/lib.rs +0 -0
  55. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/rs_parsers/Cargo.toml +0 -0
  56. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/rs_validators/Cargo.toml +0 -0
  57. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/rs_validators/src/lib.rs +0 -0
  58. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/typedefs/__init__.py +0 -0
  59. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/typedefs/singleton.c +0 -0
  60. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/typedefs/singleton.html +0 -0
  61. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/typedefs/singleton.pxd +0 -0
  62. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/typedefs/singleton.pyx +0 -0
  63. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/typedefs/types.c +0 -0
  64. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/typedefs/types.html +0 -0
  65. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/typedefs/types.pxd +0 -0
  66. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/typedefs/types.pyx +0 -0
  67. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/types.c +0 -0
  68. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/types.html +0 -0
  69. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/datamodel/types.pyx +0 -0
  70. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/pyproject.toml +0 -0
  71. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/python_datamodel.egg-info/dependency_links.txt +0 -0
  72. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/python_datamodel.egg-info/not-zip-safe +0 -0
  73. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/python_datamodel.egg-info/requires.txt +0 -0
  74. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/python_datamodel.egg-info/top_level.txt +0 -0
  75. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/setup.cfg +0 -0
  76. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/setup.py +0 -0
  77. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/tests/__init__.py +0 -0
  78. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/tests/test_aliases.py +0 -0
  79. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/tests/test_classdict.py +0 -0
  80. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/tests/test_converter.py +0 -0
  81. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/tests/test_data.py +0 -0
  82. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/tests/test_descriptors.py +0 -0
  83. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/tests/test_dict.py +0 -0
  84. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/tests/test_field.py +0 -0
  85. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/tests/test_inherit.py +0 -0
  86. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/tests/test_json.py +0 -0
  87. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/tests/test_method.py +0 -0
  88. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/tests/test_model.py +0 -0
  89. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/tests/test_primitives.py +0 -0
  90. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/tests/test_qsdriver.py +0 -0
  91. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/tests/test_qsmodel.py +0 -0
  92. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/tests/test_qsobject.py +0 -0
  93. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/tests/test_ticket.py +0 -0
  94. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/tests/test_tickets.py +0 -0
  95. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/tests/test_tuples.py +0 -0
  96. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/tests/test_type_user.py +0 -0
  97. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/tests/test_types.py +0 -0
  98. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/tests/test_valid_callables.py +0 -0
  99. {python_datamodel-0.10.2 → python_datamodel-0.10.4}/tests/test_validations.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-datamodel
3
- Version: 0.10.2
3
+ Version: 0.10.4
4
4
  Summary: simple library based on python +3.8 to use Dataclass-syntaxfor interacting with Data
5
5
  Home-page: https://github.com/phenobarbital/python-datamodel
6
6
  Author: Jesus Lara
@@ -1,6 +1,16 @@
1
1
  import contextlib
2
2
  import logging
3
- from typing import Optional, Any, List, Dict, get_args, get_origin, ClassVar
3
+ from typing import (
4
+ Optional,
5
+ Any,
6
+ List,
7
+ Dict,
8
+ Union,
9
+ get_args,
10
+ get_origin,
11
+ ClassVar,
12
+ NewType
13
+ )
4
14
  from types import GenericAlias
5
15
  from collections import OrderedDict
6
16
  from collections.abc import Callable
@@ -59,9 +69,10 @@ def _dc_method_setattr_(self, name: str, value: Any) -> None:
59
69
  This version separates the known-field assignment (with optional validation)
60
70
  from the “extra field” assignment and uses a helper to perform conversion/validation.
61
71
  """
62
- # Ensure that the __values__ dict is present.
63
- if not hasattr(self, '__values__'):
64
- object.__setattr__(self, '__values__', {})
72
+ if (name.startswith('__') and name.endswith('__')):
73
+ # or check explicitly if name in ('__values__', '__valid__', ...)
74
+ object.__setattr__(self, name, value)
75
+ return
65
76
 
66
77
  # Check whether we are assigning to a known field.
67
78
  if name in self.__fields__:
@@ -84,8 +95,6 @@ def _dc_method_setattr_(self, name: str, value: Any) -> None:
84
95
  # For extra attributes, store them as usual.
85
96
  # (Note: here we “neutralize” any callable value to None if needed.)
86
97
  object.__setattr__(self, name, None if callable(value) else value)
87
- if name == '__values__':
88
- return
89
98
 
90
99
  # If the field isn’t known yet:
91
100
  if name not in self.__fields__:
@@ -170,6 +179,10 @@ class ModelMeta(type):
170
179
  # Skip InitVar fields;
171
180
  # they should not be part of the dataclass instance
172
181
  continue
182
+ if isinstance(_type, NewType):
183
+ # Get the corresponding type of the NewType.
184
+ _type = _type.__supertype__
185
+
173
186
  origin = get_origin(_type)
174
187
  if origin is ClassVar:
175
188
  continue
@@ -218,10 +231,7 @@ class ModelMeta(type):
218
231
  df.origin = origin
219
232
  df.args = args
220
233
  df.type_args = getattr(_type, '__args__', None)
221
-
222
- df._typeinfo_ = {
223
- "default_callable": callable(_default)
224
- }
234
+ df._default_callable = callable(_default)
225
235
  # Current Field have an Encoder Function.
226
236
  custom_encoder = df.metadata.get("encoder")
227
237
  try:
@@ -245,6 +255,7 @@ class ModelMeta(type):
245
255
  _type_category = 'dataclass'
246
256
  elif _is_typing or _is_alias: # noqa
247
257
  if df.origin is not None and (df.origin is list and df.args):
258
+ df._inner_targs = df.args
248
259
  df._inner_type = args[0]
249
260
  df._inner_origin = get_origin(df._inner_type)
250
261
  df._typing_args = get_args(df._inner_type)
@@ -254,11 +265,19 @@ class ModelMeta(type):
254
265
  except (TypeError, KeyError):
255
266
  df._encoder_fn = None
256
267
  if origin is list:
257
- inner_type = args[0]
268
+ df._inner_targs = df.args
269
+ df._inner_type = args[0]
258
270
  try:
259
- df._encoder_fn = encoders[inner_type]
271
+ df._encoder_fn = encoders[df._inner_type]
260
272
  except (TypeError, KeyError):
261
273
  df._encoder_fn = None
274
+ elif origin is Union:
275
+ df._inner_targs = df.args
276
+ df._inner_type = args[0]
277
+ df._inner_is_dc = is_dataclass(df._inner_type)
278
+ df._inner_priv = is_primitive(df._inner_type)
279
+ df._inner_origin = get_origin(df._inner_type)
280
+ df._typing_args = get_args(df._inner_type)
262
281
  _type_category = 'typing'
263
282
  elif isclass(_type):
264
283
  _type_category = 'class'
@@ -341,10 +360,10 @@ class ModelMeta(type):
341
360
  # Set additional attributes:
342
361
  dc.__columns__ = cols
343
362
  dc.__fields__ = list(_columns)
344
- dc.__values__ = {}
345
363
  dc.__encoder__ = JSONContent
346
364
  dc.__valid__ = False
347
- dc.__errors__ = None
365
+ dc.__errors__ = {}
366
+ dc.__values__ = {}
348
367
  dc.__frozen__ = strict
349
368
  dc.__initialised__ = False
350
369
  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.__errors__ = errors
51
- object.__setattr__(self, "__valid__", False)
50
+ object.__setattr__(self, '__errors__', errors)
51
+ object.__setattr__(self, '__valid__', False)
52
52
  else:
53
- object.__setattr__(self, "__valid__", True)
53
+ object.__setattr__(self, '__valid__', True)
54
+ return
54
55
 
55
56
  @classmethod
56
57
  def register_parser(