def test_no_empty_dist(self): # an empty distribution is not supported by the schema writer = DmgDistPerAssetXMLWriter("output.xml", "ebl1", self.damage_states) self.assertRaises(RuntimeError, writer.serialize, []) self.assertFalse(os.path.exists("output.xml")) self.assertRaises(RuntimeError, writer.serialize, None) self.assertFalse(os.path.exists("output.xml"))
def test_serialize(self): expected_file = helpers.get_data_path( "expected-dmg-dist-per-asset.xml") expected_text = open(expected_file, "r").readlines() self.make_dist() asset_1, asset_2, asset_3 = self.make_assets() self.make_data(asset_1, "no_damage", 1.0, 1.6) self.make_data(asset_1, "slight", 34.8, 18.3) self.make_data(asset_1, "moderate", 64.2, 19.8) self.make_data(asset_1, "extensive", 64.3, 19.7) self.make_data(asset_1, "complete", 64.3, 19.7) self.make_data(asset_2, "no_damage", 1.0, 1.6) self.make_data(asset_2, "slight", 34.8, 18.3) self.make_data(asset_2, "moderate", 64.2, 19.8) self.make_data(asset_2, "extensive", 64.3, 19.7) self.make_data(asset_2, "complete", 64.3, 19.7) self.make_data(asset_3, "no_damage", 1.1, 1.7) self.make_data(asset_3, "slight", 34.9, 18.4) self.make_data(asset_3, "moderate", 64.3, 19.7) self.make_data(asset_3, "extensive", 64.3, 19.7) self.make_data(asset_3, "complete", 64.3, 19.7) try: _, result_xml = tempfile.mkstemp() writer = DmgDistPerAssetXMLWriter(result_xml, "ebl1", self.damage_states) writer.serialize(self.data) actual_text = open(result_xml, "r").readlines() self.assertEqual(expected_text, actual_text) self.assertTrue(xml.validates_against_xml_schema( result_xml)) finally: os.unlink(result_xml)
def export_dmg_dist_per_asset(output, target_dir): """ Export the damage distribution per asset identified by the given output to the `target_dir`. :param output: db output record which identifies the distribution. :type output: :py:class:`openquake.db.models.Output` :param target_dir: destination directory of the exported file. :type target_dir: string """ file_name = "dmg-dist-asset-%s.xml" % output.oq_job.id file_path = os.path.join(target_dir, file_name) dda = models.DmgDistPerAsset.objects.get(output=output) writer = DmgDistPerAssetXMLWriter( file_path, dda.end_branch_label, dda.dmg_states) data = models.DmgDistPerAssetData.objects.filter(dmg_dist_per_asset=dda) writer.serialize(data) return [file_path]