Exemple #1
0
 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
Exemple #2
0
 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
Exemple #3
0
    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