comparison 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
comparison
equal deleted inserted replaced
313:15a1d5fd0aa1 314:043a6412be3c
286 os.path.join(TESTDATADIR, "conf22.ini")) 286 os.path.join(TESTDATADIR, "conf22.ini"))
287 self.assertEqual(u(os.getcwd()), cfg.getvar("OS:cwd")) 287 self.assertEqual(u(os.getcwd()), cfg.getvar("OS:cwd"))
288 self.assertEqual(u(platform.python_version()), 288 self.assertEqual(u(platform.python_version()),
289 cfg.getvar_s("PY:version")) 289 cfg.getvar_s("PY:version"))
290 290
291 def test03_namespace_l(self):
292 cfg = self._load(
293 os.path.join(TESTDATADIR, "conf20.yml"),
294 os.path.join(TESTDATADIR, "conf21.yml"),
295 os.path.join(TESTDATADIR, "conf22.ini"))
296 self.assertEqual(u(os.getcwd()), cfg.getvarl("cwd", namespace="OS"))
297 self.assertEqual(u(platform.python_version()),
298 cfg.getvarl_s("version", namespace="PY"))
299
291 def test04_no_filter(self): 300 def test04_no_filter(self):
292 cfg = self._load( 301 cfg = self._load(
293 os.path.join(TESTDATADIR, "conf20.yml"), 302 os.path.join(TESTDATADIR, "conf20.yml"),
294 os.path.join(TESTDATADIR, "conf21.yml"), 303 os.path.join(TESTDATADIR, "conf21.yml"),
295 os.path.join(TESTDATADIR, "conf22.ini")) 304 os.path.join(TESTDATADIR, "conf22.ini"))
296 305
297 def _look(): 306 def _look():
298 return cfg.getvar("OS:cwd|upper") 307 return cfg.getvar("OS:cwd|upper")
308
309 self.assertRaises(KeyError, _look)
310
311 def test04_no_filter_l(self):
312 cfg = self._load(
313 os.path.join(TESTDATADIR, "conf20.yml"),
314 os.path.join(TESTDATADIR, "conf21.yml"),
315 os.path.join(TESTDATADIR, "conf22.ini"))
316
317 def _look():
318 return cfg.getvarl("cwd|upper", namespace="OS")
299 319
300 self.assertRaises(KeyError, _look) 320 self.assertRaises(KeyError, _look)
301 321
302 def test05_comments(self): 322 def test05_comments(self):
303 cfg = self._load(os.path.join(TESTDATADIR, "conf20.yml"), 323 cfg = self._load(os.path.join(TESTDATADIR, "conf20.yml"),
314 # Variables with leading underscores are *not* imported by default 334 # Variables with leading underscores are *not* imported by default
315 self.assertEqual(0o0027, int(cfg.getvar_s("process.umask"), 0)) 335 self.assertEqual(0o0027, int(cfg.getvar_s("process.umask"), 0))
316 self.assertRaises(KeyError, _c("process.__doc1")) 336 self.assertRaises(KeyError, _c("process.__doc1"))
317 self.assertRaises(KeyError, _c("db.__comment1")) 337 self.assertRaises(KeyError, _c("db.__comment1"))
318 self.assertRaises(KeyError, _c("db.user.__doc2")) 338 self.assertRaises(KeyError, _c("db.user.__doc2"))
339
340 def test05_comments_l(self):
341 cfg = self._load(os.path.join(TESTDATADIR, "conf20.yml"),
342 os.path.join(TESTDATADIR, "conf21.yml"),
343 os.path.join(TESTDATADIR, "conf22.ini"),
344 os.path.join(TESTDATADIR, "conf23.json"),
345 os.path.join(TESTDATADIR, "conf24.toml"))
346
347 def _c(*names):
348 def _f():
349 cfg.getvarl_s(*names)
350 return _f
351
352 # Variables with leading underscores are *not* imported by default
353 self.assertEqual(0o0027, int(cfg.getvarl_s("process", "umask"), 0))
354 self.assertRaises(KeyError, _c("process", "__doc1"))
355 self.assertRaises(KeyError, _c("db", "__comment1"))
356 self.assertRaises(KeyError, _c("db", "user", "__doc2"))
319 357
320 def test06_check_all_comments(self): 358 def test06_check_all_comments(self):
321 cfg = self._load(os.path.join(TESTDATADIR, "conf20.yml"), 359 cfg = self._load(os.path.join(TESTDATADIR, "conf20.yml"),
322 os.path.join(TESTDATADIR, "conf21.yml"), 360 os.path.join(TESTDATADIR, "conf21.yml"),
323 os.path.join(TESTDATADIR, "conf22.ini"), 361 os.path.join(TESTDATADIR, "conf22.ini"),
348 self.assertRaises(KeyError, cfg.getvar_s, "test.Str") 386 self.assertRaises(KeyError, cfg.getvar_s, "test.Str")
349 self.assertEqual("not a list any more", cfg.getvar_s("test.List")) 387 self.assertEqual("not a list any more", cfg.getvar_s("test.List"))
350 self.assertEqual("the last value", 388 self.assertEqual("the last value",
351 cfg.getvar_s("to-be-deleted-but-reassigned")) 389 cfg.getvar_s("to-be-deleted-but-reassigned"))
352 390
391 def test07_deletions_l(self):
392 cfg = self._load(os.path.join(TESTDATADIR, "conf20.yml"),
393 os.path.join(TESTDATADIR, "conf21.yml"),
394 os.path.join(TESTDATADIR, "conf22.ini"),
395 os.path.join(TESTDATADIR, "conf23.json"),
396 os.path.join(TESTDATADIR, "conf24.toml"),
397 os.path.join(TESTDATADIR, "delete-in-dict.yml"))
398 # automatic clean-up
399 self.assertRaises(KeyError, cfg.getvarl_s, "not-deleted")
400 # explicit deletion
401 self.assertRaises(KeyError, cfg.getvarl_s, "to-be-deleted")
402 self.assertRaises(KeyError, cfg.getvarl_s, "db" "user.name")
403 self.assertEqual("the-database-password-2",
404 cfg.getvarl_s("db", "user", "pwd"))
405 self.assertRaises(KeyError, cfg.getvarl_s, "test", "Str")
406 self.assertEqual("not a list any more", cfg.getvarl_s("test", "List"))
407 self.assertEqual("the last value",
408 cfg.getvarl_s("to-be-deleted-but-reassigned"))
409
353 410
354 class T02LoadAndMerge(_T02MixinLoadAndMerge, unittest.TestCase): 411 class T02LoadAndMerge(_T02MixinLoadAndMerge, unittest.TestCase):
355 412
356 def setUp(self): 413 def setUp(self):
357 self._load = configmix.load 414 self._load = configmix.load
488 545
489 def test01_expand_int_ini(self): 546 def test01_expand_int_ini(self):
490 cfg = configmix.load(os.path.join(TESTDATADIR, "conf1.ini")) 547 cfg = configmix.load(os.path.join(TESTDATADIR, "conf1.ini"))
491 self.assertEqual(2, cfg.getvar_s("key100")) 548 self.assertEqual(2, cfg.getvar_s("key100"))
492 549
550 def test01_expand_int_ini_l(self):
551 cfg = configmix.load(os.path.join(TESTDATADIR, "conf1.ini"))
552 self.assertEqual(2, cfg.getvarl_s("key100"))
553
493 def test02_expand_int_indirect_ini(self): 554 def test02_expand_int_indirect_ini(self):
494 cfg = configmix.load(os.path.join(TESTDATADIR, "conf1.ini")) 555 cfg = configmix.load(os.path.join(TESTDATADIR, "conf1.ini"))
495 self.assertEqual(2, cfg.getvar_s("key102")) 556 self.assertEqual(2, cfg.getvar_s("key102"))
496 557
558 def test02_expand_int_indirect_ini_l(self):
559 cfg = configmix.load(os.path.join(TESTDATADIR, "conf1.ini"))
560 self.assertEqual(2, cfg.getvarl_s("key102"))
561
497 def test03_expand_int2str_ini(self): 562 def test03_expand_int2str_ini(self):
498 cfg = configmix.load(os.path.join(TESTDATADIR, "conf1.ini")) 563 cfg = configmix.load(os.path.join(TESTDATADIR, "conf1.ini"))
499 self.assertEqual("the 2 value", cfg.getvar_s("key101")) 564 self.assertEqual("the 2 value", cfg.getvar_s("key101"))
500 565
566 def test03_expand_int2str_ini_l(self):
567 cfg = configmix.load(os.path.join(TESTDATADIR, "conf1.ini"))
568 self.assertEqual("the 2 value", cfg.getvarl_s("key101"))
569
501 def test04_expand_intint2str_ini(self): 570 def test04_expand_intint2str_ini(self):
502 cfg = configmix.load(os.path.join(TESTDATADIR, "conf1.ini")) 571 cfg = configmix.load(os.path.join(TESTDATADIR, "conf1.ini"))
503 self.assertEqual("22", cfg.getvar_s("key103")) 572 self.assertEqual("22", cfg.getvar_s("key103"))
573
574 def test04_expand_intint2str_ini_l(self):
575 cfg = configmix.load(os.path.join(TESTDATADIR, "conf1.ini"))
576 self.assertEqual("22", cfg.getvarl_s("key103"))
504 577
505 578
506 class T06References(unittest.TestCase): 579 class T06References(unittest.TestCase):
507 580
508 def setUp(self): 581 def setUp(self):
531 self._cfg.getvar("wsgi.profiler.params.type")) 604 self._cfg.getvar("wsgi.profiler.params.type"))
532 self.assertTrue(self._cfg.getvar("wsgi.profiler.params.params.evalex")) 605 self.assertTrue(self._cfg.getvar("wsgi.profiler.params.params.evalex"))
533 self.assertEqual(self._cfg.getvar("wsgi.debugger"), 606 self.assertEqual(self._cfg.getvar("wsgi.debugger"),
534 self._cfg.getvar("wsgi.profiler.params")) 607 self._cfg.getvar("wsgi.profiler.params"))
535 608
609 def test01_reference_without_expansions_l(self):
610 self.assertTrue(isinstance(self._cfg.getvarl("wsgi", "profiler"), dict))
611 self.assertTrue(isinstance(
612 self._cfg.getvarl("wsgi", "profiler", "params"), dict))
613 self.assertEqual(
614 "werkzeug",
615 self._cfg.getvarl("wsgi", "profiler", "params", "type"))
616 self.assertTrue(self._cfg.getvarl(
617 "wsgi", "profiler", "params", "params", "evalex"))
618 self.assertEqual(self._cfg.getvarl("wsgi", "debugger"),
619 self._cfg.getvarl("wsgi", "profiler", "params"))
620
536 def test02_reference__with_expansions(self): 621 def test02_reference__with_expansions(self):
537 self.assertTrue(isinstance(self._cfg.getvar_s("wsgi.profiler"), dict)) 622 self.assertTrue(isinstance(self._cfg.getvar_s("wsgi.profiler"), dict))
538 self.assertTrue(isinstance( 623 self.assertTrue(isinstance(
539 self._cfg.getvar_s("wsgi.profiler.params"), dict)) 624 self._cfg.getvar_s("wsgi.profiler.params"), dict))
540 self.assertTrue( 625 self.assertTrue(
541 self._cfg.getvar_s("wsgi.profiler.params.params.evalex")) 626 self._cfg.getvar_s("wsgi.profiler.params.params.evalex"))
542 self.assertEqual("werkzeug", 627 self.assertEqual("werkzeug",
543 self._cfg.getvar_s("wsgi.profiler.params.type")) 628 self._cfg.getvar_s("wsgi.profiler.params.type"))
544 629
630 def test02_reference__with_expansions_l(self):
631 self.assertTrue(isinstance(
632 self._cfg.getvarl_s("wsgi", "profiler"), dict))
633 self.assertTrue(isinstance(
634 self._cfg.getvarl_s("wsgi", "profiler", "params"), dict))
635 self.assertTrue(
636 self._cfg.getvarl_s("wsgi", "profiler", "params", "params", "evalex"))
637 self.assertEqual(
638 "werkzeug",
639 self._cfg.getvarl_s("wsgi", "profiler", "params", "type"))
640
545 def test03_no_direct_attribute_access_to_expanded_references(self): 641 def test03_no_direct_attribute_access_to_expanded_references(self):
546 self.assertEqual( 642 self.assertEqual(
547 "{{ref:#wsgi.debugger}}", 643 "{{ref:#wsgi.debugger}}",
548 self._cfg.wsgi.profiler.params) 644 self._cfg.wsgi.profiler.params)
549 try: 645 try:
558 "werkzeug", 654 "werkzeug",
559 self._cfg.getvar_s("testref.here.params.type")) 655 self._cfg.getvar_s("testref.here.params.type"))
560 self.assertTrue( 656 self.assertTrue(
561 self._cfg.getvar_s("testref.here.params.params.evalex")) 657 self._cfg.getvar_s("testref.here.params.params.evalex"))
562 658
659 def test04_indirect_recursive_references_l(self):
660 self.assertEqual(
661 "werkzeug",
662 self._cfg.getvarl_s("testref", "here", "params", "type"))
663 self.assertTrue(
664 self._cfg.getvarl_s("testref", "here", "params", "params", "evalex"))
665
563 def test05_recursive_expansion(self): 666 def test05_recursive_expansion(self):
564 c = self._cfg.getvar_s("testref") 667 c = self._cfg.getvar_s("testref")
565 self.assertTrue(c["here"]["params"]["params"]["evalex"]) 668 self.assertTrue(c["here"]["params"]["params"]["evalex"])
566 669
670 def test05_recursive_expansion_l(self):
671 c = self._cfg.getvarl_s("testref")
672 self.assertTrue(c["here"]["params"]["params"]["evalex"])
673
567 def test06_no_recursive_expansion_in_getvar_parents(self): 674 def test06_no_recursive_expansion_in_getvar_parents(self):
568 v = self._cfg.getvar("wsgi.profiler") 675 v = self._cfg.getvar("wsgi.profiler")
569 self.assertEqual( 676 self.assertEqual(
570 "{{ref:#wsgi.debugger}}", 677 "{{ref:#wsgi.debugger}}",
571 v["params"]) 678 v["params"])
572 679
680 def test06_no_recursive_expansion_in_getvar_parents_l(self):
681 v = self._cfg.getvarl("wsgi", "profiler")
682 self.assertEqual(
683 "{{ref:#wsgi.debugger}}",
684 v["params"])
685
573 def test07_explicit_reference_expansion(self): 686 def test07_explicit_reference_expansion(self):
574 v = self._cfg.getvar("wsgi.profiler") 687 v = self._cfg.getvar("wsgi.profiler")
688 self.assertTrue(isinstance(self._cfg.expand_if_reference(v["params"]),
689 dict))
690
691 def test07_explicit_reference_expansion_l(self):
692 v = self._cfg.getvarl("wsgi", "profiler")
575 self.assertTrue(isinstance(self._cfg.expand_if_reference(v["params"]), 693 self.assertTrue(isinstance(self._cfg.expand_if_reference(v["params"]),
576 dict)) 694 dict))
577 695
578 def test08_explicit_indirect_expansion_through_value(self): 696 def test08_explicit_indirect_expansion_through_value(self):
579 v = self._cfg.getvar_s("expand-ref-value.key0") 697 v = self._cfg.getvar_s("expand-ref-value.key0")
581 self.assertTrue(v) 699 self.assertTrue(v)
582 # but not that .getvar does not **not** 700 # but not that .getvar does not **not**
583 v2 = self._cfg.getvar("expand-ref-value.key0") 701 v2 = self._cfg.getvar("expand-ref-value.key0")
584 self.assertEqual("{{testref.here.params.params.evalex}}", v2) 702 self.assertEqual("{{testref.here.params.params.evalex}}", v2)
585 703
704 def test08_explicit_indirect_expansion_through_value_l(self):
705 v = self._cfg.getvarl_s("expand-ref-value", "key0")
706 self.assertTrue(isinstance(v, bool))
707 self.assertTrue(v)
708 # but not that .getvar does not **not**
709 v2 = self._cfg.getvarl("expand-ref-value", "key0")
710 self.assertEqual("{{testref.here.params.params.evalex}}", v2)
711
586 712
587 if __name__ == "__main__": 713 if __name__ == "__main__":
588 unittest.main() 714 unittest.main()