Compare commits
22 Commits
master
...
0.0.1.post
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3e0defc574 | ||
|
|
f6e581381d | ||
|
|
981c5201a9 | ||
|
|
ab11052c8f | ||
|
|
4f5dade949 | ||
|
|
cce260bc5e | ||
|
|
915a4332ee | ||
|
|
4dca3eb9d1 | ||
|
|
e11c541139 | ||
|
|
637b50b325 | ||
|
|
f45c9cc8f3 | ||
|
|
95b0c298ce | ||
|
|
04a4cf7b36 | ||
|
|
f42a839cff | ||
|
|
7f3a4ef545 | ||
|
|
608c8a1010 | ||
|
|
210781f086 | ||
|
|
df966ccac4 | ||
|
|
29827b51bc | ||
|
|
7440731135 | ||
|
|
87682c2c9c | ||
|
|
0eef35e36f |
@@ -1,13 +1,20 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<?eclipse-pydev version="1.0"?><pydev_project>
|
<?eclipse-pydev version="1.0"?><pydev_project>
|
||||||
|
|
||||||
<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
|
|
||||||
|
<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Python311</pydev_property>
|
||||||
<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python interpreter</pydev_property>
|
|
||||||
|
|
||||||
<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
|
<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python interpreter</pydev_property>
|
||||||
<path>/${PROJECT_DIR_NAME}/src</path>
|
|
||||||
<path>/${PROJECT_DIR_NAME}</path>
|
|
||||||
</pydev_pathproperty>
|
<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
|
||||||
|
|
||||||
</pydev_project>
|
<path>/${PROJECT_DIR_NAME}/src</path>
|
||||||
|
|
||||||
|
<path>/${PROJECT_DIR_NAME}</path>
|
||||||
|
|
||||||
|
</pydev_pathproperty>
|
||||||
|
|
||||||
|
|
||||||
|
</pydev_project>
|
||||||
|
|||||||
@@ -34,7 +34,9 @@ classifiers = [
|
|||||||
]
|
]
|
||||||
dependencies = [
|
dependencies = [
|
||||||
'importlib-metadata; python_version<"3.9"',
|
'importlib-metadata; python_version<"3.9"',
|
||||||
'packaging'
|
'packaging',
|
||||||
|
'frozendict',
|
||||||
|
'typeguard'
|
||||||
]
|
]
|
||||||
dynamic = ["version"]
|
dynamic = ["version"]
|
||||||
|
|
||||||
@@ -78,7 +80,7 @@ test = ["chacha_cicd_helper"]
|
|||||||
coverage-check = ["chacha_cicd_helper"]
|
coverage-check = ["chacha_cicd_helper"]
|
||||||
complexity-check = ["chacha_cicd_helper"]
|
complexity-check = ["chacha_cicd_helper"]
|
||||||
quality-check = ["chacha_cicd_helper"]
|
quality-check = ["chacha_cicd_helper"]
|
||||||
type-check = ["chacha_cicd_helper"]
|
type-check = ["chacha_cicd_helper","types-pytz"]
|
||||||
doc-gen = ["chacha_cicd_helper"]
|
doc-gen = ["chacha_cicd_helper"]
|
||||||
|
|
||||||
# [project.scripts]
|
# [project.scripts]
|
||||||
|
|||||||
@@ -11,4 +11,24 @@ Main module __init__ file.
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
from .__metadata__ import __version__, __Summuary__, __Name__
|
from .__metadata__ import __version__, __Summuary__, __Name__
|
||||||
from .model import DABField, BaseFeature, BaseAppliance, default_values_override
|
from .model import (
|
||||||
|
DABFieldInfo,
|
||||||
|
DABField,
|
||||||
|
BaseAppliance,
|
||||||
|
BaseFeature,
|
||||||
|
DABModelException,
|
||||||
|
MultipleInheritanceForbidden,
|
||||||
|
BrokenInheritance,
|
||||||
|
ReadOnlyField,
|
||||||
|
NewFieldForbidden,
|
||||||
|
NotAnnotatedField,
|
||||||
|
ReadOnlyFieldAnnotation,
|
||||||
|
InvalidFieldValue,
|
||||||
|
InvalidFieldAnnotation,
|
||||||
|
IncompletelyAnnotatedField,
|
||||||
|
ImportForbidden,
|
||||||
|
FunctionForbidden,
|
||||||
|
FrozenDABField,
|
||||||
|
InvalidFeatureInheritance,
|
||||||
|
FeatureNotBound,
|
||||||
|
)
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
17
src/dabmodel/tools.py
Normal file
17
src/dabmodel/tools.py
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
"""library's internal tools"""
|
||||||
|
|
||||||
|
from uuid import UUID
|
||||||
|
from datetime import datetime
|
||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
|
class DABJSONEncoder(json.JSONEncoder):
|
||||||
|
"""allows to JSON encode non supported data type"""
|
||||||
|
|
||||||
|
def default(self, o):
|
||||||
|
if isinstance(o, UUID):
|
||||||
|
# if the o is uuid, we simply return the value of uuid
|
||||||
|
return o.hex
|
||||||
|
if isinstance(o, datetime):
|
||||||
|
return str(o)
|
||||||
|
return json.JSONEncoder.default(self, o)
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
from pydantic import BaseModel, SerializeAsAny
|
|
||||||
|
|
||||||
|
|
||||||
class commonbase(
|
|
||||||
BaseModel,
|
|
||||||
revalidate_instances="subclass-instances", # toogle to generate error
|
|
||||||
): ...
|
|
||||||
|
|
||||||
|
|
||||||
class basechild(commonbase):
|
|
||||||
test_val: int = 1
|
|
||||||
|
|
||||||
|
|
||||||
class derivedchild(basechild):
|
|
||||||
test_val2: int = 2
|
|
||||||
|
|
||||||
|
|
||||||
class container(commonbase):
|
|
||||||
|
|
||||||
ct_child_1: dict[str, basechild] = {}
|
|
||||||
ct_child_2: SerializeAsAny[dict[str, basechild]] = {}
|
|
||||||
ct_child_3: dict[str, SerializeAsAny[basechild]] = {}
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
test_val = container(
|
|
||||||
ct_child_1={"test1": derivedchild()},
|
|
||||||
ct_child_2={"test2": derivedchild()},
|
|
||||||
ct_child_3={"test3": derivedchild()},
|
|
||||||
)
|
|
||||||
|
|
||||||
print(test_val.model_dump_json(indent=1))
|
|
||||||
|
|
||||||
print(test_val.model_dump())
|
|
||||||
assert "test_val2" not in test_val.model_dump()["ct_child_1"]["test1"]
|
|
||||||
assert "test_val2" in test_val.model_dump()["ct_child_2"]["test2"]
|
|
||||||
assert "test_val2" in test_val.model_dump()["ct_child_3"]["test3"]
|
|
||||||
1475
test/test_model.py
1475
test/test_model.py
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user