Aestate
Modes.py
Go to the documentation of this file.
1 # -*- coding: utf-8 -*- #
2 from enum import IntEnum
3 
4 
5 class Replaceable:
6  pass
7 
8 
9 class Singleton:
10  """
11  使用单例模式
12  """
13 
14  @staticmethod
15  def createFactory(cls):
16  with cls._instance_lock:
17  if not hasattr(cls, "__instance__"):
18  cls.__instance__ = cls(cls.modules)
19  return cls.__instance__
20 
21  @staticmethod
22  def createObject(cls):
23  with cls._instance_lock:
24  if not hasattr(cls, "__instance__"):
25  cls.__instance__ = object.__new__(cls)
26  return cls.__instance__
27 
28  @staticmethod
29  def println(cls, text):
30  with cls._instance_lock:
31  if not hasattr(cls, "__instance__"):
32  cls.__instance__ = object.__new__(cls)
33  print(text)
34 
35 
36 class Recursion:
37  """
38  递归
39  """
40 
41  @staticmethod
42  def find_key_for_dict(obj_data: dict, target: str):
43  """
44  在字典里重复递归,直到得出最后的值,如果查不到就返回None
45  """
46 
47  def parse_list(listData: list, tag: str):
48  result_list = []
49  if listData is not None:
50  if isinstance(listData, list):
51  for i in listData:
52  if isinstance(i, list) or isinstance(i, tuple):
53  rt = parse_list(list(i), tag)
54  if rt:
55  result_list.append(rt)
56  elif isinstance(i, dict):
57  result_list.append(parse_dict(i, tag))
58  else:
59  result_list.append(parse_obj(i, tag))
60 
61  elif isinstance(listData, tuple):
62  result_list.append(parse_list(list(listData), tag))
63 
64  elif isinstance(listData, dict):
65  result_list.append(parse_dict(listData, tag))
66  else:
67  result_list.append(parse_obj(listData, tag))
68 
69  else:
70  return result_list
71  return result_list
72 
73  def parse_dict(dictData, tag: str):
74  result_dict = []
75  if dictData is not None:
76  if isinstance(dictData, dict):
77  if tag in dictData.keys():
78  result_dict.append(dictData.get(tag))
79  dictData.pop(tag)
80  for index, value in dictData.items():
81  if isinstance(value, list) or isinstance(value, tuple):
82  result_dict.append(parse_list(list(value), tag))
83  elif isinstance(value, dict):
84  result_dict.append(parse_dict(value, tag))
85  else:
86  result_dict.append(parse_obj(value, tag))
87  elif isinstance(dictData, list):
88  result_dict.append(parse_list(list(dictData), tag))
89 
90  else:
91  result_dict.append(parse_obj(dictData, tag))
92  else:
93  return None
94  return result_dict
95 
96  def parse_obj(objData, tag: str):
97 
98  def load(da: dict):
99  obj_item_list = []
100  obj_item_dict = {}
101  for i, v in da.items():
102  if i == tag:
103  result_obj.append(getattr(objData, i))
104  continue
105  if isinstance(v, list):
106  obj_item_list.append(getattr(objData, i))
107  elif isinstance(v, dict):
108  obj_item_dict[i] = v
109 
110  result_obj.append(parse_list(obj_item_list, tag))
111  result_obj.append(parse_dict(obj_item_dict, tag))
112 
113  result_obj = []
114 
115  if isinstance(objData, dict):
116  result_obj.append(parse_dict(objData, tag))
117  elif isinstance(objData, list):
118  result_obj.append(parse_list(list(objData), tag))
119  else:
120  if isinstance(objData, object):
121  if isinstance(objData, str):
122  return None
123  elif isinstance(objData, int):
124  return None
125  elif isinstance(objData, float):
126  return None
127  else:
128  if hasattr(objData, tag):
129  result_obj.append(getattr(objData, tag))
130  load(da=objData.__dict__)
131  else:
132  load(da=objData.__dict__)
133  return result_obj
134 
135  return parse_obj(obj_data, target)
136 
137 
138 class DictTemplate(object):
139  """
140  字典对象模板
141  """
142 
143  def __init__(self, init_data):
144  self.init_data = init_data
145 
146  def add(self, key, obj):
147  setattr(self, key, obj)
148 
149 
150 class DictToObject(object):
151  """
152  将字典转成对象,解决懒得写中括号
153  """
154 
155  def __init__(self, dict_data):
156  baseClass = DictTemplate(dict_data)
157  self.dict_data = dict_data
158  self.baseNode = baseClass
159  self.verification(self.baseNode, self.dict_data)
160 
161  @staticmethod
162  def conversion(dict_data: dict):
163  node = DictToObject(dict_data)
164  return node.baseNode
165 
166  def verification(self, node: DictTemplate, value):
167  """
168  验证模块
169  """
170  node.init_data = value
171  if isinstance(value, dict):
172  for key, val in value.items():
173  if isinstance(val, (dict, list, tuple)):
174  val = self.verification(DictTemplate(val), val)
175  node.add(key, val)
176 
177  elif isinstance(value, list):
178  list_temp = []
179  for val in value:
180  if isinstance(val, (dict, list, tuple)):
181  val = self.verification(DictTemplate(val), val)
182  list_temp.append(val)
183  node.add('', list_temp)
184 
185  return node
186 
187 
188 class CaseItem:
189  def __init__(self, flag, method, *args, **kwargs):
190  self.flag = flag
191  self.method = method
192  self.args = args
193  self.kwargs = kwargs
194 
195  def __str__(self):
196  return str(self.flag)
197 
198 
200  def __init__(self, val, method=None, *args, **kwargs):
201  self.val = val
202  self.method = method
203  self.args = args
204  self.kwargs = kwargs
205 
206  def item(self, val, order) -> object: ...
207 
208 
210 
211  def __gt__(self, other):
212  """
213  左边大于右边
214  """
215 
216  return self
217 
218  def __ge__(self, other):
219  return int(self.val) <= int(other)
220 
221  def __lt__(self, other):
222  """
223  左边小于右边
224  """
225  return int(self.val) < int(other)
226 
227  def __le__(self, other):
228  """
229  左边小于等于右边
230  """
231  return int(self.val) >= int(other)
232 
233  def __eq__(self, other):
234  """
235  等于
236  """
237  return self.val == other
238 
239  def __ne__(self, other):
240  """
241  不等于
242  """
243  return self.val != other
244 
245  def item(self, val, order):
246  order.opera[self.val] = CaseItem(self.val == val, self.method, self.args[0], **self.kwargs)
247  return order
248 
249 
251  def item(self, val, order):
252  # order.opera[self.val] = CaseItem(True, val, *self.args, **self.kwargs)
253  return order.end(self.val)
254 
255 
256 class Switch:
257  """
258  弥补python没有switch的缺陷
259  使用教程:
260  from aestate.util.others import Switch,Case,CaseDefault
261 
262  base_symbol = lambda x: x + x
263 
264  val = 3
265  方式1:
266  # case(选择性参数,满足条件时执行的方法,当满足条件后中间方法需要的参数)
267  source = Switch(Case(val)) + \
268  Case(0, base_symbol, val) + \
269  Case(1, base_symbol, val) + \
270  Case(2, base_symbol, val) + \
271  Case(3, base_symbol, val) + \
272  Case(4, base_symbol, val) + \
273  Case(5, base_symbol, val) + \
274  CaseDefault(lambda: False)
275  print(ajson.aj.parse(source, bf=True))
276  方式2:
277  source = Switch(Case(val)). \
278  case(0, base_symbol, val). \
279  case(1, base_symbol, val). \
280  case(2, base_symbol, val). \
281  case(3, base_symbol, val). \
282  case(4, base_symbol, val). \
283  case(5, base_symbol, val). \
284  end(lambda: False)
285  print(ajson.aj.parse(source, bf=True))
286  """
287 
288  def __init__(self, val):
289  self.val = val
290  self.opera = {}
291 
292  def case(self, item, method, *args, **kwargs):
293  if item in self.opera.keys():
294  raise KeyError(f'`{item}` Already exists in the `case`')
295 
296  self.opera[item] = CaseItem(self.val == item, method, *args, **kwargs)
297  return self
298 
299  def end(self, default_method, *args, **kwargs):
300  """
301  默认处理函数
302  """
303 
304  for k, v in self.opera.items():
305  if v.flag:
306  return v.method(*v.args, **v.kwargs)
307  return default_method(*args, **kwargs)
308 
309  def __add__(self, other):
310  return other.item(self.val, self)
311 
312 
313 class EX_MODEL(IntEnum):
314  SELECT = 0
315  UPDATE = 1
aestate.work.Modes.Singleton.createFactory
def createFactory(cls)
Definition: Modes.py:15
aestate.work.Modes.Switch.val
val
Definition: Modes.py:289
aestate.work.Modes.CaseOperaBase.kwargs
kwargs
Definition: Modes.py:204
aestate.work.Modes.Case.__ge__
def __ge__(self, other)
Definition: Modes.py:218
aestate.work.Modes.CaseItem.method
method
Definition: Modes.py:191
aestate.work.Modes.Singleton.__instance__
__instance__
Definition: Modes.py:18
aestate.work.Modes.Switch.__add__
def __add__(self, other)
Definition: Modes.py:309
aestate.work.Modes.CaseItem.__str__
def __str__(self)
Definition: Modes.py:195
aestate.work.Modes.CaseDefault
Definition: Modes.py:250
aestate.work.Modes.Switch.opera
opera
Definition: Modes.py:290
aestate.work.Modes.Case.__ne__
def __ne__(self, other)
Definition: Modes.py:239
aestate.work.Modes.DictToObject.__init__
def __init__(self, dict_data)
Definition: Modes.py:155
aestate.work.Modes.Singleton
Definition: Modes.py:9
aestate.work.Modes.CaseOperaBase.val
val
Definition: Modes.py:201
aestate.work.Modes.DictTemplate.__init__
def __init__(self, init_data)
Definition: Modes.py:143
aestate.work.Modes.Case.__le__
def __le__(self, other)
Definition: Modes.py:227
aestate.work.Modes.CaseOperaBase.__init__
def __init__(self, val, method=None, *args, **kwargs)
Definition: Modes.py:200
aestate.work.Modes.Case.__gt__
def __gt__(self, other)
Definition: Modes.py:211
aestate.work.Modes.DictToObject.conversion
def conversion(dict dict_data)
Definition: Modes.py:162
aestate.work.Modes.DictToObject.dict_data
dict_data
Definition: Modes.py:157
aestate.work.Modes.CaseItem
Definition: Modes.py:188
aestate.work.Modes.Case
Definition: Modes.py:209
aestate.work.Modes.Case.__eq__
def __eq__(self, other)
Definition: Modes.py:233
aestate.work.Modes.Case.__lt__
def __lt__(self, other)
Definition: Modes.py:221
aestate.work.Modes.Singleton.createObject
def createObject(cls)
Definition: Modes.py:22
aestate.work.Modes.Switch.case
def case(self, item, method, *args, **kwargs)
Definition: Modes.py:292
aestate.work.Modes.Recursion.find_key_for_dict
def find_key_for_dict(dict obj_data, str target)
Definition: Modes.py:42
aestate.work.Modes.Switch.end
def end(self, default_method, *args, **kwargs)
Definition: Modes.py:299
aestate.work.Modes.CaseOperaBase.method
method
Definition: Modes.py:202
aestate.work.Modes.CaseDefault.item
def item(self, val, order)
Definition: Modes.py:251
aestate.work.Modes.Recursion
Definition: Modes.py:36
aestate.work.Modes.Case.item
def item(self, val, order)
Definition: Modes.py:245
aestate.work.Modes.Switch
Definition: Modes.py:256
aestate.work.Modes.DictToObject
Definition: Modes.py:150
aestate.work.Modes.Replaceable
Definition: Modes.py:5
aestate.work.Modes.CaseOperaBase
Definition: Modes.py:199
aestate.work.Modes.CaseItem.__init__
def __init__(self, flag, method, *args, **kwargs)
Definition: Modes.py:189
aestate.work.Modes.DictTemplate
Definition: Modes.py:138
aestate.work.Modes.CaseItem.kwargs
kwargs
Definition: Modes.py:193
aestate.work.Modes.DictTemplate.init_data
init_data
Definition: Modes.py:144
aestate.work.Modes.Singleton.println
def println(cls, text)
Definition: Modes.py:29
aestate.work.Modes.DictToObject.baseNode
baseNode
Definition: Modes.py:158
aestate.work.Modes.DictTemplate.add
def add(self, key, obj)
Definition: Modes.py:146
aestate.work.Modes.CaseOperaBase.args
args
Definition: Modes.py:203
aestate.work.Modes.CaseItem.flag
flag
Definition: Modes.py:190
aestate.work.Modes.CaseOperaBase.item
object item(self, val, order)
Definition: Modes.py:206
aestate.work.Modes.Switch.__init__
def __init__(self, val)
Definition: Modes.py:288
aestate.work.Modes.DictToObject.verification
def verification(self, DictTemplate node, value)
Definition: Modes.py:166
aestate.work.Modes.EX_MODEL
Definition: Modes.py:313
aestate.work.Modes.CaseItem.args
args
Definition: Modes.py:192