python-datamodel 0.10.11__tar.gz → 0.10.14__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 (101) hide show
  1. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/MANIFEST.in +2 -0
  2. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/PKG-INFO +1 -1
  3. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/abstract.py +45 -11
  4. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/converters.c +2998 -2998
  5. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/converters.html +3076 -3075
  6. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/converters.pyx +3 -2
  7. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/rs_parsers/src/lib.rs +2 -13
  8. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/version.py +1 -1
  9. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/python_datamodel.egg-info/PKG-INFO +1 -1
  10. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/CHANGELOG.md +0 -0
  11. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/CONTRIBUTING.md +0 -0
  12. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/LICENSE +0 -0
  13. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/Makefile +0 -0
  14. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/README.md +0 -0
  15. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/SECURITY.md +0 -0
  16. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/__init__.py +0 -0
  17. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/adaptive/__init__.py +0 -0
  18. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/adaptive/models.py +0 -0
  19. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/aliases/__init__.py +0 -0
  20. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/base.py +0 -0
  21. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/exceptions.c +0 -0
  22. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/exceptions.html +0 -0
  23. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/exceptions.pxd +0 -0
  24. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/exceptions.pyx +0 -0
  25. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/fields.cpp +0 -0
  26. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/fields.html +0 -0
  27. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/fields.pyx +0 -0
  28. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/functions.cpp +0 -0
  29. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/functions.html +0 -0
  30. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/functions.pxd +0 -0
  31. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/functions.pyx +0 -0
  32. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/jsonld/__init__.py +0 -0
  33. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/jsonld/models.py +0 -0
  34. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/libs/__init__.py +0 -0
  35. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/libs/mapping.c +0 -0
  36. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/libs/mapping.html +0 -0
  37. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/libs/mapping.pxd +0 -0
  38. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/libs/mapping.pyx +0 -0
  39. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/libs/mutables.py +0 -0
  40. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/models.py +0 -0
  41. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/parsers/__init__.py +0 -0
  42. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/parsers/encoders.py +0 -0
  43. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/parsers/json.cpp +0 -0
  44. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/parsers/json.html +0 -0
  45. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/parsers/json.pyx +0 -0
  46. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/profiler.py +0 -0
  47. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/py.typed +0 -0
  48. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/rs_core/Cargo.toml +0 -0
  49. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/rs_core/src/lib.rs +0 -0
  50. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/rs_parsers/Cargo.toml +0 -0
  51. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/rs_validators/Cargo.toml +0 -0
  52. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/rs_validators/src/lib.rs +0 -0
  53. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/typedefs/__init__.py +0 -0
  54. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/typedefs/singleton.c +0 -0
  55. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/typedefs/singleton.html +0 -0
  56. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/typedefs/singleton.pxd +0 -0
  57. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/typedefs/singleton.pyx +0 -0
  58. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/typedefs/types.c +0 -0
  59. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/typedefs/types.html +0 -0
  60. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/typedefs/types.pxd +0 -0
  61. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/typedefs/types.pyx +0 -0
  62. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/types.c +0 -0
  63. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/types.html +0 -0
  64. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/types.pyx +0 -0
  65. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/validation.cpp +0 -0
  66. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/validation.html +0 -0
  67. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/datamodel/validation.pyx +0 -0
  68. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/pyproject.toml +0 -0
  69. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/python_datamodel.egg-info/SOURCES.txt +0 -0
  70. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/python_datamodel.egg-info/dependency_links.txt +0 -0
  71. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/python_datamodel.egg-info/not-zip-safe +0 -0
  72. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/python_datamodel.egg-info/requires.txt +0 -0
  73. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/python_datamodel.egg-info/top_level.txt +0 -0
  74. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/setup.cfg +0 -0
  75. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/setup.py +0 -0
  76. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/tests/__init__.py +0 -0
  77. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/tests/test_aliases.py +0 -0
  78. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/tests/test_classdict.py +0 -0
  79. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/tests/test_converter.py +0 -0
  80. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/tests/test_dashboards.py +0 -0
  81. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/tests/test_data.py +0 -0
  82. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/tests/test_descriptors.py +0 -0
  83. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/tests/test_dict.py +0 -0
  84. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/tests/test_field.py +0 -0
  85. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/tests/test_inherit.py +0 -0
  86. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/tests/test_json.py +0 -0
  87. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/tests/test_method.py +0 -0
  88. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/tests/test_model.py +0 -0
  89. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/tests/test_notify.py +0 -0
  90. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/tests/test_primitives.py +0 -0
  91. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/tests/test_qsdriver.py +0 -0
  92. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/tests/test_qsmodel.py +0 -0
  93. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/tests/test_qsobject.py +0 -0
  94. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/tests/test_ticket.py +0 -0
  95. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/tests/test_tickets.py +0 -0
  96. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/tests/test_tuples.py +0 -0
  97. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/tests/test_type_user.py +0 -0
  98. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/tests/test_types.py +0 -0
  99. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/tests/test_unions.py +0 -0
  100. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/tests/test_valid_callables.py +0 -0
  101. {python_datamodel-0.10.11 → python_datamodel-0.10.14}/tests/test_validations.py +0 -0
@@ -13,6 +13,8 @@ recursive-include datamodel/rs_parsers *
13
13
 
14
14
  # Exclude tests, settings, env, examples, and bin folders
15
15
  global-exclude *.pyc
16
+ recursive-exclude datamodel/rs_parsers/target *
17
+
16
18
  prune docs
17
19
  prune settings
18
20
  prune env
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-datamodel
3
- Version: 0.10.11
3
+ Version: 0.10.14
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
@@ -16,6 +16,7 @@ from collections import OrderedDict
16
16
  from collections.abc import Callable
