Complete Legacy.convertXxx (issue #81)

This commit is contained in:
Vincent Jacques
2012-09-12 20:35:57 +02:00
parent 6fbd63ba4d
commit 9818dfcbcb
3 changed files with 88 additions and 16 deletions
+41 -14
View File
@@ -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" ] ],
}
+33 -1
View File
@@ -11,6 +11,8 @@
# You should have received a copy of the GNU Lesser General Public License along with PyGithub. If not, see <http://www.gnu.org/licenses/>.
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 )
+14 -1
View File
@@ -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" )