Skip to content

Commit 409dc7a

Browse files
authored
Merge pull request #326 from bdscharf/bdscharf/issue-304
Issue #304: pass along ordered parameter. contrib: bdscharf; reviewer: j5awry
2 parents 4f46f10 + 0a9ec62 commit 409dc7a

File tree

3 files changed

+22
-2
lines changed

3 files changed

+22
-2
lines changed

flask_restx/fields.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -862,7 +862,12 @@ def output(self, key, obj, ordered=False):
862862
# we are using pop() so that we don't
863863
# loop over the whole object every time dropping the
864864
# complexity to O(n)
865-
(objkey, val) = self._flat.pop()
865+
if ordered:
866+
# Get first element if respecting order
867+
(objkey, val) = self._flat.pop(0)
868+
else:
869+
# Previous default retained
870+
(objkey, val) = self._flat.pop()
866871
if (
867872
objkey not in self._cache
868873
and objkey not in self.exclude

flask_restx/marshalling.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def marshal(data, fields, envelope=None, skip_none=False, mask=None, ordered=Fal
7676
if keys:
7777
field.exclude |= set(keys)
7878
keys = []
79-
value = field.output(dkey, data)
79+
value = field.output(dkey, data, ordered=ordered)
8080
if is_wildcard:
8181

8282
def _append(k, v):

tests/test_marshalling.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,21 @@ def test_marshal_nested(self):
221221

222222
assert output == expected
223223

224+
def test_marshal_ordered(self):
225+
model = OrderedDict(
226+
[("foo", fields.Raw), ("baz", fields.Raw), ("bar", fields.Raw)]
227+
)
228+
marshal_fields = {
229+
"foo": 1,
230+
"baz": 2,
231+
"bar": 3
232+
}
233+
expected_ordered = OrderedDict([("foo", 1), ("baz", 2), ("bar", 3)])
234+
ordered_output = marshal(marshal_fields, model, ordered=True)
235+
assert ordered_output == expected_ordered
236+
unordered_output = marshal(marshal_fields, model)
237+
assert not isinstance(unordered_output, OrderedDict)
238+
224239
def test_marshal_nested_ordered(self):
225240
model = OrderedDict(
226241
[("foo", fields.Raw), ("fee", fields.Nested({"fye": fields.String,}))]

0 commit comments

Comments
 (0)