示例#1
0
文件: submit.py 项目: vecnet/om
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)
示例#3
0
    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)