|
7 | 7 | _REPLACE_WITH_VALUE = True
|
8 | 8 | _DO_NOT_DELETE_ORIGIN_VALUE = False
|
9 | 9 | _DO_NOT_REPLACE_WITH_VALUE = False
|
10 |
| - |
| 10 | +_NO_KEY_TRANSFORMATIONS = None |
11 | 11 |
|
12 | 12 | @pytest.mark.parametrize(
|
13 | 13 | [
|
|
16 | 16 | "field_path",
|
17 | 17 | "delete_origin_value",
|
18 | 18 | "replace_record",
|
| 19 | + "key_transformation", |
19 | 20 | "expected_record",
|
20 | 21 | ],
|
21 | 22 | [
|
|
25 | 26 | ["field2"],
|
26 | 27 | _DO_NOT_DELETE_ORIGIN_VALUE,
|
27 | 28 | _DO_NOT_REPLACE_WITH_VALUE,
|
| 29 | + _NO_KEY_TRANSFORMATIONS, |
28 | 30 | {"field1": _ANY_VALUE, "field2": {"field3": _ANY_VALUE}, "field3": _ANY_VALUE},
|
29 | 31 | id="flatten by dpath, don't delete origin value",
|
30 | 32 | ),
|
|
34 | 36 | ["field2"],
|
35 | 37 | _DELETE_ORIGIN_VALUE,
|
36 | 38 | _DO_NOT_REPLACE_WITH_VALUE,
|
| 39 | + _NO_KEY_TRANSFORMATIONS, |
37 | 40 | {"field1": _ANY_VALUE, "field3": _ANY_VALUE},
|
38 | 41 | id="flatten by dpath, delete origin value",
|
39 | 42 | ),
|
|
46 | 49 | ["field2", "*", "field4"],
|
47 | 50 | _DO_NOT_DELETE_ORIGIN_VALUE,
|
48 | 51 | _DO_NOT_REPLACE_WITH_VALUE,
|
| 52 | + _NO_KEY_TRANSFORMATIONS, |
49 | 53 | {
|
50 | 54 | "field1": _ANY_VALUE,
|
51 | 55 | "field2": {"field3": {"field4": {"field5": _ANY_VALUE}}},
|
|
62 | 66 | ["field2", "*", "field4"],
|
63 | 67 | _DELETE_ORIGIN_VALUE,
|
64 | 68 | _DO_NOT_REPLACE_WITH_VALUE,
|
| 69 | + _NO_KEY_TRANSFORMATIONS, |
65 | 70 | {"field1": _ANY_VALUE, "field2": {"field3": {}}, "field5": _ANY_VALUE},
|
66 | 71 | id="flatten by dpath with *, delete origin value",
|
67 | 72 | ),
|
|
71 | 76 | ["{{ config['field_path'] }}"],
|
72 | 77 | _DO_NOT_DELETE_ORIGIN_VALUE,
|
73 | 78 | _DO_NOT_REPLACE_WITH_VALUE,
|
| 79 | + _NO_KEY_TRANSFORMATIONS, |
74 | 80 | {"field1": _ANY_VALUE, "field2": {"field3": _ANY_VALUE}, "field3": _ANY_VALUE},
|
75 | 81 | id="flatten by dpath from config, don't delete origin value",
|
76 | 82 | ),
|
|
80 | 86 | ["non-existing-field"],
|
81 | 87 | _DO_NOT_DELETE_ORIGIN_VALUE,
|
82 | 88 | _DO_NOT_REPLACE_WITH_VALUE,
|
| 89 | + _NO_KEY_TRANSFORMATIONS, |
83 | 90 | {"field1": _ANY_VALUE, "field2": {"field3": _ANY_VALUE}},
|
84 | 91 | id="flatten by non-existing dpath, don't delete origin value",
|
85 | 92 | ),
|
|
89 | 96 | ["*", "non-existing-field"],
|
90 | 97 | _DO_NOT_DELETE_ORIGIN_VALUE,
|
91 | 98 | _DO_NOT_REPLACE_WITH_VALUE,
|
| 99 | + _NO_KEY_TRANSFORMATIONS, |
92 | 100 | {"field1": _ANY_VALUE, "field2": {"field3": _ANY_VALUE}},
|
93 | 101 | id="flatten by non-existing dpath with *, don't delete origin value",
|
94 | 102 | ),
|
|
98 | 106 | ["field2"],
|
99 | 107 | _DO_NOT_DELETE_ORIGIN_VALUE,
|
100 | 108 | _DO_NOT_REPLACE_WITH_VALUE,
|
| 109 | + _NO_KEY_TRANSFORMATIONS, |
101 | 110 | {"field1": _ANY_VALUE, "field2": {"field3": _ANY_VALUE}, "field3": _ANY_VALUE},
|
102 | 111 | id="flatten by dpath, not to update when record has field conflicts, don't delete origin value",
|
103 | 112 | ),
|
|
107 | 116 | ["field2"],
|
108 | 117 | _DO_NOT_DELETE_ORIGIN_VALUE,
|
109 | 118 | _DO_NOT_REPLACE_WITH_VALUE,
|
| 119 | + _NO_KEY_TRANSFORMATIONS, |
110 | 120 | {"field1": _ANY_VALUE, "field2": {"field3": _ANY_VALUE}, "field3": _ANY_VALUE},
|
111 | 121 | id="flatten by dpath, not to update when record has field conflicts, delete origin value",
|
112 | 122 | ),
|
|
116 | 126 | ["field2"],
|
117 | 127 | _DO_NOT_DELETE_ORIGIN_VALUE,
|
118 | 128 | _REPLACE_WITH_VALUE,
|
| 129 | + _NO_KEY_TRANSFORMATIONS, |
119 | 130 | {"field3": _ANY_VALUE},
|
120 | 131 | id="flatten by dpath, replace with value",
|
121 | 132 | ),
|
|
125 | 136 | ["field2"],
|
126 | 137 | _DELETE_ORIGIN_VALUE,
|
127 | 138 | _REPLACE_WITH_VALUE,
|
| 139 | + _NO_KEY_TRANSFORMATIONS, |
128 | 140 | {"field3": _ANY_VALUE},
|
129 | 141 | id="flatten by dpath, delete_origin_value do not affect to replace_record",
|
130 | 142 | ),
|
| 143 | + pytest.param( |
| 144 | + {"field1": _ANY_VALUE, "field2": {"field3": _ANY_VALUE}}, |
| 145 | + {}, |
| 146 | + ["field2"], |
| 147 | + _DO_NOT_DELETE_ORIGIN_VALUE, |
| 148 | + _DO_NOT_REPLACE_WITH_VALUE, |
| 149 | + "field2_{{ key }}", |
| 150 | + {"field1": _ANY_VALUE, "field2": {"field3": _ANY_VALUE}, "field2_field3": _ANY_VALUE}, |
| 151 | + id="flatten by dpath, not delete origin value, add keys transformation", |
| 152 | + ), |
| 153 | + pytest.param( |
| 154 | + {"field1": _ANY_VALUE, "field2": {"field3": _ANY_VALUE}}, |
| 155 | + {}, |
| 156 | + ["field2"], |
| 157 | + _DELETE_ORIGIN_VALUE, |
| 158 | + _DO_NOT_REPLACE_WITH_VALUE, |
| 159 | + "field2_{{ key }}", |
| 160 | + {"field1": _ANY_VALUE, "field2_field3": _ANY_VALUE}, |
| 161 | + id="flatten by dpath, delete origin value, add keys transformation", |
| 162 | + ), |
| 163 | + pytest.param( |
| 164 | + {"field1": _ANY_VALUE, "field2": {"field3": _ANY_VALUE}}, |
| 165 | + {}, |
| 166 | + ["field2"], |
| 167 | + _DO_NOT_DELETE_ORIGIN_VALUE, |
| 168 | + _REPLACE_WITH_VALUE, |
| 169 | + "field2_{{ key }}", |
| 170 | + {"field2_field3": _ANY_VALUE}, |
| 171 | + id="flatten by dpath, not delete origin value, replace record, add keys transformation", |
| 172 | + ), |
131 | 173 | ],
|
132 | 174 | )
|
133 | 175 | def test_dpath_flatten_lists(
|
134 |
| - input_record, config, field_path, delete_origin_value, replace_record, expected_record |
| 176 | + input_record, config, field_path, delete_origin_value, replace_record, key_transformation, expected_record |
135 | 177 | ):
|
136 | 178 | flattener = DpathFlattenFields(
|
137 | 179 | field_path=field_path,
|
138 | 180 | parameters={},
|
139 | 181 | config=config,
|
140 | 182 | delete_origin_value=delete_origin_value,
|
141 | 183 | replace_record=replace_record,
|
| 184 | + key_transformation=key_transformation, |
142 | 185 | )
|
143 | 186 | flattener.transform(input_record)
|
144 | 187 | assert input_record == expected_record
|
0 commit comments