mirror of
https://github.com/status-im/PyGithub.git
synced 2026-08-31 19:01:15 +00:00
Repository.get_readme and Repository.get_contents (issue #65)
This commit is contained in:
@@ -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": [
|
||||
|
||||
@@ -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`
|
||||
===================================
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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" ]
|
||||
@@ -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",
|
||||
|
||||
@@ -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" )
|
||||
@@ -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
@@ -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 )
|
||||
|
||||
Reference in New Issue
Block a user