def update_index(seq): all_deltas = json.loads(read_file(get_taric_index_file())) logger.debug("%s delta files listed in %s", str(len(all_deltas)), get_taric_index_file()) # build entry for file just uploaded # TODO (possibly) Add Metadata file generation -> then could have api /taricfilesmd/... # if the file was overwritten, just update the index, else append existing = [d for d in all_deltas if d["id"] == int(seq)] if len(existing) > 0: logger.info("File %s overwritten", seq) i = 0 for d in all_deltas: logger.debug("%s", d) if d["id"] == int(seq): all_deltas[i] = create_index_entry(seq) i = i + 1 else: all_deltas.append(create_index_entry(seq)) logger.debug("%s delta files listed after update", str(len(all_deltas))) # persist updated index all_deltass = json.dumps(all_deltas) write_file(get_taric_index_file(), all_deltass)
def taricdeltas(date): # Default to yesterday if date == '' or date is None: yesterday = datetime.datetime.now() - datetime.timedelta(days=1) date = yesterday.strftime('%Y-%m-%d') logger.info("defaulted date to " + date) if not is_valid_date(date): logger.info("date is invalid") return Response("Bad request [invalid date] (400)", status=400) if not is_auth(request): logger.info("API key not provided or not authorised") return Response("403 Unauthorised", status=403) logger.debug("date is " + date) # All Taric files uploaded are stored in the index # Find files that have the issue date the same as the requested date # Output the response filtered by the date all_deltas = json.loads(read_file(get_taric_index_file())) logger.debug( str(len(all_deltas)) + " delta files listed in " + get_taric_index_file()) deltas_on_date = [ d for d in all_deltas if d['issue_date'].startswith(date) ] if len(deltas_on_date) == 0: logger.info("No delta files available for date " + date) return Response("404 Not found", status=404) logger.debug(str(len(deltas_on_date)) + " delta files for date " + date) deltas_json = json.dumps(deltas_on_date) r = make_response(deltas_json) r.headers.set('Content-Type', 'application/json') return r
def is_schema_validated(xmlfile): logger.debug("VALIDATING %s", xmlfile) xsd_doc = etree.parse("taric3.xsd") xsd = etree.XMLSchema(xsd_doc) try: xml = etree.parse(io.BytesIO(read_file(xmlfile))) except Exception: # pylint: disable=W0703 logger.info("Unable to parse file as XML") return False if not xsd.validate(xml): logger.info("XML Failed validation") logger.debug("%s", xsd.error_log) else: logger.info("XML validates against taric3 schema") return xsd.validate(xml)