Beispiel #1
0
    def test_enforcements(self):
        mock = settings.Settings()

        xml = six.StringIO(
            '<settings-definitions><okaySetting type="int" default="17"/></settings-definitions>'
        )
        reader = settingsIO.SettingsDefinitionReader(mock)

        # put 'okaySetting' into the mock settings object
        reader.readFromStream(xml, fmt=reader.SettingsInputFormat.XML)

        self.assertEqual(mock["okaySetting"], 17)

        # we'll allow ARMI to run while ignoring old settings, but will issue warnings.
        xml = six.StringIO('<settings><OOGLYBOOGLY value="18"/></settings>')
        reader = settingsIO.SettingsReader(mock)
        reader.readFromStream(xml, fmt=reader.SettingsInputFormat.XML)
        with self.assertRaises(exceptions.NonexistentSetting):
            mock["OOGLYBOOGLY"]

        settingsRules.RENAMES["OOGLYBOOGLY"] = "okaySetting"
        xml = six.StringIO('<settings><OOGLYBOOGLY value="18"/></settings>')
        reader = settingsIO.SettingsReader(mock)
        reader.readFromStream(xml, fmt=reader.SettingsInputFormat.XML)

        self.assertEqual(mock["okaySetting"], 18)
Beispiel #2
0
    def test_conversions(self):
        """Tests that settings convert based on a set of rules before being created

        :ref:`REQfbefba64-3de7-4aea-b155-102c7b375722`
        """
        mock = settings.Settings()
        mock.settings["newSetting"] = setting.FloatSetting(
            "newSetting",
            {
                "description": "Hola",
                "label": "hello",
                "type": "float",
                "default": "2.0",
            },
        )
        # make sure everything is as expected
        self.assertEqual(2.0, mock["newSetting"])

        # read some settings, and see that everything makes sense
        xml = six.StringIO('<settings><deprecated value="17"/></settings>')
        reader = settingsIO.SettingsReader(mock)

        # add a rename
        settingsRules.RENAMES["deprecated"] = "newSetting"

        reader.readFromStream(xml, fmt=reader.SettingsInputFormat.XML)
        self.assertEqual(17.0, mock["newSetting"])
        del settingsRules.RENAMES["deprecated"]

        # read settings
        xml2 = six.StringIO('<settings><newSetting value="92"/></settings>')
        reader2 = settingsIO.SettingsReader(mock)
        reader2.readFromStream(xml2, fmt=reader.SettingsInputFormat.XML)
        self.assertEqual(92.0, mock["newSetting"])
Beispiel #3
0
    def loadFromString(self, string, handleInvalids=True):
        """Read in settings from a string.

        Supports two xml formats, the newer (tags are the key, etc.) and the former
        (tags are the type, etc.)

        Passes the reader back out in case you want to know something about how the
        reading went like for knowing if a file contained deprecated settings, etc.
        """
        if self._failOnLoad:
            raise exceptions.StateError(
                "Cannot load settings after processing of command "
                "line options begins.\nYou may be able to fix this by "
                "reordering the command line arguments.")

        reader = settingsIO.SettingsReader(self)
        reader.readFromStream(io.StringIO(string),
                              handleInvalids=handleInvalids)

        if armi.MPI_RANK == 0:
            runLog.setVerbosity(self["verbosity"])
        else:
            runLog.setVerbosity(self["branchVerbosity"])

        return reader
Beispiel #4
0
    def loadFromString(self, string, handleInvalids=True):
        """Read in settings from a string.

        Supports two xml formats, the newer (tags are the key, etc.) and the former
        (tags are the type, etc.)

        Passes the reader back out in case you want to know something about how the
        reading went like for knowing if a file contained deprecated settings, etc.
        """
        if self._failOnLoad:
            raise RuntimeError(
                "Cannot load settings after processing of command "
                "line options begins.\nYou may be able to fix this by "
                "reordering the command line arguments."
            )

        reader = settingsIO.SettingsReader(self)
        fmt = reader.SettingsInputFormat.YAML
        if string.strip()[0] == "<":
            fmt = reader.SettingsInputFormat.XML
        reader.readFromStream(
            io.StringIO(string), handleInvalids=handleInvalids, fmt=fmt
        )

        self.initLogVerbosity()

        return reader
