Skip to content

Commit

Permalink
define UserManager.get_by_username() to get a user by username
Browse files Browse the repository at this point in the history
  • Loading branch information
rhansen committed Feb 12, 2016
1 parent 8f59516 commit ac2e534
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 0 deletions.
14 changes: 14 additions & 0 deletions gitlab/objects.py
Expand Up @@ -573,6 +573,20 @@ def search(self, query, **kwargs):
url = self.obj_cls._url + '?search=' + query
return self._custom_list(url, self.obj_cls, **kwargs)

def get_by_username(self, username, **kwargs):
"""Get a user by its username.
Returns a User object or None if the named user does not
exist.
"""
url = self.obj_cls._url + '?username=' + username
results = self._custom_list(url, self.obj_cls, **kwargs)
assert len(results) in (0, 1)
try:
return results[0]
except IndexError:
raise GitlabGetError('no such user: ' + username)


class CurrentUserKey(GitlabObject):
_url = '/user/keys'
Expand Down
26 changes: 26 additions & 0 deletions gitlab/tests/test_manager.py
Expand Up @@ -258,6 +258,32 @@ def resp_get_search(url, request):
self.assertEqual(data[0].id, 1)
self.assertEqual(data[1].id, 2)

def test_user_manager_get_by_username(self):
mgr = UserManager(self.gitlab)

@urlmatch(scheme="http", netloc="localhost", path="/api/v3/users",
query="username=foo", method="get")
def resp_get_username(url, request):
headers = {'content-type': 'application/json'}
content = '[{"name": "foo", "id": 1}]'.encode("utf-8")
return response(200, content, headers, None, 5, request)

with HTTMock(resp_get_username):
data = mgr.get_by_username('foo')
self.assertEqual(type(data), User)
self.assertEqual(data.name, "foo")
self.assertEqual(data.id, 1)

@urlmatch(scheme="http", netloc="localhost", path="/api/v3/users",
query="username=foo", method="get")
def resp_get_username_nomatch(url, request):
headers = {'content-type': 'application/json'}
content = '[]'.encode("utf-8")
return response(200, content, headers, None, 5, request)

with HTTMock(resp_get_username_nomatch):
self.assertRaises(GitlabGetError, mgr.get_by_username, 'foo')

def test_group_manager_search(self):
mgr = GroupManager(self.gitlab)

Expand Down
9 changes: 9 additions & 0 deletions tools/python_test.py
Expand Up @@ -54,6 +54,15 @@
assert expected == actual
assert gl.users.search('asdf') == []

assert gl.users.get_by_username('foobar') == foobar_user
assert gl.users.get_by_username('foo') == new_user
try:
gl.users.get_by_username('asdf')
except gitlab.GitlabGetError:
pass
else:
assert False

# SSH keys
key = new_user.keys.create({'title': 'testkey', 'key': SSH_KEY})
assert(len(new_user.keys.list()) == 1)
Expand Down

0 comments on commit ac2e534

Please sign in to comment.