diff tests/test.py @ 314:043a6412be3c

Implemented new access methods .getvarl() and .getvarl_s
author Franz Glasner <fzglas.hg@dom66.de>
date Wed, 05 May 2021 01:32:07 +0200
parents 15a1d5fd0aa1
children 98490375d90c
line wrap: on
line diff
--- a/tests/test.py	Thu Apr 29 08:43:15 2021 +0200
+++ b/tests/test.py	Wed May 05 01:32:07 2021 +0200
@@ -288,6 +288,15 @@
         self.assertEqual(u(platform.python_version()),
                          cfg.getvar_s("PY:version"))
 
+    def test03_namespace_l(self):
+        cfg = self._load(
+            os.path.join(TESTDATADIR, "conf20.yml"),
+            os.path.join(TESTDATADIR, "conf21.yml"),
+            os.path.join(TESTDATADIR, "conf22.ini"))
+        self.assertEqual(u(os.getcwd()), cfg.getvarl("cwd", namespace="OS"))
+        self.assertEqual(u(platform.python_version()),
+                         cfg.getvarl_s("version", namespace="PY"))
+
     def test04_no_filter(self):
         cfg = self._load(
             os.path.join(TESTDATADIR, "conf20.yml"),
@@ -299,6 +308,17 @@
 
         self.assertRaises(KeyError, _look)
 
+    def test04_no_filter_l(self):
+        cfg = self._load(
+            os.path.join(TESTDATADIR, "conf20.yml"),
+            os.path.join(TESTDATADIR, "conf21.yml"),
+            os.path.join(TESTDATADIR, "conf22.ini"))
+
+        def _look():
+            return cfg.getvarl("cwd|upper", namespace="OS")
+
+        self.assertRaises(KeyError, _look)
+
     def test05_comments(self):
         cfg = self._load(os.path.join(TESTDATADIR, "conf20.yml"),
                          os.path.join(TESTDATADIR, "conf21.yml"),
@@ -317,6 +337,24 @@
         self.assertRaises(KeyError, _c("db.__comment1"))
         self.assertRaises(KeyError, _c("db.user.__doc2"))
 
+    def test05_comments_l(self):
+        cfg = self._load(os.path.join(TESTDATADIR, "conf20.yml"),
+                         os.path.join(TESTDATADIR, "conf21.yml"),
+                         os.path.join(TESTDATADIR, "conf22.ini"),
+                         os.path.join(TESTDATADIR, "conf23.json"),
+                         os.path.join(TESTDATADIR, "conf24.toml"))
+
+        def _c(*names):
+            def _f():
+                cfg.getvarl_s(*names)
+            return _f
+
+        # Variables with leading underscores are *not*  imported by default
+        self.assertEqual(0o0027, int(cfg.getvarl_s("process", "umask"), 0))
+        self.assertRaises(KeyError, _c("process", "__doc1"))
+        self.assertRaises(KeyError, _c("db", "__comment1"))
+        self.assertRaises(KeyError, _c("db", "user", "__doc2"))
+
     def test06_check_all_comments(self):
         cfg = self._load(os.path.join(TESTDATADIR, "conf20.yml"),
                          os.path.join(TESTDATADIR, "conf21.yml"),
@@ -350,6 +388,25 @@
         self.assertEqual("the last value",
                          cfg.getvar_s("to-be-deleted-but-reassigned"))
 
+    def test07_deletions_l(self):
+        cfg = self._load(os.path.join(TESTDATADIR, "conf20.yml"),
+                         os.path.join(TESTDATADIR, "conf21.yml"),
+                         os.path.join(TESTDATADIR, "conf22.ini"),
+                         os.path.join(TESTDATADIR, "conf23.json"),
+                         os.path.join(TESTDATADIR, "conf24.toml"),
+                         os.path.join(TESTDATADIR, "delete-in-dict.yml"))
+        # automatic clean-up
+        self.assertRaises(KeyError, cfg.getvarl_s, "not-deleted")
+        # explicit deletion
+        self.assertRaises(KeyError, cfg.getvarl_s, "to-be-deleted")
+        self.assertRaises(KeyError, cfg.getvarl_s, "db" "user.name")
+        self.assertEqual("the-database-password-2",
+                         cfg.getvarl_s("db", "user", "pwd"))
+        self.assertRaises(KeyError, cfg.getvarl_s, "test", "Str")
+        self.assertEqual("not a list any more", cfg.getvarl_s("test", "List"))
+        self.assertEqual("the last value",
+                         cfg.getvarl_s("to-be-deleted-but-reassigned"))
+
 
 class T02LoadAndMerge(_T02MixinLoadAndMerge, unittest.TestCase):
 
@@ -490,18 +547,34 @@
         cfg = configmix.load(os.path.join(TESTDATADIR, "conf1.ini"))
         self.assertEqual(2, cfg.getvar_s("key100"))
 
+    def test01_expand_int_ini_l(self):
+        cfg = configmix.load(os.path.join(TESTDATADIR, "conf1.ini"))
+        self.assertEqual(2, cfg.getvarl_s("key100"))
+
     def test02_expand_int_indirect_ini(self):
         cfg = configmix.load(os.path.join(TESTDATADIR, "conf1.ini"))
         self.assertEqual(2, cfg.getvar_s("key102"))
 
+    def test02_expand_int_indirect_ini_l(self):
+        cfg = configmix.load(os.path.join(TESTDATADIR, "conf1.ini"))
+        self.assertEqual(2, cfg.getvarl_s("key102"))
+
     def test03_expand_int2str_ini(self):
         cfg = configmix.load(os.path.join(TESTDATADIR, "conf1.ini"))
         self.assertEqual("the 2 value", cfg.getvar_s("key101"))
 
+    def test03_expand_int2str_ini_l(self):
+        cfg = configmix.load(os.path.join(TESTDATADIR, "conf1.ini"))
+        self.assertEqual("the 2 value", cfg.getvarl_s("key101"))
+
     def test04_expand_intint2str_ini(self):
         cfg = configmix.load(os.path.join(TESTDATADIR, "conf1.ini"))
         self.assertEqual("22", cfg.getvar_s("key103"))
 
+    def test04_expand_intint2str_ini_l(self):
+        cfg = configmix.load(os.path.join(TESTDATADIR, "conf1.ini"))
+        self.assertEqual("22", cfg.getvarl_s("key103"))
+
 
 class T06References(unittest.TestCase):
 
@@ -533,6 +606,18 @@
         self.assertEqual(self._cfg.getvar("wsgi.debugger"),
                          self._cfg.getvar("wsgi.profiler.params"))
 
+    def test01_reference_without_expansions_l(self):
+        self.assertTrue(isinstance(self._cfg.getvarl("wsgi", "profiler"), dict))
+        self.assertTrue(isinstance(
+            self._cfg.getvarl("wsgi", "profiler", "params"), dict))
+        self.assertEqual(
+            "werkzeug",
+            self._cfg.getvarl("wsgi", "profiler", "params", "type"))
+        self.assertTrue(self._cfg.getvarl(
+            "wsgi", "profiler", "params", "params", "evalex"))
+        self.assertEqual(self._cfg.getvarl("wsgi", "debugger"),
+                         self._cfg.getvarl("wsgi", "profiler", "params"))
+
     def test02_reference__with_expansions(self):
         self.assertTrue(isinstance(self._cfg.getvar_s("wsgi.profiler"), dict))
         self.assertTrue(isinstance(
@@ -542,6 +627,17 @@
         self.assertEqual("werkzeug",
                          self._cfg.getvar_s("wsgi.profiler.params.type"))
 
+    def test02_reference__with_expansions_l(self):
+        self.assertTrue(isinstance(
+            self._cfg.getvarl_s("wsgi", "profiler"), dict))
+        self.assertTrue(isinstance(
+            self._cfg.getvarl_s("wsgi", "profiler", "params"), dict))
+        self.assertTrue(
+            self._cfg.getvarl_s("wsgi", "profiler", "params", "params", "evalex"))
+        self.assertEqual(
+            "werkzeug",
+            self._cfg.getvarl_s("wsgi", "profiler", "params", "type"))
+
     def test03_no_direct_attribute_access_to_expanded_references(self):
         self.assertEqual(
             "{{ref:#wsgi.debugger}}",
@@ -560,21 +656,43 @@
         self.assertTrue(
             self._cfg.getvar_s("testref.here.params.params.evalex"))
 
+    def test04_indirect_recursive_references_l(self):
+        self.assertEqual(
+            "werkzeug",
+            self._cfg.getvarl_s("testref", "here", "params", "type"))
+        self.assertTrue(
+            self._cfg.getvarl_s("testref", "here", "params", "params", "evalex"))
+
     def test05_recursive_expansion(self):
         c = self._cfg.getvar_s("testref")
         self.assertTrue(c["here"]["params"]["params"]["evalex"])
 
+    def test05_recursive_expansion_l(self):
+        c = self._cfg.getvarl_s("testref")
+        self.assertTrue(c["here"]["params"]["params"]["evalex"])
+
     def test06_no_recursive_expansion_in_getvar_parents(self):
         v = self._cfg.getvar("wsgi.profiler")
         self.assertEqual(
             "{{ref:#wsgi.debugger}}",
             v["params"])
 
+    def test06_no_recursive_expansion_in_getvar_parents_l(self):
+        v = self._cfg.getvarl("wsgi", "profiler")
+        self.assertEqual(
+            "{{ref:#wsgi.debugger}}",
+            v["params"])
+
     def test07_explicit_reference_expansion(self):
         v = self._cfg.getvar("wsgi.profiler")
         self.assertTrue(isinstance(self._cfg.expand_if_reference(v["params"]),
                                    dict))
 
+    def test07_explicit_reference_expansion_l(self):
+        v = self._cfg.getvarl("wsgi", "profiler")
+        self.assertTrue(isinstance(self._cfg.expand_if_reference(v["params"]),
+                                   dict))
+
     def test08_explicit_indirect_expansion_through_value(self):
         v = self._cfg.getvar_s("expand-ref-value.key0")
         self.assertTrue(isinstance(v, bool))
@@ -583,6 +701,14 @@
         v2 = self._cfg.getvar("expand-ref-value.key0")
         self.assertEqual("{{testref.here.params.params.evalex}}", v2)
 
+    def test08_explicit_indirect_expansion_through_value_l(self):
+        v = self._cfg.getvarl_s("expand-ref-value", "key0")
+        self.assertTrue(isinstance(v, bool))
+        self.assertTrue(v)
+        # but not that .getvar does not **not**
+        v2 = self._cfg.getvarl("expand-ref-value", "key0")
+        self.assertEqual("{{testref.here.params.params.evalex}}", v2)
+
 
 if __name__ == "__main__":
     unittest.main()