From 6b80344fc9cf66fdb6dd71a2ab65e73049821152 Mon Sep 17 00:00:00 2001 From: Thomas Bock <thomas.bock@ptb.de> Date: Wed, 27 Mar 2019 16:21:14 +0100 Subject: [PATCH] config links to dcc --- README.md | 8 ++++++++ config.json | 3 ++- server.py | 16 ++++++++++------ utils.py | 29 +++++++++++++++++++---------- 4 files changed, 39 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index cb4e895..cea0263 100644 --- a/README.md +++ b/README.md @@ -83,6 +83,14 @@ Returns the version of the validation server: > <version>0.2.0</version> ``` +### /version_xsd [GET] + +Returns the version of the xsd-definition: + +``` +> curl http://localhost:5005/version +> <version>0.2.0</version> +`` ### /update [POST] diff --git a/config.json b/config.json index ff70ec6..d436be0 100644 --- a/config.json +++ b/config.json @@ -7,7 +7,8 @@ "dir":"." }, "xsd":{ - "dir":"./xsd", + "dir":"../DCC/schemata", + "file": "DCC_v1.9.xsd", "url": "https://intranet.ptb.de/fileadmin/dokumente/intranet/abteilungen/abteilung_1/Digitaler_Kalibrierschein/DCC" } } diff --git a/server.py b/server.py index 226343d..7d4cd0e 100644 --- a/server.py +++ b/server.py @@ -5,9 +5,6 @@ import utils as utils config = utils.get_config_dict() git_cmd = utils.git_cmd(config) -## kommt später vom server -xsd_file_name = 'DCC_v1.8.3.xsd' - app = Flask(__name__) CORS(app) @@ -18,6 +15,14 @@ def version(): return utils.xml_response(ret) +@app.route('/version_xsd', methods=['get']) +def version_xsd(): + app.logger.debug('hit version_xsd') + xsd_str = utils.get_xsd(config, from_server=False) + version_str = utils.get_xsd_version(xsd_str) + + return utils.xml_response(utils.return_version(version_str)) + @app.route('/update', methods=['post']) def update(): app.logger.debug('hit update') @@ -31,7 +36,7 @@ def update(): @app.route('/update_xsd', methods=['post']) def update_xsd(): app.logger.debug('hit update xsd') - xsd_str = utils.get_xsd(config, xsd_file_name, from_server=True) + xsd_str = utils.get_xsd(config, from_server=True) xsd_xml = utils.parse(xsd_str) if xsd_xml: ret = utils.save_xsd(config, xsd_str, xsd_file_name) @@ -40,14 +45,13 @@ def update_xsd(): return utils.xml_response(ret) - @app.route('/validate', methods=['post']) def validate(): app.logger.debug('hit validate') xml_str = request.data xml_tree = utils.parse(xml_str) if xml_tree: - xsd_str = utils.get_xsd(config, xsd_file_name, from_server=False) + xsd_str = utils.get_xsd(config, from_server=False) ret = utils.validate(xml_str=xml_str, xsd_str=xsd_str) else: ret = utils.return_error(error='unvalid xml data') diff --git a/utils.py b/utils.py index 07301e4..d8fa1ba 100644 --- a/utils.py +++ b/utils.py @@ -5,8 +5,9 @@ from flask import Response from xml.etree import ElementTree as ET import xmlschema +ns = {"w3":"http://www.w3.org/2001/XMLSchema"} + def get_config_dict(): - ## sollte vielleicht doch xml-datei werden with open('./config.json') as json_config_file: config = json.load(json_config_file) @@ -15,24 +16,25 @@ def get_config_dict(): def git_cmd(config): return git.cmd.Git(config['git']['dir']) -def get_xsd_url(config, xsd_name): - return "{uri}/{xsd_name}".format(uri=config['xsd']['url'], xsd_name=xsd_name) +def get_xsd_url(config, file_name): + return "{uri}/{file_name}".format(uri=config['xsd']['url'], file_name=file_name) -def get_xsd_path_file(config, xsd_name): - return "{dir}/{xsd_name}".format(dir=config['xsd']['dir'], xsd_name=xsd_name) +def get_xsd_path_file(config, file_name): + return "{dir}/{file_name}".format(dir=config['xsd']['dir'], file_name=file_name) -def get_xsd(config, xsd_name, from_server=True): +def get_xsd(config, from_server=True): + file_name = config['xsd']['file'] if from_server: - url = get_xsd_url(config, xsd_name) + url = get_xsd_url(config, file_name) xsd_str = requests.get(url).text else: - path_file = get_xsd_path_file(config, xsd_name) + path_file = get_xsd_path_file(config, file_name) xsd_str = open(path_file).read() return xsd_str -def save_xsd(config, xsd_str, xsd_name): - path_file = get_xsd_path_file(config, xsd_name) +def save_xsd(config, xsd_str, file_name): + path_file = get_xsd_path_file(config, file_name) file = open(path_file, "w") file.write(xsd_str) @@ -45,6 +47,13 @@ def parse(xml_str): tree = None return tree +def get_xsd_version(xsd_str): + tree = parse(xsd_str) + for annotation in tree.findall("w3:annotation", ns): + version_text = annotation.find("w3:documentation", ns).text + + return version_text + def validate(xml_str, xsd_str): tree = parse(xml_str) schema = xmlschema.XMLSchema(xsd_str) -- GitLab