Fix GetCatalog

This commit is contained in:
Ivan Vazhenin
2023-03-26 15:29:17 +03:00
parent 65c0b561a7
commit c2383140b6
12 changed files with 109 additions and 34 deletions

84
main.py
View File

@@ -1,14 +1,16 @@
import datetime
from uuid import uuid4
import json
from uuid import uuid4, UUID
from xmlrpc.server import SimpleXMLRPCServer
from xmlrpc.client import ServerProxy
import logging
import os
import os.path
from requests.graphql import get_catalog
import requests
from reqs.graphql import get_catalog, get_object
from pygost import gost34112012256
import xml.etree.ElementTree as ET
from requests.request_xml_service import RequestXmlService
from reqs.request_xml_service import RequestXmlService
import zipfile
PASSWORD = 'gost_2012$a742ec53198ec2a5027086fba8814a89982a57112d1a72d02260161108f39b50'
@@ -37,11 +39,13 @@ def auth_challenge():
return uuid4().hex
def accept(params, files, url):
print(params, files, url)
print('Accept')
def restore_uuid(oid):
uuid = UUID(oid)
return str(uuid)
def get_catalog(params, files, url):
date = datetime.datetime.now()
if params['query_type'] == 4:
rxmls = RequestXmlService()
req = ET.fromstring(params['query_data'])
req_id = rxmls.get_request_uuid(req)
@@ -53,7 +57,7 @@ def accept(params, files, url):
'to': params['from'],
'ts_added': date.timestamp(),
'user_id': '1',
'user_id_to': '3302',
'user_id_to': params['user_id'],
'query_type': 1004,
'query_data': ET.tostring(res, encoding='unicode', xml_declaration=True)
}
@@ -66,6 +70,61 @@ def accept(params, files, url):
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 get_objects(params, files, url):
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('objects')
uids = [restore_uuid(x.get('object_id')) for x in objs.findall('object')]
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': 1001,
'query_data': ET.tostring(res, encoding='unicode', xml_declaration=True)
}
filename = uuid4().hex
filepath = '/tmp/' + filename
zipf = zipfile.ZipFile(filepath, "w")
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']
res = requests.get(f'https://gql.ivazh.ru/item/{file["key"]}')
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/')
def get_metadata(params, files, url):
pass
def accept(params, files, url):
print(params, files, url)
print('Accept')
if params['query_type'] == 4:
get_catalog(params, files, url)
if params['query_type'] == 1:
get_objects(params, files, url)
if params['query_type'] == 24:
get_metadata(params, files, url)
return True
@@ -91,12 +150,13 @@ def main():
def test():
params = {'from': 'tcp://kptsp_vb', 'query_data': '<?xml version="1.0" encoding="utf-8"?><request><header parcel_id="1665c872f24e46589f36d264a75a72dd"/><getCatalog from="1675776233.21" withRef="NO"/></request>', 'query_type': 4, 'to': 'tcp://bnd127', 'user_id': '1', 'ts_added': 1679213998.282467}
params = {"from": "tcp://kptsp_vb", "query_data": "<?xml version=\"1.0\" encoding=\"utf-8\"?><request><header parcel_id=\"990715ba919544a98f22cc7d3b0d9e8d\"/><objects><object object_id=\"fc44343bd1654ee7b03ac1731567bbfd\"/><object object_id=\"13526ac78c574036879e1ec31bb78779\"/><object object_id=\"06b8a23c9a894bc5a5f9e6baa3540f87\"/><object object_id=\"6b02b39791064054852d5e165ff1dfc0\"/><object object_id=\"b81e42e704fe4054986956b2b920661d\"/><object object_id=\"c002a570f05745a2943a78686f3f17c0\"/><object object_id=\"2b15bf0f25e842b6a3b5d9762f2334a7\"/><object object_id=\"294ac9e83d3f4cf380cb0b99f592452b\"/><object object_id=\"a8901d5e642a410c909701e015644f69\"/><object object_id=\"1989b9dc8e114aaca0508cb9241afc5b\"/><object object_id=\"cf2df49a4e9143ffacf490b3138d26bd\"/><object object_id=\"c9861cfc30c641619ae9691f8c7d9c4d\"/><object object_id=\"87ebaff5ab2c411b97626b634d709f38\"/><object object_id=\"735e00c4211344bdaca2ac2332323613\"/><object object_id=\"05cff3bd9f6f4c36a51877c13fda1909\"/><object object_id=\"2178a4d06b6b407db826733c496a596d\"/><object object_id=\"8892c660d75747deaee6bab6163fde04\"/><object object_id=\"3be29dac7e6f45908910492967e3cb08\"/><object object_id=\"53667890f4f84e38a9cd7ab9a63a6193\"/><object object_id=\"69a3a5978f1e449f9729d5d47e0690ad\"/><object object_id=\"9405cc3528c345b1ad200714bb0fec32\"/><object object_id=\"068ab6d165004f9fb6d778a9e2593fd2\"/><object object_id=\"e90b6799c3a2418fa65f6e2f91c53f64\"/><object object_id=\"b209864a514a4d4eae7038a9585e9306\"/><object object_id=\"5f2287cdfeb54eddaa42cc80b21ec081\"/><object object_id=\"a87271f9a4e74b82bc9191cdc36c2783\"/><object object_id=\"bea81cc3b3e842e997594c6e95526456\"/><object object_id=\"13c6fc2edb544a2d98a4f3f10af4fdd1\"/><object object_id=\"9edb7a886d2847fbae83eba272cd3940\"/><object object_id=\"989e0d92955c4adfa3bfe045c6f11d82\"/><object object_id=\"0ebec61db2204477b4b49a20592c818a\"/><object object_id=\"d198d63bc9ed4dfb8f84c3fc5a4146c5\"/><object object_id=\"389482afd85147b2ac397a644f72e3dc\"/><object object_id=\"0e997a62f9c4421b93a284dad938faf4\"/><object object_id=\"dc29afc0ca53472d88e8b58e460ed614\"/><object object_id=\"ded736abc1954413b17e6d283c686b04\"/><object object_id=\"5de7020a497d4e119de0e6f5b869aba3\"/><object object_id=\"d3cfdc9e51fc489cac8a8a9e6285f292\"/><object object_id=\"b812ed1698e2454dbf84595a2addff8f\"/><object object_id=\"fa28d2774a054542a6b7c437ee68f148\"/><object object_id=\"b7fab9c8285f47b699cb5bb6259b7b03\"/><object object_id=\"f8f867f7aa964785ab1e0e84428070c2\"/><object object_id=\"d1cb0bb2c21e4e99b06fcda8f627c720\"/><object object_id=\"41f6531a611143f3a64d3e55f347ed06\"/><object object_id=\"6fb3b57ec8df48e4bfe6f19bef387a61\"/><object object_id=\"97598f541b494606a437a9b5ee5433aa\"/><object object_id=\"d5289e3969cc47a7b50a01ed6f4b41fd\"/><object object_id=\"22ba8c4cf4154874ac98ec42cd053d72\"/><object object_id=\"7ec173a9d51e4babbc0feae70d754c99\"/><object object_id=\"343cd1ee95ce4a3e9d51336a2d0291e9\"/></objects></request>", "query_type": 1, "to": "tcp://bnd127", "user_id": "3302", "ts_added": 1679825320.653038}
files = []
url = 'http://127.0.0.1:7000/xmlrpc'
accept(params, files, url)
# accept(params, files, url)
get_objects(params, files, url)
if __name__ == '__main__':
main()
# test()
# main()
test()

View File

@@ -28,3 +28,17 @@ def get_catalog():
)
result = client.execute(query)
return result['getCatalog']
def get_object(oid: str):
client = Client(transport=transport, fetch_schema_from_transport=True)
query = gql(
"""
query getObjects($oid: String!) {
getObject(name: "ood", oid: $oid)
}
"""
)
params = {'oid': oid}
result = client.execute(query, variable_values=params)
return result['getObject']

View File

@@ -1,5 +1,5 @@
import xml.etree.ElementTree as ET
from requests.messages import Messages
from reqs.messages import Messages
class RequestXmlService:

View File

@@ -1,2 +1,3 @@
gql~=3.4.0
pygost~=5.11
requests~=2.28.2