From a6eae45b1cfed90e04e7b471a2757a4904ba22e7 Mon Sep 17 00:00:00 2001 From: CACode Date: Thu, 15 Apr 2021 22:21:41 +0800 Subject: [PATCH] =?UTF-8?q?[1.2.0.1]=E6=96=B0=E5=A2=9E=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E6=A0=87=E8=AE=B0=EF=BC=8C=E5=8E=BB=E9=99=A4=E7=BB=A7=E6=89=BF?= =?UTF-8?q?Repository?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 本次更新修改参考了Django的model,将POJO与Repository合并 1.优化了执行速度 2.修复生产环境下并发出现数据重复、丢失问题 --- CACodeFramework/MainWork/CACodePojo.py | 113 ++++++++++++++- CACodeFramework/MainWork/CACodePureORM.py | 53 +++---- CACodeFramework/MainWork/CACodeRepository.py | 103 +++++--------- .../__pycache__/Annotations.cpython-39.pyc | Bin 2782 -> 2782 bytes .../__pycache__/CACodePojo.cpython-39.pyc | Bin 763 -> 5303 bytes .../__pycache__/CACodePureORM.cpython-39.pyc | Bin 8943 -> 8702 bytes .../CACodeRepository.cpython-39.pyc | Bin 9339 -> 9340 bytes .../__pycache__/e_except.cpython-39.pyc | Bin 1348 -> 1364 bytes .../MainWork/exception/e_except.py | 3 +- .../opera/__pycache__/obj_dict.cpython-39.pyc | Bin 2979 -> 3229 bytes .../opera/__pycache__/op_db.cpython-39.pyc | Bin 3128 -> 3183 bytes CACodeFramework/MainWork/opera/obj_dict.py | 24 ++-- CACodeFramework/MainWork/opera/op_db.py | 12 +- .../__pycache__/e_fields.cpython-39.pyc | Bin 373 -> 360 bytes .../__pycache__/field_tag.cpython-39.pyc | Bin 0 -> 1367 bytes .../{MainWork/exception => field}/e_fields.py | 0 CACodeFramework/field/field_tag.py | 42 ++++++ CACodeFramework/util/DbUtil.py | 11 +- CACodeFramework/util/JsonUtil.py | 10 +- CACodeFramework/util/Log.py | 21 +++ CACodeFramework/util/ParseUtil.py | 13 +- .../util/__pycache__/DbUtil.cpython-39.pyc | Bin 5288 -> 5556 bytes .../util/__pycache__/JsonUtil.cpython-39.pyc | Bin 4115 -> 4243 bytes .../util/__pycache__/Log.cpython-39.pyc | Bin 3242 -> 3901 bytes .../util/__pycache__/ParseUtil.cpython-39.pyc | Bin 2764 -> 2954 bytes test/test.py | 129 ++++++++---------- 26 files changed, 339 insertions(+), 195 deletions(-) rename CACodeFramework/{MainWork/exception => field}/__pycache__/e_fields.cpython-39.pyc (53%) create mode 100644 CACodeFramework/field/__pycache__/field_tag.cpython-39.pyc rename CACodeFramework/{MainWork/exception => field}/e_fields.py (100%) create mode 100644 CACodeFramework/field/field_tag.py diff --git a/CACodeFramework/MainWork/CACodePojo.py b/CACodeFramework/MainWork/CACodePojo.py index ae0902f..032a1ca 100644 --- a/CACodeFramework/MainWork/CACodePojo.py +++ b/CACodeFramework/MainWork/CACodePojo.py @@ -1,17 +1,124 @@ +from CACodeFramework.MainWork.CACodePureORM import CACodePureORM +from CACodeFramework.field import field_tag from CACodeFramework.util import JsonUtil +from CACodeFramework.MainWork import CACodeRepository -class POJO(object): +class POJO(CACodeRepository.Repository): + def __init__(self, config_obj=None, log_conf=None, close_log=False, **kwargs): + """ + 初始化ORM框架 + """ + self.__table_name__ = self.__table_name__ + self.__table_msg__ = self.__table_msg__ + self.fields = self.init_fields() + for key, value in kwargs.items(): + self.__setattr__(key, value) + super(POJO, self).__init__(config_obj=config_obj, + participants=self, + log_conf=log_conf, + close_log=close_log) + + def init_fields(self): + """ + 初始化字段 + """ + fields = self.__dict__ + fds = {} + for key, value in fields.items(): + # 取出这个值引用对象的父类 + try: + t_v = value.__class__.__bases__ + t_bf = field_tag.baseTag + if t_v[0] == t_bf: + fds[key] = value + except SyntaxError: + continue + return fds def to_json(self): """ 将此对象转换为json + 无视时间报错 """ - return JsonUtil.parse(self.__dict__) + return JsonUtil.parse(self) def to_dict(self): """ 将此对象转换成字典格式 """ - return self.__dict__ + return self.fields + + def eq_default(self, val): + """ + 是否等于默认值 + """ + try: + t_v = val.__class__.__bases__ + t_bf = field_tag.baseTag + return t_v[0] == t_bf + except SyntaxError: + return False + + @property + def orm(self): + """ + 转ORM框架 + """ + return CACodePureORM(self) + + +class tinyintField(field_tag.baseTag): + def __init__(self, **kwargs): + super(tinyintField, self).__init__(**kwargs) + + +class intField(field_tag.baseTag): + def __init__(self, **kwargs): + super(intField, self).__init__(**kwargs) + + +class bigintField(field_tag.baseTag): + def __init__(self, **kwargs): + super(bigintField, self).__init__(**kwargs) + + +class floatField(field_tag.baseTag): + def __init__(self, **kwargs): + super(floatField, self).__init__(**kwargs) + + +class doubleField(field_tag.baseTag): + def __init__(self, **kwargs): + super(doubleField, self).__init__(**kwargs) + + +class datetimeField(field_tag.baseTag): + def __init__(self, **kwargs): + super(datetimeField, self).__init__(**kwargs) + + +class charField(field_tag.baseTag): + def __init__(self, **kwargs): + super(charField, self).__init__(**kwargs) + + +class varcharField(field_tag.baseTag): + def __init__(self, **kwargs): + super(varcharField, self).__init__(**kwargs) + + +class textField(field_tag.baseTag): + def __init__(self, **kwargs): + super(textField, self).__init__(**kwargs) + + +class tinytextField(field_tag.baseTag): + def __init__(self, **kwargs): + super(tinytextField, self).__init__(**kwargs) + + +class longtextField(field_tag.baseTag): + def __init__(self, **kwargs): + super(longtextField, self).__init__(**kwargs) diff --git a/CACodeFramework/MainWork/CACodePureORM.py b/CACodeFramework/MainWork/CACodePureORM.py index 71fafc7..95ae8e6 100644 --- a/CACodeFramework/MainWork/CACodePureORM.py +++ b/CACodeFramework/MainWork/CACodePureORM.py @@ -1,5 +1,5 @@ # 纯净ORM -from CACodeFramework.MainWork.opera import obj_dict +from CACodeFramework.MainWork.opera import obj_dict, op_db from CACodeFramework.util.ParseUtil import ParseUtil from CACodeFramework.field.sql_fields import * @@ -21,6 +21,7 @@ class CACodePureORM(object): 初始化ORM :param repository:仓库 """ + self.parses = op_db.parses() self.args = [] self.params = [] if repository is None: @@ -40,29 +41,33 @@ class CACodePureORM(object): :param pojo:需要插入的对象 """ # 添加insert关键字 - self.args.append(insert_str) - self.args.append('{}{}'.format(self.__table_name__, left_par)) - _dict = pojo.__dict__ - keys = [] - # 解析item - for key, value in _dict.items(): - # 去除为空的键 - if value is None: - continue - keys.append('`{}`{}'.format(key, comma)) - self.params.append(value) - for i in keys: - self.args.append(i) - # 将最后一个字段的逗号改成空格 - self.rep_sym(comma, space) - # 加上右边括号 - self.args.append(right_par) - self.args.append('{}{}'.format(values_str, left_par)) - for i in keys: - self.args.append('%s{}'.format(comma)) - # 将最后一个字段的逗号改成空格 - self.rep_sym(comma, space) - self.args.append(right_par) + # self.args.append(insert_str) + # self.args.append('{}{}'.format(self.__table_name__, left_par)) + sql = obj_dict.parses().parse_insert(pojo, self.__table_name__.replace('`', '')) + self.args.append(sql['sql']) + self.params = sql['params'] + + # _dict = pojo.__dict__ + # keys = [] + # # 解析item + # for key, value in _dict.items(): + # # 去除为空的键 + # if value is None: + # continue + # keys.append('`{}`{}'.format(key, comma)) + # self.params.append(value) + # for i in keys: + # self.args.append(i) + # # 将最后一个字段的逗号改成空格 + # self.rep_sym(comma, space) + # # 加上右边括号 + # self.args.append(right_par) + # self.args.append('{}{}'.format(values_str, left_par)) + # for i in keys: + # self.args.append('%s{}'.format(comma)) + # # 将最后一个字段的逗号改成空格 + # self.rep_sym(comma, space) + # self.args.append(right_par) return self def delete(self): diff --git a/CACodeFramework/MainWork/CACodeRepository.py b/CACodeFramework/MainWork/CACodeRepository.py index 3af071f..4fd0061 100644 --- a/CACodeFramework/MainWork/CACodeRepository.py +++ b/CACodeFramework/MainWork/CACodeRepository.py @@ -1,5 +1,4 @@ import copy -import sys from CACodeFramework.MainWork.opera import op_db from CACodeFramework.util.Log import CACodeLog @@ -13,9 +12,9 @@ import uuid # threadLocal 避免线程干扰 t_local = threading.local() + + # 线程锁 -# 返回的结果 -_result = None class LogObj(CACodeLog): @@ -70,14 +69,18 @@ class Repository(object): """ # 移除name和msg键之后,剩下的就是对应的数据库字段 # 设置表名 + # 是否关闭打印日志 + self.close_log = close_log self.__table_name__ = self.__table_name__ self.operation = op_db.DbOperation() self.parse = op_db.parses() - self.parse.log(_obj=self, msg='Being Initialize this object') + if not self.close_log: + CACodeLog.log(_obj=self, msg='Being Initialize this object') # 模板类 self.participants = participants # 该对象的所有字段 - self.fields = participants.to_dict().keys() + fds = participants.to_dict() + self.fields = list(fds.keys()) # 配置类 self.config_obj = config_obj # 操作数据库 @@ -89,38 +92,13 @@ class Repository(object): charset=self.config_obj.charset) # 设定返回值 self._result = None - # 是否关闭打印日志 - self.close_log = close_log # 配置日志 self.log_obj = None if log_conf is not None: self.log_obj = LogObj(**log_conf) - - # ----------------COPY---------------- - - # t_local.table_name = self.__table_name__ - # # 模板类 - # t_local.participants = participants - # # 该对象的所有字段 - # t_local.fields = participants.to_dict().keys() - # # 配置类 - # t_local.config_obj = config_obj - # # 操作数据库 - # t_local.db_util = DbUtil.Db_opera(host=t_local.config_obj.host, - # port=t_local.config_obj.port, - # user=t_local.config_obj.user, - # password=t_local.config_obj.password, - # database=t_local.config_obj.database, - # charset=t_local.config_obj.charset) - # # 设定返回值 - # t_local._result = None - # # 是否关闭打印日志 - # t_local.close_log = close_log - # # 配置日志 - # t_local.log_obj = None - # if log_conf is not None: - # t_local.log_obj = LogObj(**log_conf) + # 返回的结果 + self.result = None def conversion(self): """作者:CACode 最后编辑于2021/4/12 @@ -140,13 +118,12 @@ class Repository(object): Returns: 将所有结果封装成POJO对象集合并返回数据 """ - global _result # 设置名称 name = str(uuid.uuid1()) # 开启任务 - kwargs = {'func': self.operation.__find_all__, '__table_name__': name, 't_local': t_local} - self.operation.start(*t_local.fields, **kwargs) - return _result + kwargs = {'func': self.operation.__find_all__, '__task_uuid__': name, 't_local': self} + self.result = self.operation.start(*self.fields, **kwargs) + return self.result def find_by_field(self, *args): """作者:CACode 最后编辑于2021/4/12 @@ -163,15 +140,14 @@ class Repository(object): 将所有结果封装成POJO对象集合并返回数据 """ - global _result # 设置名称 name = str(uuid.uuid1()) # 开启任务 kwargs = {'func': self.operation.__find_by_field__, '__task_uuid__': name, 't_local': self} - _result = self.operation.start(*args, **kwargs) + self.result = self.operation.start(*args, **kwargs) - return _result + return self.result def find_one(self, **kwargs): """作者:CACode 最后编辑于2021/4/12 @@ -204,12 +180,11 @@ class Repository(object): :return 返回使用find_many()的结果种第一条 """ - global _result - _result = self.find_many(**kwargs) - if _result is None or len(_result) == 0: + self.result = self.find_many(**kwargs) + if self.result is None or len(self.result) == 0: return None else: - return _result[0] + return self.result[0] def find_many(self, **kwargs): """作者:CACode 最后编辑于2021/4/12 @@ -233,15 +208,14 @@ class Repository(object): :return 将所有数据封装成POJO对象并返回 """ - global _result # 设置名称 name = str(uuid.uuid1()) # 开启任务 kwargs['func'] = self.operation.__find_many__ - kwargs['__table_name__'] = name - kwargs['t_local'] = t_local - self.operation.start(**kwargs) - return _result + kwargs['__task_uuid__'] = name + kwargs['t_local'] = self + self.result = self.operation.start(**kwargs) + return self.result def find_sql(self, **kwargs): """ @@ -256,15 +230,14 @@ class Repository(object): print_sql:是否打印sql语句 """ # kwargs['conf_obj'] = t_local.config_obj - global _result # 设置名称 name = str(uuid.uuid1()) # 开启任务 kwargs['func'] = self.operation.__find_sql__ kwargs['__task_uuid__'] = name - kwargs['t_local'] = t_local - self.operation.start(**kwargs) - return _result + kwargs['t_local'] = self + self.result = self.operation.start(**kwargs) + return self.result def update(self, **kwargs): """ @@ -295,7 +268,14 @@ class Repository(object): """ kwargs = self.parse.print_sql(**kwargs) kwargs = self.parse.last_id(**kwargs) - return t_local.db_util.insert(**kwargs) + return self.db_util.insert(**kwargs) + + def save(self, **kwargs): + """ + 将当前储存的值存入数据库 + """ + kwargs['pojo'] = self + return self.insert_one(**kwargs) def insert_one(self, **kwargs): """ @@ -307,16 +287,14 @@ class Repository(object): params:需要填充的字段 :return:rowcount,last_id if last_id=True """ - global _result # 设置名称 name = str(uuid.uuid1()) # 开启任务 kwargs['func'] = self.operation.__insert_one__ kwargs['__task_uuid__'] = name - kwargs['__table_name__'] = t_local.table_name - kwargs['t_local'] = t_local - self.operation.start(**kwargs) - return _result + kwargs['t_local'] = self + self.result = self.operation.start(**kwargs) + return self.result def insert_many(self, **kwargs): """ @@ -344,15 +322,6 @@ class Repository(object): # """ # return self - def save(self, pojo): - if pojo is list: - return self.insert_many(pojo_list=pojo) - else: - return self.insert_one(pojo=pojo) - - - - def copy(self): """ 复制对象进行操做 diff --git a/CACodeFramework/MainWork/__pycache__/Annotations.cpython-39.pyc b/CACodeFramework/MainWork/__pycache__/Annotations.cpython-39.pyc index fd6972f614e7d223bc480c83e198e2dbb765cb5e..f8c58dfeae26ae8cd288a70af163dc1c38a14678 100644 GIT binary patch delta 20 acmca7dQX%)k(ZZ?0SICjm2Tv|%mn~BX9a`+ delta 20 acmca7dQX%)k(ZZ?0SGQe6>a3c%mn~C)CH{o diff --git a/CACodeFramework/MainWork/__pycache__/CACodePojo.cpython-39.pyc b/CACodeFramework/MainWork/__pycache__/CACodePojo.cpython-39.pyc index 25856d77873e83976ae67b87eba539b666bec123..67d39a40abb877adc9e874b3813652affcb8815d 100644 GIT binary patch literal 5303 zcmb_g>u(&@6~A{LyR$EQ?bwb90Z~*^78*A|X)A;fD6P{5#fcKyl#yXN-aEUQ_3Vy) z=WfU@YpGJw@Mw8_Kn;8V*(el6BG5`LqLBU_Nb?nTN&W>SB+j|BGxpl4wPHQ1dw0&c zuk-tzbI;rvyHLmyxW0V!!k=0NLcT&_>!pG4B$Oae31Ng$kJPD2Dc&odQddn?-m9Kg z*G*mCYhJ3JHq(?GBTQ$hON6DIbj`S^niDS~Dnn*z;LUo!!kX*L6znZ9NcH2c{s zXlDDGeW1C69RSUNzGezEcd~<^IoQ`sv%Aia(%rX^r)xAU9DVAj&zw_D?wmY*qC~?? z#dSPp3A+k{aXj!FzZb3t_r<8^X=lX`T;cOp8K>BKA>DWd$DwkFNf|K}HvST+P^L2N zQpQvxN=+>y($pjR%v400nRbkbtc%plyhJo&X2IBEsGT}_{N%!XIbH!*Nkd6N$w3L8 zfvQ7lP%QkX@DF8O*+7lj(blyM@@w+k)S|Mcuce?x@93S>hC<2ey&@&j9dc2r866nY zQ93H4uW1kr3aqU*e+*M+@9AINm*4Gv_}A{={tjgIHZJ$x`!s1PX<@ePH!5z`@|S96 ze#Pd(ExRjrLjevLdLSno*e|1b&Y)c^s&blkGbMpb7?Vh`#c8&U-0?z;gyy+=Qj=m z0o$7vPuOnbEcEF&obqe_+)9fVVNo<8n1YIE1~q7w7U>wxQw4wDwF~Iqx!CS9?AGK$ zNND;|D8chkp_|vJOV*SQU8mBm^Wau>O=}s#uIWOnp__F^?;xGjvcjL}Xz19- z$yu^GsS%NC{ecqvJqt3HBTzc%aHaVpSS0ak;_&YEE4`2Zlju3x2m}M!%q}r@h(`pF&!f!bDc`3~&a6}#|Q?0Oo??VwO3RPj94>e&e zRrr2X%4!zxFxYX804t)Us78y50)(c3%;?uHN;0=Z&H$fiw+cn_iQyo~I)wcO1?;qW z3=|2*?msX0u3znb^52{P+PL|@k9x1Y|Mh2|*B~QglPo-5V+`IDWttSxpg=`Z?Yy+V->}1Wv|rkedmm##+WiO! z$;vzJ?!Ejb_^ywK4Y zPr7gZ zht=O&=`@gw+(3oC`;fJS#u$|s{!=g~W(N0jgy1mV-G-8d*my$Q z6Y<&!9efUl-3~a;d?FqTz)>Cvcy7t9#_Rvkm>9r*1WlLT`+wNa#P$RBsV&P70Uswn z9S;ZiD31g`Tk(8*v>h>k{vj}Ecl3XZ%?I@RHdh}4JkEVK9u4489tnJo`As+&j+74u z&_4_o?T-Gr*naf=mgR?lkCQLP!vQ|ZBf&2)TR6h4?;!zrM%bNzr5FJaFf(Al5ES6_ zc02)4fbvKbWXk7kzIXorIoPv1{Az4Hz@JPO9|Af~U5N(+bd*PeoN#(XYnVqwkZ&hk%Y#uf&4^I?5wK zFW@00v0zV}|4XoGclhUH1i14D3>bm}oW2=P02H7+8U>!;sO~KVzXF?fr{KjH0a7qv zzz`JR^zC>8paA8C(u{d%+t-7+_!Gh0z;`FELVt65duREsONUBGTaJDEao8+Wq49Y1 X?(qb^ng;mB(|;9LC!d}vn{M7NS45ug^a;5 zNK5iLNUp4V9&%})LLfeg6tKeUr26_S8zwO|R>Q(#A2Y2ZC2-QB!$H_4z@UO-wlGs4A%jPD2P5l=A%#uax$kVcAFppCG>}h4qrnYbS%{my zNmb!RksQWZ6fIa`rz*KzfbjtGbKb2LZl)vRIV4Uj5c#{%y8?HHnl$3Bv-*= zNwB9rnQo#I9drYcf4hwteWuy?Bmb8%^dOrg2t3Pk%T712i(2cTrKM_{{#e~=bJd*S hpDrKd=)p+ESvk7mtCTLyc{^h*CyCl)fOTol=Rb))UVH!m diff --git a/CACodeFramework/MainWork/__pycache__/CACodePureORM.cpython-39.pyc b/CACodeFramework/MainWork/__pycache__/CACodePureORM.cpython-39.pyc index 27113013701627ab247b85a4319f59ad675df39a..85963b53b56f0e106fc91e799f0914f2dda84f19 100644 GIT binary patch delta 2102 zcmZ`)U2GIp6rMZ3cV~CYwqR+?wxvH-77C<*3XP#^sl*$U9VIOBcob#y~0=ZjC%1Rtc6O0Y$z*=OBN7S ziP{SBNL}G$q3)@-$;V`cz?$J{4KuV>$RZ7`4GrGVFwxpAzE`hw*jxk3$gJggzydL# z&2@rrJz)MkPs7Tl!n?$0T7hO@q8K(2e`ymlxW|HL8lC{djWsn?^tz}ubdPxI2K-i4 zm>UgqMfJ2^WrGj}MtU#mwnWOfv-X%=g?~H&;H0E3w^Ruj4>@Xx zEY50vzQ{OcJu>sP8moBmPK|fsCcRc&tnzLc@~$n|E3IRq5f}#)K(Ug2Btz`|V%_}6 zMnc{L;D`aMdj!305=r?KkH>r#ve(6X*3TClyI%A1A#;O}Ll_~KI;A|xmQ!O{TV@bw zyRMkw?dB3ap%F{mOOBHv@gVu`6spX1ZIeZGzEts~EB!iK4kFEGmB^?=7C6^20IXVM z&X<_)1&&xu9Xi(mZ=6IvfC9^nMzLBh=Vc<@V7VO8VzuJV^J+PljH8V+dwnU-7Xtnq zk`9U=Q-j%vlp=DoUA&Hpt~S%@RdUKnRk_EwTUbUh&89x#p)`3h>lN{r*&2x@R%a(W!xN#r|) za2#PLvlQ@U^N&nJTf<`s8QCIt5=-wh9+%lDg{&O#XOW>Fz%e0_g{sdn*Zd3uo@MDj zXT*+=!HY`RBx>MxXc3{+FK~d5iK!&zWI<7uy(w?hiZ3@?)N{kh- zScS~TDB8S?fTALm-H@98Cn1I#lx{Kp3fjMl(B@qO?#J*x!0Xujy?31)-Vz=sdN<96 zJOb(F#(^mU_vvA_uQP54vMSg``5PkDpIwu;#fA$oUs`aX<3>7;xr{;j!CnEax!~5r zk`HBui(d@mSY(Gv#2pH@@;Ri%{=o+TBBSWDJkKTK>dSU?2^VAUI6AICBXz{R{{DUK zQS*AGNBq+N_t8Ey+>RKtz;}t5ABBZUp$~q#UDsCQv7kq~*j{%!ky59{H-jVQFtS?W zx52N^;AxKi$ztw@X)f-o9J{@vLHlhd!do^gemXcea2a>+CT|87E{Un3LoHwBp_6O- z(7G2Pi-1|<69_LN;CDsdM}7`RuOXaAm_@jNAl+f)aoSM_M^8@(lrdxT=OzGNr(g^R zM7NL73>~8hYSXjuP@1Nrb{9?3z3>dfd&{=urZ;oc5wpXiruRZcxw&nN@0v6G~DeE~zLi8K|y$o4g0#L8rM| zQxA+9$(w=E(qP97B2BA>eipx{zD}b2g0`?vf}MxGIEv`TFUa)+7+BR?`FPp_h`6Hc8DuT-1YCZ`~}06g5+B=W9wc7Fa=7OWhz3 z;*SOrbZ>@%5QBB|VUT)L11chMzW6^JeoMd8sOszW_4<6(TwbrkUsZqHU$5HD4InWEj#{N zK^T5HouMMia@nh)U+hLB?Nz9cz;=Z7qPbo!)05fDl=P6mldbhTHth)ViMf>