17
17
  import types
18
18
  from inspect import isclass
19
+ from functools import lru_cache
19
20
  from dataclasses import dataclass, InitVar
20
21
  from .parsers.json import JSONContent
21
22
  from .converters import encoders, parse_basic
@@ -155,7 +156,25 @@ class ModelMeta(type):
155
156
  __aliases__: Dict
156
157
  __primary_keys__: List
157
158
  # Class-level cache
158
- _base_class_cache = {}
159
+ _base_class_cache = OrderedDict()
160
+ _MAX_CACHE_SIZE = 512 # size limit
161
+
162
+ @classmethod
163
+ def _cache_get(cls, key):
164
+ """Get item from cache with LRU behavior."""
165
+ if key not in cls._base_class_cache:
166
+ return None
167
+ value = cls._base_class_cache.pop(key)
168
+ cls._base_class_cache[key] = value
169
+ return value
170
+
171
+ @classmethod
172
+ def _cache_set(cls, key, value):
173
+ """Set item in cache with LRU eviction."""
174
+ # If cache is full, remove oldest item (first in OrderedDict)
175
+ if len(cls._base_class_cache) >= cls._MAX_CACHE_SIZE:
176
+ cls._base_class_cache.popitem(last=False)
177
+ cls._base_class_cache[key] = value
159
178
 
160
179
  @staticmethod
161
180
  def _initialize_fields(attrs, annotations, strict):
@@ -206,7 +225,7 @@ class ModelMeta(type):
206
225
  df.type = _type
207
226
 
208
227
  # Check for primary_key in field metadata
209
- if df.metadata.get("primary_key", False):
228
+ if df.metadata.get("primary", False) or df.primary_key is True:
210
229
  primary_keys.append(field)
211
230
 
212
231
  # Cache reflection info so we DON’T need to call
@@ -292,12 +311,20 @@ class ModelMeta(type):
292
311
 
293
312
  def __new__(cls, name, bases, attrs, **kwargs): # noqa
294
313
  annotations = attrs.get('__annotations__', {})
295
- base_key = (tuple(bases), tuple(sorted(annotations.items())))
296
- strict = getattr(attrs.get('Meta', Meta), 'strict', False)
314
+ _strict_ = False
315
+ cols = OrderedDict()
316
+
317
+ # Base class constructor
318
+ base_key = (name, tuple(bases), tuple(sorted(annotations.items())))
319
+ with contextlib.suppress(TypeError, AttributeError, KeyError):
320
+ _strict_ = attrs['Meta'].strict
297
321
 
298
- if base_key in cls._base_class_cache:
322
+ # Use LRU get method
323
+ cached = cls._cache_get(base_key)
324
+ if cached:
325
+ # if base_key in cls._base_class_cache:
299
326
  # Check the Cache First:
300
- cached = cls._base_class_cache[base_key]
327
+ # cached = cls._base_class_cache[base_key]
301
328
  cols = cached['cols'].copy()
302
329
  _types = cached['types'].copy()
303
330
  _typing_args = cached['_typing_args'].copy()
@@ -305,7 +332,6 @@ class ModelMeta(type):
305
332
  primary_keys = cached['primary_keys'].copy()
306
333
  else:
307
334
  # Compute field from Bases:
308
- cols = OrderedDict()
309
335
  _types = {}
310
336
  _typing_args = {}
311
337
  aliases = {}
@@ -325,7 +351,7 @@ class ModelMeta(type):
325
351
 
326
352
  # Now initialize subclass-specific fields
327
353
  new_cols, new_types, new_typing_args, new_aliases, nw_primary_keys = cls._initialize_fields( # noqa
328
- attrs, annotations, strict
354
+ attrs, annotations, _strict_
329
355
  )
330
356
 
331
357
  # Merge new fields with inherited fields
@@ -336,13 +362,21 @@ class ModelMeta(type):
336
362
  primary_keys.extend(nw_primary_keys)
337
363
 
338
364
  # Store computed results in cache
339
- cls._base_class_cache[base_key] = {
365
+ # cls._base_class_cache[base_key] = {
366
+ # 'cols': cols.copy(),
367
+ # 'types': _types.copy(),
368
+ # '_typing_args': _typing_args.copy(),
369
+ # 'aliases': aliases.copy(),
370
+ # 'primary_keys': primary_keys.copy(),
371
+ # }
372
+ cache_entry = {
340
373
  'cols': cols.copy(),
341
374
  'types': _types.copy(),
342
375
  '_typing_args': _typing_args.copy(),
343
376
  'aliases': aliases.copy(),
344
377
  'primary_keys': primary_keys.copy(),
345
378
  }
379
+ cls._cache_set(base_key, cache_entry)
346
380
 
347
381
  _columns = cols.keys()
348
382
  cls.__slots__ = tuple(_columns)
@@ -388,7 +422,7 @@ class ModelMeta(type):
388
422
 
389
423
  # Now that fields are in attrs, decorate the class as a dataclass
390
424
  dc = dataclass(
391
- unsafe_hash=strict,
425
+ unsafe_hash=_strict_,
392
426
  repr=False,
393
427
  init=True,
394
428
  order=False,
@@ -402,7 +436,7 @@ class ModelMeta(type):
402
436
  dc.__valid__ = False
403
437
  dc.__errors__ = {}
404
438
  dc.__values__ = {}
405
- dc.__frozen__ = strict
439
+ dc.__frozen__ = _strict_
406
440
  dc.__initialised__ = False
407
441
  dc.__field_types__ = _types
408
442
  dc.__aliases__ = aliases