diff --git a/README.md b/README.md index cb4e8952b1788c774fb51e96bf9c5cb530b437b3..cea0263e8c3fff43bbc9fda6602d75b4971292f1 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 ff70ec6f9b59b859b6c269546736c72b926b3295..d436be049b8c6359dac78ad4367fa7602a30727c 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 226343dbd974c05d0d4d5d7e8acc890e8e756e92..7d4cd0e9d1e6591e6233b9cae806fefcdb625e70 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 07301e4bc23a1d1e39b5d513be60dc95c26bb03b..d8fa1badb186f8f5b4d5fa9403220e07f5cb8b24 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)