예제 #1
0
 def test__update_should_handle_dots_appropriately(self):
     init = self.__class__.test_parameters
     P = ConfigParserParameterSet(init)
     P.update({"sectionA.a": 5, "sectionA.c": 4, "sectionC.e": 9})
     self.assertEqual(P.as_dict(), {"sectionA": dict(a="5", b="3", c="4"),
                                    "sectionB": dict(c="hello", d="world"),
                                    "sectionC": dict(e="9")})
예제 #2
0
    def test_diff(self):
        P1 = ConfigParserParameterSet(self.__class__.test_parameters)
        P2 = ConfigParserParameterSet(
            dedent("""
            # this is a comment

            [sectionA]
            a: 3
            b: 3

            [sectionB]
            c: hello
            d: universe

            [sectionC]
            e: zebra
            """))
        self.assertEqual(P1.diff(P2), ({
            'sectionA': {
                'a': '2'
            },
            'sectionB': {
                'd': 'world'
            }
        }, {
            'sectionA': {
                'a': '3'
            },
            'sectionB': {
                'd': 'universe'
            },
            'sectionC': {
                'e': 'zebra'
            }
        }))
예제 #3
0
 def test__init__should_accept_a_filename_or_string(self):
     init = self.__class__.test_parameters
     P1 = ConfigParserParameterSet(init)
     with open("test_file", "w") as f:
         f.write(init)
     P2 = ConfigParserParameterSet("test_file")
     self.assertEqual(P1.as_dict(), P2.as_dict())
     os.remove("test_file")
예제 #4
0
 def test__update_should_handle_dots_appropriately(self):
     init = self.__class__.test_parameters
     P = ConfigParserParameterSet(init)
     P.update({"sectionA.a": 5, "sectionA.c": 4, "sectionC.e": 9})
     self.assertEqual(
         P.as_dict(), {
             "sectionA": dict(a="5", b="3", c="4"),
             "sectionB": dict(c="hello", d="world"),
             "sectionC": dict(e="9")
         })
예제 #5
0
 def setUp(self):
     ## setup parsets with legal params
     self.PSETS = [SimpleParameterSet(""), JSONParameterSet("")]
     try:
         self.PSETS.append(YAMLParameterSet(""))
     except ImportError:
         pass
     self.PConfigParser = ConfigParserParameterSet("")
     for k in ('a', 'b', 'c', 'd', 'l', 'save'):
         up_dict = {k: 1}
         self.PConfigParser.update(up_dict)
         for P in self.PSETS:
             P.update(up_dict)
예제 #6
0
    def test_diff(self):
        P1 = ConfigParserParameterSet(self.__class__.test_parameters)
        P2 = ConfigParserParameterSet(dedent("""
            # this is a comment

            [sectionA]
            a: 3
            b: 3

            [sectionB]
            c: hello
            d: universe

            [sectionC]
            e: zebra
            """))
        self.assertEqual(P1.diff(P2),
                         ({'sectionA': {'a': '2'}, 'sectionB': {'d': 'world'}},
                          {'sectionA': {'a': '3'}, 'sectionB': {'d': 'universe'}, 'sectionC': {'e': 'zebra'}}))
예제 #7
0
 def setUp(self):
     ## setup parsets with legal params
     self.PSETS = (SimpleParameterSet(""), JSONParameterSet(""),
                   YAMLParameterSet(""))
     self.PConfigParser = ConfigParserParameterSet("")
     for k in ('a', 'b', 'c', 'd', 'l', 'save'):
         up_dict = {k: 1}
         self.PConfigParser.update(up_dict)
         for P in self.PSETS:
             P.update(up_dict)
예제 #8
0
 def setUp(self):
     ## setup parsets with legal params
     self.PSETS = [SimpleParameterSet(""), JSONParameterSet("")]
     try:
         self.PSETS.append(YAMLParameterSet(""))
     except ImportError:
         pass
     self.PConfigParser = ConfigParserParameterSet("")
     for k in ("a", "b", "c", "d", "l", "save"):
         up_dict = {k: 1}
         self.PConfigParser.update(up_dict)
         for P in self.PSETS:
             P.update(up_dict)
예제 #9
0
 def test__init__should_accept_a_filename_or_string(self):
     init = self.__class__.test_parameters
     P1 = ConfigParserParameterSet(init)
     with open("test_file", "w") as f:
         f.write(init)
     P2 = ConfigParserParameterSet("test_file")
     self.assertEqual(P1.as_dict(), P2.as_dict())
     os.remove("test_file")
