diff --git a/github/NamedUser.py b/github/NamedUser.py index d7dacfa3..22eb3fc6 100644 --- a/github/NamedUser.py +++ b/github/NamedUser.py @@ -32,6 +32,7 @@ import github.PaginatedList import github.Gist import github.Repository import github.NamedUser +import github.Permissions import github.Plan import github.Organization import github.Event @@ -237,6 +238,14 @@ class NamedUser(github.GithubObject.CompletableGithubObject): self._completeIfNotSet(self._owned_private_repos) return self._owned_private_repos.value + @property + def permissions(self): + """ + :type: :class:`github.Permissions.Permissions` + """ + self._completeIfNotSet(self._permissions) + return self._permissions.value + @property def plan(self): """ @@ -558,6 +567,7 @@ class NamedUser(github.GithubObject.CompletableGithubObject): self._name = github.GithubObject.NotSet self._organizations_url = github.GithubObject.NotSet self._owned_private_repos = github.GithubObject.NotSet + self._permissions = github.GithubObject.NotSet self._plan = github.GithubObject.NotSet self._private_gists = github.GithubObject.NotSet self._public_gists = github.GithubObject.NotSet @@ -620,6 +630,8 @@ class NamedUser(github.GithubObject.CompletableGithubObject): self._organizations_url = self._makeStringAttribute(attributes["organizations_url"]) if "owned_private_repos" in attributes: # pragma no branch self._owned_private_repos = self._makeIntAttribute(attributes["owned_private_repos"]) + if "permissions" in attributes: # pragma no branch + self._permissions = self._makeClassAttribute(github.Permissions.Permissions, attributes["permissions"]) if "plan" in attributes: # pragma no branch self._plan = self._makeClassAttribute(github.Plan.Plan, attributes["plan"]) if "private_gists" in attributes: # pragma no branch diff --git a/github/tests/ReplayData/Repository.testCollaborators.txt b/github/tests/ReplayData/Repository.testCollaborators.txt index 1465123f..e03f6922 100644 --- a/github/tests/ReplayData/Repository.testCollaborators.txt +++ b/github/tests/ReplayData/Repository.testCollaborators.txt @@ -50,8 +50,8 @@ None {'Authorization': 'Basic login_and_password_removed', 'User-Agent': 'PyGithub/Python'} null 200 -[('status', '200 OK'), ('x-ratelimit-remaining', '4951'), ('content-length', '590'), ('server', 'nginx/1.0.13'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"dbf3059a3bb24b8af99793f5204a0a39"'), ('date', 'Sun, 27 May 2012 05:34:29 GMT'), ('content-type', 'application/json; charset=utf-8')] -[{"url":"https://api.github.com/users/jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","id":327146},{"url":"https://api.github.com/users/Lyloa","avatar_url":"https://secure.gravatar.com/avatar/1517ed584458ccf83e03f5d77d9699d7?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","gravatar_id":"1517ed584458ccf83e03f5d77d9699d7","login":"Lyloa","id":1131432}] +[('content-length', '2085'), ('x-runtime-rack', '0.048639'), ('etag', '"23ec009b721d7456726f15f2c6dc5f9d"'), ('status', '200 OK'), ('x-ratelimit-remaining', '4892'), ('x-github-media-type', 'github.v3; format=json'), ('date', 'Thu, 28 Dec 2017 16:31:19 GMT'), ('server', 'GitHub.com'), ('x-ratelimit-limit', '5000'), ('content-type', 'application/json; charset=utf-8'), ('x-ratelimit-reset', '1514478935')] +[{"url":"https://api.github.com/users/jacquev6","avatar_url":"https://secure.gravatar.com/avatar/b68de5ae38616c296fa345d2b9df2225?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","login":"jacquev6","id":327146,"html_url":"https://github.com/jacquev6","followers_url":"https://api.github.com/users/jacquev6/followers","following_url":"https://api.github.com/users/jacquev6/following{/other_user}","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","organizations_url":"https://api.github.com/users/jacquev6/orgs","repos_url":"https://api.github.com/users/jacquev6/repos","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","type":"User","site_admin":false,"permissions":{"admin":true,"push":true,"pull":true}},{"url":"https://api.github.com/users/Lyloa","avatar_url":"https://secure.gravatar.com/avatar/1517ed584458ccf83e03f5d77d9699d7?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","gravatar_id":"1517ed584458ccf83e03f5d77d9699d7","login":"Lyloa","id":1131432,"html_url":"https://github.com/Lyloa","followers_url":"https://api.github.com/users/Lyloa/followers","following_url":"https://api.github.com/users/Lyloa/following{/other_user}","gists_url":"https://api.github.com/users/Lyloa/gists{/gist_id}","starred_url":"https://api.github.com/users/Lyloa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Lyloa/subscriptions","organizations_url":"https://api.github.com/users/Lyloa/orgs","repos_url":"https://api.github.com/users/Lyloa/repos","events_url":"https://api.github.com/users/Lyloa/events{/privacy}","received_events_url":"https://api.github.com/users/Lyloa/received_events","type":"User","site_admin":false,"permissions":{"admin":false,"push":true,"pull":true}}] https DELETE diff --git a/github/tests/Repository.py b/github/tests/Repository.py index e0aaacac..1217155c 100644 --- a/github/tests/Repository.py +++ b/github/tests/Repository.py @@ -307,7 +307,12 @@ class Repository(Framework.TestCase): self.assertFalse(self.repo.has_in_collaborators(lyloa)) self.repo.add_to_collaborators(lyloa) self.assertTrue(self.repo.has_in_collaborators(lyloa)) - self.assertListKeyEqual(self.repo.get_collaborators(), lambda u: u.login, ["jacquev6", "Lyloa"]) + collaborators = self.repo.get_collaborators() + self.assertListKeyEqual(collaborators, lambda u: u.login, ["jacquev6", "Lyloa"]) + jacquev6 = [u for u in collaborators if u.login == "jacquev6"][0] + self.assertTrue(jacquev6.permissions.admin, True) + self.assertTrue(jacquev6.permissions.pull, True) + self.assertTrue(jacquev6.permissions.push, True) self.repo.remove_from_collaborators(lyloa) self.assertFalse(self.repo.has_in_collaborators(lyloa))