Aestate
Manage.py
Go to the documentation of this file.
1 from aestate.ajson import aj
2 from aestate.exception import FieldNotExist
3 from aestate.util import others
4 from aestate.util.Log import ALog
5 from aestate.work.Cache import PojoManage
6 
7 from aestate.work.Serialize import QuerySet
8 from aestate.work.orm import AOrm
9 from aestate.dbs._mysql import tag
10 from aestate.work import repository
11 from aestate.work import Banner
12 
13 
15  def __init__(self, config_obj=None, log_conf=None, close_log=False, serializer=QuerySet, **kwargs):
16  """
17  初始化ORM框架
18  :param config_obj:配置类
19  :param log_conf:日志配置类
20  :param close_log:是否关闭日志显示功能
21  :param serializer:自定义序列化器,默认使用aestate.work.Serialize.QuerySet
22  """
23  # aestate logo
24  Banner.show()
25 
26  if not hasattr(self, '__table_name__'):
27  self.__table_name__ = self.__class__.__name__
28  if not hasattr(self, '__table_msg__'):
29  self.__table_msg__ = 'The current object has no description'
30 
31  self._fields = {}
32  # 在这里将config_obj实例化
33  self.serializer = serializer
34  # 忽略的字段
35  self.__ignore_field__ = {}
36  # 添加的字段
37  self.__append_field__ = {}
38  # bug
39  self.init_fields()
40  for key, value in kwargs.items():
41  self.__setattr__(key, value)
42  super(Pojo, self).__init__(config_obj=config_obj,
43  instance=self,
44  log_conf=log_conf,
45  close_log=close_log,
46  serializer=serializer,
47  **kwargs)
48 
49  def init_fields(self):
50  """
51  初始化字段
52  最后生成的字段名`_fields`
53  """
54  fields = self.__dict__
55  fds = {}
56  for key, value in fields.items():
57  # 取出这个值引用对象的父类
58  try:
59  t_v = value.__class__.__base__
60  if t_v in [tag.Template, tag.baseTag]:
61  if not hasattr(self, key) or getattr(self, key) is None or t_v in [tag.Template, tag.baseTag]:
62  setattr(self, key, value.default)
63  fds[key] = value
64  fds[key].name = key
65  except SyntaxError:
66  continue
67 
68  self._fields = fds
69 
70  def to_json(self, bf=False):
71  """
72  将此叶子节点转json处理
73  """
74  # 从内存地址获取限定对象
75  # 将需要的和不需要的合并
76 
77  # 得到当前所有的字段
78  all_fields = self.getFields()
79  # 合并字段
80  all_fields = dict(all_fields, **self.__append_field__)
81  # 删除忽略字段
82  for i in self.__ignore_field__.keys():
83  if i in all_fields.keys():
84  del all_fields[i]
85 
86  new_dict = {}
87  for key in all_fields.keys():
88  # 当字段为未填充状态时,默认定义为空
89  new_dict[key] = getattr(self, key) if hasattr(self, key) else all_fields[
90  key] if key in all_fields.keys() else None
91  return aj.parse(new_dict, bf=bf)
92 
93  def to_dict(self):
94  """
95  将数据集转字典格式
96  """
97  return aj.load(self.to_json())
98 
99  def getFields(self) -> dict:
100  """
101  获取当前类所需要序列化的字段
102  """
103  return self._fields
104 
105  def add_field(self, key, default_value=None):
106  """
107  添加一个不会被解析忽略的字段
108  """
109  if key not in self.__append_field__.keys():
110  self.__append_field__[key] = default_value
111 
112  def remove_field(self, key):
113  """
114  添加一个会被解析忽略的字段
115  """
116  self.__ignore_field__[key] = None
117 
118  @property
119  def orm(self):
120  """
121  转ORM框架
122  """
123  return AOrm(repository=self)
124 
125  def format(self, key, name):
126  """
127  为指定字段的值设置别名
128  """
129  if 'ig' in self.getFields().keys():
130  self._fields['ig'].append({
131  key: name
132  })
133  else:
134  self._fields['ig'] = []
135  self.format(key, name)
136 
137  def get_tb_name(self):
138  """
139  获取当前pojo的表名
140  """
141  return self.__table_name__
142 
143  def get_database(self):
144  """
145  获取当前pojo的数据库连接对象
146  """
147  if hasattr(self, 'config_obj'):
148  return self.config_obj
149  ALog.log_error(
150  msg='The pojo object has not been initialized yet, and no configuration items have been obtained',
151  obj=FieldNotExist, LogObject=self.log_obj, raise_exception=True)
152 
153  def __new__(cls, *args, **kwargs):
154  return PojoManage.get(cls, *args, **kwargs)
155 
156 
157 class model(Pojo):
158  """
159  这个只是为了满足django用户的习惯
160  """
161  pass
aestate.work.Manage.Pojo.orm
def orm(self)
Definition: Manage.py:119
aestate.work.Manage.Pojo.get_database
def get_database(self)
Definition: Manage.py:143
aestate.work.Manage.Pojo.to_json
def to_json(self, bf=False)
Definition: Manage.py:70
aestate.work.repository.Repository
Definition: repository.py:16
aestate.dbs._mysql
Definition: __init__.py:1
aestate.work.orm
Definition: orm.py:1
aestate.work.Manage.Pojo.get_tb_name
def get_tb_name(self)
Definition: Manage.py:137
aestate.work.Manage.Pojo.add_field
def add_field(self, key, default_value=None)
Definition: Manage.py:105
aestate.work.Manage.Pojo.init_fields
def init_fields(self)
Definition: Manage.py:49
aestate.work.Manage.Pojo.__ignore_field__
__ignore_field__
Definition: Manage.py:35
aestate.work.Serialize
Definition: Serialize.py:1
aestate.work.Manage.Pojo.__init__
def __init__(self, config_obj=None, log_conf=None, close_log=False, serializer=QuerySet, **kwargs)
Definition: Manage.py:15
aestate.work.Cache
Definition: Cache.py:1
aestate.work
Definition: __init__.py:1
aestate.work.Manage.Pojo.__table_name__
__table_name__
Definition: Manage.py:27
aestate.work.Manage.Pojo.__table_msg__
__table_msg__
Definition: Manage.py:29
aestate.work.Manage.Pojo.serializer
serializer
Definition: Manage.py:33
aestate.util
Definition: __init__.py:1
aestate.work.Manage.Pojo.format
def format(self, key, name)
Definition: Manage.py:125
aestate.util.Log
Definition: Log.py:1
aestate.exception
Definition: __init__.py:1
aestate.work.Manage.Pojo.__new__
def __new__(cls, *args, **kwargs)
Definition: Manage.py:153
aestate.work.Manage.Pojo.remove_field
def remove_field(self, key)
Definition: Manage.py:112
aestate.work.Manage.model
Definition: Manage.py:157
aestate.work.Manage.Pojo
Definition: Manage.py:14
aestate.work.Manage.Pojo.getFields
dict getFields(self)
Definition: Manage.py:99
aestate.ajson
Definition: __init__.py:1
aestate.work.Manage.Pojo.to_dict
def to_dict(self)
Definition: Manage.py:93
aestate.work.Manage.Pojo.__append_field__
__append_field__
Definition: Manage.py:37
aestate.work.Manage.Pojo._fields
_fields
Definition: Manage.py:31
aestate.work.orm.AOrm
Definition: orm.py:67