diff options
Diffstat (limited to 'sec_certs/serialization/json.py')
| -rw-r--r-- | sec_certs/serialization/json.py | 8 |
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 |