예제 #10
0
class ArgumentParsingTests(unittest.TestCase):
    def setUp(self):
        ## setup parsets with legal params
        self.PSETS = [SimpleParameterSet(""), JSONParameterSet("")]
        try:
            self.PSETS.append(YAMLParameterSet(""))
        except ImportError:
            pass
        self.PConfigParser = ConfigParserParameterSet("")
        for k in ("a", "b", "c", "d", "l", "save"):
            up_dict = {k: 1}
            self.PConfigParser.update(up_dict)
            for P in self.PSETS:
                P.update(up_dict)

    def test_parse_command_line_parameter_arg_must_contain_equals(self):
        for P in self.PSETS:
            self.assertRaises(Exception, P.parse_command_line_parameter, "foobar")

    def test_parse_command_line_parameter_with_int(self):
        for P in self.PSETS:
            result = P.parse_command_line_parameter("a=2")
            self.assertEqual(result, {"a": 2})
            assert isinstance(result["a"], int)

    def test_parse_command_line_parameter_with_float(self):
        for P in self.PSETS:
            result = P.parse_command_line_parameter("b=2.0")
            self.assertEqual(result, {"b": 2.0})
            assert isinstance(result["b"], float)

    def test_parse_command_line_parameter_warns(self):
        ## but still returns name and value with ValueError
        for P in self.PSETS:
            self.assertRaises(ValueError, P.parse_command_line_parameter, "bt=2")
            try:
                P.parse_command_line_parameter("bt=2")
            except ValueError as v:
                message, name, value = v.args
                self.assertEqual(message, "")
                self.assertEqual(name, "bt")
                self.assertEqual(value, 2)
                assert isinstance(value, int)
        self.assertRaises(ValueError, self.PConfigParser.parse_command_line_parameter, "l=False")
        try:
            self.PConfigParser.parse_command_line_parameter("l=False")
        except ValueError as v:
            # config parser coerce all to string
            message, name, value = v.args
            self.assertEqual(name, "l")
            self.assertEqual(value, "False")
            assert isinstance(value, str)

    def test_parse_command_line_parameter_with_list(self):
        for P in self.PSETS:
            result = P.parse_command_line_parameter("c=[1,2,3,4,5]")
            self.assertEqual(result, {"c": [1, 2, 3, 4, 5]})

    def test_parse_command_line_parameter_with_bool(self):
        if len(self.PSETS) == 3:
            PS, PJSON, PYAML = self.PSETS
        else:
            PS, PJSON = self.PSETS
            PYAML = None
        result = PJSON.parse_command_line_parameter("l=false")
        self.assertEqual(result, {"l": False})
        result = PS.parse_command_line_parameter("l=false")
        self.assertEqual(result, {"l": "false"})
        if PYAML:
            # yaml has language agnostic bool
            result = PYAML.parse_command_line_parameter("l=False")  # python-like
            self.assertEqual(result, {"l": False})
            result = PYAML.parse_command_line_parameter("l=false")  # json-like
            self.assertEqual(result, {"l": False})
            result = PYAML.parse_command_line_parameter("l=FALSE")  # r-like
            self.assertEqual(result, {"l": False})
            result = PYAML.parse_command_line_parameter("l=off")  # possibly undesired
            self.assertEqual(result, {"l": False})
            result = PYAML.parse_command_line_parameter("l=On")  # possibly undesired
            self.assertEqual(result, {"l": True})

    def test_parse_command_line_parameter_with_tuple(self):
        for P in self.PSETS:
            result = P.parse_command_line_parameter("d=('a','b','c')")
            self.assertEqual(result, {"d": ("a", "b", "c")})

    def test_parse_command_line_parameter_should_accept_equals_in_parameter(self):
        # because the parameter value could be a string containing "="
        for P in self.PSETS:
            value = "save=Data/result.uwsize=48.setsize=1"
            result = P.parse_command_line_parameter(value)
            self.assertEqual(result, {"save": "Data/result.uwsize=48.setsize=1"})
