From 9818dfcbcb82010c49f17cab0d44fe2bc0fefd7e Mon Sep 17 00:00:00 2001 From: Vincent Jacques Date: Wed, 12 Sep 2012 20:35:57 +0200 Subject: [PATCH] Complete Legacy.convertXxx (issue #81) --- github/Legacy.py | 55 ++++++++++++++++++++++++++++++++++------------ test/Github.py | 34 +++++++++++++++++++++++++++- test/Repository.py | 15 ++++++++++++- 3 files changed, 88 insertions(+), 16 deletions(-) diff --git a/github/Legacy.py b/github/Legacy.py index 3614b6f5..a9d6451b 100644 --- a/github/Legacy.py +++ b/github/Legacy.py @@ -46,29 +46,56 @@ class PaginatedList( PaginatedListBase ): ] def convertUser( attributes ): - login = attributes[ "login" ] - return { - "login": login, - "url": "/users/" + login, + convertedAttributes = { + "name": attributes[ "name" ], + "created_at": attributes[ "created_at" ], + "location": attributes[ "location" ], + + "login": attributes[ "login" ], + "url": "/users/" + attributes[ "login" ], } + if "gravatar_id" in attributes: convertedAttributes[ "gravatar_id" ] = attributes[ "gravatar_id" ] + if "followers" in attributes: convertedAttributes[ "followers" ] = attributes[ "followers" ] + if "repos" in attributes: convertedAttributes[ "public_repos" ] = attributes[ "repos" ] + return convertedAttributes def convertRepo( attributes ): - owner = attributes[ "owner" ] - name = attributes[ "name" ] - return { - "owner": { "login": owner }, - "name": name, - "url": "/repos/" + owner + "/" + name, + convertedAttributes = { + "created_at": attributes[ "created_at" ], + "watchers": attributes[ "watchers" ], + "has_downloads": attributes[ "has_downloads" ], + "fork": attributes[ "fork" ], + "has_issues": attributes[ "has_issues" ], + "has_wiki": attributes[ "has_wiki" ], + "forks": attributes[ "forks" ], + "size": attributes[ "size" ], + "private": attributes[ "private" ], + "open_issues": attributes[ "open_issues" ], + "description": attributes[ "description" ], + "language": attributes[ "language" ], + "name": attributes[ "name" ], + + "owner": { "login": attributes[ "owner" ], "url": "/users/" + attributes[ "owner" ] }, + "url": "/repos/" + attributes[ "owner" ] + "/" + attributes[ "name" ], } + if "pushed_at" in attributes: convertedAttributes[ "pushed_at" ] = attributes[ "pushed_at" ] + if "homepage" in attributes: convertedAttributes[ "homepage" ] = attributes[ "homepage" ] + return convertedAttributes def convertIssue( attributes ): - number = attributes[ "number" ] - title = attributes[ "title" ] html_url = attributes[ "html_url" ] assert html_url.startswith( "https://github.com/" ) url = html_url.replace( "https://github.com/", "/repos/" ) return { - "title": title, - "number": number, + "title": attributes[ "title" ], + "number": attributes[ "number" ], + "created_at": attributes[ "created_at" ], + "comments": attributes[ "comments" ], + "body": attributes[ "body" ], + "updated_at": attributes[ "updated_at" ], + "state": attributes[ "state" ], + "url": url, + "user": { "login": attributes[ "user" ], "url": "/users/" + attributes[ "user" ] }, + "labels": [ { "name": label } for label in attributes[ "labels" ] ], } diff --git a/test/Github.py b/test/Github.py index 5c844e29..6f77ff4b 100644 --- a/test/Github.py +++ b/test/Github.py @@ -11,6 +11,8 @@ # You should have received a copy of the GNU Lesser General Public License along with PyGithub. If not, see . +import datetime + import Framework class Github( Framework.TestCase ): @@ -22,6 +24,26 @@ class Github( Framework.TestCase ): self.assertListKeyBegin( repos, lambda r: r.name, [ "octokit", "github-v3-api", "github_v3_api" ] ) self.assertEqual( repos[ 0 ].full_name, "pengwynn/octokit" ) + # Attributes retrieved from legacy API without lazy completion call + self.assertEqual( repos[ 1 ].created_at, datetime.datetime( 2011, 6, 23, 22, 52, 33 ) ) + self.assertEqual( repos[ 1 ].name, "github-v3-api" ) + self.assertEqual( repos[ 1 ].watchers, 35 ) + self.assertEqual( repos[ 1 ].has_downloads, True ) + self.assertEqual( repos[ 3 ].homepage, "http://peter-murach.github.com/github" ) + self.assertEqual( repos[ 1 ].url, "/repos/jwilger/github-v3-api" ) + self.assertEqual( repos[ 1 ].fork, False ) + self.assertEqual( repos[ 1 ].has_issues, True ) + self.assertEqual( repos[ 1 ].has_wiki, False ) + self.assertEqual( repos[ 1 ].forks, 13 ) + self.assertEqual( repos[ 1 ].size, 212 ) + self.assertEqual( repos[ 1 ].private, False ) + self.assertEqual( repos[ 1 ].open_issues, 2 ) + self.assertEqual( repos[ 3 ].pushed_at, datetime.datetime( 2012, 6, 28, 21, 26, 31 ) ) + self.assertEqual( repos[ 1 ].description, "Ruby Client for the GitHub v3 API" ) + self.assertEqual( repos[ 1 ].language, "Ruby" ) + self.assertEqual( repos[ 1 ].owner.login, "jwilger" ) + self.assertEqual( repos[ 1 ].owner.url, "/users/jwilger" ) + def testLegacySearchReposPagination( self ): repos = self.g.legacy_search_repos( "document" ) self.assertListKeyBegin( repos, lambda r: r.name, [ "git", "nimbus", "kss", "sstoolkit", "lawnchair", "appledoc", "jQ.Mobi", "ipython", "mongoengine", "ravendb", "substance", "symfony-docs", "JavaScript-Garden", "DocSets-for-iOS", "yard", "phpDocumentor2", "phpsh", "Tangle", "Ingredients", "documentjs", "xhp", "couchdb-lucene", "dox", "magento2", "javascriptmvc", "FastPdfKit", "roar", "DocumentUp", "NoRM", "jsdoc", "tagger", "mongodb-csharp", "php-github-api", "beautiful-docs", "mongodb-odm", "iodocs", "seesaw", "bcx-api", "developer.github.com", "amqp", "docsplit", "pycco", "standards-and-practices", "tidy-html5", "redis-doc", "tomdoc", "docs", "flourish", "userguide", "swagger-ui", "rfc", "Weasel-Diesel", "yuidoc", "apigen", "document-viewer", "develop.github.com", "Shanty-Mongo", "PTShowcaseViewController", "gravatar_image_tag", "api-wow-docs", "mongoid-tree", "safari-json-formatter", "mayan", "orm-documentation", "jsfiddle-docs-alpha", "core", "documentcloud", "flexible-nav", "writeCapture", "readium", "xmldocument", "Documentation-Examples", "grails-doc", "stdeb", "aws-autoscaling", "voteable_mongo", "review", "spreadsheet_on_rails", "UKSyntaxColoredTextDocument", "mandango", "bdoc", "Documentation", "documents.com", "rghost", "ticket_mule", "vendo", "khan-api", "spring-data-document-examples", "rspec_api_documentation", "axlsx", "phpdox", "documentation", "Sami", "innershiv", "doxyclean", "documents", "rvm-site", "jqapi", "documentation", "hadoopy", "VichUploaderBundle", "pdoc", "documentation", "wii-js", "oss-docs", "scala-maven-plugin", "Documents", "documenter", "behemoth", "documentation", "documentation", "propelorm.github.com", "Kobold2D", "AutoObjectDocumentation", "php-mongodb-admin", "django-mongokit", "puppet-docs", "docs", "Document", "vendorer", "symfony1-docs", "shocco", "documentation", "jog", "docs", "documentation", "documentation", "documentation", "documentation", "Documentation", "documentation", "documentation", "phpunit-documentation", "ADCtheme", "NelmioApiDocBundle", "iCloud-Singleton-CloudMe", "Documentation", "document", "document_mapper", "heroku-docs", "couchdb-odm", "documentation", "documentation", "document", "documentation", "NanoStore", "documentation", "Documentation", "documentation", "Documentation", "documentation", "document", "documentation", "documentation", "Documentation", "Documentation", "grendel", "ceylon-compiler", "mbtiles-spec", "documentation", "documents", "documents", "Documents", "Documentation", "documentation", "Documentation", "documentation", "documents", "Documentation", "documentation", "documentation", "documents", "Documentation", "documentation", "documenter", "documentation", "documents", "Documents", "documents", "documents", "documentation", "Document", "document", "rdoc", "mongoid_token", "travis-ci.github.com", "Documents", "Documents", "documents", "Document", "Documentation", "documents", "Documents", "Documentation", "documents", "documents", "documents", "documentation", "Documents", "Document", "documents", "documents", "Documentation", "Documentation", "Document", "documents", "Documents", "Documents", "Documentation", "Documents", "documents", "Documents", "document", "documents", "Documentation", "Documents", "documents", "documents", "Documents", "documents", "Documentation", "documentation", "Document", "Documents", "documents", "documents", "documents", "Documentation", "Documentation", "Documents", "Documents", "Documents", "Documenter", "document", "Documentation", "Documents", "Documents", "documentation", "documentation", "Document", "Documents", "Documentation", "Documentation", "Documents", "documents", "Documents", "document", "documentation", "Documents", "documentation", "documentation", "documentation", "Documentation", "Documents", "Documents", "documentation", "Documents", "Documents", "documentation", "documentation", "documents", "Documentation", "documents", "documentation", "Documentation", "Documents", "documentation", "documentation", "documents", "documentation", "Umbraco5Docs", "documents", "Documents", "Documentation", "documents", "document", "documents", "document", "documents", "documentation", "Documents", "documents", "document", "Documents", "Documentation", "Documentation", "documentation", "Documentation", "document", "documentation", "documents", "documents", "Documentations", "document", "documentation", "Documentation", "Document", "Documents", "Documents", "Document" ] ) @@ -32,7 +54,17 @@ class Github( Framework.TestCase ): self.assertEqual( repos[ 0 ].full_name, "ipython/ipython" ) def testLegacySearchUsers( self ): - self.assertListKeyBegin( self.g.legacy_search_users( "vincent" ), lambda u: u.login, [ "nvie", "obra", "lusis" ] ) + users = self.g.legacy_search_users( "vincent" ) + self.assertListKeyBegin( users, lambda u: u.login, [ "nvie", "obra", "lusis" ] ) + + # Attributes retrieved from legacy API without lazy completion call + self.assertEqual( users[ 0 ].gravatar_id, "c5a7f21b46df698f3db31c37ed0cf55a" ) + self.assertEqual( users[ 0 ].name, "Vincent Driessen" ) + self.assertEqual( users[ 0 ].created_at, datetime.datetime( 2009, 5, 12, 21, 19, 38 ) ) + self.assertEqual( users[ 0 ].location, "Netherlands" ) + self.assertEqual( users[ 0 ].followers, 310 ) + self.assertEqual( users[ 0 ].public_repos, 63 ) + self.assertEqual( users[ 0 ].login, "nvie" ) def testLegacySearchUsersPagination( self ): self.assertEqual( len( list( self.g.legacy_search_users( "Lucy" ) ) ), 146 ) diff --git a/test/Repository.py b/test/Repository.py index 5a7835d1..a216befd 100644 --- a/test/Repository.py +++ b/test/Repository.py @@ -344,7 +344,20 @@ class Repository( Framework.TestCase ): self.assertListKeyEqual( self.repo.get_pulls( "closed" ), lambda p: p.id, [ 1448168, 1436310, 1436215 ] ) def testLegacySearchIssues( self ): - self.assertListKeyEqual( self.repo.legacy_search_issues( "open", "search" ), lambda i: i.title, [ "Support new Search API" ] ) + issues = self.repo.legacy_search_issues( "open", "search" ) + self.assertListKeyEqual( issues, lambda i: i.title, [ "Support new Search API" ] ) + + # Attributes retrieved from legacy API without lazy completion call + self.assertEqual( issues[ 0 ].number, 49 ) + self.assertEqual( issues[ 0 ].created_at, datetime.datetime( 2012, 6, 21, 12, 27, 38 ) ) + self.assertEqual( issues[ 0 ].comments, 4 ) + self.assertEqual( issues[ 0 ].body[ : 20 ], "New API ported from " ) + self.assertEqual( issues[ 0 ].title, "Support new Search API" ) + self.assertEqual( issues[ 0 ].updated_at, datetime.datetime( 2012, 6, 28, 21, 13, 25 ) ) + self.assertEqual( issues[ 0 ].user.login, "kukuts" ) + self.assertEqual( issues[ 0 ].user.url, "/users/kukuts" ) + self.assertListKeyEqual( issues[ 0 ].labels, lambda l: l.name, [ "Functionalities", "RequestedByUser" ] ) + self.assertEqual( issues[ 0 ].state, "open" ) def testAssignees( self ): lyloa = self.g.get_user( "Lyloa" )