Skip to content

Commit a0da422

Browse files
authored
Merge pull request #549 from markkuleinio/fix-constraints
Fix permissions contraints handling in case of list of dicts (fixes #465)
2 parents e85daed + 3f4396b commit a0da422

File tree

3 files changed

+20
-0
lines changed

3 files changed

+20
-0
lines changed

pynetbox/core/response.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,9 @@ def list_parser(key_name, list_item):
413413
if len(v) and isinstance(v[0], dict) and "object_type" in v[0]:
414414
v = [generic_list_parser(k, i) for i in v]
415415
to_cache = list(v)
416+
elif k == "constraints":
417+
# Permissions constraints can be either dict or list
418+
to_cache = copy.deepcopy(v)
416419
else:
417420
v = [list_parser(k, i) for i in v]
418421
to_cache = list(v)

tests/fixtures/users/permission.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,13 @@
55
{
66
"username": "user1"
77
}
8+
],
9+
"constraints": [
10+
{
11+
"status": "active"
12+
},
13+
{
14+
"region__name": "Europe"
15+
}
816
]
917
}

tests/test_users.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,15 @@ def test_username(self, _):
104104
user = permission.users[0]
105105
self.assertEqual(str(user), "user1")
106106

107+
@patch(
108+
"requests.sessions.Session.get",
109+
return_value=Response(fixture="users/permission.json"),
110+
)
111+
def test_constraints(self, _):
112+
permission = nb.permissions.get(1)
113+
self.assertIsInstance(permission.constraints, list)
114+
self.assertIsInstance(permission.constraints[0], dict)
115+
107116

108117
class UnknownModelTestCase(unittest.TestCase):
109118
"""This test validates that an unknown model is returned as Record object

0 commit comments

Comments
 (0)