예제 #11
0
class ArgumentParsingTests(unittest.TestCase):

    def setUp(self):
        ## setup parsets with legal params
        self.PSETS = [SimpleParameterSet(""), JSONParameterSet("")]
        try:
            self.PSETS.append(YAMLParameterSet(""))
        except ImportError:
            pass
        self.PConfigParser = ConfigParserParameterSet("")
        for k in ('a', 'b', 'c', 'd', 'l', 'save'):
            up_dict = {k: 1}
            self.PConfigParser.update(up_dict)
            for P in self.PSETS:
                P.update(up_dict)

    def test_parse_command_line_parameter_arg_must_contain_equals(self):
        for P in self.PSETS:
            self.assertRaises(Exception, P.parse_command_line_parameter, "foobar")

    def test_parse_command_line_parameter_with_int(self):
        for P in self.PSETS:
            result = P.parse_command_line_parameter("a=2")
            self.assertEqual(result, {'a': 2})
            assert isinstance(result['a'], int)

    def test_parse_command_line_parameter_with_float(self):
        for P in self.PSETS:
            result = P.parse_command_line_parameter("b=2.0")
            self.assertEqual(result, {'b': 2.0})
            assert isinstance(result['b'], float)

    def test_parse_command_line_parameter_warns(self):
        ## but still returns name and value with ValueError
        for P in self.PSETS:
            self.assertRaises(ValueError, P.parse_command_line_parameter, "bt=2")
            try:
                P.parse_command_line_parameter("bt=2")
            except ValueError as v:
                message, name, value = v.args
                self.assertEqual(message, '')
                self.assertEqual(name, 'bt')
                self.assertEqual(value, 2)
                assert isinstance(value, int)
        self.assertRaises(ValueError, self.PConfigParser.parse_command_line_parameter, "l=False")
        try:
            self.PConfigParser.parse_command_line_parameter("l=False")
        except ValueError as v:
            #config parser coerce all to string
            message, name, value = v.args
            self.assertEqual(name, 'l')
            self.assertEqual(value, 'False')
            assert isinstance(value, str)


    def test_parse_command_line_parameter_with_list(self):
        for P in self.PSETS:
            result = P.parse_command_line_parameter("c=[1,2,3,4,5]")
            self.assertEqual(result, {'c': [1, 2, 3, 4, 5]})

    def test_parse_command_line_parameter_with_bool(self):
        if len(self.PSETS) == 3:
            PS, PJSON, PYAML = self.PSETS
        else:
            PS, PJSON = self.PSETS
            PYAML = None
        result = PJSON.parse_command_line_parameter("l=false")
        self.assertEqual(result, {'l': False})
        result = PS.parse_command_line_parameter("l=false")
        self.assertEqual(result, {'l': 'false'})
        if PYAML:
            # yaml has language agnostic bool
            result = PYAML.parse_command_line_parameter("l=False") #python-like
            self.assertEqual(result, {'l': False})
            result = PYAML.parse_command_line_parameter("l=false") #json-like
            self.assertEqual(result, {'l': False})
            result = PYAML.parse_command_line_parameter("l=FALSE") #r-like
            self.assertEqual(result, {'l': False})
            result = PYAML.parse_command_line_parameter("l=off") # possibly undesired
            self.assertEqual(result, {'l': False})
            result = PYAML.parse_command_line_parameter("l=On") # possibly undesired
            self.assertEqual(result, {'l': True})

    def test_parse_command_line_parameter_with_tuple(self):
        for P in self.PSETS:
            result = P.parse_command_line_parameter("d=('a','b','c')")
            self.assertEqual(result, {'d': ('a', 'b', 'c')})

    def test_parse_command_line_parameter_should_accept_equals_in_parameter(self):
        # because the parameter value could be a string containing "="
        for P in self.PSETS:
            value = "save=Data/result.uwsize=48.setsize=1"
            result = P.parse_command_line_parameter(value)
            self.assertEqual(result, {'save': 'Data/result.uwsize=48.setsize=1'})
예제 #12
0
 def test__pop(self):
     init = self.__class__.test_parameters
     P = ConfigParserParameterSet(init)
     self.assertEqual(P.pop('sectionA.b'), '3')
     self.assertEqual(P.pop('sectionA.foo', 42), 42)
예제 #13
0
 def test__init__should_accept_an_empty_initializer(self):
     P = ConfigParserParameterSet("")
     self.assertEqual(P.as_dict(), {})
예제 #14
0
 def test__pretty__output_should_be_useable_to_create_an_identical_parameterset(self):
     init = self.__class__.test_parameters
     P1 = ConfigParserParameterSet(init)
     P2 = ConfigParserParameterSet(P1.pretty())
     self.assertEqual(P1.as_dict(), P2.as_dict())
예제 #15
0
 def test__init__should_accept_an_empty_initializer(self):
     P = ConfigParserParameterSet("")
     self.assertEqual(P.as_dict(), {})
