Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions nailgun/entities.py
Original file line number Diff line number Diff line change
Expand Up @@ -4782,10 +4782,8 @@ def read(self, entity=None, attrs=None, ignore=None, params=None):
# Ignore puppetclass attribute if we are running against Puppet disabled
# instance. Ignore it also if the API does not return puppetclasses for
# the given host, but only if it does not have Puppet proxy assigned.
if (
'Puppet' not in _feature_list(self._server_config)
or 'puppetclasses' not in attrs
and not attrs['puppet_proxy']
if 'Puppet' not in _feature_list(self._server_config) or (
'puppetclasses' not in attrs and not attrs['puppet_proxy']
):
ignore.add('puppetclass')
result = super().read(entity, attrs, ignore, params)
Expand Down
6 changes: 6 additions & 0 deletions nailgun/entity_mixins.py
Original file line number Diff line number Diff line change
Expand Up @@ -614,6 +614,12 @@ def __eq__(self, other):
return False
return self.to_json_dict() == other.to_json_dict()

def __hash__(self):
"""Return hash based on entity type and id if available."""
if getattr(self, 'id', None) is not None:
return hash((type(self), self.id))
return hash(type(self))

def compare(self, other, filter_fcn=None):
"""Return True if properties can be compared in terms of eq.

Expand Down
24 changes: 12 additions & 12 deletions tests/test_entities.py
Original file line number Diff line number Diff line change
Expand Up @@ -2997,15 +2997,15 @@ def test_add_func_with_id(self):
entity = self.entity
entity.id = 1
func_param_dict = {entity.add_ansible_role: 'ansible_role_id'}
for func in func_param_dict:
for func, param in func_param_dict.items():
self.assertEqual(inspect.getfullargspec(func), EXPECTED_ARGSPEC)
kwargs = {'kwarg': gen_integer(), 'data': {func_param_dict[func]: gen_integer()}}
kwargs = {'kwarg': gen_integer(), 'data': {param: gen_integer()}}
with mock.patch.object(entities, '_handle_response') as handlr:
with mock.patch.object(client, 'put') as client_request:
response = func(**kwargs)
self.assertEqual(client_request.call_count, 1)
self.assertEqual(len(client_request.call_args[0]), 1)
self.assertNotIn(func_param_dict[func], client_request.call_args[1]['data'])
self.assertNotIn(param, client_request.call_args[1]['data'])
self.assertEqual(client_request.call_args[1], kwargs)
self.assertEqual(handlr.call_count, 1)
self.assertEqual(handlr.return_value, response)
Expand All @@ -3028,15 +3028,15 @@ def test_delete_func_with_id(self):
entity.delete_puppetclass: 'puppetclass_id',
entity.remove_ansible_role: 'ansible_role_id',
}
for func in func_param_dict:
for func, param in func_param_dict.items():
self.assertEqual(inspect.getfullargspec(func), EXPECTED_ARGSPEC)
kwargs = {'kwarg': gen_integer(), 'data': {func_param_dict[func]: gen_integer()}}
kwargs = {'kwarg': gen_integer(), 'data': {param: gen_integer()}}
with mock.patch.object(entities, '_handle_response') as handlr:
with mock.patch.object(client, 'delete') as client_request:
response = func(**kwargs)
self.assertEqual(client_request.call_count, 1)
self.assertEqual(len(client_request.call_args[0]), 1)
self.assertNotIn(func_param_dict[func], client_request.call_args[1]['data'])
self.assertNotIn(param, client_request.call_args[1]['data'])
self.assertEqual(client_request.call_args[1], kwargs)
self.assertEqual(handlr.call_count, 1)
self.assertEqual(handlr.return_value, response)
Expand Down Expand Up @@ -3174,15 +3174,15 @@ def test_add_func_with_id(self):
"""
entity = entities.Host(self.cfg, id=1)
func_param_dict = {entity.add_ansible_role: 'ansible_role_id'}
for func in func_param_dict:
for func, param in func_param_dict.items():
self.assertEqual(inspect.getfullargspec(func), EXPECTED_ARGSPEC)
kwargs = {'kwarg': gen_integer(), 'data': {func_param_dict[func]: gen_integer()}}
kwargs = {'kwarg': gen_integer(), 'data': {param: gen_integer()}}
with mock.patch.object(entities, '_handle_response') as handlr:
with mock.patch.object(client, 'put') as client_request:
response = func(**kwargs)
self.assertEqual(client_request.call_count, 1)
self.assertEqual(len(client_request.call_args[0]), 1)
self.assertNotIn(func_param_dict[func], client_request.call_args[1]['data'])
self.assertNotIn(param, client_request.call_args[1]['data'])
self.assertEqual(client_request.call_args[1], kwargs)
self.assertEqual(handlr.call_count, 1)
self.assertEqual(handlr.return_value, response)
Expand All @@ -3204,15 +3204,15 @@ def test_delete_func_with_id(self):
entity.delete_puppetclass: 'puppetclass_id',
entity.remove_ansible_role: 'ansible_role_id',
}
for func in func_param_dict:
for func, param in func_param_dict.items():
self.assertEqual(inspect.getfullargspec(func), EXPECTED_ARGSPEC)
kwargs = {'kwarg': gen_integer(), 'data': {func_param_dict[func]: gen_integer()}}
kwargs = {'kwarg': gen_integer(), 'data': {param: gen_integer()}}
with mock.patch.object(entities, '_handle_response') as handlr:
with mock.patch.object(client, 'delete') as client_request:
response = func(**kwargs)
self.assertEqual(client_request.call_count, 1)
self.assertEqual(len(client_request.call_args[0]), 1)
self.assertNotIn(func_param_dict[func], client_request.call_args[1]['data'])
self.assertNotIn(param, client_request.call_args[1]['data'])
self.assertEqual(client_request.call_args[1], kwargs)
self.assertEqual(handlr.call_count, 1)
self.assertEqual(handlr.return_value, response)
Expand Down
Loading