python-datamodel 0.10.9__tar.gz → 0.10.10__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.9 → python_datamodel-0.10.10}/PKG-INFO +1 -1
  2. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/models.py +22 -9
  3. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/version.py +1 -1
  4. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/python_datamodel.egg-info/PKG-INFO +1 -1
  5. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/CHANGELOG.md +0 -0
  6. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/CONTRIBUTING.md +0 -0
  7. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/LICENSE +0 -0
  8. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/MANIFEST.in +0 -0
  9. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/Makefile +0 -0
  10. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/README.md +0 -0
  11. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/SECURITY.md +0 -0
  12. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/__init__.py +0 -0
  13. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/abstract.py +0 -0
  14. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/adaptive/__init__.py +0 -0
  15. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/adaptive/models.py +0 -0
  16. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/aliases/__init__.py +0 -0
  17. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/base.py +0 -0
  18. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/converters.c +0 -0
  19. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/converters.html +0 -0
  20. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/converters.pyx +0 -0
  21. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/exceptions.c +0 -0
  22. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/exceptions.html +0 -0
  23. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/exceptions.pxd +0 -0
  24. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/exceptions.pyx +0 -0
  25. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/fields.cpp +0 -0
  26. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/fields.html +0 -0
  27. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/fields.pyx +0 -0
  28. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/functions.cpp +0 -0
  29. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/functions.html +0 -0
  30. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/functions.pxd +0 -0
  31. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/functions.pyx +0 -0
  32. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/jsonld/__init__.py +0 -0
  33. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/jsonld/models.py +0 -0
  34. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/libs/__init__.py +0 -0
  35. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/libs/mapping.c +0 -0
  36. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/libs/mapping.html +0 -0
  37. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/libs/mapping.pxd +0 -0
  38. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/libs/mapping.pyx +0 -0
  39. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/libs/mutables.py +0 -0
  40. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/parsers/__init__.py +0 -0
  41. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/parsers/encoders.py +0 -0
  42. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/parsers/json.cpp +0 -0
  43. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/parsers/json.html +0 -0
  44. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/parsers/json.pyx +0 -0
  45. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/profiler.py +0 -0
  46. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/py.typed +0 -0
  47. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/rs_core/Cargo.toml +0 -0
  48. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/rs_core/src/lib.rs +0 -0
  49. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/rs_parsers/Cargo.toml +0 -0
  50. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/rs_parsers/src/lib.rs +0 -0
  51. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/rs_validators/Cargo.toml +0 -0
  52. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/rs_validators/src/lib.rs +0 -0
  53. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/typedefs/__init__.py +0 -0
  54. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/typedefs/singleton.c +0 -0
  55. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/typedefs/singleton.html +0 -0
  56. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/typedefs/singleton.pxd +0 -0
  57. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/typedefs/singleton.pyx +0 -0
  58. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/typedefs/types.c +0 -0
  59. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/typedefs/types.html +0 -0
  60. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/typedefs/types.pxd +0 -0
  61. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/typedefs/types.pyx +0 -0
  62. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/types.c +0 -0
  63. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/types.html +0 -0
  64. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/types.pyx +0 -0
  65. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/validation.cpp +0 -0
  66. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/validation.html +0 -0
  67. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/datamodel/validation.pyx +0 -0
  68. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/pyproject.toml +0 -0
  69. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/python_datamodel.egg-info/SOURCES.txt +0 -0
  70. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/python_datamodel.egg-info/dependency_links.txt +0 -0
  71. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/python_datamodel.egg-info/not-zip-safe +0 -0
  72. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/python_datamodel.egg-info/requires.txt +0 -0
  73. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/python_datamodel.egg-info/top_level.txt +0 -0
  74. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/setup.cfg +0 -0
  75. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/setup.py +0 -0
  76. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/tests/__init__.py +0 -0
  77. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/tests/test_aliases.py +0 -0
  78. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/tests/test_classdict.py +0 -0
  79. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/tests/test_converter.py +0 -0
  80. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/tests/test_dashboards.py +0 -0
  81. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/tests/test_data.py +0 -0
  82. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/tests/test_descriptors.py +0 -0
  83. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/tests/test_dict.py +0 -0
  84. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/tests/test_field.py +0 -0
  85. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/tests/test_inherit.py +0 -0
  86. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/tests/test_json.py +0 -0
  87. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/tests/test_method.py +0 -0
  88. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/tests/test_model.py +0 -0
  89. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/tests/test_notify.py +0 -0
  90. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/tests/test_primitives.py +0 -0
  91. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/tests/test_qsdriver.py +0 -0
  92. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/tests/test_qsmodel.py +0 -0
  93. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/tests/test_qsobject.py +0 -0
  94. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/tests/test_ticket.py +0 -0
  95. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/tests/test_tickets.py +0 -0
  96. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/tests/test_tuples.py +0 -0
  97. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/tests/test_type_user.py +0 -0
  98. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/tests/test_types.py +0 -0
  99. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/tests/test_unions.py +0 -0
  100. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/tests/test_valid_callables.py +0 -0
  101. {python_datamodel-0.10.9 → python_datamodel-0.10.10}/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.9
