def _count_num_items_in_filename(self, item, filename): schema = etree.XMLSchema(file=nrml_schema_file()) parser = etree.XMLParser(schema=schema) root = etree.parse(filename, parser=parser).getroot() exp = etree.XPath('count(//n:%s)' % item, namespaces={'n': NRML_NS}) num_items = exp(root) return num_items
def _count_num_items_in_filename(self, item, filename): schema = etree.XMLSchema(file=nrml_schema_file()) parser = etree.XMLParser(schema=schema) root = etree.parse(filename, parser=parser).getroot() exp = etree.XPath('count(//n:%s)' % item, namespaces={'n': NRML_NS}) num_items = exp(root) return num_items
def jvm(): """ Return the jpype module, after guaranteeing the JVM is running and the classpath has been loaded properly. """ jarpaths = (os.path.abspath( os.path.join(os.path.dirname(__file__), "../dist")), '/usr/share/java') if not jpype.isJVMStarted(): max_mem = get_jvm_max_mem() jpype.startJVM(jpype.getDefaultJVMPath(), "-Xmx%sM" % max_mem, "-Djava.ext.dirs=%s:%s" % jarpaths, # setting Schema path here is ugly, but it's better than # doing it before all XML parsing calls "-Dopenquake.nrml.schema=%s" % nrml_utils.nrml_schema_file(), # force the default Xerces parser configuration, otherwise # some random system-installed JAR might override it "-Dorg.apache.xerces.xni.parser.XMLParserConfiguration=" \ "org.apache.xerces.parsers.XIncludeAwareParserConfiguration") _init_logs() return jpype
def _get(self, filename, xpath): schema = etree.XMLSchema(file=nrml_schema_file()) parser = etree.XMLParser(schema=schema) tree = etree.parse(filename, parser=parser) return tree.getroot().find(xpath % {'ns': NRML_NS}).text
def _parse_bcr_map(self, filename): self.assertTrue(os.path.exists(filename)) schema = etree.XMLSchema(file=nrml_schema_file()) parser = etree.XMLParser(schema=schema) tree = etree.parse(filename, parser=parser) bcrnodes = tree.getroot().findall( '{%(ns)s}riskResult/{%(ns)s}benefitCostRatioMap/{%(ns)s}BCRNode' % {'ns': NRML} ) result = {} for bcrnode in bcrnodes: [site] = bcrnode.findall('{%s}site/{%s}Point/{%s}pos' % (NRML, GML, GML)) assets = {} valuenodes = bcrnode.findall('{%s}benefitCostRatioValue' % NRML) for valuenode in valuenodes: values = [] for tag in ('expectedAnnualLossOriginal', 'expectedAnnualLossRetrofitted', 'benefitCostRatio'): [node] = valuenode.findall('{%s}%s' % (NRML, tag)) values.append(float(node.text)) assets[valuenode.attrib['assetRef']] = tuple(values) result[tuple(map(float, site.text.split()))] = assets return result
def _do_parse(self): """parser implementation""" # The tags we expect to see: ffs_tag = '%sffs' % xml.NRML ffc_tag = '%sffc' % xml.NRML ffd_tag = '%sffd' % xml.NRML first_ffs = True schema = etree.XMLSchema(etree.parse(nrml_schema_file())) parse_args = dict(source=self.file, events=("end", ), schema=schema) for _, element in etree.iterparse(**parse_args): # start: fragility model if element.tag == ffs_tag: if first_ffs: # parse the "fragilityModel" element data only once self._parse_model(element.getparent()) first_ffs = False self.ffs = dict(type=None) self.ffs["type"] = element.get('type') taxonomy = element.find('%staxonomy' % xml.NRML) assert taxonomy is not None, "taxonomy not set" self.ffs["taxonomy"] = taxonomy.text.strip() tag, func = ((ffd_tag, self._parse_ffd) if self.discrete else (ffc_tag, self._parse_ffc)) for child in element.iterchildren(tag=tag): yield func(child)
def _get(self, filename, xpath): schema = etree.XMLSchema(file=nrml_schema_file()) parser = etree.XMLParser(schema=schema) tree = etree.parse(filename, parser=parser) return tree.find(xpath, namespaces={"nrml": NRML_NS}).text
def _do_parse(self): """parser implementation""" # The tags we expect to see: ffs_tag = '%sffs' % xml.NRML ffc_tag = '%sffc' % xml.NRML ffd_tag = '%sffd' % xml.NRML first_ffs = True schema = etree.XMLSchema(etree.parse(nrml_schema_file())) parse_args = dict(source=self.file, events=("end",), schema=schema) for _, element in etree.iterparse(**parse_args): # start: fragility model if element.tag == ffs_tag: if first_ffs: # parse the "fragilityModel" element data only once self._parse_model(element.getparent()) first_ffs = False self.ffs = dict(type=None) self.ffs["type"] = element.get('type') taxonomy = element.find('%staxonomy' % xml.NRML) assert taxonomy is not None, "taxonomy not set" self.ffs["taxonomy"] = taxonomy.text.strip() tag, func = ((ffd_tag, self._parse_ffd) if self.discrete else (ffc_tag, self._parse_ffc)) for child in element.iterchildren(tag=tag): yield func(child)
def get_xmlschema(cls): """ Create (if needed) and return ``etree.XMLSchema`` object for verifying nrml-files correctness. Once created schema object is cached in ``_xmlschema`` class attribute. """ if not cls._xmlschema: cls._xmlschema = etree.XMLSchema(file=nrml_schema_file()) return cls._xmlschema
def get_xmlschema(cls): """ Create (if needed) and return ``etree.XMLSchema`` object for verifying nrml-files correctness. Once created schema object is cached in ``_xmlschema`` class attribute. """ if not cls._xmlschema: cls._xmlschema = etree.XMLSchema(file=nrml_schema_file()) return cls._xmlschema
def __init__(self, path): producer.FileProducer.__init__(self, path) nrml_schema = etree.XMLSchema(etree.parse(nrml_schema_file())) self.vuln_model = etree.parse(self.path).getroot() if not nrml_schema.validate(self.vuln_model): raise xml.XMLValidationError( nrml_schema.error_log.last_error, path) model_el = self.vuln_model.getchildren()[0] if model_el.tag != "%svulnerabilityModel" % NRML: raise xml.XMLMismatchError( path, 'vulnerabilityModel', str(model_el.tag)[len(NRML):])
def validates_against_xml_schema(xml_instance_path, schema_path=nrml_utils.nrml_schema_file()): """ Checks whether an XML file validates against an XML Schema :param xml_instance_path: XML document path :param schema_path: XML schema path :returns: boolean success value """ xml_doc = etree.parse(xml_instance_path) xmlschema = etree.XMLSchema(etree.parse(schema_path)) return xmlschema.validate(xml_doc)
def validates_against_xml_schema(xml_instance_path, schema_path=nrml_utils.nrml_schema_file()): """ Checks whether an XML file validates against an XML Schema :param xml_instance_path: XML document path :param schema_path: XML schema path :returns: boolean success value """ xml_doc = etree.parse(xml_instance_path) xmlschema = etree.XMLSchema(etree.parse(schema_path)) return xmlschema.validate(xml_doc)
def _do_parse(self): """_parse implementation""" nrml_schema = etree.XMLSchema(etree.parse(nrml_schema_file())) level = 0 for event, element in etree.iterparse(self.file, events=('start', 'end'), schema=nrml_schema): if event == 'start' and element.tag == \ '%sexposureList' % NRML: # we need to get the exposureList id, description and # asset category exp_id = element.get('%sid' % GML) self._current_meta['listID'] = str(exp_id) desc = element.find('%sdescription' % GML) if desc is not None: self._current_meta['listDescription'] = str(desc.text) taxsrc = element.find('%staxonomySource' % NRML) if taxsrc is not None: self._current_meta['taxonomySource'] = str(taxsrc.text) asset_category = str(element.get('assetCategory')) self._current_meta['assetCategory'] = asset_category # type and unit for area, contents cost, retrofitting cost # and structural cost. attrs = ("areaType", "areaUnit", "cocoType", "cocoUnit", "recoType", "recoUnit", "stcoType", "stcoUnit", "unitType") for attr_name in attrs: attr_value = element.get(attr_name) if attr_value is not None: self._current_meta[attr_name] = attr_value elif event == 'start' and level < 2: # check that the first child of the root element is an # exposure portfolio if level == 1 and element.tag != '%sexposureModel' % NRML: raise xml.XMLMismatchError(self.file.name, str(element.tag)[len(NRML):], 'exposureModel') level += 1 elif event == 'end' and element.tag == '%sassetDefinition' % NRML: site_data = (_to_site(element), _to_occupancy(element), self._to_site_attributes(element)) del element yield site_data
def _do_parse(self): """_parse implementation""" nrml_schema = etree.XMLSchema(etree.parse(nrml_schema_file())) level = 0 for event, element in etree.iterparse( self.file, events=('start', 'end'), schema=nrml_schema): if event == 'start' and element.tag == \ '%sexposureList' % NRML: # we need to get the exposureList id, description and # asset category exp_id = element.get('%sid' % GML) self._current_meta['listID'] = str(exp_id) desc = element.find('%sdescription' % GML) if desc is not None: self._current_meta['listDescription'] = str(desc.text) taxsrc = element.find('%staxonomySource' % NRML) if taxsrc is not None: self._current_meta['taxonomySource'] = str(taxsrc.text) asset_category = str(element.get('assetCategory')) self._current_meta['assetCategory'] = asset_category # type and unit for area, contents cost, retrofitting cost # and structural cost. attrs = ("areaType", "areaUnit", "cocoType", "cocoUnit", "recoType", "recoUnit", "stcoType", "stcoUnit", "unitType") for attr_name in attrs: attr_value = element.get(attr_name) if attr_value is not None: self._current_meta[attr_name] = attr_value elif event == 'start' and level < 2: # check that the first child of the root element is an # exposure portfolio if level == 1 and element.tag != '%sexposureModel' % NRML: raise xml.XMLMismatchError( self.file.name, str(element.tag)[len(NRML):], 'exposureModel') level += 1 elif event == 'end' and element.tag == '%sassetDefinition' % NRML: site_data = (_to_site(element), _to_occupancy(element), self._to_site_attributes(element)) del element yield site_data
def jvm(): """ Return the jpype module, after guaranteeing the JVM is running and the classpath has been loaded properly. """ jarpaths = (os.path.abspath( os.path.join(os.path.dirname(__file__), "../dist")), '/usr/share/java') if not jpype.isJVMStarted(): max_mem = get_jvm_max_mem() jpype.startJVM(jpype.getDefaultJVMPath(), "-Xmx%sM" % max_mem, "-Djava.ext.dirs=%s:%s" % jarpaths, # setting Schema path here is ugly, but it's better than # doing it before all XML parsing calls "-Dopenquake.nrml.schema=%s" % nrml_utils.nrml_schema_file(), # force the default Xerces parser configuration, otherwise # some random system-installed JAR might override it "-Dorg.apache.xerces.xni.parser.XMLParserConfiguration=" \ "org.apache.xerces.parsers.XIncludeAwareParserConfiguration") _init_logs() return jpype
def _root(self, filename): schema = etree.XMLSchema(file=nrml_schema_file()) parser = etree.XMLParser(schema=schema) return etree.parse(filename, parser=parser)
from openquake.kvs import tokens from openquake.nrml.utils import nrml_schema_file from tests.utils import helpers LOG = logs.LOG MEAN_GROUND_INTENSITY = ( '{"site":"+35.0000 +35.0000", "intensity": 1.9249e+00,' '"site":"+35.0500 +35.0000", "intensity": 1.9623e+00,' '"site":"+35.1000 +35.0000", "intensity": 2.0320e+00,' '"site":"+35.1500 +35.0000", "intensity": 2.0594e+00}') TEST_JOB_FILE = helpers.testdata_path('simplecase/config.gem') NRML_SCHEMA_PATH = nrml_schema_file() SIMPLE_FAULT_SRC_MODEL_LT = helpers.demo_file( 'simple_fault_demo_hazard/source_model_logic_tree.xml') SIMPLE_FAULT_GMPE_LT = helpers.demo_file( 'simple_fault_demo_hazard/gmpe_logic_tree.xml') SIMPLE_FAULT_BASE_PATH = os.path.abspath( helpers.demo_file('simple_fault_demo_hazard')) def get_pattern(regexp): """Get all the values whose keys satisfy the given regexp. Return an empty list if there are no keys satisfying the given regxep. """
from openquake.kvs import tokens from openquake.nrml.utils import nrml_schema_file from tests.utils import helpers LOG = logs.LOG MEAN_GROUND_INTENSITY = ( '{"site":"+35.0000 +35.0000", "intensity": 1.9249e+00,' '"site":"+35.0500 +35.0000", "intensity": 1.9623e+00,' '"site":"+35.1000 +35.0000", "intensity": 2.0320e+00,' '"site":"+35.1500 +35.0000", "intensity": 2.0594e+00}') TEST_JOB_FILE = helpers.testdata_path('simplecase/config.gem') NRML_SCHEMA_PATH = nrml_schema_file() SIMPLE_FAULT_SRC_MODEL_LT = helpers.demo_file( 'simple_fault_demo_hazard/source_model_logic_tree.xml') SIMPLE_FAULT_GMPE_LT = helpers.demo_file( 'simple_fault_demo_hazard/gmpe_logic_tree.xml') SIMPLE_FAULT_BASE_PATH = os.path.abspath( helpers.demo_file('simple_fault_demo_hazard')) def get_pattern(regexp): """Get all the values whose keys satisfy the given regexp. Return an empty list if there are no keys satisfying the given regxep. """
def _root(self, filename): schema = etree.XMLSchema(file=nrml_schema_file()) parser = etree.XMLParser(schema=schema) return etree.parse(filename, parser=parser)