1- from jsonchain import load_json , dump_json , extract_keys
1+ from jsonchain import load_json , dump_json , extract_keys , flatten_tree
22import pathlib
33
44here = pathlib .Path .cwd ()
@@ -31,4 +31,56 @@ def test_extract_keys():
3131 {"group" : "aa" },
3232 {"group" : "ab" },
3333 ]
34-
34+
35+
36+ def test_flatten_tree ():
37+ tree = {
38+ "a" : {
39+ "A" : {
40+ 1 : {
41+ "opta" : 1 ,
42+ "optb" : 2 ,
43+ "optc" : 3 ,
44+ },
45+ 2 : {
46+ "opta" : 10 ,
47+ "optb" : 20 ,
48+ "optc" : 30 ,
49+ },
50+ },
51+ "B" : {
52+ 1 : {
53+ "opta" : 21 ,
54+ "optb" : 22 ,
55+ "optc" : 23 ,
56+ },
57+ 2 : {
58+ "opta" : 210 ,
59+ "optb" : 220 ,
60+ "optc" : 230 ,
61+ }
62+ },
63+ "C" : {
64+ 1 : {
65+ "opta" : 31 ,
66+ "optb" : 32 ,
67+ "optc" : 33 ,
68+ },
69+ 2 : {
70+ "opta" : 310 ,
71+ "optb" : 320 ,
72+ "optc" : 330 ,
73+ }
74+ }
75+ }
76+ }
77+ flat = [
78+ {"member" : "a" , "force" : "A" , "case" : 1 , "opta" : 1 , "optb" : 2 , "optc" : 3 },
79+ {"member" : "a" , "force" : "A" , "case" : 2 , "opta" : 10 , "optb" : 20 , "optc" : 30 },
80+ {"member" : "a" , "force" : "B" , "case" : 1 , "opta" : 21 , "optb" : 22 , "optc" : 23 },
81+ {"member" : "a" , "force" : "B" , "case" : 2 , "opta" : 210 , "optb" : 220 , "optc" : 230 },
82+ {"member" : "a" , "force" : "C" , "case" : 1 , "opta" : 31 , "optb" : 32 , "optc" : 33 },
83+ {"member" : "a" , "force" : "C" , "case" : 2 , "opta" : 310 , "optb" : 320 , "optc" : 330 },
84+ ]
85+ flattened = flatten_tree (tree , level_labels = ['member' , 'force' , 'case' ])
86+ assert flattened == flat
0 commit comments