From d78095dce95be7935403ffe3af1a66fd91aaaa51 Mon Sep 17 00:00:00 2001 From: Rolf Niepraschk <Rolf.Niepraschk@ptb.de> Date: Tue, 27 Jul 2021 09:39:41 +0200 Subject: [PATCH] get xsd url from "releases.json" --- server.py | 4 ++-- utils.py | 45 ++++++++++++++------------------------------- 2 files changed, 16 insertions(+), 33 deletions(-) diff --git a/server.py b/server.py index f8c500d..56b1822 100644 --- a/server.py +++ b/server.py @@ -48,12 +48,12 @@ def update(): @app.route('/validate', methods=['POST']) def validate(): app.logger.debug('hit validate') - xv = request.args.get('v') + version = request.args.get('v') xml_str = request.data xml_tree = utils.parse(xml_str) if xml_tree: app.logger.debug('=== xml_tree OK ===') - xsd_str = utils.get_xsd(config, xsd_version=xv, xml_str=xml_str) + xsd_str = utils.get_xsd(releases_dict, xsd_version=version, xml_str=xml_str) if xsd_str: ret = utils.validate(xml_str=xml_str, xsd_str=xsd_str) else: diff --git a/utils.py b/utils.py index 33f5437..f712b5e 100644 --- a/utils.py +++ b/utils.py @@ -52,38 +52,21 @@ def get_version(): except: return False -def get_xsd(cfg, xsd_version=None, xml_str = None): - filename = cfg['xsd']['filename'] - baseURL = cfg['xsd']['externalBaseURL'] - xsd_str = '' - url = '' - if xsd_version: - if xsd_version == 'latest': - url = baseURL + filename - else: - url = baseURL + 'v' + xsd_version + '/' + filename - else: +def get_xsd(d, xsd_version=None, xml_str = None): + url = False + version = xsd_version + if not version: # We use the internal version information in the XML structure root = parse(xml_str) - item = root.attrib.get('schemaVersion') - if item: - url = baseURL + 'v' + item + '/' + filename - else: - for key in root.attrib: - if key.endswith('schemaLocation'): - x = root.attrib.get(key).split() - for u in x: - if u.endswith(filename): - url = u - break - if uri_validator(url): - try: - r = requests.get(url, allow_redirects=True) - if r.url.endswith(filename): # no bad redirection - return r.text - else: - return False - except: - return False + version = root.attrib.get('schemaVersion') + for i in d['releases']: + if i['version'] == version: + url = i['url'] + break + try: + r = requests.get(url, allow_redirects=True) + return r.text + except: + return False def parse(xml_str): try: -- GitLab