def add_simulation(sim_group, xml, version=None, input_file_metadata=None): """ Adds a new simulation for a scenario to a simulation group. :param sim_group: The group to add the simulation to. :param str xml: The scenario's parameters in XML format. :return Simulation: The new simulation. """ assert isinstance(sim_group, SimulationGroup) if version is None: # Extract schemaVersion from the xml version = get_schema_version_from_xml(xml) assert version == "32" or version == "30" or version == "33" scenario_file = SimulationInputFile.objects.create_file(contents=xml, name="scenario.xml", metadata="{}", created_by=sim_group.submitted_by) if input_file_metadata is not None: for item in input_file_metadata: # Note that scenario_file.metadata is dict after calling create_file scenario_file.metadata[item] = input_file_metadata[item] # "scenario32.xml" scenario_file.save() simulation = Simulation(group=sim_group, model=sim_model.OPEN_MALARIA, version=version, status=sim_status.READY_TO_RUN) simulation.save() simulation.input_files.add(scenario_file) return simulation
def test_get_schema_version_from_xml(self): base_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "files") # use file handle as input to test_get_schema_version with open(os.path.join(base_dir, os.path.join("test_get_schema_version", "scenario30.xml"))) as fp: schema_version = get_schema_version_from_xml(fp) self.assertEqual(schema_version, "30") # Use content of xml file (string) as an input to test_get_schema_version with open(os.path.join(base_dir, os.path.join("test_get_schema_version", "scenario30.xml"))) as fp: schema_version = get_schema_version_from_xml(fp.read()) self.assertEqual(schema_version, "30") with open(os.path.join(base_dir, os.path.join("test_get_schema_version", "scenario32.xml"))) as fp: schema_version = get_schema_version_from_xml(fp.read()) self.assertEqual(schema_version, "32") with open(os.path.join(base_dir, os.path.join("test_get_schema_version", "non_om_xml.xml"))) as fp: schema_version = get_schema_version_from_xml(fp.read()) self.assertIsNone(schema_version) # Test empty string schema_version = get_schema_version_from_xml("") self.assertIsNone(schema_version) # Test non-xml string schema_version = get_schema_version_from_xml("abcdef") self.assertIsNone(schema_version)
def test_get_schema_version_from_xml(self): base_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "files") # use file handle as input to test_get_schema_version with open( os.path.join( base_dir, os.path.join("test_get_schema_version", "scenario30.xml"))) as fp: schema_version = get_schema_version_from_xml(fp) self.assertEqual(schema_version, "30") # Use content of xml file (string) as an input to test_get_schema_version with open( os.path.join( base_dir, os.path.join("test_get_schema_version", "scenario30.xml"))) as fp: schema_version = get_schema_version_from_xml(fp.read()) self.assertEqual(schema_version, "30") with open( os.path.join( base_dir, os.path.join("test_get_schema_version", "scenario32.xml"))) as fp: schema_version = get_schema_version_from_xml(fp.read()) self.assertEqual(schema_version, "32") with open( os.path.join( base_dir, os.path.join("test_get_schema_version", "non_om_xml.xml"))) as fp: schema_version = get_schema_version_from_xml(fp.read()) self.assertIsNone(schema_version) # Test empty string schema_version = get_schema_version_from_xml("") self.assertIsNone(schema_version) # Test non-xml string schema_version = get_schema_version_from_xml("abcdef") self.assertIsNone(schema_version)