From 4283e2c161d94405ac2a32e9dd5efe3c752e9ae1 Mon Sep 17 00:00:00 2001 From: Ivan Vazhenin Date: Sun, 26 Mar 2023 18:10:05 +0300 Subject: [PATCH] Fix GetCatalog --- main.py | 67 +++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 56 insertions(+), 11 deletions(-) diff --git a/main.py b/main.py index 4a19f73..8286d94 100644 --- a/main.py +++ b/main.py @@ -44,7 +44,7 @@ def restore_uuid(oid): return str(uuid) -def get_catalog(params, files, url): +def load_catalog(params, files, url): date = datetime.datetime.now() rxmls = RequestXmlService() req = ET.fromstring(params['query_data']) @@ -99,7 +99,6 @@ def get_objects(params, files, url): main_filename = None for uid in uids: obj = json.loads(get_object(uid)) - print(type(obj)) for file in obj['properties'].get('c1000', []): if not main_filename: main_filename = file['fileName'] @@ -107,20 +106,66 @@ def get_objects(params, files, url): zipf.writestr(f'{main_filename}/{file["fileName"]}', res.content) zipf.close() response_files = [{'name': filename, 'url': filepath, 'size': os.path.getsize(filepath)}] - print(response_files) - # proxy = ServerProxy(url) - # proxy.send(response_params, response_files, 'http://10.10.8.27:9000/') + proxy = ServerProxy(url) + proxy.send(response_params, response_files, 'http://10.10.8.27:9000/') def get_metadata(params, files, url): - pass + date = datetime.datetime.now() + rxmls = RequestXmlService() + req = ET.fromstring(params['query_data']) + req_id = rxmls.get_request_uuid(req) + res_id = uuid4().hex + res = rxmls.get_request_document(res_id, req_id) + rxmls.set_result(res, 0, '') + objs = req.find('getMetadataByIds') + uids = [restore_uuid(x.get('id')) for x in objs.findall('chart')] + + rxmls.set_result(res, 0, '') + response_params = { + 'from': params['to'], + 'to': params['from'], + 'ts_added': date.timestamp(), + 'user_id': '1', + 'user_id_to': params['user_id'], + 'query_type': 1024, + 'query_data': ET.tostring(res, encoding='unicode', xml_declaration=True) + } + filename = uuid4().hex + filepath = '/tmp/' + filename + zipf = zipfile.ZipFile(filepath, "w") + content = ET.Element('getMetadataResponse') + + for uid in uids: + obj = json.loads(get_object(uid)) + date = datetime.datetime.fromisoformat(obj['date_updated']) + chart = ET.SubElement(content, 'chart', { + 'id': UUID(obj['uid']).hex, + 'updated': str(date.timestamp()), + }) + for key in obj['properties']: + if not key.startswith('c'): + continue + mdel = ET.SubElement(chart, 'mdItem', { + 'code': key.replace('_', '.'), + 'name': key, + 'value': str(obj['properties'].get(key, '')), + 'isBase': 'false', + 'groupId': '', + 'groupName': '', + }) + zipf.writestr(f'metadata.xml', ET.tostring(content, encoding='unicode', xml_declaration=True)) + zipf.close() + response_files = [{'name': filename, 'url': filepath, 'size': os.path.getsize(filepath)}] + proxy = ServerProxy(url) + proxy.send(response_params, response_files, 'http://10.10.8.27:9000/') def accept(params, files, url): print(params, files, url) print('Accept') if params['query_type'] == 4: - get_catalog(params, files, url) + load_catalog(params, files, url) if params['query_type'] == 1: get_objects(params, files, url) if params['query_type'] == 24: @@ -150,13 +195,13 @@ def main(): def test(): - params = {"from": "tcp://kptsp_vb", "query_data": "
", "query_type": 1, "to": "tcp://bnd127", "user_id": "3302", "ts_added": 1679825320.653038} + params = {"from": "tcp://kptsp_vb", "query_data": "
", "query_type": 24, "to": "tcp://bnd127", "user_id": "3302", "ts_added": 1679825320.653038} files = [] url = 'http://127.0.0.1:7000/xmlrpc' # accept(params, files, url) - get_objects(params, files, url) + get_metadata(params, files, url) if __name__ == '__main__': - # main() - test() + main() + # test()