Beispiel #5
0
    def test_basicSettingsReader(self):
        reader = settingsIO.SettingsReader(self.cs)

        self.assertEqual(reader["numProcessors"], 1)
        self.assertEqual(reader["nCycles"], 1)

        self.assertFalse(getattr(reader, "filelessBP"))
        self.assertEqual(getattr(reader, "path"), "")
Beispiel #6
0
 def test_invalidFile(self):
     with self.assertRaises(InvalidSettingsFileError):
         cs = settings.caseSettings.Settings()
         reader = settingsIO.SettingsReader(cs)
         reader.readFromStream(
             io.StringIO("useless:\n    should_fail"),
             fmt=settingsIO.SettingsReader.SettingsInputFormat.YAML,
         )
Beispiel #7
0
 def test_invalidFile(self):
     with self.assertRaises(exceptions.InvalidSettingsFileError):
         cs = settings.caseSettings.Settings()
         reader = settingsIO.SettingsReader(cs)
         reader.readFromStream(
             io.StringIO(r"<uselessTag>¯\_(ツ)_/¯</uselessTag>"),
             fmt=settingsIO.SettingsReader.SettingsInputFormat.XML,
         )
Beispiel #8
0
 def _prepToRead(self, fName):
     if self._failOnLoad:
         raise exceptions.StateError(
             "Cannot load settings file after processing of command "
             "line options begins.\nYou may be able to fix this by "
             "reordering the command line arguments, and making sure "
             "the settings file `{}` comes before any modified settings.".
             format(fName))
     path = pathTools.armiAbsPath(fName)
     return settingsIO.SettingsReader(self), path
Beispiel #9
0
    def _applyToStream(self):
        cs = caseSettings.Settings()
        reader = settingsIO.SettingsReader(cs)
        reader.readFromStream(self.stream)
        self.stream.close()
        cs.path = self.path

        migrateCrossSectionsFromBlueprints(cs)
        writer = settingsIO.SettingsWriter(cs)
        newStream = io.StringIO()
        writer.writeYaml(newStream)
        newStream.seek(0)
        return newStream
Beispiel #10
0
    def test_multipleDefinedSettingsFails(self):
        """
        If someone defines a setting twice, that should crash.

        :ref:`REQ82a55fe7-cd0e-4588-9f5b-fb266b8d6637`
        """
        mock = settings.Settings()
        erroneousSettings = six.StringIO(
            '<settings><neutronicsKernel value="VARIANT"/>'
            '<neutronicsKernel value="MCNP"/></settings>')
        with self.assertRaises(exceptions.SettingException):
            reader = settingsIO.SettingsReader(mock)
            reader.readFromStream(erroneousSettings,
                                  fmt=reader.SettingsInputFormat.XML)
Beispiel #11
0
    def _applyToStream(self):
        cs = caseSettings.Settings()
        reader = settingsIO.SettingsReader(cs)
        reader.readFromStream(self.stream)

        if reader.invalidSettings:
            runLog.info(
                "The following deprecated settings will be deleted:\n  * {}"
                "".format("\n  * ".join(list(reader.invalidSettings))))

        cs = _modify_settings(cs)
        writer = settingsIO.SettingsWriter(cs)
        newStream = io.StringIO()
        writer.writeYaml(newStream)
        newStream.seek(0)
        return newStream
Beispiel #12
0
    def test_userInputXML(self):
        """Asserts that the state of the settings object is altered by loading an input of XML as a
        means of user specifications.

        :ref:`REQbdb2e558-70b5-4ddb-aff9-d7a7b6d0e360`
        """
        mock = settings.Settings()
        mock.settings["newSetting"] = setting.FloatSetting(
            "newSetting",
            {
                "description": "Hola",
                "label": "hello",
                "type": "float",
                "default": "2.0",
            },
        )
        # make sure everything is as expected
        self.assertEqual(2.0, mock["newSetting"])

        # read "user input xml"
        xml = six.StringIO('<settings><newSetting value="17"/></settings>')
        reader = settingsIO.SettingsReader(mock)
        reader.readFromStream(xml, fmt=reader.SettingsInputFormat.XML)
        self.assertEqual(17.0, mock["newSetting"])