3
+ Version: 0.10.10
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
@@ -230,15 +230,18 @@ class ModelMixin:
230
230
  ) -> dict[str, Any]:
231
231
  """Recursively converts any BaseModel instances to their primary key value."""
232
232
  out = {}
233
- fields = self.columns()
234
- for name, field in fields.items():
233
+ _fields = self.columns()
234
+ for name, field in _fields.items():
235
235
  # datatype = field.type
236
236
  value = getattr(self, name)
237
237
  if value is None and remove_nulls:
238
238
  continue
239
239
  if isinstance(value, ModelMixin):
240
240
  if as_values:
241
- out[name] = getattr(value, name)
241
+ try:
242
+ out[name] = getattr(value, name)
243
+ except AttributeError:
244
+ out[name] = value.to_json()
242
245
  else:
243
246
  out[name] = value.__collapse_as_values__(
244
247
  remove_nulls=remove_nulls,
@@ -247,11 +250,21 @@ class ModelMixin:
247
250
  )
248
251
  # if it's a list, might contain submodels or scalars
249
252
  elif isinstance(value, list):
253
+ if field.origin is list and field.args:
254
+ submodel_class = field.args[0] # The type inside the list
255
+ if issubclass(
256
+ submodel_class, ModelMixin
257
+ ) and not hasattr(submodel_class, name):
258
+ out[name] = json_encoder(value)
259
+ continue
250
260
  items_out = []
251
261
  for item in value:
252
262
  if isinstance(item, ModelMixin):
253
263
  if as_values:
254
- items_out.append(getattr(item, name))
264
+ try:
265
+ items_out.append(getattr(item, name))
266
+ except AttributeError:
267
+ items_out.append(item.to_json())
255
268
  else:
256
269
  items_out.append(item.__collapse_as_values__(
257
270
  remove_nulls=remove_nulls,
@@ -391,7 +404,7 @@ class ModelMixin:
391
404
  @classmethod
392
405
  def _build_fields(cls, title: str, locale: Any = None) -> dict:
393
406
  """Build the fields part of the schema."""
394
- fields = {}
407
+ _fields = {}
395
408
  required = []
396
409
  defs = {}
397
410
 
@@ -400,12 +413,12 @@ class ModelMixin:
400
413
  field_schema, field_defs, field_required = cls._process_field_schema(
401
414
  name, field, locale, title
402
415
  )
403
- fields[name] = field_schema
416
+ _fields[name] = field_schema
404
417
  if field_required:
405
418
  required.append(name)
406
419
  if field_defs:
407
420
  defs[name] = field_defs.get('schema')
408
- return fields, required, defs
421
+ return _fields, required, defs
409
422
 
410
423
  @classmethod
411
424
  def _extract_field_basics(cls, name: str, field: Field, title: str):
@@ -623,7 +636,7 @@ class ModelMixin:
623
636
  endpoint_kwargs = {"endpoint": endpoint} if endpoint else {}
624
637
 
625
638
  # Build the fields part of the schema.
626
- fields, required, defs = cls._build_fields(title, locale)
639
+ _fields, required, defs = cls._build_fields(title, locale)
627
640
 
628
641
  base_schema = {
629
642
  "$schema": "https://json-schema.org/draft/2020-12/schema",
@@ -636,7 +649,7 @@ class ModelMixin:
636
649
  "type": "object",
637
650
  "table": table,
638
651
  "schema": schema,
639
- "properties": fields,
652
+ "properties": _fields,
640
653
  "required": required,
641
654
  "display_name": display_name,
642
655
  }
@@ -6,7 +6,7 @@ __description__ = (
6
6
  'simple library based on python +3.8 to use Dataclass-syntax'
7
7
  'for interacting with Data'
8
8
  )
9
- __version__ = '0.10.9'
9
+ __version__ = '0.10.10'
10
10
  __copyright__ = 'Copyright (c) 2020-2024 Jesus Lara'
11
11
  __author__ = 'Jesus Lara'
12
12
  __author_email__ = 'jesuslarag@gmail.com'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-datamodel
3
- Version: 0.10.9
3
+ Version: 0.10.10
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