From 4e0624b8ac6a2547018f70e137ab32baa7941f28 Mon Sep 17 00:00:00 2001 From: YM <479443481@qq.com> Date: 星期四, 15 五月 2025 18:49:09 +0800 Subject: [PATCH] 将生成DB代码中获取文档的部分调整为从数据库抽取对应章节 --- db_struct_flow.py | 375 +++++++++++++++++++++++++---------------------------- .gitignore | 3 2 files changed, 179 insertions(+), 199 deletions(-) diff --git a/.gitignore b/.gitignore index 702c38e..c535f4e 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ /out* /packages __pycache__ -/static/ \ No newline at end of file +/static/ +*.log \ No newline at end of file diff --git a/db_struct_flow.py b/db_struct_flow.py index 286a659..2cf6608 100644 --- a/db_struct_flow.py +++ b/db_struct_flow.py @@ -17,6 +17,8 @@ from knowledgebase.db.models import TProject +from knowledgebase.db.doc_db_helper import doc_dbh + # file_map = { # # "閬ユ祴婧愬寘璁捐鎶ュ憡": "./doc/HY-4A鏁扮鍒嗙郴缁熼仴娴嬫簮鍖呰璁℃姤鍛� Z 240824 鏇存敼3(鍐呴儴) .docx.md", # # "閬ユ祴婧愬寘璁捐鎶ュ憡": "./doc/鏁扮鏁板瓧閲忓揩閫熸簮鍖�.md", @@ -105,13 +107,11 @@ 10. 浠� JSON 鏍煎紡缁勭粐杈撳嚭鍐呭锛岀‘淇濇暟鎹粨鏋勭殑瀹屾暣鎬у拰鍙鎬э紝娉ㄦ剰锛氱敓鎴愮殑JSON璇硶鏍煎紡蹇呴』绗﹀悎json瑙勮寖锛岄伩鍏嶅嚭鐜伴敊璇�� ## 闄愬埗锛� -- id鍜宑ode鐨勫懡鍚嶈鍒欙細鑻辨枃瀛楁瘝銆佹暟瀛椼�佷笅鍒掔嚎缁勬垚锛屼笖浠ヨ嫳鏂囧瓧姣嶆垨涓嬪垝绾垮紑澶淬�� - 鎵�杈撳嚭鐨勫唴瀹瑰繀椤绘寜鐓SON鏍煎紡杩涜缁勭粐锛屼笉鑳藉亸绂绘鏋惰姹傦紝涓斾弗鏍奸伒寰枃妗e唴瀹硅繘琛岃緭鍑猴紝鍙緭鍑� JSON 锛屼笉瑕佽緭鍑哄叾瀹冩枃瀛椼�� - 涓嶈緭鍑轰换浣曟敞閲婄瓑鎻忚堪鎬т俊鎭�� """ g_completion = None - def read_from_file(cache_file): with open(cache_file, 'r', encoding='utf-8') as f: @@ -345,14 +345,22 @@ self.gen_tc() return '' + + def get_text_with_entity(self, entity_names: list[str]) -> str: + """ + 鏍规嵁瀹炰綋璇嶈幏鍙栨枃妗f枃鏈� + :param entity_names: str - 瀹炰綋璇嶅悕绉� + :return: str - 鏂囨湰鍐呭 + """ + return doc_dbh.get_text_with_entities(entity_names) - def _gen(self, msgs, msg, files=None): - if files is None: - files = [file_map['鏂囨。鍚堝苟']] + def _gen(self, msgs, msg, doc_text): + # if files is None: + # files = [file_map['鏂囨。鍚堝苟']] messages = [] if msgs is None else msgs - doc_text = '' - for file in files: - doc_text += '\n' + read_from_file(file) + # doc_text = '' + # for file in files: + # doc_text += '\n' + read_from_file(file) if len(messages) == 0: # 濡傛灉鏄涓�娆℃彁闂姞鍏ystem娑堟伅 messages.append({'role': 'system', 'content': assistant_msg}) @@ -380,14 +388,14 @@ g_completion = None return text - def generate_text(self, msg, cache_file, msgs=None, files=None, validation=None, try_cnt=5, json_text=False): + def generate_text(self, msg, cache_file, msgs=None, doc_text=None, validation=None, try_cnt=5, json_text=False): if msgs is None: msgs = [] if USE_CACHE and os.path.isfile(cache_file): text = read_from_file(cache_file) else: s = time.time() - text = self._gen(msgs, msg, files) + text = self._gen(msgs, msg, doc_text) text = remove_think_tag(text) if json_text: text = get_json_text(text) @@ -398,39 +406,27 @@ print(e) if try_cnt <= 0: raise RuntimeError('鐢熸垚澶辫触锛岄噸璇曟鏁板お澶氾紝寮哄埗缁撴潫锛�') - return self.generate_text_json(msg, cache_file, msgs, files, validation, try_cnt - 1) + return self.generate_text_json(msg, cache_file, msgs, doc_text, validation, try_cnt - 1) if cache_file: save_to_file(text, cache_file) print(f'鑰楁椂锛歿time.time() - s}') return text - def generate_text_json(self, msg, cache_file, msgs=None, files=None, validation=None, try_cnt=5): - return self.generate_text(msg, cache_file, msgs, files, validation, try_cnt, True) + def generate_text_json(self, msg, cache_file, msgs=None, doc_text=None, validation=None, try_cnt=5): + return self.generate_text(msg, cache_file, msgs, doc_text, validation, try_cnt, True) - def generate_tc_text(self, msg, cache_file, messages=None, files=None, validation=None, try_cnt=5): - if messages is None: - messages = [] - doc_text = '' - for file in files: - doc_text += '\n' + read_from_file(file) - if len(messages) == 0: - # 濡傛灉鏄涓�娆℃彁闂姞鍏ystem娑堟伅 - messages.append({'role': 'user', 'content': "浠ヤ笅鏄枃妗e唴瀹癸細\n" + doc_text}) - return self.generate_text_json(msg, cache_file, messages, files, validation, try_cnt) + def generate_tc_text(self, msg, cache_file, msgs=None, doc_text=None, validation=None, try_cnt=5): + return self.generate_text(msg, cache_file, msgs, doc_text, validation, try_cnt, True) def gen_project(self): - # _msg = """ - # 鏍规嵁鏂囨。杈撳嚭鍨嬪彿淇℃伅锛屽瀷鍙峰瓧娈靛寘鎷細鍚嶇О鍜屼唬鍙枫�備粎杈撳嚭鍨嬪彿杩欎竴绾с�� - # 渚嬪锛歿"name":"xxx","id":"xxx"} - # """ - # print('鍨嬪彿淇℃伅锛�') - # text = self.generate_text(_msg, 'out/鍨嬪彿淇℃伅.json', files=[file_map['搴旂敤杞欢鐢ㄦ埛闇�姹�']]) - # proj_dict = json.loads(text) - # 宸ョ▼淇℃伅浠庣郴缁熻幏鍙� - proj_dict = { - "id": "JB200001", - "name": "HY-4A" - } + _msg = """ + 鏍规嵁鏂囨。鍐呭杈撳嚭鍒嗙郴缁熶俊鎭紝鍒嗙郴缁熷瓧娈靛寘鎷細鍚嶇О鍜屽瀷鍙蜂唬鍙枫�備粎杈撳嚭鍒嗙郴缁熻繖涓�绾с�傚鏋滃瀷鍙蜂唬鍙蜂腑鏈夌鍙蜂篃瑕佽緭鍑猴紝淇濊瘉杈撳嚭瀹屾暣銆� + 渚嬪锛歿"name":"xxx","id":"xxx"} + """ + print('鍨嬪彿淇℃伅锛�') + doc_text = self.get_text_with_entity(['绯荤粺姒傝堪']) + text = self.generate_text_json(_msg, 'out/鍨嬪彿淇℃伅.json', doc_text=doc_text) + proj_dict = json.loads(text) code = proj_dict['id'] name = proj_dict['name'] proj = create_project(code, name, code, name, "", datetime.now()) @@ -495,7 +491,8 @@ assert isinstance(_devs, list), '鏁版嵁缁撴瀯鏈�澶栧眰涓嶆槸鏁扮粍' assert next(filter(lambda it: it['name'].endswith('绠$悊鍗曞厓'), _devs), None), '鐢熸垚鐨勮澶囧垪琛ㄤ腑娌℃湁绠$悊鍗曞厓' - text = self.generate_text_json(_msg, cache_file, files=[file_map['搴旂敤杞欢鐢ㄦ埛闇�姹�']], validation=validation) + doc_text = self.get_text_with_entity(['绯荤粺姒傝堪','鎬荤嚎绠$悊']) + text = self.generate_text_json(_msg, cache_file, doc_text=doc_text, validation=validation) devs = json.loads(text) # 绫籗MU璁惧锛屽寘鍚仴娴嬪拰閬ユ帶鍔熻兘锛屽悕绉扮粨灏句负鈥滅鐞嗗崟鍏冣�� @@ -550,9 +547,10 @@ 鍙傛暟淇℃伅瀛楁鍖呮嫭锛歯ame锛堝弬鏁板悕绉帮級銆乮d锛堝弬鏁颁唬鍙凤級銆乸os锛堝弬鏁拌捣濮媌it浣嶇疆锛夈�乴ength锛堝弬鏁癰it闀垮害锛夈�乼ype锛堢被鍨嬶細para锛夈�� 娉ㄦ剰锛� 1涓瓧鑺傜殑闀垮害涓�8浣嶏紝浣跨敤B0-B7鏉ヨ〃绀猴紝璇风簿纭绠楀弬鏁伴暱搴︺�� -鏂囨。涓綅缃弿杩颁俊鎭彲鑳藉瓨鍦ㄨ法瀛楄妭鐨勬儏鍐碉紝渚嬪锛�"Byte1_B6~Byte2_B0":琛ㄧず浠庣1涓瓧鑺傜殑绗�7浣嶅埌绗�2涓瓧鑺傜殑绗�1浣嶏紝闀垮害鏄�3;"Byte27_B7~Byte28_B0":琛ㄧず浠庣27涓瓧鑺傜殑绗�8浣嶅埌绗�28涓瓧鑺傜殑绗�1浣嶏紝闀垮害鏄�2銆� +鏂囨。涓綅缃弿杩颁俊鎭彲鑳藉瓨鍦ㄨ法瀛楄妭鐨勬儏鍐碉紝渚嬪锛�"Byte1_B6~Byte2_B0":琛ㄧず浠庣1涓瓧鑺傜殑绗�7浣嶅埌绗�2涓瓧鑺傜殑绗�1浣嶏紝闀垮害鏄�3;"Byte27_B7~Byte28_B0":琛ㄧず浠庣27涓瓧鑺傜殑绗�8浣嶅埌绗�28涓瓧鑺傜殑绗�1浣嶏紝闀垮害鏄�2;"Byte38~Byte74":琛ㄧず浠庣38涓瓧鑺傚埌绗�74涓瓧鑺傦紝涓棿鏈�37涓瓧鑺傦紝闀垮害鏄�298銆� #绾︽潫 - 涓嶈閬楁紡浠讳綍鍙傛暟锛� +- 濡傛灉鏈変唬鍙蜂弗鏍间緷鐓ф枃妗d腑鐨勪唬鍙凤紝鏂囨。涓殑浠e彿濡傛灉涓嶇鍚堜唬鍙峰懡鍚嶈鍒欏皢鐗规畩瀛楃杞崲涓轰笅鍒掔嚎锛屼緥濡傦細Rsv-1杞崲涓篟sv_1锛� - 鏁版嵁缁撴瀯鏈�澶栧眰涓烘暟缁勶紝鏁扮粍鍏冪礌涓哄弬鏁颁俊鎭璞★紱 - 浠呰緭鍑篔SON鏂囨湰銆� #渚嬪瓙 @@ -567,14 +565,14 @@ ] """ print('鎻掑叆鍩熷弬鏁板垪琛細') - files = [file_map['閬ユ祴澶х翰']] def validation(gen_text): params = json.loads(gen_text) assert isinstance(params, list), '鎻掑叆鍩熷弬鏁板垪琛ㄦ暟鎹粨鏋勬渶澶栧眰蹇呴』鏄暟缁�' assert len(params), '鎻掑叆鍩熷弬鏁板垪琛ㄤ笉鑳戒负绌�' - text = self.generate_text_json(_msg, './out/鎻掑叆鍩熷弬鏁板垪琛�.json', files=files, validation=validation) + doc_text = self.get_text_with_entity(['鎻掑叆鍩�']) + text = self.generate_text_json(_msg, './out/鎻掑叆鍩熷弬鏁板垪琛�.json', doc_text=doc_text, validation=validation) return json.loads(text) def gen_tm_frame_data(self): @@ -623,29 +621,31 @@ _vc_pkts = filter(lambda it: it['vcs'].__contains__(vc['id']), self.vc_pkts) for _pkt in _vc_pkts: # 鍒ゆ柇閬ユ祴鍖呮槸鍚︽湁璇︾粏瀹氫箟 - if not next(filter(lambda it: it['name'] == _pkt['name'] and it['hasParams'], self.tm_pkts), None): - continue + # if not next(filter(lambda it: it['name'] == _pkt['name'] and it['hasParams'], self.tm_pkts), None): + # continue # 鑾峰彇鍖呰鎯� _pkt = self.gen_pkt_details(_pkt['name'], _pkt['id']) epdu = next(filter(lambda it: it['name'] == '鏁版嵁鍩�', vc['children']), None) if epdu and _pkt: _pkt['children'] = _pkt['datas'] - _last_par = _pkt['children'][len(_pkt['children']) - 1] - _pkt['length'] = (_last_par['pos'] + _last_par['length']) - _pkt['pos'] = 0 - if 'children' not in epdu: - epdu['children'] = [] - # 娣诲姞瑙f瀽瑙勫垯鍚庣紑闃叉閲嶅 - _pkt['id'] = _pkt['id'] + '_' + vc['VCID'] - # 缁欏寘鍚嶅姞浠e彿鍓嶇紑 - if not _pkt['name'].startswith(_pkt['id']): - _pkt['name'] = _pkt['id'] + '_' + _pkt['name'] - epdu['children'].append(_pkt) - apid_node = next(filter(lambda it: it['name'].__contains__('搴旂敤杩囩▼'), _pkt['headers']), None) - ser_node = next(filter(lambda it: it['name'] == '鏈嶅姟', _pkt['headers']), None) - sub_ser_node = next(filter(lambda it: it['name'] == '瀛愭湇鍔�', _pkt['headers']), None) - _pkt['vals'] = \ - f"{apid_node['content']}/{int(ser_node['content'], 16)}/{int(sub_ser_node['content'], 16)}/" + # todo 褰撴暟鎹寘鑾峰彇鍒颁笢瑗夸絾涓嶆槸鍙傛暟鏃讹紝鑾峰彇鍒扮殑鍖呯粨鏋勬湁闂锛岄渶瑕佽繃婊� + if len(_pkt['children']) > 0: + _last_par = _pkt['children'][len(_pkt['children']) - 1] + _pkt['length'] = (_last_par['pos'] + _last_par['length']) + _pkt['pos'] = 0 + if 'children' not in epdu: + epdu['children'] = [] + # 娣诲姞瑙f瀽瑙勫垯鍚庣紑闃叉閲嶅 + _pkt['id'] = _pkt['id'] + '_' + vc['VCID'] + # 缁欏寘鍚嶅姞浠e彿鍓嶇紑 + if not _pkt['name'].startswith(_pkt['id']): + _pkt['name'] = _pkt['id'] + '_' + _pkt['name'] + epdu['children'].append(_pkt) + apid_node = next(filter(lambda it: it['name'].__contains__('搴旂敤杩囩▼'), _pkt['headers']), None) + ser_node = next(filter(lambda it: it['name'] == '鏈嶅姟', _pkt['headers']), None) + sub_ser_node = next(filter(lambda it: it['name'] == '瀛愭湇鍔�', _pkt['headers']), None) + _pkt['vals'] = \ + f"{apid_node['content']}/{int(ser_node['content'], 16)}/{int(sub_ser_node['content'], 16)}/" # 閲嶆柊璁℃暟璧峰鍋忕Щ self.compute_length_pos(cadu['children']) @@ -718,7 +718,8 @@ assert next(filter(lambda it: re.match('^[0-1]+$', it['VCID']), vcs)), '鐢熸垚鐨刅CID蹇呴』鏄簩杩涘埗' print('铏氭嫙淇¢亾锛�') - text = self.generate_text_json(_msg, "out/铏氭嫙淇¢亾.json", files=[file_map['閬ユ祴澶х翰']], validation=validation) + doc_text = self.get_text_with_entity(['铏氭嫙淇¢亾瀹氫箟']) + text = self.generate_text_json(_msg, "out/铏氭嫙淇¢亾.json", doc_text=doc_text, validation=validation) vcs = json.loads(text) return vcs @@ -743,131 +744,106 @@ dev_pkts = json.loads(text) return dev_pkts - def pkt_in_tm_pkts(self, pkt_name): - cache_file = f'out/鏁版嵁鍖�-{pkt_name}.json' - if os.path.isfile(cache_file): - return True - files = [file_map['閬ユ祴婧愬寘璁捐鎶ュ憡']] - print(f'鏂囨。涓湁鏃犫�渰pkt_name}鈥濈殑瀛楁鎻忚堪锛�', end='') - _msg = f""" -#瑙掕壊 -浣犳槸涓�鍚嶈祫娣辩殑杞欢宸ョ▼甯堛�� -#鎸囦护 -鎴戦渶瑕佷粠鏂囨。涓垎鏋愬垽璇绘槸鍚︽湁鏌愪釜閬ユ祴鍖呯殑瀛楁琛ㄦ弿杩帮紝浣犺甯姪鎴戝垽鏂�� -#闂 -鏂囨。涓湁閬ユ祴鍖呪�渰pkt_name}鈥濈殑瀛楁琛ㄦ弿杩板悧锛� -娉ㄦ剰锛氶仴娴嬪寘鐨勫瓧娈佃〃绱ф帴鐫�閬ユ祴鍖呯珷鑺傛爣棰橈紝濡傛灉绔犺妭鏍囬鍚庨潰鐪佺暐浜嗘垨鑰呰瑙亁xx鍒欐槸娌℃湁瀛楁琛ㄦ弿杩般�� -#绾︽潫 -- 鏍规嵁鏂囨。鍐呭杈撳嚭锛� -- 閬ユ祴鍖呭悕绉板繀椤诲畬鍏ㄥ尮閰嶏紱 -- 杈撳嚭鈥滄棤鈥濇垨鈥滄湁鈥濓紝涓嶈杈撳嚭鍏朵粬浠讳綍鍐呭銆� -#渚嬪瓙 -鏈� -""" - text = self.generate_text(_msg, f'out/pkts/鏈夋棤鏁版嵁鍖�-{pkt_name}.txt', [], files) - return text == '鏈�' - def gen_pkt_details(self, pkt_name, pkt_id): cache_file = f'out/鏁版嵁鍖�-{pkt_name}.json' - files = [file_map['閬ユ祴婧愬寘璁捐鎶ュ憡']] - if not os.path.isfile(cache_file): - # 鍏堥棶鏈�鍚庝竴涓弬鏁扮殑瀛楄妭浣嶇疆 - print(f'閬ユ祴婧愬寘鈥渰pkt_name}鈥濅俊鎭細') - _msg = f""" -#瑙掕壊 -浣犳槸涓�鍚嶈祫娣辩殑杞欢宸ョ▼甯堛�� -#鎸囦护 -鎴戦渶瑕佷粠鏂囨。涓彁鍙栭仴娴嬫簮鍖呯殑鏈�鍚庝竴涓弬鏁扮殑bit浣嶇疆鍜屾暟鎹煙鍙傛暟涓暟锛屼綘瑕佸府鎴戝畬鎴愬弬鏁癰it浣嶇疆鍜屾暟鎹煙鍙傛暟涓暟鐨勬彁鍙栥�� -#闇�姹� -杈撳嚭鏂囨。涓弿杩扮殑鍚嶇О涓衡�渰pkt_name}鈥濅唬鍙蜂负鈥渰pkt_id}鈥濋仴娴嬪寘鐨勬渶鍚庝竴涓弬鏁扮殑bit浣嶇疆鍜屾暟鎹煙鍙傛暟涓暟銆� -""" + """ -#绾︽潫 -- 閬ユ祴婧愬寘鐨勫唴瀹瑰湪涓�涓〃鏍间腑瀹氫箟锛岃〃鏍肩粨鏉熷垯鍖呭唴瀹圭粨鏉燂紱 -- 鏁版嵁鍩熶腑姣忎竴琛屽搴斾竴涓弬鏁帮紱 -- 涓嶈璺ㄨ〃鏍兼彁鍙栵紱 -- 瀛楄妭浣嶇疆涓瓧鑺備綅缃槸浠�1寮�濮嬬殑锛宐it浣嶇疆鏄粠0寮�濮嬬殑锛� -- bit浣嶇疆璁$畻鍏紡涓猴細(N-1)*8+B锛屽叾涓璑鏄瓧鑺傛暟锛孊鏄痓it鏁帮紱 -- 浠呰緭鍑簀son锛屼笉瑕佽緭鍑哄叾浠栦换浣曞瓧绗︺�� -#渚嬪瓙锛� -{"last_par_pos":128, "par_num": 20} -""" - text = self.generate_text_json(_msg, '', files=files) - result = json.loads(text) - last_par_pos = result['last_par_pos'] - par_num = result['par_num'] + + # _msg = f""" + # #瑙掕壊 + # 浣犳槸涓�鍚嶈祫娣辩殑杞欢宸ョ▼甯堛�� + # #鎸囦护 + # 鎴戦渶瑕佷粠鏂囨。涓彁鍙栭仴娴嬫簮鍖呯殑鏈�鍚庝竴涓弬鏁扮殑bit浣嶇疆鍜屾暟鎹煙鍙傛暟涓暟锛屼綘瑕佸府鎴戝畬鎴愬弬鏁癰it浣嶇疆鍜屾暟鎹煙鍙傛暟涓暟鐨勬彁鍙栥�� + # #闇�姹� + # 杈撳嚭鏂囨。涓弿杩扮殑鍚嶇О涓衡�渰pkt_name}鈥濅唬鍙蜂负鈥渰pkt_id}鈥濋仴娴嬪寘鐨勬渶鍚庝竴涓弬鏁扮殑bit浣嶇疆鍜屾暟鎹煙鍙傛暟涓暟銆� + # """ + """ + # #绾︽潫 + # - 閬ユ祴婧愬寘鐨勫唴瀹瑰湪涓�涓〃鏍间腑瀹氫箟锛岃〃鏍肩粨鏉熷垯鍖呭唴瀹圭粨鏉燂紱 + # - 鏁版嵁鍩熶腑姣忎竴琛屽搴斾竴涓弬鏁帮紱 + # - 涓嶈璺ㄨ〃鏍兼彁鍙栵紱 + # - 瀛楄妭浣嶇疆涓瓧鑺備綅缃槸浠�1寮�濮嬬殑锛宐it浣嶇疆鏄粠0寮�濮嬬殑锛� + # - bit浣嶇疆璁$畻鍏紡涓猴細(N-1)*8+B锛屽叾涓璑鏄瓧鑺傛暟锛孊鏄痓it鏁帮紱 + # - 浠呰緭鍑簀son锛屼笉瑕佽緭鍑哄叾浠栦换浣曞瓧绗︺�� + # #渚嬪瓙锛� + # {"last_par_pos":128, "par_num": 20} + # """ + + # text = self.generate_text_json(_msg, '', doc_text=doc_text) + # result = json.loads(text) + # last_par_pos = result['last_par_pos'] + # par_num = result['par_num'] - _msg = f""" -#瑙掕壊 -浣犳槸涓�鍚嶈祫娣辩殑杞欢宸ョ▼甯堛�� -#鎸囦护 -鎴戦渶瑕佷粠鏂囨。涓彁鍙栭仴娴嬫簮鍖呬俊鎭垪琛紝浣犺甯垜瀹屾垚閬ユ祴婧愬寘淇℃伅鍒楄〃鐨勬彁鍙栥�� -#闇�姹� -杈撳嚭鏂囨。涓弿杩扮殑鍚嶇О涓衡�渰pkt_name}鈥濅唬鍙蜂负鈥渰pkt_id}鈥濋仴娴嬪寘銆� -娉ㄦ剰锛氭渶鍚庝竴涓弬鏁扮殑璧峰bit鍋忕Щ浣嶇疆涓簕last_par_pos}銆� -""" + """ -閬ユ祴鍖呭瓧娈靛寘鎷細鍚嶇О(name)銆佷唬鍙�(id)銆佺被鍨�(type)銆佸寘澶村睘鎬у垪琛�(headers)銆佹暟鎹煙鍙傛暟鍒楄〃(datas)锛岀被鍨嬩负 linear锛� -鍖呭ご鐨勫睘鎬х殑瀛楁鍖呮嫭锛氬悕绉�(name)銆佷唬鍙�(id)銆佷綅缃�(pos)銆佸畾涔�(content)銆侀暱搴�(length)銆佺被鍨�(type)锛岀被鍨嬩负 para锛� -鏁版嵁鍩熷弬鏁板瓧娈靛寘鎷細鍙傛暟鍚嶇О(name)銆佸弬鏁颁唬鍙�(id)銆佷綅缃�(pos)銆侀暱搴�(length)銆佸瓧鑺傞『搴�(byteOrder)锛岀被鍨嬩负 para锛� + _msg = f""" + #瑙掕壊 + 浣犳槸涓�鍚嶈祫娣辩殑杞欢宸ョ▼甯堛�� + #鎸囦护 + 鎴戦渶瑕佷粠鏂囨。涓彁鍙栭仴娴嬫簮鍖呬俊鎭垪琛紝浣犺甯垜瀹屾垚閬ユ祴婧愬寘淇℃伅鍒楄〃鐨勬彁鍙栥�� + #闇�姹� + 杈撳嚭鏂囨。涓弿杩扮殑鍚嶇О涓衡�渰pkt_name}鈥濅唬鍙蜂负鈥渰pkt_id}鈥濋仴娴嬪寘銆� + """ + """ + 閬ユ祴鍖呭瓧娈靛寘鎷細鍚嶇О(name)銆佷唬鍙�(id)銆佺被鍨�(type)銆佸寘澶村睘鎬у垪琛�(headers)銆佹暟鎹煙鍙傛暟鍒楄〃(datas)锛岀被鍨嬩负 linear锛� + 鍖呭ご鐨勫睘鎬х殑瀛楁鍖呮嫭锛氬悕绉�(name)銆佷唬鍙�(id)銆佷綅缃�(pos)銆佸畾涔�(content)銆侀暱搴�(length)銆佺被鍨�(type)锛岀被鍨嬩负 para锛� + 鏁版嵁鍩熷弬鏁板瓧娈靛寘鎷細鍙傛暟鍚嶇О(name)銆佸弬鏁颁唬鍙�(id)銆佷綅缃�(pos)銆侀暱搴�(length)銆佸瓧鑺傞『搴�(byteOrder)锛岀被鍨嬩负 para锛� -鍖呭ご灞炴�у寘鎷細鍖呯増鏈彿銆佸寘绫诲瀷銆佸壇瀵煎ご鏍囪瘑銆佸簲鐢ㄨ繃绋嬫爣璇嗐�佸簭鍒楁爣璁般�佸寘搴忓垪璁℃暟銆佸寘闀裤�佹湇鍔°�佸瓙鏈嶅姟銆� -鍖呭ご灞炴�х殑闀垮害锛氬寘鐗堟湰鍙凤紙3锛夈�佸寘绫诲瀷锛�1锛夈�佸壇瀵煎ご鏍囪瘑锛�1锛夈�佸簲鐢ㄨ繃绋嬫爣璇嗭紙11锛夈�佸簭鍒楁爣璁帮紙2锛夈�佸寘搴忓垪璁℃暟锛�14锛夈�佸寘闀匡紙16锛夈�佹湇鍔★紙8锛夈�佸瓙鏈嶅姟锛�8锛夈�� + 鍖呭ご灞炴�у寘鎷細鍖呯増鏈彿銆佸寘绫诲瀷銆佸壇瀵煎ご鏍囪瘑銆佸簲鐢ㄨ繃绋嬫爣璇嗐�佸簭鍒楁爣璁般�佸寘搴忓垪璁℃暟銆佸寘闀裤�佹湇鍔°�佸瓙鏈嶅姟銆� + 鍖呭ご灞炴�х殑闀垮害锛氬寘鐗堟湰鍙凤紙3锛夈�佸寘绫诲瀷锛�1锛夈�佸壇瀵煎ご鏍囪瘑锛�1锛夈�佸簲鐢ㄨ繃绋嬫爣璇嗭紙11锛夈�佸簭鍒楁爣璁帮紙2锛夈�佸寘搴忓垪璁℃暟锛�14锛夈�佸寘闀匡紙16锛夈�佹湇鍔★紙8锛夈�佸瓙鏈嶅姟锛�8锛夈�� -琛ㄦ牸鍗曞厓鏍煎悎骞惰鏄庯細鍖呮牸涓瓨鍦ㄥ崟鍏冩牸鍚堝苟鐨勬儏鍐碉紝濡傛灉姘村钩鎴栧瀭鐩寸浉閭荤殑鍗曞厓鏍煎唴瀹逛竴鏍烽偅涔堣繖鍑犱釜鍐呭涓�鏍风殑鍗曞厓鏍兼湁鍙兘鏄竴涓悎骞跺崟鍏冩牸鍦ㄥ垎鏋愭椂搴旇褰撲綔鍚堝苟鍗曞厓鏍煎垎鏋愩�� -#绾︽潫 -- 浠e彿鍛藉悕瑙勫垯锛氭暟瀛椼�佽嫳鏂囧瓧姣嶅拰涓嬪垝绾跨粍鎴愪笖浠ヨ嫳鏂囧瓧姣嶅拰涓嬪垝绾垮紑澶达紱 -- 濡傛灉娌℃湁鍚嶇О鐢ㄤ唬鍙蜂唬鏇匡紝濡傛灉娌℃湁浠e彿鐢ㄥ悕绉扮殑鑻辨枃缈昏瘧浠f浛锛岀炕璇戝敖閲忕畝鐭紱 -- 濡傛灉鏈変唬鍙蜂弗鏍间緷鐓ф枃妗d腑鐨勪唬鍙凤紝鏂囨。涓殑浠e彿濡傛灉涓嶇鍚堜唬鍙峰懡鍚嶈鍒欏皢鐗规畩瀛楃杞崲涓轰笅鍒掔嚎锛屼緥濡傦細Rsv-1杞崲涓篟sv_1锛� -- 浣犻渶瑕佺悊瑙f暟鎹寘鐨勪綅缃俊鎭紝鐢变綅缃俊鎭緱鍒伴暱搴︼紝骞朵笖灏嗘墍鏈夎緭鍑哄崟浣嶇粺涓�杞崲涓� bits锛� -- pos瀛楁锛氭暟鍊肩被鍨嬶紝浠�0寮�濮嬭绠楋紝鐢遍暱搴︼紙length锛夌疮鍔犲緱鍒帮紱 -- 搴旂敤杩囩▼鏍囪瘑锛氬鏋滀笉鏄崄鍏繘鍒惰浆鎹负鍗佸叚杩涘埗锛岃浆鎹㈠畬鎴愬悗瑕侀獙璇佹槸鍚︽纭紝浠�0x寮�澶达紝锛� -- 鍖呭ご鍚庨潰鐨勬瘡涓�琛岄兘瀵瑰簲涓�涓弬鏁帮紝閫愯杈撳嚭鍙傛暟锛屼笉瑕侀仐婕忎换浣曞弬鏁帮紱 -- 绫讳技鈥濅繚鐣欙紙Rsv锛夆�滅殑琛屼篃瑕佸綋鍙傛暟鐢熸垚锛� -- 閲嶅鐨勮涔熻鐢熸垚锛� -- 娉ㄦ剰鍖呭唴瀹圭殑鑼冨洿锛屼笉瑕佹彁鍙栧埌鍏朵粬鍖呬腑鐨勫唴瀹癸紝鍖呭唴瀹归兘鍦ㄥ悓涓�涓〃鏍间腑锛� -- 瀛楄妭椤哄簭锛氬�间负澶х鈥淏鈥濓紝灏忕鈥淟鈥濓紝榛樿涓衡�淏鈥濓紱 -- 杈撳嚭涓ユ牸鎸夌収鏂囨。涓殑鍐呭鐢熸垚锛屼笉瑕佸垱閫犳枃妗d腑涓嶅瓨鍦ㄧ殑鍐呭锛� -- 浠呰緭鍑簀son锛屼笉瑕佽緭鍑轰换浣曞叾浠栧唴瀹广�� -#渚嬪瓙 -{ - "name": "鏁扮缂撳彉閬ユ祴鍖�", - "id": "PMS003", - "type": "linear", - "headers": [ - { - "name": "鍖呮爣璇�", - "id": "packetIdentifier", - "pos": 0, - "content": "000", - "length": 8, - "type": "para" - } - ], - "datas": [ - { - "name": "XXX鍖�", - "id": "XXX", - "pos": 0, - "length": 8, - "byteOrder": "" - } - ] -""" - print(f'閬ユ祴婧愬寘鈥渰pkt_name}鈥濅俊鎭細') + 琛ㄦ牸鍗曞厓鏍煎悎骞惰鏄庯細鍖呮牸涓瓨鍦ㄥ崟鍏冩牸鍚堝苟鐨勬儏鍐碉紝濡傛灉姘村钩鎴栧瀭鐩寸浉閭荤殑鍗曞厓鏍煎唴瀹逛竴鏍烽偅涔堣繖鍑犱釜鍐呭涓�鏍风殑鍗曞厓鏍兼湁鍙兘鏄竴涓悎骞跺崟鍏冩牸鍦ㄥ垎鏋愭椂搴旇褰撲綔鍚堝苟鍗曞厓鏍煎垎鏋愩�� + #绾︽潫 + - 浠e彿鍛藉悕瑙勫垯锛氭暟瀛椼�佽嫳鏂囧瓧姣嶅拰涓嬪垝绾跨粍鎴愪笖浠ヨ嫳鏂囧瓧姣嶅拰涓嬪垝绾垮紑澶达紱 + - 濡傛灉娌℃湁鍚嶇О鐢ㄤ唬鍙蜂唬鏇匡紝濡傛灉娌℃湁浠e彿鐢ㄥ悕绉扮殑鑻辨枃缈昏瘧浠f浛锛岀炕璇戝敖閲忕畝鐭紱 + - 濡傛灉鏈変唬鍙蜂弗鏍间緷鐓ф枃妗d腑鐨勪唬鍙凤紝鏂囨。涓殑浠e彿濡傛灉涓嶇鍚堜唬鍙峰懡鍚嶈鍒欏皢鐗规畩瀛楃杞崲涓轰笅鍒掔嚎锛屼緥濡傦細Rsv-1杞崲涓篟sv_1锛� + - 浣犻渶瑕佺悊瑙f暟鎹寘鐨勪綅缃俊鎭紝鐢变綅缃俊鎭緱鍒伴暱搴︼紝骞朵笖灏嗘墍鏈夎緭鍑哄崟浣嶇粺涓�杞崲涓� bits锛� + - pos瀛楁锛氭暟鍊肩被鍨嬶紝浠�0寮�濮嬭绠楋紝鐢遍暱搴︼紙length锛夌疮鍔犲緱鍒帮紱 + - 搴旂敤杩囩▼鏍囪瘑锛氬簲鐢ㄨ繃绋嬫爣璇嗙殑瀹氫箟濡傛灉涓嶆槸鍗佸叚杩涘埗杞崲涓哄崄鍏繘鍒讹紝杞崲瀹屾垚鍚庤楠岃瘉鏄惁姝g‘锛屼互0x寮�澶达紱 + - 鍖呭ご鍚庨潰鐨勬瘡涓�琛岄兘瀵瑰簲涓�涓弬鏁帮紝閫愯杈撳嚭鍙傛暟锛屼笉瑕侀仐婕忎换浣曞弬鏁帮紱 + - 绫讳技鈥濅繚鐣欙紙Rsv锛夆�滅殑琛屼篃瑕佸綋鍙傛暟鐢熸垚锛� + - 閲嶅鐨勮涔熻鐢熸垚锛� + - 娉ㄦ剰鍖呭唴瀹圭殑鑼冨洿锛屼笉瑕佹彁鍙栧埌鍏朵粬鍖呬腑鐨勫唴瀹癸紝鍖呭唴瀹归兘鍦ㄥ悓涓�涓〃鏍间腑锛� + - 瀛楄妭椤哄簭锛氬�间负澶х鈥淏鈥濓紝灏忕鈥淟鈥濓紝榛樿涓衡�淏鈥濓紱 + - 杈撳嚭涓ユ牸鎸夌収鏂囨。涓殑鍐呭鐢熸垚锛屼笉瑕佸垱閫犳枃妗d腑涓嶅瓨鍦ㄧ殑鍐呭锛� + - 浠呰緭鍑簀son锛屼笉瑕佽緭鍑轰换浣曞叾浠栧唴瀹广�� + #渚嬪瓙 + { + "name": "鏁扮缂撳彉閬ユ祴鍖�", + "id": "PMS003", + "type": "linear", + "headers": [ + { + "name": "鍖呮爣璇�", + "id": "packetIdentifier", + "pos": 0, + "content": "000", + "length": 8, + "type": "para" + } + ], + "datas": [ + { + "name": "XXX鍖�", + "id": "XXX", + "pos": 0, + "length": 8, + "byteOrder": "" + } + ] + """ - def validation(gen_text): - _pkt = json.loads(gen_text) - with open(f'out/tmp/{time.time()}.json', 'w') as f: - f.write(gen_text) - assert 'headers' in _pkt, '鍖呯粨鏋勪腑蹇呴』鍖呭惈headers瀛楁' - assert 'datas' in _pkt, '鍖呯粨鏋勪腑蹇呴』鍖呭惈datas瀛楁' - print(f'鍙傛暟涓暟锛歿len(_pkt["datas"])}') - # assert par_num == len(_pkt['datas']), f'鏁版嵁鍩熷弬鏁颁釜鏁颁笉瀵癸紒棰勮{par_num}涓紝瀹為檯{len(_pkt["datas"])}' - assert last_par_pos == _pkt['datas'][-1]['pos'], '鏈�鍚庝竴涓弬鏁扮殑瀛楄妭浣嶇疆涓嶅锛�' + print(f'閬ユ祴婧愬寘鈥渰pkt_name}鈥濅俊鎭細') - text = self.generate_text_json(_msg, cache_file, [], files, validation) - pkt = json.loads(text) - else: - pkt = json.loads(read_from_file(cache_file)) + def validation(gen_text): + _pkt = json.loads(gen_text) + with open(f'out/tmp/{time.time()}.json', 'w') as f: + f.write(gen_text) + assert 'headers' in _pkt, '鍖呯粨鏋勪腑蹇呴』鍖呭惈headers瀛楁' + assert 'datas' in _pkt, '鍖呯粨鏋勪腑蹇呴』鍖呭惈datas瀛楁' + # assert par_num == len(_pkt['datas']), f'鏁版嵁鍩熷弬鏁颁釜鏁颁笉瀵癸紒棰勮{par_num}涓紝瀹為檯{len(_pkt["datas"])}' + # assert last_par_pos == _pkt['datas'][-1]['pos'], '鏈�鍚庝竴涓弬鏁扮殑瀛楄妭浣嶇疆涓嶅锛�' + + doc_text = self.get_text_with_entity([pkt_id]) + if doc_text == '': + return None + text = self.generate_text_json(_msg, cache_file, [], doc_text, validation) + pkt = json.loads(text) + pkt_len = 0 for par in pkt['datas']: par['pos'] = pkt_len @@ -882,14 +858,12 @@ #鎸囦护 鎴戦渶瑕佷粠鏂囨。涓彁鍙栭仴娴嬪寘鏁版嵁锛屼綘瑕佹牴鎹枃妗e唴瀹瑰府鎴戝畬鎴愰仴娴嬪寘鏁版嵁鐨勬彁鍙栥�� #闇�姹� -杈撳嚭鏂囨。涓弿杩扮殑閬ユ祴鍖呭垪琛紝閬ユ祴鍖呭瓧娈靛寘鎷細鍚嶇О(name)銆佷唬鍙�(id)銆佹槸鍚︽湁鍙傛暟(hasParams)銆� +杈撳嚭鏂囨。涓弿杩扮殑閬ユ祴鍖呭垪琛紝閬ユ祴鍖呭瓧娈靛寘鎷細鍚嶇О(name)銆佷唬鍙�(id)銆� 瀛楁鎻忚堪锛� 1.鍚嶇О锛氶仴娴嬪寘鐨勫悕绉帮紱 2.浠e彿锛氶仴娴嬪寘鐨勪唬鍙凤紱 -3.鏄惁鏈夊弬鏁帮細琛ㄧず褰撳墠閬ユ祴鍖呮槸鍚︽湁鍙傛暟鍒楄〃锛岄仴娴嬪寘鐨勫弬鏁拌〃绱ф帴鐫�閬ユ祴鍖呯珷鑺傛爣棰橈紝濡傛灉绔犺妭鏍囬鍚庨潰鐪佺暐浜嗘垨鑰呯被浼尖�濊瑙亁xx鈥滃垯鏄病鏈夊弬鏁拌〃銆� #绾︽潫 - name锛氬悕绉颁腑涓嶈鍖呭惈浠e彿锛屼粎浠庢枃妗d腑鎻愬彇婧愬寘鍚嶇О锛� -- hasParams锛氬�间负甯冨皵鍊硷紝true鎴杅alse锛� - 濡傛灉娌℃湁浠e彿锛屼娇鐢ㄩ仴娴嬪寘鍚嶇О鐨勮嫳鏂囩炕璇戜唬鏇匡紱 - 濡傛灉娌℃湁鍚嶇О鐢ㄤ唬鍙蜂唬鏇匡紱 - 涓嶈婕忔帀浠讳綍閬ユ祴鍖咃紱 @@ -899,13 +873,12 @@ { "name": "鏁扮鏁板瓧閲忓揩閫熸簮鍖�", "id": "PMS001", - "hasParams": true } ] """ print(f'閬ユ祴婧愬寘鍒楄〃锛�') - files = [file_map['閬ユ祴婧愬寘璁捐鎶ュ憡']] - text = self.generate_text_json(_msg, 'out/婧愬寘鍒楄〃.json', [], files) + doc_text = self.get_text_with_entity(['婧愬寘鍒楄〃']) + text = self.generate_text_json(_msg, 'out/婧愬寘鍒楄〃.json', doc_text=doc_text) pkt = json.loads(text) return pkt @@ -914,11 +887,10 @@ #瑙掕壊 浣犳槸涓�鍚嶈祫娣辫蒋浠跺伐绋嬪笀銆� #鎸囦护 -鎴戦渶瑕佷粠鏂囨。涓彁鍙栭仴娴嬫簮鍖呬俊鎭紝浣犺甯姪鎴戝畬鎴愰仴娴嬫簮鍖呬俊鎭殑鎻愬彇銆� +鎴戦渶瑕佷粠鏂囨。涓彁鍙栨墍鏈夐仴娴嬫簮鍖呬俊鎭紝浣犺甯姪鎴戝畬鎴愰仴娴嬫簮鍖呬俊鎭殑鎻愬彇銆� #闇�姹� -鏍规嵁鈥濋仴娴嬫簮鍖呬笅浼犳椂鏈哄畾涔夆�滅珷鑺傜殑鍐呭杈撳嚭鍚勪釜閬ユ祴婧愬寘淇℃伅鍒楄〃锛岄《绾х粨鏋勪负鏁扮粍鍏冪礌涓洪仴娴嬫簮鍖咃紝婧愬寘瀛楁鍖呮嫭锛氬寘浠e彿(id)锛屽悕绉�(name)锛屾墍灞炶櫄鎷熶俊閬�(vcs)锛屼笅浼犳椂鏈猴紙timeTags锛夈�� +鏍规嵁鏂囨。鍐呭杈撳嚭閬ユ祴婧愬寘淇℃伅锛岄《绾х粨鏋勪负鏁扮粍锛屽厓绱犱负閬ユ祴婧愬寘锛屾簮鍖呭瓧娈靛寘鎷細鍖呬唬鍙�(id)锛屽悕绉�(name)锛屾墍灞炶櫄鎷熶俊閬�(vcs)锛屼笅浼犳椂鏈猴紙timeTags锛夈�� #绾︽潫 -- 浠庘�濋仴娴嬫簮鍖呬笅浼犳椂鏈哄畾涔夆�滅珷鑺備腑鎻愬彇閬ユ祴婧愬寘淇℃伅锛� - 鎵�灞炶櫄鎷熶俊閬擄細蹇呴』鏄枃妗d腑鎻忚堪鐨勯仴娴嬭櫄鎷熶俊閬撲唬鍙凤紙搴忓彿锛夛紱 - 涓嬩紶鏃舵満锛氫笌琛ㄦ牸涓畾涔夌殑涓�鑷达紱 - 涓嶈閬楁紡浠讳綍閬ユ祴婧愬寘銆� @@ -932,14 +904,13 @@ }, ] """ - files = [file_map['閬ユ祴澶х翰']] print('閬ユ祴婧愬寘鎵�灞炶櫄鎷熶俊閬擄細') - def validation(gen_text): pkts = json.loads(gen_text) assert len(pkts), 'VC婧愬寘鍒楄〃涓嶈兘涓虹┖' - text = self.generate_text_json(_msg, 'out/閬ユ祴VC婧愬寘.json', files=files, validation=validation) + doc_text = self.get_text_with_entity(['铏氭嫙淇¢亾瀹氫箟','閬ユ祴婧愬寘涓嬩紶鏃舵満']) + text = self.generate_text_json(_msg, 'out/閬ユ祴VC婧愬寘.json', doc_text=doc_text, validation=validation) pkt_vcs = json.loads(text) return pkt_vcs @@ -1044,7 +1015,10 @@ def validation(gen_text): json.loads(gen_text) - text = self.generate_text_json(_msg, 'out/鎬荤嚎.json', files=[file_map['鎬荤嚎浼犺緭閫氫俊甯у垎閰�']], + + + doc_text = self.get_text_with_entity(['RT鍦板潃鍒嗛厤','鍒嗙郴缁熸簮鍖�']) + text = self.generate_text_json(_msg, 'out/鎬荤嚎.json', doc_text=doc_text, validation=validation) pkts = json.loads(text) # 绛涢�夌粡鎬荤嚎鐨勬暟鎹寘 @@ -1053,11 +1027,7 @@ # 绛涢�夋湁apid鐨勬暟鎹寘 pkts = list(filter(lambda it: it['apid'], pkts)) - pkts2 = [] for pkt in pkts: - if self.pkt_in_tm_pkts(pkt["name"]): - pkts2.append(pkt) - for pkt in pkts2: _pkt = self.gen_pkt_details(pkt['name'], pkt['id']) if _pkt: pkt['children'] = [] @@ -1291,7 +1261,8 @@ def validation(gen_text): json.loads(gen_text) - text = self.generate_tc_text(_msg, 'out/tc_transfer_frame.json', files=[file_map['鎸囦护鏍煎紡']], + doc_text = self.get_text_with_entity(['閬ユ帶甯ф牸寮�']) + text = self.generate_tc_text(_msg, 'out/tc_transfer_frame.json', doc_text=doc_text, validation=validation) result: dict = json.loads(text) format_text = utils.read_from_file('tpl/tc_transfer_frame.json') @@ -1332,7 +1303,8 @@ def validation(gen_text): json.loads(gen_text) - text = self.generate_tc_text(_msg, 'out/tc_transfer_pkt.json', files=[file_map['鎸囦护鏍煎紡']], + doc_text = self.get_text_with_entity(['閬ユ帶鍖呮牸寮�']) + text = self.generate_tc_text(_msg, 'out/tc_transfer_pkt.json', doc_text=doc_text, validation=validation) result = json.loads(text) @@ -1346,7 +1318,10 @@ # 瑙掕壊 浣犳槸涓�鍚嶈祫娣辩殑杞欢宸ョ▼甯堛�� # 鎸囦护 -鍒嗘瀽鏂囨。鍒楀嚭鎵�鏈夌殑閬ユ帶婧愬寘銆� +鍒嗘瀽鏂囨。鍒楀嚭鎵�鏈夌殑閬ユ帶鎸囦护銆� +# 绾︽潫 +- 搴旂敤杩囩▼鏍囪瘑锛氬簲鐢ㄨ繃绋嬫爣璇嗗氨鏄疉PID锛屼竴鑸細鍦ㄥ悕绉板悗鐨勬嫭鍙蜂腑鍒楀嚭鏉� +- code鏄寚浠や唬鍙凤紝娌℃湁灏辩┖鐫� # 杈撳嚭渚嬪瓙锛� [{ "name": "xxx", @@ -1360,7 +1335,8 @@ def validation(gen_text): json.loads(gen_text) - text = self.generate_tc_text(_msg, 'out/tc_transfer_pkts.json', files=[file_map['鎸囦护鏍煎紡']], + doc_text = self.get_text_with_entity(['APID鍒嗛厤']) + text = self.generate_tc_text(_msg, 'out/tc_transfer_pkts.json', doc_text=doc_text, validation=validation) pkts = json.loads(text) return pkts @@ -1415,8 +1391,11 @@ def validation(gen_text): json.loads(gen_text) + doc_text = self.get_text_with_entity([tc_name]) + if doc_text == '': + return None text = self.generate_tc_text(_msg, f'out/閬ユ帶鎸囦护鏁版嵁鍩�-{tc_code}-{utils.to_file_name(tc_name)}.json', - files=[file_map['鎸囦护鏍煎紡']], + doc_text=doc_text, validation=validation) result = json.loads(text) pkt['children'] = result -- Gitblit v1.9.1