Browse Source

JSONClass

pull/1/head
Coin de Gamma 5 years ago
parent
commit
4b23b96c6d
  1. 14
      analytics/analytics/utils/meta.py

14
analytics/analytics/utils/meta.py

@ -1,7 +1,13 @@
from inspect import signature, Parameter
from functools import wraps
from typing import Optional
from re import match
def is_field_private(field_name: str) -> Optional[str]:
m = match(r'_[^(__)]+__', field_name)
return m is not None
def inited_params(target_init):
target_params = signature(target_init).parameters.values()
if len(target_params) < 1:
@ -34,17 +40,15 @@ def JSONClass(target_class):
returns a json representation of the class
where all None - values and private fileds are skipped
"""
private_prefix = '__'
result = {
return {
k: v for k, v in self.__dict__.items()
if v is not None and not k.startswith(private_prefix)
if v is not None and not is_field_private(k)
}
return result
def from_json(json_object: dict) -> target_class:
return target_class(**json_object)
target_class.__init__ = inited_params(target_class.__init__)
# target_class.__init__ = inited_params(target_class.__init__)
target_class.to_json = to_json
target_class.from_json = from_json
return target_class

Loading…
Cancel
Save