guarantee-admin-api-v0.2/Utils/ObjUtil.py

68 lines
2.5 KiB
Python
Raw Normal View History

2022-05-24 02:25:59 +08:00
class SpecObject(object):
2022-05-25 14:41:58 +08:00
"""自定义父类"""
2022-05-24 02:25:59 +08:00
fields_map = {}
2022-05-26 03:39:35 +08:00
def fields_toggle(self, **kwargs):
2022-05-24 02:25:59 +08:00
"""字典键值切换"""
_dict_ = dict()
2022-05-24 02:25:59 +08:00
default_types = ['str', 'int', 'float', 'dict', 'bool', 'tuple']
2022-05-26 03:39:35 +08:00
2022-06-15 16:48:29 +08:00
if 'fields' in kwargs:
self.__dict__ = {key: self.__dict__[key] for key in kwargs['fields']}
2022-05-24 02:25:59 +08:00
for key in self.__dict__.keys():
if key in self.fields_map.keys():
2022-05-26 03:39:35 +08:00
2022-05-24 02:25:59 +08:00
# 常规类型
if type(self.__dict__[key]).__name__ in default_types:
_dict_[self.fields_map[key]] = self.__dict__[key]
# 列表类型
elif type(self.__dict__[key]).__name__ == 'list':
if len(self.__dict__[key]) == 0:
_dict_[self.fields_map[key]] = self.__dict__[key]
elif type(self.__dict__[key][0]).__name__ in default_types:
_dict_[self.fields_map[key]] = self.__dict__[key]
else:
2022-05-26 03:39:35 +08:00
_dict_[self.fields_map[key]] = [item.fields_toggle() for item in self.__dict__[key]]
2022-05-24 02:25:59 +08:00
# 空值类型
elif self.__dict__[key] is None:
_dict_[self.fields_map[key]] = self.__dict__[key]
# 对象类型
else:
2022-05-26 03:39:35 +08:00
_dict_[self.fields_map[key]] = self.__dict__[key].fields_toggle()
2022-05-24 02:25:59 +08:00
return _dict_
2022-05-26 03:39:35 +08:00
def set_instance(self, **kwargs):
"""赋值实例"""
fields_map = dict([v, k] for k, v in self.fields_map.items())
for field in list(kwargs['data'].keys()):
self.__setattr__(fields_map[field], kwargs['data'][field])
2022-05-24 02:25:59 +08:00
@staticmethod
2022-05-26 03:39:35 +08:00
def set_specify_instance(**kwargs):
"""赋值指定实例"""
2022-05-24 02:25:59 +08:00
instance = kwargs['instance']()
fields_map = dict([v, k] for k, v in instance.fields_map.items())
for field in list(kwargs['data'].keys()):
instance.__setattr__(fields_map[field], kwargs['data'][field])
return instance
@staticmethod
2022-05-26 03:39:35 +08:00
def set_specify_instance_list(**kwargs):
2022-05-24 02:25:59 +08:00
"""实例数组设值"""
list_ = list()
for item in list(kwargs['data']):
instance = kwargs['instance']()
fields_map = dict([v, k] for k, v in instance.fields_map.items())
for field in list(item.keys()):
instance.__setattr__(fields_map[field], item[field])
list_.append(instance)
return list_