diff --git a/server.py b/server.py index f8c500deb28ebf381e377c0d953c7e316e26d707..56b18229fd542c776c9eee8153db69d7b0a5cd4a 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 33f5437363028e681b1bb89d07fd1b0ec2c4167e..f712b5e78ba9883920df43f0da9b66250b0da2ca 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: