diff --git a/AUTHORS b/AUTHORS index d6130439c..c6350f365 100644 --- a/AUTHORS +++ b/AUTHORS @@ -11,3 +11,4 @@ Erik Weatherwax Andrew Austin Koen Smets Mart Sõmermaa +Diego Giovane Pasqualin diff --git a/ChangeLog b/ChangeLog index b9766ea52..29a8981c6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Version 0.6 + + * IDs can be unicode (#15) + * ProjectMember: constructor should not create a User object + * Add support for extra parameters when listing all projects (#12) + * Projects listing: explicitly define arguments for pagination + Version 0.5 * Add SSH key for user diff --git a/gitlab.py b/gitlab.py index f827a5b72..a64fdcada 100644 --- a/gitlab.py +++ b/gitlab.py @@ -21,7 +21,7 @@ import sys __title__ = 'python-gitlab' -__version__ = '0.5' +__version__ = '0.6' __author__ = 'Gauvain Pocentek' __email__ = 'gauvain@pocentek.net' __license__ = 'LGPL3' @@ -131,8 +131,12 @@ def setCredentials(self, email, password): self.email = email self.password = password - def rawGet(self, path): + def rawGet(self, path, **kwargs): url = '%s%s' % (self._url, path) + if kwargs: + url += "?%s" % ("&".join( + ["%s=%s" % (k, v) for k, v in kwargs.items()])) + try: return requests.get(url, headers=self.headers, @@ -355,8 +359,8 @@ def UserProject(self, id=None, **kwargs): """ return self._getListOrObject(UserProject, id, **kwargs) - def _list_projects(self, url): - r = self.rawGet(url) + def _list_projects(self, url, **kwargs): + r = self.rawGet(url, **kwargs) if r.status_code != 200: raise GitlabListError @@ -373,13 +377,23 @@ def search_projects(self, query): """ return self._list_projects("/projects/search/" + query) - def all_projects(self): + def all_projects(self, page=None, per_page=None): """Lists all the projects (need admin rights).""" - return self._list_projects("/projects/all") + d = {} + if page is not None: + d['page'] = page + if per_page is not None: + d['per_page'] = per_page + return self._list_projects("/projects/all", **d) - def owned_projects(self): + def owned_projects(self, page=None, per_page=None): """Lists owned projects.""" - return self._list_projects("/projects/owned") + d = {} + if page is not None: + d['page'] = page + if per_page is not None: + d['per_page'] = per_page + return self._list_projects("/projects/owned", **d) def Group(self, id=None, **kwargs): """Creates/gets/lists group(s) known by the GitLab server. @@ -523,7 +537,7 @@ def delete(self): def __init__(self, gl, data=None, **kwargs): self.gitlab = gl - if data is None or isinstance(data, int) or isinstance(data, str): + if data is None or type(data) in [int, str, unicode]: data = self.gitlab.get(self.__class__, data, **kwargs) self._setFromDict(data) @@ -798,7 +812,6 @@ def Note(self, id=None, **kwargs): class ProjectMember(GitlabObject): _url = '/projects/%(project_id)s/members' - _returnClass = User requiredListAttrs = ['project_id'] requiredGetAttrs = ['project_id'] requiredCreateAttrs = ['project_id', 'user_id', 'access_level']