python-datamodel 0.10.1__cp313-cp313-win32.whl

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 (78) hide show
  1. datamodel/__init__.py +13 -0
  2. datamodel/abstract.py +383 -0
  3. datamodel/adaptive/__init__.py +0 -0
  4. datamodel/adaptive/models.py +598 -0
  5. datamodel/aliases/__init__.py +26 -0
  6. datamodel/base.py +180 -0
  7. datamodel/converters.c +43471 -0
  8. datamodel/converters.cp313-win32.pyd +0 -0
  9. datamodel/converters.html +17387 -0
  10. datamodel/converters.pyx +1489 -0
  11. datamodel/exceptions.c +13455 -0
  12. datamodel/exceptions.cp313-win32.pyd +0 -0
  13. datamodel/exceptions.html +1261 -0
  14. datamodel/exceptions.pxd +13 -0
  15. datamodel/exceptions.pyx +50 -0
  16. datamodel/fields.cp313-win32.pyd +0 -0
  17. datamodel/fields.cpp +17401 -0
  18. datamodel/fields.html +3912 -0
  19. datamodel/fields.pyx +309 -0
  20. datamodel/functions.cp313-win32.pyd +0 -0
  21. datamodel/functions.cpp +9068 -0
  22. datamodel/functions.html +1766 -0
  23. datamodel/functions.pxd +9 -0
  24. datamodel/functions.pyx +82 -0
  25. datamodel/jsonld/__init__.py +45 -0
  26. datamodel/jsonld/models.py +500 -0
  27. datamodel/libs/__init__.py +1 -0
  28. datamodel/libs/mapping.c +15067 -0
  29. datamodel/libs/mapping.cp313-win32.pyd +0 -0
  30. datamodel/libs/mapping.html +2618 -0
  31. datamodel/libs/mapping.pxd +11 -0
  32. datamodel/libs/mapping.pyx +135 -0
  33. datamodel/libs/mutables.py +127 -0
  34. datamodel/models.py +814 -0
  35. datamodel/parsers/__init__.py +0 -0
  36. datamodel/parsers/encoders.py +15 -0
  37. datamodel/parsers/json.cp313-win32.pyd +0 -0
  38. datamodel/parsers/json.cpp +17004 -0
  39. datamodel/parsers/json.html +3365 -0
  40. datamodel/parsers/json.pyx +250 -0
  41. datamodel/profiler.py +21 -0
  42. datamodel/py.typed +0 -0
  43. datamodel/rs_core/Cargo.toml +17 -0
  44. datamodel/rs_core/src/lib.rs +294 -0
  45. datamodel/rs_parsers/Cargo.toml +22 -0
  46. datamodel/rs_parsers/src/lib.rs +571 -0
  47. datamodel/rs_parsers.cp313-win32.pyd +0 -0
  48. datamodel/rs_validators/Cargo.toml +17 -0
  49. datamodel/rs_validators/src/lib.rs +0 -0
  50. datamodel/typedefs/__init__.py +9 -0
  51. datamodel/typedefs/singleton.c +9169 -0
  52. datamodel/typedefs/singleton.cp313-win32.pyd +0 -0
  53. datamodel/typedefs/singleton.html +629 -0
  54. datamodel/typedefs/singleton.pxd +9 -0
  55. datamodel/typedefs/singleton.pyx +24 -0
  56. datamodel/typedefs/types.c +11716 -0
  57. datamodel/typedefs/types.cp313-win32.pyd +0 -0
  58. datamodel/typedefs/types.html +732 -0
  59. datamodel/typedefs/types.pxd +11 -0
  60. datamodel/typedefs/types.pyx +39 -0
  61. datamodel/types.c +7165 -0
  62. datamodel/types.cp313-win32.pyd +0 -0
  63. datamodel/types.html +716 -0
  64. datamodel/types.pyx +100 -0
  65. datamodel/validation.cp313-win32.pyd +0 -0
  66. datamodel/validation.cpp +17085 -0
  67. datamodel/validation.html +4769 -0
  68. datamodel/validation.pyx +315 -0
  69. datamodel/version.py +13 -0
  70. examples/nn/examples.py +311 -0
  71. examples/nn/stores.py +151 -0
  72. examples/tests/sp_types.py +294 -0
  73. examples/tests/speed_dates.py +26 -0
  74. python_datamodel-0.10.1.dist-info/LICENSE +29 -0
  75. python_datamodel-0.10.1.dist-info/METADATA +320 -0
  76. python_datamodel-0.10.1.dist-info/RECORD +78 -0
  77. python_datamodel-0.10.1.dist-info/WHEEL +5 -0
  78. python_datamodel-0.10.1.dist-info/top_level.txt +7 -0
