Total Complexity | 13 |
Total Lines | 107 |
Duplicated Lines | 50.47 % |
Changes | 2 | ||
Bugs | 0 | Features | 2 |
Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
1 | # |
||
561 | class Test_50_load_and_dump(TestBaseWithIOMultiFiles): |
||
562 | |||
563 | def test_30_dump_and_load(self): |
||
564 | TT.dump(self.dic, self.a_path) |
||
565 | TT.dump(self.upd, self.b_path) |
||
566 | |||
567 | self.assertTrue(os.path.exists(self.a_path)) |
||
568 | self.assertTrue(os.path.exists(self.b_path)) |
||
569 | |||
570 | View Code Duplication | res = TT.load(self.a_path) |
|
571 | self.assert_dicts_equal(res, self.dic) |
||
572 | |||
573 | res = TT.load(self.g_path) |
||
574 | self.assert_dicts_equal(res, self.exp) |
||
575 | |||
576 | res = TT.load([self.a_path, self.b_path]) |
||
577 | self.assert_dicts_equal(res, self.exp) |
||
578 | |||
579 | def test_31_dump_and_load__to_from_stream(self): |
||
580 | with TT.open(self.a_path, mode='w') as strm: |
||
581 | TT.dump(self.dic, strm) |
||
582 | |||
583 | self.assertTrue(os.path.exists(self.a_path)) |
||
584 | |||
585 | with TT.open(self.a_path) as strm: |
||
586 | res = TT.load(strm, ac_parser="json") |
||
587 | self.assert_dicts_equal(res, self.dic) |
||
588 | |||
589 | def test_32_dump_and_load__w_options(self): |
||
590 | TT.dump(self.dic, self.a_path, indent=2) |
||
591 | self.assertTrue(os.path.exists(self.a_path)) |
||
592 | |||
593 | TT.dump(self.upd, self.b_path, indent=2) |
||
594 | View Code Duplication | self.assertTrue(os.path.exists(self.b_path)) |
|
595 | |||
596 | res = TT.load(self.a_path, parse_int=int) |
||
597 | dic = copy.deepcopy(self.dic) |
||
598 | self.assert_dicts_equal(res, dic) |
||
599 | |||
600 | res = TT.load(self.g_path, parse_int=int) |
||
601 | exp = copy.deepcopy(self.exp) |
||
602 | self.assert_dicts_equal(res, exp) |
||
603 | |||
604 | res = TT.load([self.a_path, self.b_path], parse_int=int) |
||
605 | exp = copy.deepcopy(self.exp) |
||
606 | self.assert_dicts_equal(res, exp) |
||
607 | View Code Duplication | ||
608 | def test_34_load__ignore_missing(self): |
||
609 | cpath = os.path.join(os.curdir, "conf_file_should_not_exist") |
||
610 | assert not os.path.exists(cpath) |
||
611 | |||
612 | self.assertEqual(TT.load([cpath], ac_parser="ini", |
||
613 | ignore_missing=True), |
||
614 | NULL_CNTNR) |
||
615 | |||
616 | def test_36_load_w_validation(self): |
||
617 | cnf_path = os.path.join(self.workdir, "cnf.json") |
||
618 | scm_path = os.path.join(self.workdir, "scm.json") |
||
619 | TT.dump(CNF_0, cnf_path) |
||
620 | TT.dump(SCM_0, scm_path) |
||
621 | |||
622 | cnf_2 = TT.load(cnf_path, ac_context={}, ac_schema=scm_path) |
||
623 | |||
624 | self.assertEqual(cnf_2["name"], CNF_0["name"]) |
||
625 | self.assertEqual(cnf_2["a"], CNF_0["a"]) |
||
626 | self.assertEqual(cnf_2["b"]["b"], CNF_0["b"]["b"]) |
||
627 | self.assertEqual(cnf_2["b"]["c"], CNF_0["b"]["c"]) |
||
628 | |||
629 | def test_38_load_w_validation_yaml(self): |
||
630 | cnf_path = os.path.join(self.workdir, "cnf.yml") |
||
631 | View Code Duplication | scm_path = os.path.join(self.workdir, "scm.yml") |
|
632 | TT.dump(CNF_0, cnf_path) |
||
633 | TT.dump(SCM_0, scm_path) |
||
634 | |||
635 | cnf_2 = TT.load(cnf_path, ac_context={}, ac_schema=scm_path) |
||
636 | |||
637 | self.assertEqual(cnf_2["name"], CNF_0["name"]) |
||
638 | self.assertEqual(cnf_2["a"], CNF_0["a"]) |
||
639 | self.assertEqual(cnf_2["b"]["b"], CNF_0["b"]["b"]) |
||
640 | self.assertEqual(cnf_2["b"]["c"], CNF_0["b"]["c"]) |
||
641 | |||
642 | def test_39_single_load__w_validation(self): |
||
643 | (cnf, scm) = (CNF_0, SCM_0) |
||
644 | cpath = os.path.join(self.workdir, "cnf.json") |
||
645 | spath = os.path.join(self.workdir, "scm.json") |
||
646 | |||
647 | TT.dump(cnf, cpath) |
||
648 | TT.dump(scm, spath) |
||
649 | |||
650 | cnf1 = TT.single_load(cpath, ac_schema=spath) |
||
651 | self.assert_dicts_equal(cnf, cnf1) |
||
652 | |||
653 | def test_40_load_w_query(self): |
||
654 | cnf_path = os.path.join(self.workdir, "cnf.json") |
||
655 | TT.dump(CNF_0, cnf_path) |
||
656 | |||
657 | try: |
||
658 | if TT.query.jmespath: |
||
659 | self.assertEqual(TT.load(cnf_path, ac_query="a"), 1) |
||
660 | self.assertEqual(TT.load(cnf_path, ac_query="b.b"), [1, 2]) |
||
661 | self.assertEqual(TT.load(cnf_path, ac_query="b.b[1]"), 2) |
||
662 | self.assertEqual(TT.load(cnf_path, ac_query="b.b[1:]"), [2]) |
||
663 | self.assertEqual(TT.load(cnf_path, ac_query="b.b[::-1]"), |
||
664 | [2, 1]) |
||
665 | self.assertEqual(TT.load(cnf_path, ac_query="length(b.b)"), 2) |
||
666 | except (NameError, AttributeError): |
||
667 | pass # jmespath is not available. |
||
668 | |||
670 |