diff --git a/github/tests/AllTests.py b/github/tests/AllTests.py index 75d8be12..4691d080 100644 --- a/github/tests/AllTests.py +++ b/github/tests/AllTests.py @@ -63,3 +63,4 @@ from Issue87 import * from Issue131 import * from Issue133 import * from Issue134 import * +from Issue139 import * diff --git a/github/tests/Issue139.py b/github/tests/Issue139.py new file mode 100644 index 00000000..ade9b314 --- /dev/null +++ b/github/tests/Issue139.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- + +# Copyright 2012 Vincent Jacques +# vincent@vincent-jacques.net + +# This file is part of PyGithub. http://vincent-jacques.net/PyGithub + +# PyGithub is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License +# as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public License along with PyGithub. If not, see . + +import Framework +import github + + +class Issue139(Framework.TestCase): # https://github.com/jacquev6/PyGithub/issues/139 + def setUp(self): + Framework.TestCase.setUp(self) + self.user = self.g.get_user().get_repo("PyGithub").get_issue(139).user + + def testCompletion(self): + self.assertEqual(self.user._GithubObject__completed, False) + self.assertEqual(self.user.name, "Ian Ozsvald") + self.assertEqual(self.user._GithubObject__completed, False) # Should be True + self.assertEqual(self.user.plan, None) # Should NOT fire a new request to Github diff --git a/github/tests/ReplayData/Issue139.setUp.txt b/github/tests/ReplayData/Issue139.setUp.txt new file mode 100644 index 00000000..b452ac67 --- /dev/null +++ b/github/tests/ReplayData/Issue139.setUp.txt @@ -0,0 +1,15 @@ +https GET api.github.com None /user {'Authorization': 'Basic login_and_password_removed'} null +200 +[('status', '200 OK'), ('content-length', '1464'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('vary', 'Accept, Authorization, Cookie'), ('x-ratelimit-remaining', '4994'), ('server', 'GitHub.com'), ('last-modified', 'Thu, 07 Feb 2013 18:20:14 GMT'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"e0a49ecde4e224bb688cb9d21b420114"'), ('cache-control', 'private, s-maxage=60, max-age=60'), ('date', 'Fri, 08 Feb 2013 07:27:49 GMT'), ('content-type', 'application/json; charset=utf-8')] +{"collaborators":1,"plan":{"collaborators":1,"space":614400,"private_repos":5,"name":"micro"},"blog":"http://vincent-jacques.net","type":"User","company":"Criteo","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","followers_url":"https://api.github.com/users/jacquev6/followers","total_private_repos":4,"following":37,"created_at":"2010-07-09T06:10:06Z","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","following_url":"https://api.github.com/users/jacquev6/following","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-user-420.png","public_gists":2,"location":"Paris, France","received_events_url":"https://api.github.com/users/jacquev6/received_events","owned_private_repos":4,"public_repos":21,"private_gists":5,"followers":22,"email":"vincent@vincent-jacques.net","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","html_url":"https://github.com/jacquev6","hireable":false,"organizations_url":"https://api.github.com/users/jacquev6/orgs","name":"Vincent Jacques","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","login":"jacquev6","disk_usage":13312,"updated_at":"2013-02-07T18:20:14Z","bio":"","id":327146,"repos_url":"https://api.github.com/users/jacquev6/repos"} + +https GET api.github.com None /repos/jacquev6/PyGithub {'Authorization': 'Basic login_and_password_removed'} null +200 +[('status', '200 OK'), ('content-length', '4615'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('x-ratelimit-limit', '5000'), ('vary', 'Accept, Authorization, Cookie'), ('x-ratelimit-remaining', '4993'), ('server', 'GitHub.com'), ('last-modified', 'Fri, 08 Feb 2013 05:51:24 GMT'), ('connection', 'keep-alive'), ('etag', '"846e3aa719a81e1f9c6cedaa6bab919e"'), ('cache-control', 'private, s-maxage=60, max-age=60'), ('date', 'Fri, 08 Feb 2013 07:27:50 GMT'), ('content-type', 'application/json; charset=utf-8')] +{"id":3544490,"archive_url":"https://api.github.com/repos/jacquev6/PyGithub/{archive_format}{/ref}","fork":false,"html_url":"https://github.com/jacquev6/PyGithub","full_name":"jacquev6/PyGithub","subscribers_url":"https://api.github.com/repos/jacquev6/PyGithub/subscribers","watchers":152,"has_wiki":true,"notifications_url":"https://api.github.com/repos/jacquev6/PyGithub/notifications{?since,all,participating}","compare_url":"https://api.github.com/repos/jacquev6/PyGithub/compare/{base}...{head}","blobs_url":"https://api.github.com/repos/jacquev6/PyGithub/git/blobs{/sha}","tags_url":"https://api.github.com/repos/jacquev6/PyGithub/tags{/tag}","forks_count":43,"default_branch":"master","open_issues":12,"created_at":"2012-02-25T12:53:47Z","teams_url":"https://api.github.com/repos/jacquev6/PyGithub/teams","labels_url":"https://api.github.com/repos/jacquev6/PyGithub/labels{/name}","comments_url":"https://api.github.com/repos/jacquev6/PyGithub/comments{/number}","merges_url":"https://api.github.com/repos/jacquev6/PyGithub/merges","master_branch":"master","stargazers_url":"https://api.github.com/repos/jacquev6/PyGithub/stargazers","pushed_at":"2013-02-07T18:10:11Z","statuses_url":"https://api.github.com/repos/jacquev6/PyGithub/statuses/{sha}","branches_url":"https://api.github.com/repos/jacquev6/PyGithub/branches{/branch}","milestones_url":"https://api.github.com/repos/jacquev6/PyGithub/milestones{/number}","language":"Python","description":"Python library implementing the full Github API v3","forks_url":"https://api.github.com/repos/jacquev6/PyGithub/forks","forks":43,"collaborators_url":"https://api.github.com/repos/jacquev6/PyGithub/collaborators{/collaborator}","ssh_url":"git@github.com:jacquev6/PyGithub.git","watchers_count":152,"url":"https://api.github.com/repos/jacquev6/PyGithub","updated_at":"2013-02-08T05:51:24Z","contents_url":"https://api.github.com/repos/jacquev6/PyGithub/contents/{+path}","trees_url":"https://api.github.com/repos/jacquev6/PyGithub/git/trees{/sha}","homepage":"http://vincent-jacques.net/PyGithub","assignees_url":"https://api.github.com/repos/jacquev6/PyGithub/assignees{/user}","has_downloads":true,"has_issues":true,"clone_url":"https://github.com/jacquev6/PyGithub.git","commits_url":"https://api.github.com/repos/jacquev6/PyGithub/commits{/sha}","private":false,"keys_url":"https://api.github.com/repos/jacquev6/PyGithub/keys{/key_id}","git_url":"git://github.com/jacquev6/PyGithub.git","downloads_url":"https://api.github.com/repos/jacquev6/PyGithub/downloads","git_commits_url":"https://api.github.com/repos/jacquev6/PyGithub/git/commits{/sha}","mirror_url":null,"svn_url":"https://github.com/jacquev6/PyGithub","name":"PyGithub","git_refs_url":"https://api.github.com/repos/jacquev6/PyGithub/git/refs{/sha}","languages_url":"https://api.github.com/repos/jacquev6/PyGithub/languages","permissions":{"push":true,"admin":true,"pull":true},"open_issues_count":12,"issue_comment_url":"https://api.github.com/repos/jacquev6/PyGithub/issues/comments/{number}","size":384,"issue_events_url":"https://api.github.com/repos/jacquev6/PyGithub/issues/events{/number}","issues_url":"https://api.github.com/repos/jacquev6/PyGithub/issues{/number}","pulls_url":"https://api.github.com/repos/jacquev6/PyGithub/pulls{/number}","subscription_url":"https://api.github.com/repos/jacquev6/PyGithub/subscription","git_tags_url":"https://api.github.com/repos/jacquev6/PyGithub/git/tags{/sha}","network_count":43,"contributors_url":"https://api.github.com/repos/jacquev6/PyGithub/contributors","events_url":"https://api.github.com/repos/jacquev6/PyGithub/events","hooks_url":"https://api.github.com/repos/jacquev6/PyGithub/hooks","owner":{"type":"User","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","followers_url":"https://api.github.com/users/jacquev6/followers","repos_url":"https://api.github.com/users/jacquev6/repos","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","following_url":"https://api.github.com/users/jacquev6/following","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-user-420.png","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","received_events_url":"https://api.github.com/users/jacquev6/received_events","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","organizations_url":"https://api.github.com/users/jacquev6/orgs","login":"jacquev6","id":327146}} + +https GET api.github.com None /repos/jacquev6/PyGithub/issues/139 {'Authorization': 'Basic login_and_password_removed'} null +200 +[('status', '200 OK'), ('content-length', '4824'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('vary', 'Accept, Authorization, Cookie'), ('x-ratelimit-remaining', '4992'), ('server', 'GitHub.com'), ('last-modified', 'Fri, 08 Feb 2013 07:13:44 GMT'), ('connection', 'keep-alive'), ('x-ratelimit-limit', '5000'), ('etag', '"4194b45d4744a28a5b6393ef05bd3bbc"'), ('cache-control', 'private, s-maxage=60, max-age=60'), ('date', 'Fri, 08 Feb 2013 07:27:50 GMT'), ('content-type', 'application/json; charset=utf-8')] +{"closed_by":null,"events_url":"https://api.github.com/repos/jacquev6/PyGithub/issues/139/events","created_at":"2013-02-07T22:12:31Z","url":"https://api.github.com/repos/jacquev6/PyGithub/issues/139","body":"I noticed that calls to a user object (e.g. user.email, user.location etc) caused multiple calls to GitHub. Looking at GithubObject.py I see several references to __completed and one to _completed (single underscore) on line 72. Changing line 72 to use a double underscore removed the repeated calls to Github.\r\n\r\nI tried to run your tests but can't figure out how to do so? I'd have left you a pull request if so. I tried \"python -m unittest discover\" and also just running the files, I'm not familiar with the format you've used. I'm happy to run with logs etc if that's useful (some guidance on how to run the tests would be super helpful too). Thanks, Ian.","user":{"type":"User","events_url":"https://api.github.com/users/ianozsvald/events{/privacy}","followers_url":"https://api.github.com/users/ianozsvald/followers","subscriptions_url":"https://api.github.com/users/ianozsvald/subscriptions","gists_url":"https://api.github.com/users/ianozsvald/gists{/gist_id}","following_url":"https://api.github.com/users/ianozsvald/following","url":"https://api.github.com/users/ianozsvald","avatar_url":"https://secure.gravatar.com/avatar/3d644406158b4d440111903db1f62622?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png","received_events_url":"https://api.github.com/users/ianozsvald/received_events","gravatar_id":"3d644406158b4d440111903db1f62622","organizations_url":"https://api.github.com/users/ianozsvald/orgs","starred_url":"https://api.github.com/users/ianozsvald/starred{/owner}{/repo}","login":"ianozsvald","id":273210,"repos_url":"https://api.github.com/users/ianozsvald/repos"},"comments_url":"https://api.github.com/repos/jacquev6/PyGithub/issues/139/comments","closed_at":null,"milestone":{"due_on":null,"created_at":"2013-02-07T18:19:05Z","url":"https://api.github.com/repos/jacquev6/PyGithub/milestones/21","open_issues":3,"description":"","creator":{"type":"User","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","followers_url":"https://api.github.com/users/jacquev6/followers","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","following_url":"https://api.github.com/users/jacquev6/following","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-user-420.png","received_events_url":"https://api.github.com/users/jacquev6/received_events","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","organizations_url":"https://api.github.com/users/jacquev6/orgs","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","login":"jacquev6","id":327146,"repos_url":"https://api.github.com/users/jacquev6/repos"},"closed_issues":0,"state":"open","title":"Version 1.11.1","number":21,"updated_at":"2013-02-08T07:11:03Z","id":262264,"labels_url":"https://api.github.com/repos/jacquev6/PyGithub/milestones/21/labels"},"state":"open","labels":[{"url":"https://api.github.com/repos/jacquev6/PyGithub/labels/Bug","name":"Bug","color":"e10c02"},{"url":"https://api.github.com/repos/jacquev6/PyGithub/labels/Requested+by+user","name":"Requested by user","color":"e10c02"}],"title":"Typo in GithubObject \"self._completed\" -> \"self.__completed\"?","number":139,"html_url":"https://github.com/jacquev6/PyGithub/issues/139","pull_request":{"diff_url":null,"html_url":null,"patch_url":null},"updated_at":"2013-02-08T07:13:44Z","id":10758585,"labels_url":"https://api.github.com/repos/jacquev6/PyGithub/issues/139/labels{/name}","comments":1,"assignee":{"type":"User","events_url":"https://api.github.com/users/jacquev6/events{/privacy}","followers_url":"https://api.github.com/users/jacquev6/followers","subscriptions_url":"https://api.github.com/users/jacquev6/subscriptions","gists_url":"https://api.github.com/users/jacquev6/gists{/gist_id}","following_url":"https://api.github.com/users/jacquev6/following","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-user-420.png","received_events_url":"https://api.github.com/users/jacquev6/received_events","gravatar_id":"b68de5ae38616c296fa345d2b9df2225","organizations_url":"https://api.github.com/users/jacquev6/orgs","starred_url":"https://api.github.com/users/jacquev6/starred{/owner}{/repo}","login":"jacquev6","id":327146,"repos_url":"https://api.github.com/users/jacquev6/repos"}} + diff --git a/github/tests/ReplayData/Issue139.testCompletion.txt b/github/tests/ReplayData/Issue139.testCompletion.txt new file mode 100644 index 00000000..081c1ebe --- /dev/null +++ b/github/tests/ReplayData/Issue139.testCompletion.txt @@ -0,0 +1,10 @@ +https GET api.github.com None /users/ianozsvald {'Authorization': 'Basic login_and_password_removed'} null +200 +[('status', '200 OK'), ('x-ratelimit-remaining', '4991'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('x-ratelimit-limit', '5000'), ('vary', 'Accept, Authorization, Cookie'), ('content-length', '1278'), ('server', 'GitHub.com'), ('last-modified', 'Thu, 07 Feb 2013 22:12:31 GMT'), ('connection', 'keep-alive'), ('etag', '"c7e39237717a6e60232f1dde7c4dcb73"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('date', 'Fri, 08 Feb 2013 07:27:51 GMT'), ('content-type', 'application/json; charset=utf-8')] +{"type":"User","public_repos":26,"company":"Mor Consulting Ltd","events_url":"https://api.github.com/users/ianozsvald/events{/privacy}","followers_url":"https://api.github.com/users/ianozsvald/followers","following":4,"created_at":"2010-05-11T10:22:02Z","hireable":true,"subscriptions_url":"https://api.github.com/users/ianozsvald/subscriptions","gists_url":"https://api.github.com/users/ianozsvald/gists{/gist_id}","following_url":"https://api.github.com/users/ianozsvald/following","url":"https://api.github.com/users/ianozsvald","html_url":"https://github.com/ianozsvald","location":"London, UK","bio":null,"starred_url":"https://api.github.com/users/ianozsvald/starred{/owner}{/repo}","avatar_url":"https://secure.gravatar.com/avatar/3d644406158b4d440111903db1f62622?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png","followers":45,"email":null,"gravatar_id":"3d644406158b4d440111903db1f62622","repos_url":"https://api.github.com/users/ianozsvald/repos","organizations_url":"https://api.github.com/users/ianozsvald/orgs","public_gists":2,"name":"Ian Ozsvald","login":"ianozsvald","updated_at":"2013-02-07T22:12:31Z","blog":"ianozsvald.com","received_events_url":"https://api.github.com/users/ianozsvald/received_events","id":273210} + +https GET api.github.com None /users/ianozsvald {'Authorization': 'Basic login_and_password_removed'} null +200 +[('status', '200 OK'), ('content-length', '1278'), ('x-github-media-type', 'github.beta; format=json'), ('x-content-type-options', 'nosniff'), ('x-ratelimit-limit', '5000'), ('vary', 'Accept, Authorization, Cookie'), ('x-ratelimit-remaining', '4990'), ('server', 'GitHub.com'), ('last-modified', 'Thu, 07 Feb 2013 22:12:31 GMT'), ('connection', 'keep-alive'), ('etag', '"c7e39237717a6e60232f1dde7c4dcb73"'), ('cache-control', 'private, max-age=60, s-maxage=60'), ('date', 'Fri, 08 Feb 2013 07:27:51 GMT'), ('content-type', 'application/json; charset=utf-8')] +{"public_gists":2,"type":"User","public_repos":26,"company":"Mor Consulting Ltd","hireable":true,"repos_url":"https://api.github.com/users/ianozsvald/repos","followers_url":"https://api.github.com/users/ianozsvald/followers","following":4,"created_at":"2010-05-11T10:22:02Z","subscriptions_url":"https://api.github.com/users/ianozsvald/subscriptions","starred_url":"https://api.github.com/users/ianozsvald/starred{/owner}{/repo}","gists_url":"https://api.github.com/users/ianozsvald/gists{/gist_id}","following_url":"https://api.github.com/users/ianozsvald/following","url":"https://api.github.com/users/ianozsvald","location":"London, UK","bio":null,"received_events_url":"https://api.github.com/users/ianozsvald/received_events","blog":"ianozsvald.com","followers":45,"email":null,"gravatar_id":"3d644406158b4d440111903db1f62622","html_url":"https://github.com/ianozsvald","organizations_url":"https://api.github.com/users/ianozsvald/orgs","name":"Ian Ozsvald","login":"ianozsvald","updated_at":"2013-02-07T22:12:31Z","id":273210,"events_url":"https://api.github.com/users/ianozsvald/events{/privacy}","avatar_url":"https://secure.gravatar.com/avatar/3d644406158b4d440111903db1f62622?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png"} +