@@ -0,0 +1,11 @@
1
+ # cython: language_level=3, embedsignature=True, boundscheck=False, wraparound=False, initializedcheck=False
2
+ # Copyright (C) 2018-present Jesus Lara
3
+
4
+ cdef class ClassDictConfig:
5
+ pass
6
+
7
+ cdef class ClassDict(dict):
8
+ cdef dict mapping
9
+ cdef list _columns
10
+ cdef object default
11
+ cdef ClassDictConfig config
@@ -0,0 +1,135 @@
1
+ # cython: language_level=3, embedsignature=True, boundscheck=False, wraparound=False, initializedcheck=False
2
+ # Copyright (C) 2018-present Jesus Lara
3
+ #
4
+ import sys
5
+ from typing import Optional, Union, Any
6
+ from collections.abc import Iterator, Iterable
7
+ if sys.version_info < (3, 10):
8
+ from typing_extensions import ParamSpec, TypedDict, get_type_hints
9
+ else:
10
+ from typing import ParamSpec, TypedDict
11
+
12
+
13
+ P = ParamSpec("P")
14
+
15
+
16
+ cdef class ClassDict(dict):
17
+ """
18
+ ClassDict is a dictionary that allows to access keys as attributes
19
+ """
20
+ def __cinit__(
21
+ self,
22
+ *args: P.args,
23
+ data: Optional[dict]=None,
24
+ default: Optional[Union[list,dict]]=None,
25
+ **kwargs: P.kwargs
26
+ ):
27
+ self.mapping = {}
28
+ self._columns = []
29
+ self.default = default
30
+ self.mapping.update(*args, **kwargs)
31
+ self.update(data, **kwargs)
32
+
33
+ def update(self, items: Optional[dict]=None, **kwargs: P.kwargs):
34
+ if isinstance(items, dict):
35
+ for key, value in items.items():
36
+ self.mapping[key] = value
37
+ else:
38
+ for k, v in kwargs.items():
39
+ attr = getattr(self, k, None)
40
+ if fn := getattr(attr, 'default', None):
41
+ try:
42
+ if callable(fn):
43
+ v = fn(v)
44
+ else:
45
+ v = fn
46
+ setattr(self, k, v)
47
+ except (TypeError, KeyError):
48
+ pass
49
+ self.mapping[k] = v
50
+ self._columns = list(self.mapping.keys())
51
+
52
+ def __missing__(self, key):
53
+ return self.default
54
+
55
+ def __len__(self):
56
+ return len(self.mapping)
57
+
58
+ def __str__(self):
59
+ return f"<{type(self).__name__}({self.mapping})>"
60
+
61
+ def __repr__(self):
62
+ return f"<{type(self).__name__}({self.mapping})>"
63
+
64
+ def __contains__(self, key):
65
+ return key in self._columns
66
+
67
+ def get(self, key, default=None):
68
+ return self.mapping.get(key, default)
69
+
70
+ def __delitem__(self, key):
71
+ if key in self.mapping:
72
+ self.mapping.pop(key, None)
73
+ self._columns.remove(key)
74
+ if hasattr(self, key):
75
+ setattr(self, key, None)
76
+ else:
77
+ raise KeyError(key)
78
+
79
+ def __setitem__(self, key, value):
80
+ self.mapping[key] = value
81
+ if key not in self._columns:
82
+ self._columns.append(key)
83
+
84
+ def __getitem__(self, key):
85
+ if isinstance(key, list):
86
+ return [self.mapping[k] for k in key]
87
+ try:
88
+ try:
89
+ return self.mapping[key]
90
+ except KeyError:
91
+ return None
92
+ except KeyError:
93
+ return self.default
94
+
95
+ def keys(self):
96
+ return self.mapping.keys()
97
+
98
+ def values(self):
99
+ return self.mapping.values()
100
+
101
+ def items(self):
102
+ return self.mapping.items()
103
+
104
+ def pop(self, key, default=None):
105
+ try:
106
+ value = self[key]
107
+ del self[key]
108
+ return value
109
+ except KeyError:
110
+ return default
111
+
112
+ def clear(self):
113
+ self.mapping.clear()
114
+ self._columns = []
115
+
116
+ def __iter__(self) -> Iterator:
117
+ for value in self.mapping:
118
+ yield value
119
+
120
+ def __getattr__(self, attr: str) -> Any:
121
+ """
122
+ Attributes for dict keys
123
+ """
124
+ if attr in self.mapping:
125
+ return self.mapping[attr]
126
+ elif attr in self._columns:
127
+ return self.mapping[attr]
128
+
129
+ raise KeyError(
130
+ f"User Error: invalid field name {attr} on {self.mapping!r}"
131
+ )
132
+
133
+ def __delattr__(self, name: str) -> None:
134
+ if name in self.mapping:
135
+ self.pop(name, None)
@@ -0,0 +1,127 @@
1
+ import sys
2
+ from collections.abc import MutableMapping, Iterator, Iterable
3
+ from typing import Any, Optional, Union, Literal
4
+ from typing_extensions import TypedDict
5
+ from datamodel import Field
6
+
7
+ if sys.version_info < (3, 10):
8
+ from typing_extensions import ParamSpec
9
+ else:
10
+ from typing import ParamSpec
11
+ P = ParamSpec("P")
12
+
13
+
14
+ class ClassDictConfig(TypedDict, total=False):
15
+ """
16
+ Configuration dictionary for ClassDict-based classes.
17
+ `total=False` means all keys are optional.
18
+ """
19
+ extra: Literal['allow', 'ignore', 'forbid']
20
+ validate_assignment: bool
21
+ parse_values: bool
22
+
23
+
24
+ class ClassDict(dict, MutableMapping):
25
+ """ClassDict.
26
+
27
+ Mapping that works like both a simple Dictionary or a Mutable Object.
28
+ """
29
+ def __init__(self, *args: P.args, data: Optional[Union[tuple, dict]] = None, default: Any = None, **kwargs: P.kwargs): # noqa
30
+ self._columns: list = []
31
+ self.mapping = {}
32
+ self.default = default
33
+ self.mapping.update(*args, **kwargs)
34
+ self.update(data, **kwargs)
35
+
36
+ def update(self, items: Optional[Iterable] = None, **kwargs): # pylint: disable=W0221 # noqa
37
+ if isinstance(items, dict):
38
+ for key, value in items.items():
39
+ # self.mapping[key] = value
40
+ self.mapping[key] = value
41
+ else:
42
+ for k, v in kwargs.items():
43
+ attr = getattr(self, k)
44
+ if isinstance(attr, Field):
45
+ try:
46
+ fn = attr.default
47
+ if callable(fn):
48
+ v = fn(v)
49
+ setattr(self, k, v)
50
+ else:
51
+ setattr(self, k, fn)
52
+ except KeyError:
53
+ pass
54
+ # self.mapping[k] = v
55
+ self.mapping[k] = v
56
+ self._columns = list(self.mapping.keys())
57
+
58
+ def __missing__(self, key):
59
+ return self.default
60
+
61
+ def items(self) -> zip: # type: ignore
62
+ return zip(self._columns, self.mapping)
63
+
64
+ def keys(self) -> list:
65
+ return self._columns
66
+
67
+ def set(self, key, value) -> None:
68
+ self.mapping[key] = value
69
+ if key not in self._columns:
70
+ self._columns.append(key)
71
+
72
+ ### Section: Simple magic methods
73
+ def __len__(self) -> int:
74
+ return len(self.mapping)
75
+
76
+ def __str__(self) -> str:
77
+ return f"<{type(self).__name__}({self.mapping})>"
78
+
79
+ def __repr__(self) -> str:
80
+ return f"<{type(self).__name__}({self.mapping})>"
81
+
82
+ def __contains__(self, key: str) -> bool:
83
+ return key in self._columns
84
+
85
+ def __delitem__(self, key) -> None:
86
+ value = self[key]
87
+ del self.mapping[key]
88
+ self._columns.remove(key)
89
+ self.pop(value, None)
90
+
91
+ def __delattr__(self, name: str) -> None:
92
+ value = self[name]
93
+ del self.mapping[name]
94
+ self._columns.remove(name)
95
+ self.pop(value, None)
96
+
97
+ def __setitem__(self, key, value):
98
+ self.mapping[key] = value
99
+ if key not in self._columns:
100
+ self._columns.append(key)
101
+
102
+ def __getitem__(self, key: Union[str, int]) -> Any:
103
+ """
104
+ Sequence-like operators
105
+ """
106
+ try:
107
+ return self.mapping[key]
108
+ except (KeyError, TypeError):
109
+ return None
110
+
111
+ def __getattr__(self, attr: str) -> Any:
112
+ """
113
+ Attributes for dict keys
114
+ """
115
+ try:
116
+ return self.__getitem__(attr)
117
+ except KeyError as ex:
118
+ raise KeyError(
119
+ f"User Error: invalid field name {attr} on {self.mapping!r}"
120
+ ) from ex
121
+ except TypeError as ex:
122
+ raise TypeError(
123
+ f"User Error: invalid attribute value on {self.mapping!r} for {attr}"
124
+ ) from ex
125
+
126
+ def __iter__(self) -> Iterator:
127
+ yield from self.mapping