Skip to content

Commit 1b8d824

Browse files
committed
fix bug that doesnt check array recursively for dictionary and update test cases
1 parent 36c010b commit 1b8d824

File tree

2 files changed

+19
-16
lines changed

2 files changed

+19
-16
lines changed

src/serializers/fields.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ impl GeneralFieldsSerializer {
214214
}
215215
if let Ok(list) = value.downcast::<PyList>() {
216216
for item in list.iter() {
217-
if item.downcast::<PyDict>().is_ok() {
217+
if Self::contains_dict(&item) {
218218
return true;
219219
}
220220
}

tests/serializers/test_model.py

+18-15
Original file line numberDiff line numberDiff line change
@@ -1117,10 +1117,10 @@ class MyModel:
11171117
3,
11181118
],
11191119
'field_d': [
1120-
{'d': 3, 'b': 2, 'a': {'nested3': 3, 'nested1': 1, 'nested2': 2}},
11211120
[[{'mango': 3, 'banana': 2, 'apple': 1}], {'d': 3, 'b': 2, 'a': 1}],
11221121
3,
11231122
],
1123+
'field_e': {'c': 1, 'b': {'c': 2, 'd': {'mango': 3, 'banana': 2, 'apple': 1}}, 'a': 3},
11241124
'field_none': None,
11251125
}
11261126
)
@@ -1136,10 +1136,10 @@ class MyModel:
11361136
3,
11371137
],
11381138
'field_d': [
1139-
{'a': {'nested1': 1, 'nested2': 2, 'nested3': 3}, 'b': 2, 'd': 3},
11401139
[[{'apple': 1, 'banana': 2, 'mango': 3}], {'a': 1, 'b': 2, 'd': 3}],
11411140
3,
11421141
],
1142+
'field_e': {'a': 3, 'b': {'c': 2, 'd': {'apple': 1, 'banana': 2, 'mango': 3}}, 'c': 1},
11431143
'field_none': None,
11441144
}
11451145
)
@@ -1155,10 +1155,10 @@ class MyModel:
11551155
3,
11561156
],
11571157
'field_d': [
1158-
{'d': 3, 'b': 2, 'a': {'nested3': 3, 'nested1': 1, 'nested2': 2}},
11591158
[[{'mango': 3, 'banana': 2, 'apple': 1}], {'d': 3, 'b': 2, 'a': 1}],
11601159
3,
11611160
],
1161+
'field_e': {'c': 1, 'b': {'c': 2, 'd': {'mango': 3, 'banana': 2, 'apple': 1}}, 'a': 3},
11621162
}
11631163
)
11641164
assert s.to_python(m, exclude_none=True, sort_keys=True) == snapshot(
@@ -1173,17 +1173,17 @@ class MyModel:
11731173
3,
11741174
],
11751175
'field_d': [
1176-
{'a': {'nested1': 1, 'nested2': 2, 'nested3': 3}, 'b': 2, 'd': 3},
11771176
[[{'apple': 1, 'banana': 2, 'mango': 3}], {'a': 1, 'b': 2, 'd': 3}],
11781177
3,
11791178
],
1179+
'field_e': {'a': 3, 'b': {'c': 2, 'd': {'apple': 1, 'banana': 2, 'mango': 3}}, 'c': 1},
11801180
}
11811181
)
11821182
assert s.to_json(m, exclude_none=True) == snapshot(
1183-
b'{"field_123":"test_123","field_b":12,"field_a":"test","field_c":{"mango":2,"banana":3,"apple":1},"field_n":[{"mango":3,"banana":2,"apple":1},[{"mango":3,"banana":2,"apple":1},{"d":3,"b":2,"a":1}],3],"field_d":[{"d":3,"b":2,"a":{"nested3":3,"nested1":1,"nested2":2}},[[{"mango":3,"banana":2,"apple":1}],{"d":3,"b":2,"a":1}],3]}'
1183+
b'{"field_123":"test_123","field_b":12,"field_a":"test","field_c":{"mango":2,"banana":3,"apple":1},"field_n":[{"mango":3,"banana":2,"apple":1},[{"mango":3,"banana":2,"apple":1},{"d":3,"b":2,"a":1}],3],"field_d":[[[{"mango":3,"banana":2,"apple":1}],{"d":3,"b":2,"a":1}],3],"field_e":{"c":1,"b":{"c":2,"d":{"mango":3,"banana":2,"apple":1}},"a":3}}'
11841184
)
11851185
assert s.to_json(m, exclude_none=True, sort_keys=True) == snapshot(
1186-
b'{"field_123":"test_123","field_a":"test","field_b":12,"field_c":{"apple":1,"banana":3,"mango":2},"field_n":[{"apple":1,"banana":2,"mango":3},[{"apple":1,"banana":2,"mango":3},{"a":1,"b":2,"d":3}],3],"field_d":[{"a":{"nested1":1,"nested2":2,"nested3":3},"b":2,"d":3},[[{"apple":1,"banana":2,"mango":3}],{"a":1,"b":2,"d":3}],3]}'
1186+
b'{"field_123":"test_123","field_a":"test","field_b":12,"field_c":{"apple":1,"banana":3,"mango":2},"field_n":[{"apple":1,"banana":2,"mango":3},[{"apple":1,"banana":2,"mango":3},{"a":1,"b":2,"d":3}],3],"field_d":[[[{"apple":1,"banana":2,"mango":3}],{"a":1,"b":2,"d":3}],3],"field_e":{"a":3,"b":{"c":2,"d":{"apple":1,"banana":2,"mango":3}},"c":1}}'
11871187
)
11881188
assert s.to_python(m, exclude={'field_c'}) == snapshot(
11891189
{
@@ -1196,10 +1196,10 @@ class MyModel:
11961196
3,
11971197
],
11981198
'field_d': [
1199-
{'d': 3, 'b': 2, 'a': {'nested3': 3, 'nested1': 1, 'nested2': 2}},
12001199
[[{'mango': 3, 'banana': 2, 'apple': 1}], {'d': 3, 'b': 2, 'a': 1}],
12011200
3,
12021201
],
1202+
'field_e': {'c': 1, 'b': {'c': 2, 'd': {'mango': 3, 'banana': 2, 'apple': 1}}, 'a': 3},
12031203
'field_none': None,
12041204
}
12051205
)
@@ -1214,18 +1214,18 @@ class MyModel:
12141214
3,
12151215
],
12161216
'field_d': [
1217-
{'a': {'nested1': 1, 'nested2': 2, 'nested3': 3}, 'b': 2, 'd': 3},
12181217
[[{'apple': 1, 'banana': 2, 'mango': 3}], {'a': 1, 'b': 2, 'd': 3}],
12191218
3,
12201219
],
1220+
'field_e': {'a': 3, 'b': {'c': 2, 'd': {'apple': 1, 'banana': 2, 'mango': 3}}, 'c': 1},
12211221
'field_none': None,
12221222
}
12231223
)
12241224
assert s.to_json(m, exclude={'field_c'}) == snapshot(
1225-
b'{"field_123":"test_123","field_b":12,"field_a":"test","field_n":[{"mango":3,"banana":2,"apple":1},[{"mango":3,"banana":2,"apple":1},{"d":3,"b":2,"a":1}],3],"field_d":[{"d":3,"b":2,"a":{"nested3":3,"nested1":1,"nested2":2}},[[{"mango":3,"banana":2,"apple":1}],{"d":3,"b":2,"a":1}],3],"field_none":null}'
1225+
b'{"field_123":"test_123","field_b":12,"field_a":"test","field_n":[{"mango":3,"banana":2,"apple":1},[{"mango":3,"banana":2,"apple":1},{"d":3,"b":2,"a":1}],3],"field_d":[[[{"mango":3,"banana":2,"apple":1}],{"d":3,"b":2,"a":1}],3],"field_e":{"c":1,"b":{"c":2,"d":{"mango":3,"banana":2,"apple":1}},"a":3},"field_none":null}'
12261226
)
12271227
assert s.to_json(m, exclude={'field_c'}, sort_keys=True) == snapshot(
1228-
b'{"field_123":"test_123","field_a":"test","field_b":12,"field_n":[{"apple":1,"banana":2,"mango":3},[{"apple":1,"banana":2,"mango":3},{"a":1,"b":2,"d":3}],3],"field_d":[{"a":{"nested1":1,"nested2":2,"nested3":3},"b":2,"d":3},[[{"apple":1,"banana":2,"mango":3}],{"a":1,"b":2,"d":3}],3],"field_none":null}'
1228+
b'{"field_123":"test_123","field_a":"test","field_b":12,"field_n":[{"apple":1,"banana":2,"mango":3},[{"apple":1,"banana":2,"mango":3},{"a":1,"b":2,"d":3}],3],"field_d":[[[{"apple":1,"banana":2,"mango":3}],{"a":1,"b":2,"d":3}],3],"field_e":{"a":3,"b":{"c":2,"d":{"apple":1,"banana":2,"mango":3}},"c":1},"field_none":null}'
12291229
)
12301230
assert s.to_python(m, exclude={'field_d': [0]}) == snapshot(
12311231
{
@@ -1238,7 +1238,8 @@ class MyModel:
12381238
[{'mango': 3, 'banana': 2, 'apple': 1}, {'d': 3, 'b': 2, 'a': 1}],
12391239
3,
12401240
],
1241-
'field_d': [[[{'mango': 3, 'banana': 2, 'apple': 1}], {'d': 3, 'b': 2, 'a': 1}], 3],
1241+
'field_d': [3],
1242+
'field_e': {'c': 1, 'b': {'c': 2, 'd': {'mango': 3, 'banana': 2, 'apple': 1}}, 'a': 3},
12421243
'field_none': None,
12431244
}
12441245
)
@@ -1253,7 +1254,8 @@ class MyModel:
12531254
[{'apple': 1, 'banana': 2, 'mango': 3}, {'a': 1, 'b': 2, 'd': 3}],
12541255
3,
12551256
],
1256-
'field_d': [[[{'apple': 1, 'banana': 2, 'mango': 3}], {'a': 1, 'b': 2, 'd': 3}], 3],
1257+
'field_d': [3],
1258+
'field_e': {'a': 3, 'b': {'c': 2, 'd': {'apple': 1, 'banana': 2, 'mango': 3}}, 'c': 1},
12571259
'field_none': None,
12581260
}
12591261
)
@@ -1268,15 +1270,16 @@ class MyModel:
12681270
[{'apple': 1, 'banana': 2, 'mango': 3}, {'a': 1, 'b': 2, 'd': 3}],
12691271
3,
12701272
],
1271-
'field_d': [[[{'apple': 1, 'banana': 2, 'mango': 3}], {'a': 1, 'b': 2, 'd': 3}], 3],
1273+
'field_d': [3],
1274+
'field_e': {'a': 3, 'b': {'c': 2, 'd': {'apple': 1, 'banana': 2, 'mango': 3}}, 'c': 1},
12721275
'field_none': None,
12731276
}
12741277
)
12751278
assert s.to_json(m, exclude={'field_d': [0]}) == snapshot(
1276-
b'{"field_123":"test_123","field_b":12,"field_a":"test","field_c":{"mango":2,"banana":3,"apple":1},"field_n":[{"mango":3,"banana":2,"apple":1},[{"mango":3,"banana":2,"apple":1},{"d":3,"b":2,"a":1}],3],"field_d":[[[{"mango":3,"banana":2,"apple":1}],{"d":3,"b":2,"a":1}],3],"field_none":null}'
1279+
b'{"field_123":"test_123","field_b":12,"field_a":"test","field_c":{"mango":2,"banana":3,"apple":1},"field_n":[{"mango":3,"banana":2,"apple":1},[{"mango":3,"banana":2,"apple":1},{"d":3,"b":2,"a":1}],3],"field_d":[3],"field_e":{"c":1,"b":{"c":2,"d":{"mango":3,"banana":2,"apple":1}},"a":3},"field_none":null}'
12771280
)
12781281
assert s.to_json(m, exclude={'field_d': [0]}, sort_keys=True) == snapshot(
1279-
b'{"field_123":"test_123","field_a":"test","field_b":12,"field_c":{"apple":1,"banana":3,"mango":2},"field_n":[{"apple":1,"banana":2,"mango":3},[{"apple":1,"banana":2,"mango":3},{"a":1,"b":2,"d":3}],3],"field_d":[[[{"apple":1,"banana":2,"mango":3}],{"a":1,"b":2,"d":3}],3],"field_none":null}'
1282+
b'{"field_123":"test_123","field_a":"test","field_b":12,"field_c":{"apple":1,"banana":3,"mango":2},"field_n":[{"apple":1,"banana":2,"mango":3},[{"apple":1,"banana":2,"mango":3},{"a":1,"b":2,"d":3}],3],"field_d":[3],"field_e":{"a":3,"b":{"c":2,"d":{"apple":1,"banana":2,"mango":3}},"c":1},"field_none":null}'
12801283
)
12811284

12821285

0 commit comments

Comments
 (0)