diff --git a/getMetadata.data b/getMetadata.data
new file mode 100644
index 0000000..bbfd9e0
--- /dev/null
+++ b/getMetadata.data
@@ -0,0 +1 @@
+b'{"files": [], "callback": "http://userv:8008/xmlrpc", "state": 0, "params": {"from": "tcp://kptsp_vb", "query_data": "", "query_type": 24, "to": "tcp://bnd127", "user_id": "3302", "ts_added": 1679825511.7273829}}'
diff --git a/getObjects.data b/getObjects.data
new file mode 100644
index 0000000..43ab9f2
--- /dev/null
+++ b/getObjects.data
@@ -0,0 +1 @@
+b'{"files": [], "callback": "http://userv:8008/xmlrpc", "state": 0, "params": {"from": "tcp://kptsp_vb", "query_data": "", "query_type": 1, "to": "tcp://bnd127", "user_id": "3302", "ts_added": 1679825320.653038}}'
diff --git a/main.py b/main.py
index e4b7135..c3e0e27 100644
--- a/main.py
+++ b/main.py
@@ -1,11 +1,15 @@
+import datetime
from uuid import uuid4
from xmlrpc.server import SimpleXMLRPCServer
from xmlrpc.client import ServerProxy
import logging
import os
-import requests.graphql
+import os.path
+from requests.graphql import get_catalog
from pygost import gost34112012256
-
+import xml.etree.ElementTree as ET
+from requests.request_xml_service import RequestXmlService
+import zipfile
PASSWORD = 'gost_2012$a742ec53198ec2a5027086fba8814a89982a57112d1a72d02260161108f39b50'
@@ -29,25 +33,57 @@ def auth_response(challenge, server_id, is_server):
def auth_challenge():
- logging.debug('get challenge')
+ # logging.debug('get challenge')
return uuid4().hex
def accept(params, files, url):
print(params, files, url)
print('Accept')
+ date = datetime.datetime.now()
+ if params['query_type'] == 4:
+ 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, '')
+ response_params = {
+ 'from': params['to'],
+ 'to': params['from'],
+ 'ts_added': date.timestamp(),
+ 'user_id': '1',
+ 'user_id_to': '3302',
+ 'query_type': 1004,
+ 'query_data': ET.tostring(res, encoding='unicode', xml_declaration=True)
+ }
+ catalog = get_catalog()
+ filename = uuid4().hex
+ filepath = '/tmp/' + filename
+ zipf = zipfile.ZipFile(filepath, "w")
+ zipf.writestr('WF.CLL', catalog)
+ 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/')
return True
+def onSent(params, files, callback_url):
+ print('onSent')
+
+
def main():
print('Use Control-C to exit')
logging.basicConfig(level=logging.DEBUG)
- server = SimpleXMLRPCServer(('0.0.0.0', 9000), logRequests=True)
+ server = SimpleXMLRPCServer(('0.0.0.0', 9000), logRequests=True, allow_none=True)
server.register_function(list_contents)
server.register_function(aud_add)
server.register_function(auth_response)
server.register_function(auth_challenge)
server.register_function(accept)
+ server.register_function(onSent)
+
try:
server.serve_forever()
except KeyboardInterrupt:
@@ -55,8 +91,10 @@ def main():
def test():
- print(requests.graphql.get_classifier())
- # print(requests.graphql.get_catalog())
+ params = {'from': 'tcp://kptsp_vb', 'query_data': '', 'query_type': 4, 'to': 'tcp://bnd127', 'user_id': '1', 'ts_added': 1679213998.282467}
+ files = []
+ url = 'http://127.0.0.1:7000/xmlrpc'
+ accept(params, files, url)
if __name__ == '__main__':
diff --git a/requests/catalog.py b/requests/catalog.py
index 9a19c1e..7adffa0 100644
--- a/requests/catalog.py
+++ b/requests/catalog.py
@@ -53,7 +53,7 @@ class Catalog:
return ET.tostring(collections, encoding='unicode', xml_declaration=True)
def date_to_string(self, date):
- return ''
+ return str(date.timestamp())
def write_collections(self, collections, date):
collection = ET.SubElement(collections, self.COLLECTION_TAG_NAME, {
@@ -70,7 +70,3 @@ class Catalog:
def write_chart(self, charts, chart):
ch = ET.SubElement(charts, self.CHART_TAG_NAME)
-
-
-
-
\ No newline at end of file
diff --git a/requests/graphql.py b/requests/graphql.py
index d744ee0..40edd80 100644
--- a/requests/graphql.py
+++ b/requests/graphql.py
@@ -27,4 +27,4 @@ def get_catalog():
"""
)
result = client.execute(query)
- return result['getClassifier']
+ return result['getCatalog']
diff --git a/requests/request_xml_service.py b/requests/request_xml_service.py
index 9703141..f09948f 100644
--- a/requests/request_xml_service.py
+++ b/requests/request_xml_service.py
@@ -1,5 +1,5 @@
import xml.etree.ElementTree as ET
-from messages import Messages
+from requests.messages import Messages
class RequestXmlService:
@@ -11,7 +11,7 @@ class RequestXmlService:
SOURCE_REQUEST_ID_ATTRIBUTE_NAME: str = 'source_parcel_id'
RESULT_CODE_ATTRIBUTE_NAME: str = 'result_code'
RESULT_MESSAGE_ATTRIBUTE_NAME: str = 'result_message'
- HEADER_XPATH: str = '/' + REQUEST_NODE_NAME + '/' + HEADER_NODE_NAME
+ HEADER_XPATH: str = HEADER_NODE_NAME
def get_request_uuid(self, document: ET.Element) -> str:
return self.get_header_attribute(document, self.REQUEST_ID_ATTRIBUTE_NAME)
@@ -27,7 +27,7 @@ class RequestXmlService:
def get_header_attribute(self, document: ET.Element, attribute_name: str) -> str:
header = self.get_header_node(document)
- if not header:
+ if header is None:
raise Exception(Messages.MISSING_TAG.value)
result = header.get(attribute_name)
return result.strip() if result else ''
@@ -51,6 +51,8 @@ class RequestXmlService:
def set_result(self, document: ET.Element, result_code: int, result_message: str):
result = document.find(self.RESULT_NODE_NAME)
+ if result is None:
+ result = ET.SubElement(document, self.RESULT_NODE_NAME)
result.set(self.RESULT_CODE_ATTRIBUTE_NAME, str(result_code))
result.set(self.RESULT_MESSAGE_ATTRIBUTE_NAME, result_message)
diff --git a/tmp.data b/tmp.data
new file mode 100644
index 0000000..4ac7715
--- /dev/null
+++ b/tmp.data
@@ -0,0 +1 @@
+{'from': 'tcp://kptsp_vb', 'query_data': '', 'query_type': 4, 'to': 'tcp://bnd127', 'user_id': '1', 'ts_added': 1679213998.282467} [] http://127.0.0.1:7000/xmlrpc
\ No newline at end of file