Repository.get_readme and Repository.get_contents (issue #65)

This commit is contained in:
Vincent Jacques
2012-09-08 12:51:37 +02:00
parent 7a19732ca9
commit f963e6ac91
11 changed files with 360 additions and 2 deletions
@@ -309,6 +309,18 @@
{ "name": "total", "type": "integer" }
]
},
{
"name": "ContentFile",
"attributes": [
{ "name": "type", "type": "string" },
{ "name": "encoding", "type": "string" },
{ "name": "size", "type": "integer" },
{ "name": "name", "type": "string" },
{ "name": "path", "type": "string" },
{ "name": "content", "type": "string" },
{ "name": "sha", "type": "string" }
]
},
{
"name": "File",
"attributes": [
@@ -1824,6 +1836,34 @@
]
}
},
{
"name": [ "get", "readme" ],
"type": "ContentFile",
"group": "contents",
"request": {
"verb": "GET",
"url": [
{ "type": "attribute", "value": [ "url" ] },
{ "type": "constant", "value": "/readme" }
]
}
},
{
"name": [ "get", "contents" ],
"type": "ContentFile",
"group": "contents",
"mandatoryParameters": [
{ "name": "path", "type": "string" }
],
"request": {
"verb": "GET",
"url": [
{ "type": "attribute", "value": [ "url" ] },
{ "type": "constant", "value": "/contents" },
{ "type": "argument", "value": [ "path" ] }
]
}
},
{
"name": [ "compare" ],
"type": "Comparison",
@@ -2397,6 +2397,69 @@
"name": "Comparison",
"methods": []
},
{
"attributes": [
{
"type": {
"simple": true,
"cardinality": "scalar",
"name": "string"
},
"name": "content"
},
{
"type": {
"simple": true,
"cardinality": "scalar",
"name": "string"
},
"name": "encoding"
},
{
"type": {
"simple": true,
"cardinality": "scalar",
"name": "string"
},
"name": "name"
},
{
"type": {
"simple": true,
"cardinality": "scalar",
"name": "string"
},
"name": "path"
},
{
"type": {
"simple": true,
"cardinality": "scalar",
"name": "string"
},
"name": "sha"
},
{
"type": {
"simple": true,
"cardinality": "scalar",
"name": "integer"
},
"name": "size"
},
{
"type": {
"simple": true,
"cardinality": "scalar",
"name": "string"
},
"name": "type"
}
],
"isCompletable": false,
"name": "ContentFile",
"methods": []
},
{
"attributes": [
{
@@ -10696,6 +10759,81 @@
"name": "integer"
}
},
{
"group": "contents",
"name": [
"get",
"readme"
],
"mandatoryParameters": [],
"request": {
"url": [
{
"type": "attribute",
"value": [
"url"
]
},
{
"type": "constant",
"value": "/readme"
}
],
"verb": "GET"
},
"isMutation": false,
"optionalParameters": [],
"type": {
"simple": false,
"cardinality": "scalar",
"name": "ContentFile"
}
},
{
"group": "contents",
"name": [
"get",
"contents"
],
"mandatoryParameters": [
{
"type": {
"simple": true,
"cardinality": "scalar",
"name": "string"
},
"name": "path"
}
],
"request": {
"url": [
{
"type": "attribute",
"value": [
"url"
]
},
{
"type": "constant",
"value": "/contents"
},
{
"type": "argument",
"value": [
"path"
]
}
],
"verb": "GET"
},
"isMutation": false,
"optionalParameters": [],
"type": {
"simple": false,
"cardinality": "scalar",
"name": "ContentFile"
}
},
{
"group": "Comparison",
"name": [
+2 -2
View File
@@ -192,7 +192,7 @@ API `/repos/:user/:repo/compare/:base...:head`
API `/repos/:user/:repo/contents/:path`
=======================================
* GET: (TODO)
* GET: `Repository.get_contents`
API `/repos/:user/:repo/contributors`
=====================================
@@ -400,7 +400,7 @@ API `/repos/:user/:repo/pulls/comments/:number`
API `/repos/:user/:repo/readme`
===============================
* GET: (TODO)
* GET: `Repository.get_readme`
API `/repos/:user/:repo/stargazers`
===================================
+19
View File
@@ -330,6 +330,19 @@ Attributes
* `total_commits`: integer
* `url`: string
Class `ContentFile`
===================
Attributes
----------
* `content`: string
* `encoding`: string
* `name`: string
* `path`: string
* `sha`: string
* `size`: integer
* `type`: string
Class `Download`
================
@@ -1145,6 +1158,12 @@ Commits
* `sha`: string
* `path`: string
Contents
--------
* `get_readme()`: `ContentFile`
* `get_contents( path )`: `ContentFile`
* `path`: string
Contributors
------------
* `get_contributors()`: iterator of `NamedUser`
+78
View File
@@ -0,0 +1,78 @@
# WARNING: this file is generated automaticaly.
# Do not modify it manually, your work would be lost.
# 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 <http://www.gnu.org/licenses/>.
import GithubObject
class ContentFile( GithubObject.BasicGithubObject ):
@property
def content( self ):
return self._NoneIfNotSet( self._content )
@property
def encoding( self ):
return self._NoneIfNotSet( self._encoding )
@property
def name( self ):
return self._NoneIfNotSet( self._name )
@property
def path( self ):
return self._NoneIfNotSet( self._path )
@property
def sha( self ):
return self._NoneIfNotSet( self._sha )
@property
def size( self ):
return self._NoneIfNotSet( self._size )
@property
def type( self ):
return self._NoneIfNotSet( self._type )
def _initAttributes( self ):
self._content = GithubObject.NotSet
self._encoding = GithubObject.NotSet
self._name = GithubObject.NotSet
self._path = GithubObject.NotSet
self._sha = GithubObject.NotSet
self._size = GithubObject.NotSet
self._type = GithubObject.NotSet
def _useAttributes( self, attributes ):
if "content" in attributes: # pragma no branch
assert attributes[ "content" ] is None or isinstance( attributes[ "content" ], ( str, unicode ) ), attributes[ "content" ]
self._content = attributes[ "content" ]
if "encoding" in attributes: # pragma no branch
assert attributes[ "encoding" ] is None or isinstance( attributes[ "encoding" ], ( str, unicode ) ), attributes[ "encoding" ]
self._encoding = attributes[ "encoding" ]
if "name" in attributes: # pragma no branch
assert attributes[ "name" ] is None or isinstance( attributes[ "name" ], ( str, unicode ) ), attributes[ "name" ]
self._name = attributes[ "name" ]
if "path" in attributes: # pragma no branch
assert attributes[ "path" ] is None or isinstance( attributes[ "path" ], ( str, unicode ) ), attributes[ "path" ]
self._path = attributes[ "path" ]
if "sha" in attributes: # pragma no branch
assert attributes[ "sha" ] is None or isinstance( attributes[ "sha" ], ( str, unicode ) ), attributes[ "sha" ]
self._sha = attributes[ "sha" ]
if "size" in attributes: # pragma no branch
assert attributes[ "size" ] is None or isinstance( attributes[ "size" ], int ), attributes[ "size" ]
self._size = attributes[ "size" ]
if "type" in attributes: # pragma no branch
assert attributes[ "type" ] is None or isinstance( attributes[ "type" ], ( str, unicode ) ), attributes[ "type" ]
self._type = attributes[ "type" ]
+20
View File
@@ -22,6 +22,7 @@ import PaginatedList
import Branch
import IssueEvent
import ContentFile
import Label
import InputGitAuthor
import GitBlob
@@ -594,6 +595,16 @@ class Repository( GithubObject.GithubObject ):
data
)
def get_contents( self, path ):
assert isinstance( path, ( str, unicode ) ), path
headers, data = self._requester.requestAndCheck(
"GET",
self.url + "/contents" + path,
None,
None
)
return ContentFile.ContentFile( self._requester, data, completed = True )
def get_contributors( self ):
headers, data = self._requester.requestAndCheck(
"GET",
@@ -964,6 +975,15 @@ class Repository( GithubObject.GithubObject ):
data
)
def get_readme( self ):
headers, data = self._requester.requestAndCheck(
"GET",
self.url + "/readme",
None,
None
)
return ContentFile.ContentFile( self._requester, data, completed = True )
def get_stargazers( self ):
headers, data = self._requester.requestAndCheck(
"GET",
+33
View File
@@ -0,0 +1,33 @@
# 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 <http://www.gnu.org/licenses/>.
import base64
import Framework
import github
import datetime
class ContentFile( Framework.TestCase ):
def setUp( self ):
Framework.TestCase.setUp( self )
self.file = self.g.get_user().get_repo( "PyGithub" ).get_readme()
def testAttributes( self ):
self.assertEqual( self.file.type, "file" )
self.assertEqual( self.file.encoding, "base64" )
self.assertEqual( self.file.size, 7531 )
self.assertEqual( self.file.name, "ReadMe.md" )
self.assertEqual( self.file.path, "ReadMe.md" )
self.assertEqual( len( base64.b64decode( self.file.content ) ), 7531 )
self.assertEqual( self.file.sha, "5628799a7d517a4aaa0c1a7004d07569cd154df0" )
+1
View File
@@ -21,6 +21,7 @@ from Authorization import *
from Branch import *
from Commit import *
from CommitComment import *
from ContentFile import *
from Download import *
from Event import *
from Gist import *
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+4
View File
@@ -356,3 +356,7 @@ class Repository( Framework.TestCase ):
self.assertListKeyEqual( self.repo.get_assignees(), lambda u: u.login, [ "jacquev6", "Lyloa" ] )
self.repo.remove_from_collaborators( lyloa )
self.assertFalse( self.repo.has_in_assignees( lyloa ) )
def testGetContents( self ):
self.assertEqual( len( self.repo.get_readme().content ), 10212 )
self.assertEqual( len( self.repo.get_contents( "doc/ReferenceOfClasses.md" ).content ), 38121 )