#??6KhgCoPkCSTu%yTm(mw#-m#V}Xa z4?^%Ub8sA!yGvv=JGflx(STm!Df6c}5v!ElbU-nBpnFJs5Z2`*xbO!ZgEfU%Q!RS)ZLkyJK8*jSRDKG$%JY zTXJj+Uz@lBJf5W<85y;AbRX}FBrc-AGiZG^OEaAOPw9!)qPYlRMOVMzRM zK<$G~dvE_0at0e;jp0y+zqYwOATL+QZJR?(lVM*mSN{1xaRq0k` zI@vYA{u>Z|ybjub?fZ~SZU)X|sdtOnkO#nOe>HTTz#u(1Fti6s4ihK)lEMhz=0nM3 zL(WMI24FRpb>PhrI#i;~24;l>i9dyErgB?YU zk@0An+0n57OSr#`B4o$axB{~(_;<;J{T(&eSf#j^-%tK?{0JIuWi0QMT{33Rg5A@+ zZ}@|)zHZz&5xBPY^F50 z!#lxn&Sv?&k%i$bBJ398%b<9Xzc4zn!FO}?RAVn%A4V~O0xQSPqL@K3i{b)`1r)EK zSVZwAinmZmI?O&SJ;uS1Xd*cr(=^-sN4-uSZ50*x8l)h6;W|A;5kt(?LWLr23Y_A diff --git a/CACodeFramework/MainWork/__pycache__/CACodeRepository.cpython-39.pyc b/CACodeFramework/MainWork/__pycache__/CACodeRepository.cpython-39.pyc index 0d74c4feaf7958f965d3770b8ea0f6d1a40fc91c..6c5f6d5ee8ca3907f3d13315f3c766b03e158e58 100644 GIT binary patch delta 1994 zcma)6T}&KR6rMZ3cb1)HVHa4oSm=Unw@|Psl-5FO)fQ`L8?`Unn(4v}WVgdEy)$ct zEP+Th=>sOsZIi~Tfhb9vsHxesF~+|1#YA6x9!-4O8ee?y(Hi4918$MT$V}#&bM8I& zo^!r)?tMJ^=V&Br7$E_k??&IgaAEJYNZW!3nk87o5i>jw4CKpu*9mFmC&kMoUU?{vBX%#e621yAd z73KtY(9`m?44GKsGQ?jN!A38OE1^|kUh(S6%1U@uSi(JwGGfH5&qrZpB;OEVV}P-- z;1>_DDZpk+S_T(pi-mzC0&FcymRut2GcP$Q-ZA@DMEZ1dptU$of2xlb7-`GH;O&rFp0h=n9|;^obkvX`pL-PxxW#j^xXerNV@7 zAXV-~vsB7irU`iiffHFLO*t`Q9VzhQhfQ-bSFp^iQ{F&H272n8^6YM!KNox#4XNM3DBLqGgHhhfFf-l>FP}mWi z>;p*40m;6cWm7I2=GW?XM;Bpy-DebhigEsJ{lEaO0B=IjGGrrXWQJIzB)I!LWQ8n2 z2VWFfFP;*NEgk({)X@+0fnDH>$vA)0&>D&b`)18adm~BkbgZ8oB(x|X5G=Bx* zBtj3*wRIDT-)QUSA0-SY0fRwFNKleZ^@nRhEMW;k9UD*e?t9e-yn1!H`p)g@=Qn@( z;7WDz8xX4Ru06VO_tEkf)vtNY*q3LD`C^**ptmfb*reHk_v z;BfMu)J}dXW~?*b^?w}#fytHBQ@z{l61dQ65#WVZI~(jcxZm0ur(rCC!3C{RS1SRT zYg%s&ugGS5*Eg*Ewv&n@SeA^A$(nHAdF&MEX}Y;g=;lcU_JiuH*_j!;V6oGDVAlcC z&8K!9;3KJQYd_j<>DIF__A>t}H9Yhz&W<3wfbbFm_A(nqz!qR*2xky56ZQteS-!us zt-k|Aw+(<2Sq&YfAzDup^l92on`r}$P>sfDk~M=tI?B+e&lfwph|kwLnSoc1uLRc{ YJIK>rL(Pr26C5052#${guNn>i4g8|RApigX delta 1953 zcmaJ>U1%It6rMBxGy9utel}~`=FixzZQ7*92HUizEwq-Z#iGbq7^j&@$#!-(-kDV* z8>>Xnmx^-1J}5T9`XC6lEche{qKNpQeG!~TAN5^@O7WaK`B5pI;ePkr-*e7)&OLvh zzH>V7<#M)!-&faLFaEXnz5L*n*Ky=aK7^8!_TT`H)3&UhBbMeBn2f^NE)tbHNA}<`0`a5q_&Lf zMq6Gp*QGT}?6KQ`bD20>%i-=!EibSjuqd!gV7I{1l&@UH3*8=HMeJ=8_6fPat@vsS z*jij(kQSx3as%F>tNT0OtKX>o14-U>WA9=ZxDBr!xGs~?c!z&(^%op{$zxFvC7S4Y zV(sL2t>>q$`LG!UZrHr!7zl3jVvQMis;aRJcI+X7QM$&Y<@sh~f$iaQqb0s(tNVB3 zLNtyb4Vz%&UzBw@kIe>s^S@&nx~wZYnDFs0Hoyu`GKU|11kc19gs#F0dQnqqY8ztB zhYyt%BoW7Ytkn$kQzkz_icS7>_Um(1B~cezjd`{U??{Xoji2|zs+A~F%o4TLTJ#f* zaFPw-4kzon3yTfk^}-M-nV>^j6niXYWI3zyh1^8(EfgaPx@2eNBJ}VZxdSl8Z|>;h zzvl)NPmep9yaQ8Jh3&&lNsgF~F1w^>1)`TWQ()ULc9`EPl=y39tLKj` zV+vcwbUrBm1l{xuFus&L>5~}dE0r?r=I>XA^kX=i1O8>j*JDiLn${VA;7J(K*)VON zB{)hTPScY~^u5(Wn#3n z&YwFb;JIxw=xwBoSoe$-R*DU^m?Im(a_sHm@qd1XH?73&djVsXM+H(grOBqKb>7`I zC?6xD5^JehYr5fL6elW)m@ofgjx5_IMI^26EiDBNpB?AF4Nt-x9~_yiQ|;RPNLH|k ziadq_77D2)u^vobK!V^Zz5i@V95VaOE;DcT znibO$JFDG{6l1kpj+~wR$I*dob17h6TI|dGw%NTa2uUF87HeuzQGSs! zkXg(GBpBF=q=BR+lV1@Fh-NDSi5Bq!iCd!1j?VchscuDyxvAy(McI03nW;G`MId(+ pfvg4VL^2;_lR^>L77m--{FKt1R69nXSTP5X;9=xo;$h~J0RT*AIh_Ci delta 323 zcmYk1F;2rU6o&n5$1!e$1ga{AAW&5aWo2MMh!dbLOk^UeQ>juy#7m;GvGf2`z5*BE z4jh5WBU{hF!gE-#<{GM^?XlEg3?o45Y4+$C4n!pe%*A{W4{vC76<$fecx zV9WBz@_Uwz_TfSXUfZH8yLDYI_CU(V%bJ6C-+XrNRo^Y2nvK_OhpS-mYSmy}bSTN` z-CW#3?4HFXr0!ijTuew+wAvE_JDh?B35q5M{v+dKIvc==o6Fs6N{)H`%74R%@s=)}mk+OH@3xNL!GWS`l+8cnB@qZFX9cZnB%1NiDLW zU<&qH_9h4|p7bU?cC{q%li6{8S^Mr5|Fx|PdjWVfBVgV8e-TA_W6LYvWnQ7?pe19{GG?W5*lMVZeI z8!V9?{_=JKV>kPTe-%|h24dgu1Z}3W_hftQ3jD52{pRCZ%v_^_OBb`oD6ytNapU5N zRl^T%X{?a&W=Hy>8?Eu%px}2jEBt3Ve|{I(eD>9Te53&j$N&;8U?=Ddouj^Sf?Bw5 z?xDW*4(;L)hvb;1<|-QCzAZ^=5AZ75n%g9Or%zKF8a*V|z}86VIp($0Or0gvolC7V zQ)@8D(i)&M8xSic=LYn_?0wH(IzNsY7~=jr1O%PXRUmO4*d9vJR;iCAq?Y0VIVD|l zV^|S%(Ai@$kdk{uk?KQ*4?baKCUGksmaMB)?qbvwvJtnF$H*h2SLmrK4D5j=cq!oINmUF~&`2y&MtJMm@=VUSM{&vr6 zEqHjo+kP;h0R<9~$c)**3M?Q`Nkk*|jzmn_XJ)`7cusulm-cpiqu^4=x5sjve*JJC zz{$VEPcLxNFnKM8;XnrY7o&Ug0*VW&dsRmo7$PocZ+J3N4z~Y6pQbS5(P?#g+pHR_ zh5hF8fOX(jQ;(dn>J3woOyVc1tzDNjtoqdzT)UTlv+jf(8N+&vm2?m?=#!awN@f&` zW#$|f4tXvQ*QVPXPCKCyo^ zIzB775K-?q6{29hR1T8-FK_L0r4LZh@u)v4YC@#pQ7p?uw5~L$Ev>NLgz;1+dDCrf zscl?&hLv1IAQcNJzIEVWKn0fXoi1#st2im_M5bYyD&H#iQF|ZV=C-XEqJNnNkou$4~;%Ne$Ry^M34c;gxzN2nv W)fz&O|8aNnyI$aFJxYx_c;-JyMuwpP diff --git a/CACodeFramework/MainWork/opera/__pycache__/op_db.cpython-39.pyc b/CACodeFramework/MainWork/opera/__pycache__/op_db.cpython-39.pyc index 08e8060a6789d7353ba51321dca4f7e56d2416a5..3344c3ad6be5eda086b00a7262216aa8f98fa62d 100644 GIT binary patch delta 1325 zcmZux&u<(x6drqid1iMSNQy{-sM}N=29h8lAwfZ*A^Z}c7Lh$|h0J6Z{Wx;Y*Z-NeuYP>Hv(?>ruiFdDdY9MRgVfWW znYBBTyV|R=QLZCw?E3Z~?>BfFG#TvX4LoQM7SuQHGNI~Mck|HPYRaH(dO!1c2$$M7 zbqrwv?Vihr`mb=ql_>Tkd7OWn9N)I3CifLhhN>kKF%R) zin>~pSW(j_CPIDUeZJg6V+L5aIo~NN!LzdD{27({zZ0$g@s|&Mbk@;01DW$-exR9k zlMSE+^@tk_Z_e(Hvg&|yus!-SJ?dbm$V(x6q5QBkQ8N|5B~0`je$oohpC{+Boq6?b zFnsGWZl@kZ$E83~H5@@6)NBAxveM(MMpd);PvPEG)eWbI22O`!o9{IRqF`@L(J#hX z)yOokSzyJu1Trs?Q`?UYvhg^t#OYO7C7dNg!a!IuL6`44kO`HKkp$2eSJs+(f!jp)R5<9_~v7>)g8xylZ7SAn<1+g?-XS&cv&D(rxILoz-UmP z<0nA8u5!-b$31BTjP22R+9r%H(pWtkH;-Cua*Tb7f*|U*xW6%n0anhiY%Ie*7>dAL z8C)^Li)J{BvzC1Y0UpFEYh6gsgR#>X9>+;99{g4ghI0#$cftG;WT s)X%L;sO>*momZ^31EkWhY=HhRn`SSKYOz=5>*fVnbu!vEeUi3&A0k{WZvX%Q delta 1162 zcmZuv&yNg26t1f7uCDpfE7@i3F2fka4q2Ba5;hwf5`rLhB+?S4cdJ)=wr6Hl_eRhn z!9`?+)Ipq#goL9L&aUFZsg7>qApQaIst3zNclyn%sqcO7z3;tmBX35$!1Ia-o*&)i zi`GN0f~Owts_bkafrK5~Eys5-I)a2F=p7_zNN-!dEAT9;yI)M$$yfJ=Fed5=u6h*C z(gpJp$+CKn&tp%GlY{tyib!?C{tPv7lVn8TQQ+=cne!B9j&N2i^@40ZKv(P=ZsvB` zQ-o1wH&JrySA;9vztM2(b_+QQHH%OQQ`8ctwVU#|Gatm-<2((LMZUZo3C^#1jhWfw z6W4E4XB#tT8g)zCyffF-Rx7!r?RL-#>$aw8ATNcf{L_M5t3FsY%+z=5(0l=Usxw(K z{jDO_z)?FU=b~H-zHjlxD?Z_=EE`~MJmXcs48fO-fk7@K3^PpeMvLMi9?bm_^~io+ zGlS?0)@9BYqPE~c9CJRQE;ygCuO?}2%m%PuSPEnk^2P9~&vICjN?=z+Xur>|yB z7osp0iSH(tV-DE9Y_bZZlj z-f4%NpNB-rAQK%EsU;u>rP*4NG$mYHUz%OA`)( zgRj1pwh(`ldQw_nG>g B^U44K diff --git a/CACodeFramework/MainWork/opera/obj_dict.py b/CACodeFramework/MainWork/opera/obj_dict.py index bbf914f..5d00ca8 100644 --- a/CACodeFramework/MainWork/opera/obj_dict.py +++ b/CACodeFramework/MainWork/opera/obj_dict.py @@ -1,7 +1,8 @@ import copy import sys -from CACodeFramework.MainWork.exception import e_except, e_fields +from CACodeFramework.MainWork.exception import e_except +from CACodeFramework.field import e_fields from CACodeFramework.util.ParseUtil import ParseUtil @@ -81,15 +82,18 @@ class parses(object): :param __table_name__:表名 :return: """ - _dict = pojo.__dict__ - keys = [] - values = [] - for key, value in _dict.items(): - if value is None: - continue - keys.append(key) - values.append(value) - return ParseUtil().parse_insert(keys, values, __table_name__) + _dict = pojo.to_dict() + # 得到所有的键 + keys = pojo.fields + # 在得到值之后解析是否为空并删除为空的值和对应的字段 + cp_value = [] + values = [getattr(pojo, v) for v in keys] + for i, j in enumerate(values): + if j is None or pojo.eq_default(j): + del keys[i] + else: + cp_value.append(j) + return ParseUtil().parse_insert(keys, cp_value, __table_name__) def parse_obj(self, data: dict, participants): """ diff --git a/CACodeFramework/MainWork/opera/op_db.py b/CACodeFramework/MainWork/opera/op_db.py index de29a3f..f850c1a 100644 --- a/CACodeFramework/MainWork/opera/op_db.py +++ b/CACodeFramework/MainWork/opera/op_db.py @@ -1,5 +1,7 @@ import threading +from CACodeFramework.util.Log import CACodeLog + from CACodeFramework.MainWork.opera.obj_dict import parses from CACodeFramework.field.sql_fields import * from CACodeFramework.util.ParseUtil import ParseUtil @@ -28,7 +30,7 @@ class DbOperation(object): _lock = kwargs['t_local'] name = kwargs['__task_uuid__'] if not _lock.close_log: - self.parse_util.log(_obj=kwargs['func'], msg='TASK-{} START'.format(name), name=name) + CACodeLog.log(_obj=kwargs['func'], msg='TASK-{} START'.format(name), name=name, LogObject=kwargs['log_obj']) # # 设置任务 # _kw = JsonUtil.load(JsonUtil.parse(_lock)) _kw = _lock.__dict__ @@ -36,7 +38,7 @@ class DbOperation(object): _t = threading.Thread(target=func, args=args, kwargs=kwargs, name=name) _t.start() if not _lock.close_log: - self.parse_util.log(_obj=_t, msg='TASK-{} RUNNING'.format(name), name=name) + CACodeLog.log(_obj=_t, msg='TASK-{} RUNNING'.format(name), name=name, LogObject=kwargs['log_obj']) # 等待任务完成 _t.join() # 返回结果 @@ -100,11 +102,9 @@ class DbOperation(object): if 'pojo' not in kwargs.keys(): raise SyntaxError('the key of `pojo` cannot be found in the parameters') - filed_list = self.parse_util.parse_insert(kwargs['pojo'], __table_name__=kwargs['table_name']) - - kwargs['sql'] = filed_list['sql'] + filed_list = self.parse_util.parse_insert(kwargs['pojo'], __table_name__=kwargs['__table_name__']) - kwargs['params'] = filed_list['params'] + kwargs.update(filed_list) self.result = kwargs['db_util'].insert(**kwargs) diff --git a/CACodeFramework/MainWork/exception/__pycache__/e_fields.cpython-39.pyc b/CACodeFramework/field/__pycache__/e_fields.cpython-39.pyc similarity index 53% rename from CACodeFramework/MainWork/exception/__pycache__/e_fields.cpython-39.pyc rename to CACodeFramework/field/__pycache__/e_fields.cpython-39.pyc index 2f9e343880225713fd6e91e2adad84b5c1b27baf..bd1eed38e799d2b4a63fb364ff8ab1933683d347 100644 GIT binary patch delta 70 zcmey$^nz)^CBs{MKK}0U{sFE*j`4nuzOF@#3=9lKOh6)v-Nh+B#4*@=B|{MlNDxH) Ua+}P|Xv&(FnVOR_*^5yd0NFYcr~m)} delta 83 zcmaFC^p$DCCBrB_AAk3F{{Yt@$9O+SU)Lf=1_p*ACLnQ(-Nh+B#4*@=B|{MlNDxH) h3ZBf&Xe#8Jn3)%zUz8n_T9KSuP?DLSH`$g^8vyKI7z6+S diff --git a/CACodeFramework/field/__pycache__/field_tag.cpython-39.pyc b/CACodeFramework/field/__pycache__/field_tag.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..78277e87aa949ab9c562dd91b64809c3d6e6ff12 GIT binary patch literal 1367 zcmah|-D}fO6u;?5(x#hkC?X272T}5{{Q*H_GH9QypuSiJ*R;vjY;99-615{QYGtU* z33Hnu3>DE$uuL}RKA8R=_f?a&&w>v=d2af#nhBn8e#zl??#Vg#oTK#jiwI=n^xc~` zq6mFwMz2J`7zH(t1Ei3ORIUoDp$Fj%r-rT}DVzi5FG+wk3TmDK&=B~cOh}EZQI)T9 znXoFTu`0?$R1QvyRLCl(c3qiFQ{lEka(RU$Da!T1(T=e15a<}FnFMeW4#LP00XZiQ z7;-qkuoDA}I09hQ;Q@Ik0w_2kz?c&Sj5}dK(f@bI-sBJxhuR{S6`~Y}EG1jea7ig@ za^v-?`)scMem&^pv+l=bul5-nf^0!6O~{bPH#zP20mDHFY@kP4pGDsuCAElB5#Vo`$x zyp7f7?BgJ-*p`7ObgiJujoA-#l#f5Ck;=PhqF zmp6lf?Xs#^8vg%5cW29cwd2kG70r9O=`9_!AuT27KrkYWcY|mA&m=2@iU$p)Lc4gH z=(!{+v~QIP?dH%3YcSm|9_i@Gyde4LRv&z!r$G86|NBF$MxaMm)Go z0=tC>Tc$Ncj>7AADkYDnbSrOX$Hy*>8LF0q;nVIIWO}$#1Hu#lYH9cSf@*G|Wd z`XPsvXvKl5hsZ|`Bo`nzq~+90`4c$L6)yY_mEb*ZNYJ)IwdCJCzxll{&ztwN^Xu74 zqg=KLJohf#UO8Ufs?>U4!51f-hQ!5H329ex6^gPNs$I?13YmtwtAkDpjjrjMg-#Dy z*K#e84Q}2iu6>no#;yB=TmHyB)h%(lL>&7s3|M!lwB|mZi@CoTx8Z|bkK@qi7q48# z58v}|xBT^VAg=~~$deXD!@b9V6*K=7-sCrcyWeg7bg7qRl&j;A)&>z-s%~pLq@#C? zO)WJ$EF+o5_0;OvnaYiaIwk2yr<4(Ha`q5P%#`hNrtVObmdO&)NLsn`h>}fU-mPY2 zdvu4up8gG8CSO8PoBG#!WDnL^G7B0F>+3Jj1v+D07eSOxEZqzpU8-@jBegJyd}*bP zWX+2jU0)ij-mQj+q}ol|`Ia)pL>UUHJ7f7{<;W$eCU+8Pd2K&k6?^n%qqQd4s)wGU zSZF|(8u}1=AuiPCKNAXw`5(&36NXfHQyObPXeVM6)WSrX;)Rm>yF?tzPpM0%M?ja< z0LX|!87e#0V|-41$C38p2tG za|o{^yp3>dAC7}0ndb#jkb2&^e4YK-dtO)nn~*a)2&H1E=kR#oY~~r|?Nag1e$GYq zn7B9(a3fdjA7-#D*KWm8Nl9(2w*AN!RT=IG=V zbovRxFpWbAssBqZ4u9UefCT)(gVaAl3FC-)gsTV#=7m%o$s}xG8zwITFsf+=E&Xjz zu?jQUNp_Uk0vS$O9D+qw2Xkm1Z`rL_tW9sEK{yR#N%Zh8xrcZYHOcgPF`_))6h%WV zqVb7g<7lPS QTapR@Q%Z1A3shO{AK-H~OaK4? delta 1288 zcma)+-%k@k5XX1#u6Nr4MQRb0iXfmIp!nb~)F_JaM-*a04DpPVwtF^(Yp?EILm)*G zH6|vSsP~FW^#O^GH6|wNlYfBE=c9q(|6rmsMa3V)xJf@dJ3Bk`oxAP5?0&9?6E!s< z0wXe480%|z5RT0rffXm5S|m#iO3{`q$&g@{EjgX~I>m-6C8w)tj=R zacP+7>@z0Rsn0Ihwq^2@Cx&1Vu=8=AOi|qXJ_0af@pJHVo&u(=B6+ZMcy_c%xx5*w z6o?pg<$0w<#sfvd16;i)QBsuV)uLPiZAEE>3=@U8+SD8+GoWm`u}J1wiNKz6gN~3( zplwFEuH-_i^B%GXJgBnJ1zJKaFjf|xEkC}$^!nBEorRUsU8nq(_EIk$|912#8LiA2_%w8g~k!9*rEf`*+pMWXWm6IjAm?c_K-`%2pN6#48(*5(Dv RJc=*dVSsANq-vQpeFNxU`tAS# diff --git a/CACodeFramework/util/__pycache__/JsonUtil.cpython-39.pyc b/CACodeFramework/util/__pycache__/JsonUtil.cpython-39.pyc index 3152b00981dbd22444de07421968ddbf6744c80c..3154293557ac5e4f020718c599e7e80e1defc054 100644 GIT binary patch delta 682 zcmXw0O=uHA6yCRgStr@uB-XapU^k{%)~HkkO+ryTwBk*$2Z@Jt<7^~tnk|!rdPq@8 zPEt$DfQSS!7Al@<4G1E5Q%?o)n6qh9YlBY3bO zGd<)=FN~&uhZ}0zbdhV;fN_vB2pDb(_Q>}4m^40pN90ovLT1cUVp&>cfB}njVOgYS z^@)Hdsgpkz3*-}k;US`l+C4fpKf*5Hvc*IKCX6Fp3IfJBK@T7z(k9x-vAP=oVEeb zrU<=(8?6uM6bzkazegerY=w+)eS*Vzy6>M*E-~rRbAiNtAF+6uU#f2=qg+K9v=3!n zr&7-6DuuRO@EmN*MCElcnEZr6w1WMKe@<3<7I{2uH+tPvc$&=VNElJ!=u3v zg8xesHIN|y1SaX{z;A^lnU8+aqY$S(eN5ro$24rjAxSSA&8sBA3a?p~`mZ7P_iZhc zS#a{jOr{6y$d delta 516 zcmXw#&uddb5XX1kuWVo5+q~5N)S#&eEw4eTf^EQqVnv|`5xfN?eY$B0Nz<}P5X7D= zc#eZN57ztxmG}>MQqYrldM6Je)TcbjD8D=Xq#1sgzYfiF1%ea7dgB5p`><&H+s^H@LV17Ne zjK|eej11!vLlRPVFEQQ5X|mlJf{3J4bCYMHybu3Ff?30j@Ryf5?cGGAcz>BPN8((g65`t2c4jbzLnW8R8c zXIy7o#$j$LbCGNcTlgtgf^+yYS1hk_k)J#sX!7K0c4zm2xxuaOo@sV^_}QMq+fk_~ Xo3bD?(z3v#JdWRv$Ljs?LJ5BX$l7fE diff --git a/CACodeFramework/util/__pycache__/Log.cpython-39.pyc b/CACodeFramework/util/__pycache__/Log.cpython-39.pyc index 953efffae7bed731f99cb0f4414400a096f8aa9e..f4e01472bd6234d4d7507c23591dfaf637ff13be 100644 GIT binary patch delta 1121 zcmah|TWb?R6yBNH-Ry4CSgi#GDM5X3QHvKicFZkq{O)ct+v&@-q_I&f5FK4n(mwxCjr6iQg&k8EswlLzB8uWYrWjUSA+AbQBy*&qxjNO6!ZA~em}yL(Ks3P; z%$QK9u~%UxvnCW~adVtdi=iWmo%|uoIv5V#`Efw2xom^Wq-kFk0;U#Fat!H<-_f=J;b=INm|nLTP^57oJR!CM&WS8Uv0aA0^~DZ&*B|y7ue;?T zv0jG%9Fd&CsjNAKv~2)`sTUST+D?Gu;hSWp!zR7GVg+n%ENobEb~5~$wChpI51gP> zaCvaTV`3Aeg!CMHXjPVaLMr`XGd3)HA(lhf0Ml=WU|_2Qqg1Bxrq~C9fJ^7VVs8&Jp8pR*=w1?O2qS6%jl*g;FG) HGP-^Nv?eWS delta 437 zcmah@u}T9$5Z&3`OZJk>#UKbu2x4qbjY&EYloX0@79t4d2f`Nm z0U~1QiP%{90fLRq;Sbmdwl+GO1Y396w{M1d@6A*0cG_*GQVD|Raa-+QCkJkJa}_H| zBpeWb^n(upNZO*3N!|yaN=wH2#AjPX#-->JDFS}Zd`rSE@$3&{R~_8EBqP>p_k7mq zwIh87dtikToKVQT0~w|ONeUOK>QDcVMT-;eVVv04n_R9sXG5@ zN~o!ajpPwn1*DDe&7okGk#_WZYSyWGtX5NbtUX(&U2jU6)rL{ZXq8c^vTnNByvgr6 g2!bXig+07!HHQr^rZQ%Z>Q8sgG0O@N%ymTW7gf(!w*UYD diff --git a/CACodeFramework/util/__pycache__/ParseUtil.cpython-39.pyc b/CACodeFramework/util/__pycache__/ParseUtil.cpython-39.pyc index 6f3477eda2b1ff619d3ab2a166a4815f8cb35c7a..a3b41126c44e2e642a710c8deace49d85b0b8906 100644 GIT binary patch delta 434 zcmYjMJxc>Y6nyV;U%N>TF`B4_B&bC!f@onAY_wMhf+(Uf8|5@6aqkL|T~eGjcCuh2 zi2eliZ`j)8XJ{|JGYCGIVP@EY+4srYQqaujInaI0T^>&4UxIHh$dPpk>xAgl%=ilf zVP8XR$BwcROmG7d)Q)n@1)cUD92)j{R#^qYQ(`z+5(He=rmh`A0(_xaCPk$b>ro<|aecB7VW|hrh u&g`+}nM}JYWV%vTh;}n)?MMcxoiz_^#VgulShl$NU`JRrkGy0yx&8r1$zQMl delta 253 zcmeAYKO@SQ$ji&c00cMsauZ^BHuC*r=L7NCfY=#`i>FMM;!v%xWi4STVXa|mW^873 zVTk3aWvgLLVKHZ@Wi2!SvRHv~tj&xmY!VEuOp-v+6!sFf680MAX2u$p5{??yG*&T& zTJ{u<8um=aT8?yvTFx3KpgDX%b2t}p*03#PWMn9;sNt;PNa3_$sNo1^(Bvvr2ini2 z00NWma3~8FaRT{8Acqw(f(Z7>^Eg!)xh5axRGj>ZQwhl8