예제 #16
0
class ArgumentParsingTests(unittest.TestCase):

    def setUp(self):
        ## setup parsets with legal params
        self.PSETS = (SimpleParameterSet(""), JSONParameterSet(""),
                      YAMLParameterSet(""))
        self.PConfigParser = ConfigParserParameterSet("")
        for k in ('a', 'b', 'c', 'd', 'l', 'save'):
            up_dict = {k: 1}
            self.PConfigParser.update(up_dict)
            for P in self.PSETS:
                P.update(up_dict)

    def test_parse_command_line_parameter_arg_must_contain_equals(self):
        for P in self.PSETS:
            self.assertRaises(Exception, P.parse_command_line_parameter, "foobar")

    def test_parse_command_line_parameter_with_int(self):
        for P in self.PSETS:
            result = P.parse_command_line_parameter("a=2")
            self.assertEqual(result, {'a': 2})
            assert isinstance(result['a'], int)

    def test_parse_command_line_parameter_with_float(self):
        for P in self.PSETS:
            result = P.parse_command_line_parameter("b=2.0")
            self.assertEqual(result, {'b': 2.0})
            assert isinstance(result['b'], float)

    def test_parse_command_line_parameter_warns(self):
        ## but still returns name and value with ValueError
        for P in self.PSETS:
            self.assertRaises(ValueError, P.parse_command_line_parameter, "bt=2")
            try:
                P.parse_command_line_parameter("bt=2")
            except ValueError as v:
                message, name, value = v.args
                self.assertEqual(message, '')
                self.assertEqual(name, 'bt')
                self.assertEqual(value, 2)
                assert isinstance(value, int)
        self.assertRaises(ValueError, self.PConfigParser.parse_command_line_parameter, "l=False")
        try:
            self.PConfigParser.parse_command_line_parameter("l=False")
        except ValueError as v:
            #config parser coerce all to string
            message, name, value = v.args
            self.assertEqual(name, 'l')
            self.assertEqual(value, 'False')
            assert isinstance(value, str)


    def test_parse_command_line_parameter_with_list(self):
        for P in self.PSETS:
            result = P.parse_command_line_parameter("c=[1,2,3,4,5]")
            self.assertEqual(result, {'c': [1, 2, 3, 4, 5]})

    def test_parse_command_line_parameter_with_bool(self):
        PS, PJSON, PYAML = self.PSETS
        result = PJSON.parse_command_line_parameter("l=false")
        self.assertEqual(result, {'l': False})
        result = PS.parse_command_line_parameter("l=false")
        self.assertEqual(result, {'l': 'false'})
        # yaml has language agnostic bool
        result = PYAML.parse_command_line_parameter("l=False") #python-like
        self.assertEqual(result, {'l': False})
        result = PYAML.parse_command_line_parameter("l=false") #json-like
        self.assertEqual(result, {'l': False})
        result = PYAML.parse_command_line_parameter("l=FALSE") #r-like
        self.assertEqual(result, {'l': False})
        result = PYAML.parse_command_line_parameter("l=off") # possibly undesired
        self.assertEqual(result, {'l': False})
        result = PYAML.parse_command_line_parameter("l=On") # possibly undesired
        self.assertEqual(result, {'l': True})

    def test_parse_command_line_parameter_with_tuple(self):
        for P in self.PSETS:
            result = P.parse_command_line_parameter("d=('a','b','c')")
            self.assertEqual(result, {'d': ('a', 'b', 'c')})

    def test_parse_command_line_parameter_should_accept_equals_in_parameter(self):
        # because the parameter value could be a string containing "="
        for P in self.PSETS:
            value = "save=Data/result.uwsize=48.setsize=1"
            result = P.parse_command_line_parameter(value)
            self.assertEqual(result, {'save': 'Data/result.uwsize=48.setsize=1'})
예제 #17
0
 def test__getitem(self):
     init = self.__class__.test_parameters
     P = ConfigParserParameterSet(init)
     self.assertEqual(P['sectionA'], {'a': '2', 'b': '3'})
     self.assertEqual(P['sectionB.c'], 'hello')
예제 #18
0
 def test__pop(self):
     init = self.__class__.test_parameters
     P = ConfigParserParameterSet(init)
     self.assertEqual(P.pop('sectionA.b'), '3')
     self.assertEqual(P.pop('sectionA.foo', 42), 42)
예제 #19
0
 def test__str(self):
     init = self.__class__.test_parameters
     P = ConfigParserParameterSet(str(init))
     as_string = str(P)
     self.assertIsInstance(as_string, str)
     self.assertEqual(P, ConfigParserParameterSet(as_string))
예제 #20
0
 def test__deepcopy(self):
     # see ticket:93
     init = self.__class__.test_parameters
     P = ConfigParserParameterSet(init)
     Q = deepcopy(P)
예제 #21
0
 def test__pretty__output_should_be_useable_to_create_an_identical_parameterset(
         self):
     init = self.__class__.test_parameters
     P1 = ConfigParserParameterSet(init)
     P2 = ConfigParserParameterSet(P1.pretty())
     self.assertEqual(P1.as_dict(), P2.as_dict())