Skip to content
This repository has been archived by the owner on Sep 28, 2022. It is now read-only.

Commit

Permalink
Merge pull request #113 from postatum/103824794_simplify_api
Browse files Browse the repository at this point in the history
Deprecate ES.get. Rename get_resource->get_item. Use engines get_item
  • Loading branch information
jstoiko committed Sep 27, 2015
2 parents 469f8f8 + 5c474b8 commit 249d62b
Show file tree
Hide file tree
Showing 10 changed files with 62 additions and 68 deletions.
4 changes: 2 additions & 2 deletions docs/source/views.rst
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,15 @@ Configuring Views
return story.save(self.request)
def update(self, **kwargs):
story = self.Model.get_resource(
story = self.Model.get_item(
id=kwargs.pop('story_id'), **kwargs)
return story.update(self._json_params, self.request)
def replace(self, **kwargs):
return self.update(**kwargs)
def delete(self, **kwargs):
story = self.Model.get_resource(
story = self.Model.get_item(
id=kwargs.pop('story_id'), **kwargs)
story.delete(self.request)
Expand Down
2 changes: 1 addition & 1 deletion nefertari/acl.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ def __getitem__(self, key):
db_id = self.item_db_id(key)
pk_field = self.item_model.pk_field()
try:
item = self.item_model.get(
item = self.item_model.get_item(
__raise=True, **{pk_field: db_id}
)
except AttributeError:
Expand Down
14 changes: 7 additions & 7 deletions nefertari/authentication/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ class AuthModelMethodsMixin(object):
All implemented methods must be class methods.
"""
@classmethod
def get_resource(self, *args, **kwargs):
return super(AuthModelMethodsMixin, self).get_resource(
def get_item(self, *args, **kwargs):
return super(AuthModelMethodsMixin, self).get_item(
*args, **kwargs)

@classmethod
Expand All @@ -45,7 +45,7 @@ def get_token_credentials(cls, username, request):
Used by Token-based auth as `credentials_callback` kwarg.
"""
try:
user = cls.get_resource(username=username)
user = cls.get_item(username=username)
except Exception as ex:
log.error(str(ex))
forget(request)
Expand All @@ -61,7 +61,7 @@ def get_groups_by_token(cls, username, token, request):
Used by Token-based authentication as `check` kwarg.
"""
try:
user = cls.get_resource(username=username)
user = cls.get_item(username=username)
except Exception as ex:
log.error(str(ex))
forget(request)
Expand All @@ -84,7 +84,7 @@ def verify_password(user, password):
login = params['login'].lower().strip()
key = 'email' if '@' in login else 'username'
try:
user = cls.get_resource(**{key: login})
user = cls.get_item(**{key: login})
except Exception as ex:
log.error(str(ex))

Expand Down Expand Up @@ -145,7 +145,7 @@ def get_authuser_by_name(cls, request):
"""
username = authenticated_userid(request)
if username:
return cls.get_resource(username=username)
return cls.get_item(username=username)


def lower_strip(event):
Expand Down Expand Up @@ -260,4 +260,4 @@ def cache_request_user(user_cls, request, user_id):
pk_field = user_cls.pk_field()
user = getattr(request, '_user', None)
if user is None or getattr(user, pk_field, None) != user_id:
request._user = user_cls.get_resource(**{pk_field: user_id})
request._user = user_cls.get_item(**{pk_field: user_id})
6 changes: 1 addition & 5 deletions nefertari/elasticsearch.py
Original file line number Diff line number Diff line change
Expand Up @@ -590,7 +590,7 @@ def get_collection(self, **params):

return documents

def get_resource(self, **kw):
def get_item(self, **kw):
__raise_on_empty = kw.pop('__raise_on_empty', True)

params = dict(
Expand Down Expand Up @@ -622,10 +622,6 @@ def get_resource(self, **kw):

return dict2obj(data)

def get(self, **kw):
kw['__raise_on_empty'] = kw.pop('__raise', False)
return self.get_resource(**kw)

@classmethod
def index_relations(cls, db_obj, request=None, **kwargs):
for model_cls, documents in db_obj.get_related_documents(**kwargs):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,15 @@ class ItemsView(BaseView):
return item.save(self.request)

def update(self, **kwargs):
item = self.Model.get_resource(
item = self.Model.get_item(
id=kwargs.pop('item_id'), **kwargs)
return item.update(self._json_params, self.request)

def replace(self, **kwargs):
return self.update(**kwargs)

def delete(self, **kwargs):
item = self.Model.get_resource(
item = self.Model.get_item(
id=kwargs.pop('item_id'), **kwargs)
item.delete(self.request)

Expand Down
3 changes: 2 additions & 1 deletion nefertari/view.py
Original file line number Diff line number Diff line change
Expand Up @@ -350,7 +350,8 @@ def _get_object(id_):
if hasattr(id_, 'pk_field'):
return id_

obj = model.get(**{pk_field: id_})
obj = model.get_item(
**{pk_field: id_, '__raise_on_empty': False})
if setdefault:
return obj or setdefault
else:
Expand Down
6 changes: 3 additions & 3 deletions tests/test_acl.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class DummyModel(object):
def pk_field():
return 'id'
@classmethod
def get(cls, id, **kw):
def get_item(cls, id, **kw):
i = cls()
i.id = id
return i
Expand Down Expand Up @@ -76,7 +76,7 @@ class DBClass(object):
def pk_field():
return 'id'
@staticmethod
def get(id, **kw):
def get_item(id, **kw):
return id
class UserACL(acl.CollectionACL):
item_model = DummyModel
Expand All @@ -93,7 +93,7 @@ def item_db_id(self, key):
def test_item_404(self):
class NotFoundModel(DummyModel):
@staticmethod
def get(id, **kw):
def get_item(id, **kw):
raise AttributeError()
class DummyACL(acl.CollectionACL):
item_model = NotFoundModel
Expand Down
40 changes: 20 additions & 20 deletions tests/test_authentication/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,25 +72,25 @@ def test_cache_request_user_not_present(self, engine_mock):
model_cls.pk_field.return_value = 'myid'
request = Mock(_user=None)
models.cache_request_user(model_cls, request, 1)
model_cls.get_resource.assert_called_once_with(myid=1)
assert request._user == model_cls.get_resource()
model_cls.get_item.assert_called_once_with(myid=1)
assert request._user == model_cls.get_item()

def test_cache_request_user_wrong_id(self, engine_mock):
from nefertari.authentication import models
model_cls = Mock()
model_cls.pk_field.return_value = 'myid'
request = Mock(_user=Mock(myid=4))
models.cache_request_user(model_cls, request, 1)
model_cls.get_resource.assert_called_once_with(myid=1)
assert request._user == model_cls.get_resource()
model_cls.get_item.assert_called_once_with(myid=1)
assert request._user == model_cls.get_item()

def test_cache_request_user_present(self, engine_mock):
from nefertari.authentication import models
model_cls = Mock()
model_cls.pk_field.return_value = 'myid'
request = Mock(_user=Mock(myid=1))
models.cache_request_user(model_cls, request, 1)
assert not model_cls.get_resource.called
assert not model_cls.get_item.called


mixin_path = 'nefertari.authentication.models.AuthModelMethodsMixin.'
Expand All @@ -104,7 +104,7 @@ def test_is_admin(self, engine_mock):
user = Mock(groups=['user', 'admin'])
assert models.AuthModelMethodsMixin.is_admin(user)

@patch(mixin_path + 'get_resource')
@patch(mixin_path + 'get_item')
def test_get_token_credentials(self, mock_res, engine_mock):
from nefertari.authentication import models
user = Mock()
Expand All @@ -114,7 +114,7 @@ def test_get_token_credentials(self, mock_res, engine_mock):
assert token == 'foo-token'
mock_res.assert_called_once_with(username='user1')

@patch(mixin_path + 'get_resource')
@patch(mixin_path + 'get_item')
def test_get_token_credentials_user_not_found(self, mock_res, engine_mock):
from nefertari.authentication import models
mock_res.return_value = None
Expand All @@ -123,7 +123,7 @@ def test_get_token_credentials_user_not_found(self, mock_res, engine_mock):
mock_res.assert_called_once_with(username='user1')

@patch('nefertari.authentication.models.forget')
@patch(mixin_path + 'get_resource')
@patch(mixin_path + 'get_item')
def test_get_token_credentials_query_error(
self, mock_res, mock_forg, engine_mock):
from nefertari.authentication import models
Expand All @@ -133,7 +133,7 @@ def test_get_token_credentials_query_error(
mock_res.assert_called_once_with(username='user1')
mock_forg.assert_called_once_with(1)

@patch(mixin_path + 'get_resource')
@patch(mixin_path + 'get_item')
def test_get_groups_by_token(self, mock_res, engine_mock):
from nefertari.authentication import models
user = Mock(groups=['admin', 'user'])
Expand All @@ -144,7 +144,7 @@ def test_get_groups_by_token(self, mock_res, engine_mock):
assert groups == ['g:admin', 'g:user']
mock_res.assert_called_once_with(username='user1')

@patch(mixin_path + 'get_resource')
@patch(mixin_path + 'get_item')
def test_get_groups_by_token_user_not_found(self, mock_res, engine_mock):
from nefertari.authentication import models
mock_res.return_value = None
Expand All @@ -153,7 +153,7 @@ def test_get_groups_by_token_user_not_found(self, mock_res, engine_mock):
assert groups is None
mock_res.assert_called_once_with(username='user1')

@patch(mixin_path + 'get_resource')
@patch(mixin_path + 'get_item')
def test_get_groups_by_token_wrong_token(self, mock_res, engine_mock):
from nefertari.authentication import models
user = Mock(groups=['admin', 'user'])
Expand All @@ -165,7 +165,7 @@ def test_get_groups_by_token_wrong_token(self, mock_res, engine_mock):
mock_res.assert_called_once_with(username='user1')

@patch('nefertari.authentication.models.forget')
@patch(mixin_path + 'get_resource')
@patch(mixin_path + 'get_item')
def test_get_groups_by_token_query_error(
self, mock_res, mock_forg, engine_mock):
from nefertari.authentication import models
Expand All @@ -176,7 +176,7 @@ def test_get_groups_by_token_query_error(
mock_res.assert_called_once_with(username='user1')
mock_forg.assert_called_once_with(1)

@patch(mixin_path + 'get_resource')
@patch(mixin_path + 'get_item')
def test_authenticate_by_password(self, mock_res, engine_mock):
from nefertari.authentication import models
user = Mock(password=models.crypt.encode('foo'))
Expand All @@ -190,7 +190,7 @@ def test_authenticate_by_password(self, mock_res, engine_mock):
{'login': 'user1@example.com', 'password': 'foo'})
mock_res.assert_called_with(email='user1@example.com')

@patch(mixin_path + 'get_resource')
@patch(mixin_path + 'get_item')
def test_authenticate_by_password_not_found(self, mock_res, engine_mock):
from nefertari.authentication import models
mock_res.return_value = None
Expand All @@ -200,7 +200,7 @@ def test_authenticate_by_password_not_found(self, mock_res, engine_mock):
assert usr is None
mock_res.assert_called_once_with(username='user1')

@patch(mixin_path + 'get_resource')
@patch(mixin_path + 'get_item')
def test_authenticate_by_password_pasword_not_matching(
self, mock_res, engine_mock):
from nefertari.authentication import models
Expand All @@ -212,7 +212,7 @@ def test_authenticate_by_password_pasword_not_matching(
assert user == usr
mock_res.assert_called_once_with(username='user1')

@patch(mixin_path + 'get_resource')
@patch(mixin_path + 'get_item')
def test_authenticate_by_password_exception(self, mock_res, engine_mock):
from nefertari.authentication import models
mock_res.side_effect = Exception
Expand All @@ -236,7 +236,7 @@ def test_get_groups_by_userid(self, mock_cache, mock_field, engine_mock):
models.AuthModelMethodsMixin, request, 'user1')

@patch(mixin_path + 'pk_field')
@patch(mixin_path + 'get_resource')
@patch(mixin_path + 'get_item')
def test_get_groups_by_userid_user_not_found(
self, mock_res, mock_field, engine_mock):
from nefertari.authentication import models
Expand All @@ -249,7 +249,7 @@ def test_get_groups_by_userid_user_not_found(

@patch('nefertari.authentication.models.forget')
@patch(mixin_path + 'pk_field')
@patch(mixin_path + 'get_resource')
@patch(mixin_path + 'get_item')
def test_get_groups_by_userid_query_error(
self, mock_res, mock_field, mock_forg, engine_mock):
from nefertari.authentication import models
Expand Down Expand Up @@ -303,7 +303,7 @@ def test_get_authuser_by_userid_not_authenticated(
assert not mock_cache.called

@patch('nefertari.authentication.models.authenticated_userid')
@patch(mixin_path + 'get_resource')
@patch(mixin_path + 'get_item')
def test_get_authuser_by_name(
self, mock_res, mock_auth, engine_mock):
from nefertari.authentication import models
Expand All @@ -313,7 +313,7 @@ def test_get_authuser_by_name(
mock_res.assert_called_once_with(username='user1')

@patch('nefertari.authentication.models.authenticated_userid')
@patch(mixin_path + 'get_resource')
@patch(mixin_path + 'get_item')
def test_get_authuser_by_name_not_authenticated(
self, mock_res, mock_auth, engine_mock):
from nefertari.authentication import models
Expand Down
26 changes: 10 additions & 16 deletions tests/test_elasticsearch.py
Original file line number Diff line number Diff line change
Expand Up @@ -781,54 +781,48 @@ def test_get_collection_not_found_not_raise(self, mock_search):
assert len(docs) == 0

@patch('nefertari.elasticsearch.ES.api.get_source')
def test_get_resource(self, mock_get):
def test_get_item(self, mock_get):
obj = es.ES('Foo', 'foondex')
mock_get.return_value = {'foo': 'bar', 'id': 4, '_type': 'Story'}
story = obj.get_resource(name='foo')
story = obj.get_item(name='foo')
assert story.id == 4
assert story.foo == 'bar'
mock_get.assert_called_once_with(
name='foo', index='foondex', doc_type='Foo')

@patch('nefertari.elasticsearch.ES.api.get_source')
def test_get_resource_no_index_raise(self, mock_get):
def test_get_item_no_index_raise(self, mock_get):
obj = es.ES('Foo', 'foondex')
mock_get.side_effect = es.IndexNotFoundException()
with pytest.raises(JHTTPNotFound) as ex:
obj.get_resource(name='foo')
obj.get_item(name='foo')
assert 'resource not found (Index does not exist)' in str(ex.value)

@patch('nefertari.elasticsearch.ES.api.get_source')
def test_get_resource_no_index_not_raise(self, mock_get):
def test_get_item_no_index_not_raise(self, mock_get):
obj = es.ES('Foo', 'foondex')
mock_get.side_effect = es.IndexNotFoundException()
try:
obj.get_resource(name='foo', __raise_on_empty=False)
obj.get_item(name='foo', __raise_on_empty=False)
except JHTTPNotFound:
raise Exception('Unexpected error')

@patch('nefertari.elasticsearch.ES.api.get_source')
def test_get_resource_not_found_raise(self, mock_get):
def test_get_item_not_found_raise(self, mock_get):
obj = es.ES('Foo', 'foondex')
mock_get.return_value = {}
with pytest.raises(JHTTPNotFound):
obj.get_resource(name='foo')
obj.get_item(name='foo')

@patch('nefertari.elasticsearch.ES.api.get_source')
def test_get_resource_not_found_not_raise(self, mock_get):
def test_get_item_not_found_not_raise(self, mock_get):
obj = es.ES('Foo', 'foondex')
mock_get.return_value = {}
try:
obj.get_resource(name='foo', __raise_on_empty=False)
obj.get_item(name='foo', __raise_on_empty=False)
except JHTTPNotFound:
raise Exception('Unexpected error')

@patch('nefertari.elasticsearch.ES.get_resource')
def test_get(self, mock_get):
obj = es.ES('Foo', 'foondex')
obj.get(__raise=True, foo=1)
mock_get.assert_called_once_with(__raise_on_empty=True, foo=1)

@patch('nefertari.elasticsearch.ES.settings')
@patch('nefertari.elasticsearch.ES.index')
def test_index_relations(self, mock_ind, mock_settings):
Expand Down

0 comments on commit 249d62b

Please sign in to comment.