def getMD(self): """metadata resolver based on metadata links in GeoServer""" if self.json['coverage'].has_key('metadataLinks'): xmlmd = filter( (lambda x: x['type'] == 'text/xml'), self.json['coverage']['metadataLinks']['metadataLink']) if len(xmlmd) > 0: #~ try: mdurl = xmlmd[0]['content'] uxml = self.gs.getxml(mdurl).encode('utf8') xml = etree.tostring(etree.XML(uxml), encoding='UTF-8', xml_declaration=False) self.md = Inspirobot.MD(xml) self.mdUrl = urlparse.urljoin(cfg['xmlurlprefix'], self.md.fileIdentifier) logging.info( '%s.%s : fileIdentifier %s' % (self.json['coverage']['namespace']['name'], self.json['coverage']['name'], self.md.fileIdentifier)) return self.md #~ except: #~ logging.error('%s.%s : can\'t resolve %s'%(self.json['featureType']['namespace']['name'], self.json['featureType']['name'], mdurl)) #~ return None else: logging.error('%s.%s : no metadataURL' % (self.json['coverage']['namespace']['name'], self.json['coverage']['name'])) return None
def create_inspirobot_instance(self): cache_path = os.path.abspath( os.path.join(os.path.dirname(__file__), os.pardir, u"cache")) inspirobot = Inspirobot.Inspirobot(cachepath=cache_path) if cfg.get("proxy", ""): inspirobot.setproxy(cfg["proxy"]) return inspirobot
def run_tests_on_md_records(self, store_in_db=False): self.metadatas = [] ts = None if store_in_db: # Test session db record ts = TestSession(cat_url=self.test_params["cswurl"], filter=self.constraints_str, date=datetime.datetime.utcnow(), max_harvest=self.test_params["maxharvest"]) self.db.session.add(ts) # run tests for rec_id, rec in self.md_records.iteritems(): meta = Inspirobot.MD(rec.xml) meta.run(self.unit_tests) self.metadatas.append(meta) if store_in_db: # resource metadata db record # look for an existing metadata with the same cat_url and file_id md = ResourceMd.query.filter_by( cat_url=self.test_params["cswurl"], file_id=meta.fileIdentifier).first() if md is None and meta.MD_Identifier.strip() != "": md = ResourceMd.query.filter_by( cat_url=self.test_params["cswurl"], res_uri=meta.MD_Identifier).first() if md is None: md = ResourceMd( cat_url=self.test_params["cswurl"], file_id=meta.fileIdentifier, md_date=meta.md_date, res_date=meta.date, res_uri=meta.MD_Identifier, res_title=meta.title, res_abstract=meta.abstract, res_organisation_name=meta.OrganisationName) self.db.session.add(md) else: md.file_id = meta.fileIdentifier md.md_date = meta.md_date md.res_date = meta.date md.res_uri = meta.MD_Identifier md.res_title = meta.title md.res_abstract = meta.abstract md.res_organisation_name = meta.OrganisationName # report for on medatada record and one test session in db mr = MdReport(test_session=ts, md=md, score=meta.score) db.session.add(mr) for report in meta.reports: for result in report.results: # result of one unit test in db unit_test_result = UnitTestResult( md_report=mr, test_name=report.name, test_abstract=report.abstract, test_result_level=result[0], test_result_text=result[1]) db.session.add(unit_test_result) if store_in_db: db.session.commit() db.session.refresh(ts) return ts.id