aboutsummaryrefslogtreecommitdiffhomepage
path: root/sec_certs/serialization
diff options
context:
space:
mode:
Diffstat (limited to 'sec_certs/serialization')
-rw-r--r--sec_certs/serialization/json.py8
1 files changed, 7 insertions, 1 deletions
diff --git a/sec_certs/serialization/json.py b/sec_certs/serialization/json.py
index 8c229f65..e8fc4976 100644
--- a/sec_certs/serialization/json.py
+++ b/sec_certs/serialization/json.py
@@ -10,15 +10,21 @@ class ComplexSerializableType:
# to achieve without using metaclasses. Not to complicate the code, we choose instance variable.
@property
def serialized_attributes(self) -> List[str]:
+ if hasattr(self, "__slots__") and self.__slots__:
+ return list(self.__slots__)
return list(self.__dict__.keys())
def to_dict(self):
+ if hasattr(self, "__slots__") and self.__slots__:
+ return {
+ key: copy.deepcopy(getattr(self, key)) for key in self.__slots__ if key in self.serialized_attributes
+ }
return {key: val for key, val in copy.deepcopy(self.__dict__).items() if key in self.serialized_attributes}
@classmethod
def from_dict(cls, dct: Dict):
try:
- return cls(*(tuple(dct.values())))
+ return cls(**dct)
except TypeError as e:
raise TypeError(f"Dict: {dct} on {cls.__mro__}") from e