Skip to content

Commit 3614028

Browse files
authored
Merge pull request #93 from arajkumar/fix-integer-index
fix 91: Unable to access nested list property. Contrib: arajukmar
2 parents 570d5c6 + 66ae18a commit 3614028

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

flask_restx/fields.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ def is_indexable_but_not_string(obj):
6666
return not hasattr(obj, "strip") and hasattr(obj, "__iter__")
6767

6868

69+
def is_integer_indexable(obj):
70+
return isinstance(obj, list) or isinstance(obj, tuple)
71+
72+
6973
def get_value(key, obj, default=None):
7074
"""Helper for pulling a keyed value off various types of objects"""
7175
if isinstance(key, int):
@@ -91,6 +95,11 @@ def _get_value_for_key(key, obj, default):
9195
return obj[key]
9296
except (IndexError, TypeError, KeyError):
9397
pass
98+
if is_integer_indexable(obj):
99+
try:
100+
return obj[int(key)]
101+
except (IndexError, TypeError, ValueError):
102+
pass
94103
return getattr(obj, key, default)
95104

96105

tests/test_fields.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1385,3 +1385,21 @@ def __getitem__(self, n):
13851385

13861386
obj = Test("hi")
13871387
assert fields.get_value("value", obj) == "hi"
1388+
1389+
def test_get_value_int_indexable_list(self):
1390+
assert fields.get_value('bar.0', {'bar': [42]}) == 42
1391+
1392+
def test_get_value_int_indexable_list_with_str(self):
1393+
assert fields.get_value('bar.abc', {'bar': [42]}) is None
1394+
1395+
def test_get_value_int_indexable_nested_list(self):
1396+
assert fields.get_value('bar.0.val', {'bar': [{'val': 42}]}) == 42
1397+
1398+
def test_get_value_int_indexable_tuple_with_str(self):
1399+
assert fields.get_value('bar.abc', {'bar': (42, 43)}) is None
1400+
1401+
def test_get_value_int_indexable_tuple(self):
1402+
assert fields.get_value('bar.0', {'bar': (42, 43)}) == 42
1403+
1404+
def test_get_value_int_indexable_nested_tuple(self):
1405+
assert fields.get_value('bar.0.val', {'bar': [{'val': 42}]}) == 42

0 commit comments

Comments
 (0)