Skip to content

Commit

Permalink
Merge branch 'master' of github.com:digitalocean/pynetbox
Browse files Browse the repository at this point in the history
  • Loading branch information
Zach Moody committed Dec 30, 2018
2 parents cb60ab0 + 9b878da commit 629a91d
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 88 deletions.
7 changes: 5 additions & 2 deletions pynetbox/core/response.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@
# Record objects.
JSON_FIELDS = ("custom_fields", "data", "config_context")

# List of fields that are lists but should be treated as sets.
LIST_AS_SET = ("tags", "tagged_vlans")


def get_return(lookup, return_fields=None):
"""Returns simple representations for items passed to lookup.
Expand Down Expand Up @@ -309,8 +312,6 @@ def serialize(self, nested=False, init=False):
current_val = getattr(self, i) if not init else init_vals.get(i)
if i == "custom_fields":
ret[i] = flatten_custom(current_val)
elif i == "tags":
ret[i] = list(set(current_val))
else:
if isinstance(current_val, Record):
current_val = getattr(current_val, "serialize")(
Expand All @@ -322,6 +323,8 @@ def serialize(self, nested=False, init=False):
v.id if isinstance(v, Record) else v
for v in current_val
]
if i in LIST_AS_SET:
current_val = list(set(current_val))
ret[i] = current_val
return ret

Expand Down
145 changes: 59 additions & 86 deletions tests/unit/test_response.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,130 +4,103 @@


class RecordTestCase(unittest.TestCase):

def test_serialize_list_of_records(self):
test_values = {
'id': 123,
"id": 123,
"tagged_vlans": [
{
"id": 1,
"url": "http://localhost:8000/api/ipam/vlans/1/",
"vid": 1,
"name": "test1",
"display_name": "test1"
"display_name": "test1",
},
{
"id": 2,
"url": "http://localhost:8000/api/ipam/vlans/2/",
"vid": 2,
"name": "test 2",
"display_name": "test2"
}
"display_name": "test2",
},
],
}
test_obj = Record(test_values, None, None)
test = test_obj.serialize()
self.assertEqual(test['tagged_vlans'], [1, 2])
self.assertEqual(test["tagged_vlans"], [1, 2])

def test_serialize_list_of_ints(self):
test_values = {
'id': 123,
'units': [12],
}
test_values = {"id": 123, "units": [12]}
test_obj = Record(test_values, None, None)
test = test_obj.serialize()
self.assertEqual(test['units'], [12])
self.assertEqual(test["units"], [12])

def test_serialize_tag_set(self):
test_values = {
'id': 123,
'tags': [
'foo',
'bar',
'foo',
],
}
test_values = {"id": 123, "tags": ["foo", "bar", "foo"]}
test = Record(test_values, None, None).serialize()
self.assertEqual(len(test['tags']), 2)
self.assertEqual(len(test["tags"]), 2)

def test_diff(self):
test_values = {
'id': 123,
'custom_fields': {
'foo': 'bar'
},
'string_field': 'foobar',
'int_field': 1,
"nested_dict": {
"id": 222,
"name": 'bar',
},
'tags': [
'foo',
'bar',
],
'int_list': [
123,
321,
231,
],
"id": 123,
"custom_fields": {"foo": "bar"},
"string_field": "foobar",
"int_field": 1,
"nested_dict": {"id": 222, "name": "bar"},
"tags": ["foo", "bar"],
"int_list": [123, 321, 231],
}
test = Record(test_values, None, None)
test.tags.append('baz')
test.tags.append("baz")
test.nested_dict = 1
test.string_field = 'foobaz'
self.assertEqual(test._diff(), {'tags', 'nested_dict', 'string_field'})
test.string_field = "foobaz"
self.assertEqual(test._diff(), {"tags", "nested_dict", "string_field"})

def test_dict(self):
def test_diff_append_records_list(self):
test_values = {
'id': 123,
'custom_fields': {
'foo': 'bar'
},
'string_field': 'foobar',
'int_field': 1,
"nested_dict": {
"id": 222,
"name": 'bar',
},
'tags': [
'foo',
'bar',
],
'int_list': [
123,
321,
231,
"id": 123,
"tagged_vlans": [
{
"id": 1,
"url": "http://localhost:8000/api/ipam/vlans/1/",
"vid": 1,
"name": "test1",
"display_name": "test1",
}
],
'empty_list': [],
'record_list': [
}
test_obj = Record(test_values, None, None)
test_obj.tagged_vlans.append(1)
test = test_obj._diff()
self.assertFalse(test)

def test_dict(self):
test_values = {
"id": 123,
"custom_fields": {"foo": "bar"},
"string_field": "foobar",
"int_field": 1,
"nested_dict": {"id": 222, "name": "bar"},
"tags": ["foo", "bar"],
"int_list": [123, 321, 231],
"empty_list": [],
"record_list": [
{
'id': 123,
'name': 'Test',
'str_attr': 'foo',
'int_attr': 123,
'custom_fields': {
'foo': 'bar'
},
'tags': [
'foo',
'bar',
],
"id": 123,
"name": "Test",
"str_attr": "foo",
"int_attr": 123,
"custom_fields": {"foo": "bar"},
"tags": ["foo", "bar"],
},
{
'id': 321,
'name': 'Test 1',
'str_attr': 'bar',
'int_attr': 321,
'custom_fields': {
'foo': 'bar'
},
'tags': [
'foo',
'bar',
],
"id": 321,
"name": "Test 1",
"str_attr": "bar",
"int_attr": 321,
"custom_fields": {"foo": "bar"},
"tags": ["foo", "bar"],
},
]
],
}
test = Record(test_values, None, None)
self.assertEqual(dict(test), test_values)

0 comments on commit 629a91d

Please sign in to comment.