From ffa5eff84c938908c921f2fe52b68b8e8b6a828d Mon Sep 17 00:00:00 2001 From: twidi Date: Mon, 17 Oct 2011 22:54:43 +0200 Subject: [PATCH 1/3] add a `page` parameter for all methods asking for a list --- github2/commits.py | 4 ++-- github2/core.py | 5 +++++ github2/issues.py | 20 ++++++++--------- github2/organizations.py | 22 +++++++++--------- github2/pull_requests.py | 4 ++-- github2/repositories.py | 48 ++++++++++++++++++++++------------------ github2/teams.py | 9 ++++---- github2/users.py | 14 +++++++----- 8 files changed, 70 insertions(+), 56 deletions(-) diff --git a/github2/commits.py b/github2/commits.py index a671901..b3fd851 100644 --- a/github2/commits.py +++ b/github2/commits.py @@ -27,7 +27,7 @@ def __repr__(self): class Commits(GithubCommand): domain = "commits" - def list(self, project, branch="master", file=None): + def list(self, project, branch="master", file=None, page=None): """List commits on a project .. warning:: @@ -40,7 +40,7 @@ def list(self, project, branch="master", file=None): :param str file: optional file filter """ return self.get_values("list", project, branch, file, - filter="commits", datatype=Commit) + filter="commits", datatype=Commit, page=page) def show(self, project, sha): """Get a specific commit diff --git a/github2/core.py b/github2/core.py index 4a1b619..79658eb 100644 --- a/github2/core.py +++ b/github2/core.py @@ -163,6 +163,11 @@ def get_value(self, *args, **kwargs): def get_values(self, *args, **kwargs): datatype = kwargs.pop("datatype", None) + page = kwargs.pop("page", None) + if page: + if "post_data" not in kwargs: + kwargs["post_data"] = {} + kwargs["post_data"].update({"page": page}) values = self.make_request(*args, **kwargs) if datatype: # Same as above, unicode keys will blow up in **args, so we need to diff --git a/github2/issues.py b/github2/issues.py index 43111b0..c146d88 100644 --- a/github2/issues.py +++ b/github2/issues.py @@ -38,7 +38,7 @@ def __repr__(self): class Issues(GithubCommand): domain = "issues" - def search(self, project, term, state="open"): + def search(self, project, term, state="open", page=None): """Get all issues for project that match term with given state. .. versionadded:: 0.3.0 @@ -49,18 +49,18 @@ def search(self, project, term, state="open"): """ return self.get_values("search", project, state, urllib.quote_plus(term), filter="issues", - datatype=Issue) + datatype=Issue, page=page) - def list(self, project, state="open"): + def list(self, project, state="open", page=None): """Get all issues for project with given state. :param str project: GitHub project :param str state: can be either ``open`` or ``closed``. """ return self.get_values("list", project, state, filter="issues", - datatype=Issue) + datatype=Issue, page=page) - def list_by_label(self, project, label): + def list_by_label(self, project, label, page=None): """Get all issues for project with label. .. versionadded:: 0.3.0 @@ -69,16 +69,16 @@ def list_by_label(self, project, label): :param str label: a string representing a label (e.g., ``bug``). """ return self.get_values("list", project, "label", label, filter="issues", - datatype=Issue) + datatype=Issue, page=page) - def list_labels(self, project): + def list_labels(self, project, page=None): """Get all labels for project. .. versionadded:: 0.3.0 :param str project: GitHub project """ - return self.get_values("labels", project, filter="labels") + return self.get_values("labels", project, filter="labels", page=page) def show(self, project, number): """Get all the data for issue by issue-number. @@ -174,11 +174,11 @@ def comment(self, project, number, comment): post_data=comment_data, filter='comment', datatype=Comment) - def comments(self, project, number): + def comments(self, project, number, page=None): """View comments on an issue. :param str project: GitHub project :param int number: issue number in the Github database """ return self.get_values("comments", project, str(number), - filter="comments", datatype=Comment) + filter="comments", datatype=Comment, page=page) diff --git a/github2/organizations.py b/github2/organizations.py index 25df990..a1d1559 100644 --- a/github2/organizations.py +++ b/github2/organizations.py @@ -42,12 +42,12 @@ def show(self, organization): return self.get_value(organization, filter="organization", datatype=Organization) - def list(self): + def list(self, page=None): """Get list of all of your organizations""" return self.get_values('', filter="organizations", - datatype=Organization) + datatype=Organization, page=page) - def repositories(self, organization=''): + def repositories(self, organization='', page=None): """Get list of all repositories in an organization If organization is not given, or is empty, then this will list @@ -56,28 +56,30 @@ def repositories(self, organization=''): :param: str organization: organization to list repositories for """ return self.get_values(organization, 'repositories', - filter="repositories", datatype=Repository) + filter="repositories", datatype=Repository, + page=page) - def public_repositories(self, organization): + def public_repositories(self, organization, page=None): """Get list of public repositories in an organization :param str organization: organization to list public repositories for """ return self.get_values(organization, 'public_repositories', - filter="repositories", datatype=Repository) + filter="repositories", datatype=Repository, + page=page) - def public_members(self, organization): + def public_members(self, organization, page=None): """Get list of public members in an organization :param str organization: organization to list members for """ return self.get_values(organization, 'public_members', filter="users", - datatype=User) + datatype=User, page=page) - def teams(self, organization): + def teams(self, organization, page=None): """Get list of teams in an organization :param str organization: organization to list teams for """ return self.get_values(organization, 'teams', filter="teams", - datatype=Team) + datatype=Team, page=page) diff --git a/github2/pull_requests.py b/github2/pull_requests.py index c90872e..0cc1a42 100644 --- a/github2/pull_requests.py +++ b/github2/pull_requests.py @@ -84,11 +84,11 @@ def show(self, project, number): return self.get_value(project, str(number), filter="pull", datatype=PullRequest) - def list(self, project, state="open"): + def list(self, project, state="open", page=None): """List all pull requests for a project :param str project: Github project :param str state: can be either ``open`` or ``closed`` """ return self.get_values(project, state, filter="pulls", - datatype=PullRequest) + datatype=PullRequest, page=page) diff --git a/github2/repositories.py b/github2/repositories.py index 11ded7a..ebccbd0 100644 --- a/github2/repositories.py +++ b/github2/repositories.py @@ -36,13 +36,13 @@ def __repr__(self): class Repositories(GithubCommand): domain = "repos" - def search(self, query): + def search(self, query, page=None): """Get all repositories that match term. :param str query: term to search issues for """ return self.get_values("search", query, filter="repositories", - datatype=Repository) + datatype=Repository, page=page) def show(self, project): """Get repository object for project. @@ -53,16 +53,16 @@ def show(self, project): datatype=Repository) @requires_auth - def pushable(self): + def pushable(self, page=None): """Return a list of repos you can push to that are not your own. .. versionadded:: 0.3.0 """ return self.get_values("pushable", filter="repositories", - datatype=Repository) + datatype=Repository, page=page) - def list(self, user=None): + def list(self, user=None, page=None): """Return a list of all repositories for a user. .. deprecated: 0.4.0 @@ -74,7 +74,7 @@ def list(self, user=None): """ user = user or self.request.username return self.get_values("show", user, filter="repositories", - datatype=Repository) + datatype=Repository, page=page) @requires_auth def watch(self, project): @@ -144,13 +144,13 @@ def set_public(self, project): """ return self.make_request("set/public", project) - def list_collaborators(self, project): + def list_collaborators(self, project, page=None): """Lists all the collaborators in a project :param str project: GitHub project """ return self.get_values("show", project, "collaborators", - filter="collaborators") + filter="collaborators", page=page) @requires_auth def add_collaborator(self, project, username): @@ -172,55 +172,59 @@ def remove_collaborator(self, project, username): return self.make_request("collaborators", project, "remove", username, method="POST") - def network(self, project): + def network(self, project, page=None): """Get network data for project :param str project: Github project """ return self.get_values("show", project, "network", filter="network", - datatype=Repository) + datatype=Repository, page=page) - def languages(self, project): + def languages(self, project, page=None): """Get programming language data for project :param str project: Github project """ - return self.get_values("show", project, "languages", filter="languages") + return self.get_values("show", project, "languages", + filter="languages", page=page) - def tags(self, project): + def tags(self, project, page=None): """Get tags for project :param str project: Github project """ - return self.get_values("show", project, "tags", filter="tags") + return self.get_values("show", project, "tags", filter="tags", + page=page) - def branches(self, project): + def branches(self, project, page=None): """Get branch names for project :param str project: Github project """ - return self.get_values("show", project, "branches", filter="branches") + return self.get_values("show", project, "branches", filter="branches", + page=page) - def watchers(self, project): + def watchers(self, project, page=None): """Get list of watchers for project :param str project: Github project """ - return self.get_values("show", project, "watchers", filter="watchers") + return self.get_values("show", project, "watchers", filter="watchers", + page=page) - def watching(self, for_user=None): + def watching(self, for_user=None, page=None): """Lists all the repos a user is watching :param str for_user: optional Github user name to list repositories for """ for_user = for_user or self.request.username return self.get_values("watched", for_user, filter="repositories", - datatype=Repository) + datatype=Repository, page=page) - def list_contributors(self, project): + def list_contributors(self, project, page=None): """Lists all the contributors in a project :param str project: Github project """ return self.get_values("show", project, "contributors", - filter="contributors", datatype=User) + filter="contributors", datatype=User, page=page) diff --git a/github2/teams.py b/github2/teams.py index 859a40e..555e2c7 100644 --- a/github2/teams.py +++ b/github2/teams.py @@ -24,21 +24,22 @@ def show(self, team_id): """ return self.get_value(str(team_id), filter="team", datatype=Team) - def members(self, team_id): + def members(self, team_id, page=None): """Get list of all team members :param int team_id: team to get information for """ return self.get_values(str(team_id), "members", filter="users", - datatype=User) + datatype=User, page=page) - def repositories(self, team_id): + def repositories(self, team_id, page=None): """Get list of all team members :param int team_id: team to get information for """ return self.get_values(str(team_id), "repositories", - filter="repositories", datatype=Repository) + filter="repositories", datatype=Repository, + page=page) def add_project(self, team_id, project): """Add a project to a team diff --git a/github2/users.py b/github2/users.py index 19efcca..d1a163d 100644 --- a/github2/users.py +++ b/github2/users.py @@ -40,13 +40,13 @@ def __repr__(self): class Users(GithubCommand): domain = "user" - def search(self, query): + def search(self, query, page=None): """Search for users :param str query: term to search for """ return self.get_values("search", urllib.quote_plus(query), - filter="users", datatype=User) + filter="users", datatype=User, page=page) def search_by_email(self, query): """Search for users by email address @@ -66,19 +66,21 @@ def show(self, username): """ return self.get_value("show", username, filter="user", datatype=User) - def followers(self, username): + def followers(self, username, page=None): """Get list of Github user's followers :param str username: Github user name """ - return self.get_values("show", username, "followers", filter="users") + return self.get_values("show", username, "followers", filter="users", + page=page) - def following(self, username): + def following(self, username, page=None): """Get list of users a Github user is following :param str username: Github user name """ - return self.get_values("show", username, "following", filter="users") + return self.get_values("show", username, "following", filter="users", + page=page) @requires_auth def follow(self, other_user): From 0bd2006dd204e13614e9b1ba59b975deca4303de Mon Sep 17 00:00:00 2001 From: twidi Date: Tue, 18 Oct 2011 01:30:18 +0200 Subject: [PATCH 2/3] only a few lists can have a page parameter --- github2/commits.py | 1 + github2/issues.py | 20 +++++++++--------- github2/organizations.py | 22 +++++++++----------- github2/pull_requests.py | 1 + github2/repositories.py | 44 +++++++++++++++++++++------------------- github2/teams.py | 9 ++++---- github2/users.py | 17 ++++++++-------- 7 files changed, 58 insertions(+), 56 deletions(-) diff --git a/github2/commits.py b/github2/commits.py index b3fd851..25da151 100644 --- a/github2/commits.py +++ b/github2/commits.py @@ -38,6 +38,7 @@ def list(self, project, branch="master", file=None, page=None): :param str project: project name :param str branch: branch name, or ``master`` if not given :param str file: optional file filter + :param int page: optional page number (page length=100, raise 404 if too high) """ return self.get_values("list", project, branch, file, filter="commits", datatype=Commit, page=page) diff --git a/github2/issues.py b/github2/issues.py index c146d88..43111b0 100644 --- a/github2/issues.py +++ b/github2/issues.py @@ -38,7 +38,7 @@ def __repr__(self): class Issues(GithubCommand): domain = "issues" - def search(self, project, term, state="open", page=None): + def search(self, project, term, state="open"): """Get all issues for project that match term with given state. .. versionadded:: 0.3.0 @@ -49,18 +49,18 @@ def search(self, project, term, state="open", page=None): """ return self.get_values("search", project, state, urllib.quote_plus(term), filter="issues", - datatype=Issue, page=page) + datatype=Issue) - def list(self, project, state="open", page=None): + def list(self, project, state="open"): """Get all issues for project with given state. :param str project: GitHub project :param str state: can be either ``open`` or ``closed``. """ return self.get_values("list", project, state, filter="issues", - datatype=Issue, page=page) + datatype=Issue) - def list_by_label(self, project, label, page=None): + def list_by_label(self, project, label): """Get all issues for project with label. .. versionadded:: 0.3.0 @@ -69,16 +69,16 @@ def list_by_label(self, project, label, page=None): :param str label: a string representing a label (e.g., ``bug``). """ return self.get_values("list", project, "label", label, filter="issues", - datatype=Issue, page=page) + datatype=Issue) - def list_labels(self, project, page=None): + def list_labels(self, project): """Get all labels for project. .. versionadded:: 0.3.0 :param str project: GitHub project """ - return self.get_values("labels", project, filter="labels", page=page) + return self.get_values("labels", project, filter="labels") def show(self, project, number): """Get all the data for issue by issue-number. @@ -174,11 +174,11 @@ def comment(self, project, number, comment): post_data=comment_data, filter='comment', datatype=Comment) - def comments(self, project, number, page=None): + def comments(self, project, number): """View comments on an issue. :param str project: GitHub project :param int number: issue number in the Github database """ return self.get_values("comments", project, str(number), - filter="comments", datatype=Comment, page=page) + filter="comments", datatype=Comment) diff --git a/github2/organizations.py b/github2/organizations.py index a1d1559..25df990 100644 --- a/github2/organizations.py +++ b/github2/organizations.py @@ -42,12 +42,12 @@ def show(self, organization): return self.get_value(organization, filter="organization", datatype=Organization) - def list(self, page=None): + def list(self): """Get list of all of your organizations""" return self.get_values('', filter="organizations", - datatype=Organization, page=page) + datatype=Organization) - def repositories(self, organization='', page=None): + def repositories(self, organization=''): """Get list of all repositories in an organization If organization is not given, or is empty, then this will list @@ -56,30 +56,28 @@ def repositories(self, organization='', page=None): :param: str organization: organization to list repositories for """ return self.get_values(organization, 'repositories', - filter="repositories", datatype=Repository, - page=page) + filter="repositories", datatype=Repository) - def public_repositories(self, organization, page=None): + def public_repositories(self, organization): """Get list of public repositories in an organization :param str organization: organization to list public repositories for """ return self.get_values(organization, 'public_repositories', - filter="repositories", datatype=Repository, - page=page) + filter="repositories", datatype=Repository) - def public_members(self, organization, page=None): + def public_members(self, organization): """Get list of public members in an organization :param str organization: organization to list members for """ return self.get_values(organization, 'public_members', filter="users", - datatype=User, page=page) + datatype=User) - def teams(self, organization, page=None): + def teams(self, organization): """Get list of teams in an organization :param str organization: organization to list teams for """ return self.get_values(organization, 'teams', filter="teams", - datatype=Team, page=page) + datatype=Team) diff --git a/github2/pull_requests.py b/github2/pull_requests.py index 0cc1a42..b7f2f21 100644 --- a/github2/pull_requests.py +++ b/github2/pull_requests.py @@ -89,6 +89,7 @@ def list(self, project, state="open", page=None): :param str project: Github project :param str state: can be either ``open`` or ``closed`` + :param int page: optional page number (page length=100, empty result list if too high """ return self.get_values(project, state, filter="pulls", datatype=PullRequest, page=page) diff --git a/github2/repositories.py b/github2/repositories.py index ebccbd0..840766b 100644 --- a/github2/repositories.py +++ b/github2/repositories.py @@ -36,13 +36,16 @@ def __repr__(self): class Repositories(GithubCommand): domain = "repos" - def search(self, query, page=None): + def search(self, query): """Get all repositories that match term. + .. warning: + Return at max 100 repositories + :param str query: term to search issues for """ return self.get_values("search", query, filter="repositories", - datatype=Repository, page=page) + datatype=Repository) def show(self, project): """Get repository object for project. @@ -53,13 +56,13 @@ def show(self, project): datatype=Repository) @requires_auth - def pushable(self, page=None): + def pushable(self): """Return a list of repos you can push to that are not your own. .. versionadded:: 0.3.0 """ return self.get_values("pushable", filter="repositories", - datatype=Repository, page=page) + datatype=Repository) def list(self, user=None, page=None): @@ -71,6 +74,7 @@ def list(self, user=None, page=None): brittle and will be removed in a future release! :param str user: Github user name to list repositories for + :param int page: optional page number (page length=100, empty result list if too high """ user = user or self.request.username return self.get_values("show", user, filter="repositories", @@ -144,13 +148,13 @@ def set_public(self, project): """ return self.make_request("set/public", project) - def list_collaborators(self, project, page=None): + def list_collaborators(self, project): """Lists all the collaborators in a project :param str project: GitHub project """ return self.get_values("show", project, "collaborators", - filter="collaborators", page=page) + filter="collaborators") @requires_auth def add_collaborator(self, project, username): @@ -172,59 +176,57 @@ def remove_collaborator(self, project, username): return self.make_request("collaborators", project, "remove", username, method="POST") - def network(self, project, page=None): + def network(self, project): """Get network data for project :param str project: Github project """ return self.get_values("show", project, "network", filter="network", - datatype=Repository, page=page) + datatype=Repository) - def languages(self, project, page=None): + def languages(self, project): """Get programming language data for project :param str project: Github project """ return self.get_values("show", project, "languages", - filter="languages", page=page) + filter="languages") - def tags(self, project, page=None): + def tags(self, project): """Get tags for project :param str project: Github project """ - return self.get_values("show", project, "tags", filter="tags", - page=page) + return self.get_values("show", project, "tags", filter="tags") - def branches(self, project, page=None): + def branches(self, project): """Get branch names for project :param str project: Github project """ - return self.get_values("show", project, "branches", filter="branches", - page=page) + return self.get_values("show", project, "branches", filter="branches") - def watchers(self, project, page=None): + def watchers(self, project): """Get list of watchers for project :param str project: Github project """ - return self.get_values("show", project, "watchers", filter="watchers", - page=page) + return self.get_values("show", project, "watchers", filter="watchers") def watching(self, for_user=None, page=None): """Lists all the repos a user is watching :param str for_user: optional Github user name to list repositories for + :param int page: optional page number (page length=100, empty result list if too high """ for_user = for_user or self.request.username return self.get_values("watched", for_user, filter="repositories", datatype=Repository, page=page) - def list_contributors(self, project, page=None): + def list_contributors(self, project): """Lists all the contributors in a project :param str project: Github project """ return self.get_values("show", project, "contributors", - filter="contributors", datatype=User, page=page) + filter="contributors", datatype=User) diff --git a/github2/teams.py b/github2/teams.py index 555e2c7..859a40e 100644 --- a/github2/teams.py +++ b/github2/teams.py @@ -24,22 +24,21 @@ def show(self, team_id): """ return self.get_value(str(team_id), filter="team", datatype=Team) - def members(self, team_id, page=None): + def members(self, team_id): """Get list of all team members :param int team_id: team to get information for """ return self.get_values(str(team_id), "members", filter="users", - datatype=User, page=page) + datatype=User) - def repositories(self, team_id, page=None): + def repositories(self, team_id): """Get list of all team members :param int team_id: team to get information for """ return self.get_values(str(team_id), "repositories", - filter="repositories", datatype=Repository, - page=page) + filter="repositories", datatype=Repository) def add_project(self, team_id, project): """Add a project to a team diff --git a/github2/users.py b/github2/users.py index d1a163d..d444aca 100644 --- a/github2/users.py +++ b/github2/users.py @@ -40,13 +40,16 @@ def __repr__(self): class Users(GithubCommand): domain = "user" - def search(self, query, page=None): + def search(self, query): """Search for users + .. warning: + Return at max 100 repositories + :param str query: term to search for """ return self.get_values("search", urllib.quote_plus(query), - filter="users", datatype=User, page=page) + filter="users", datatype=User) def search_by_email(self, query): """Search for users by email address @@ -66,21 +69,19 @@ def show(self, username): """ return self.get_value("show", username, filter="user", datatype=User) - def followers(self, username, page=None): + def followers(self, username): """Get list of Github user's followers :param str username: Github user name """ - return self.get_values("show", username, "followers", filter="users", - page=page) + return self.get_values("show", username, "followers", filter="users") - def following(self, username, page=None): + def following(self, username): """Get list of users a Github user is following :param str username: Github user name """ - return self.get_values("show", username, "following", filter="users", - page=page) + return self.get_values("show", username, "following", filter="users") @requires_auth def follow(self, other_user): From 41f4977c593f096e925a40a6416ce99f832bc859 Mon Sep 17 00:00:00 2001 From: twidi Date: Tue, 18 Oct 2011 01:37:03 +0200 Subject: [PATCH 3/3] correct an error in comments, and restore a multiline command --- github2/repositories.py | 3 +-- github2/users.py | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/github2/repositories.py b/github2/repositories.py index 840766b..49078f0 100644 --- a/github2/repositories.py +++ b/github2/repositories.py @@ -189,8 +189,7 @@ def languages(self, project): :param str project: Github project """ - return self.get_values("show", project, "languages", - filter="languages") + return self.get_values("show", project, "languages", filter="languages") def tags(self, project): """Get tags for project diff --git a/github2/users.py b/github2/users.py index d444aca..15522bc 100644 --- a/github2/users.py +++ b/github2/users.py @@ -44,7 +44,7 @@ def search(self, query): """Search for users .. warning: - Return at max 100 repositories + Return at max 100 users :param str query: term to search for """