Skip to content

Commit 4ce1a90

Browse files
author
Nat Williams
committed
add Git Data API support
1 parent 6dfa63b commit 4ce1a90

File tree

15 files changed

+517
-0
lines changed

15 files changed

+517
-0
lines changed

pygithub3/github.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@ def __init__(self, **config):
1717
from pygithub3.services.users import User
1818
from pygithub3.services.repos import Repo
1919
from pygithub3.services.gists import Gist
20+
from pygithub3.services.git_data import GitData
2021
self._users = User(**config)
2122
self._repos = Repo(**config)
2223
self._gists = Gist(**config)
24+
self._git_data = GitData(**config)
2325

2426
@property
2527
def remaining_requests(self):
@@ -47,3 +49,10 @@ def gists(self):
4749
:ref:`Gists service <Gists service>`
4850
"""
4951
return self._gists
52+
53+
@property
54+
def git_data(self):
55+
"""
56+
:ref:`Git Data service <Git Data service>`
57+
"""
58+
return self._git_data

pygithub3/requests/git_data/__init__.py

Whitespace-only changes.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# -*- encoding: utf-8 -*-
2+
3+
from pygithub3.requests.base import Request
4+
from pygithub3.resources.git_data import Blob
5+
6+
7+
class Get(Request):
8+
9+
uri = 'repos/{user}/{repo}/git/blobs/{sha}'
10+
resource = Blob
11+
12+
13+
class Create(Request):
14+
15+
uri = 'repos/{user}/{repo}/git/blobs'
16+
resource = Blob
17+
body_schema = {
18+
'schema': ('content', 'encoding'),
19+
'required': ('content', 'encoding'), #TODO: is enc really required?
20+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# -*- encoding: utf-8 -*-
2+
3+
from pygithub3.requests.base import Request
4+
from pygithub3.resources.git_data import Commit
5+
6+
7+
class Get(Request):
8+
uri = 'repos/{user}/{repo}/git/commits/{sha}'
9+
resource = Commit
10+
11+
12+
class Create(Request):
13+
uri = 'repos/{user}/{repo}/git/commits'
14+
resource = Commit
15+
body_schema = {
16+
'schema': ('message', 'tree', 'parents', 'author', 'committer'),
17+
'required': ('message', 'tree', 'parents'),
18+
}
19+
20+
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from pygithub3.requests.base import Request
2+
from pygithub3.resources.git_data import Reference
3+
4+
5+
class Get(Request):
6+
uri = 'repos/{user}/{repo}/git/refs/{ref}'
7+
resource = Reference
8+
9+
10+
class List(Request):
11+
uri = 'repos/{user}/{repo}/git/refs'
12+
resource = Reference
13+
14+
15+
class Create(Request):
16+
uri = 'repos/{user}/{repo}/git/refs'
17+
resource = Reference
18+
body_schema = {
19+
'schema': ('ref', 'sha'),
20+
'required': ('ref', 'sha'),
21+
}
22+
23+
class Update(Request):
24+
uri = 'repos/{user}/{repo}/git/refs/{ref}'
25+
resource = Reference
26+
body_schema = {
27+
'schema': ('sha', 'force'),
28+
'required': ('sha',),
29+
}
30+
31+
32+
class Delete(Request):
33+
uri = 'repos/{user}/{repo}/git/refs/{ref}'
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from pygithub3.requests.base import Request
2+
from pygithub3.resources.git_data import Tag
3+
4+
5+
class Get(Request):
6+
uri = 'repos/{user}/{repo}/git/tags/{sha}'
7+
resource = Tag
8+
9+
class Create(Request):
10+
uri = 'repos/{user}/{repo}/git/tags'
11+
resource = Tag
12+
body_schema = {
13+
'schema': ('tag', 'message', 'object', 'type', 'tagger'),
14+
'required': ('type',),
15+
}
16+
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from pygithub3.requests.base import Request
2+
from pygithub3.resources.git_data import Tree
3+
4+
5+
class Get(Request):
6+
uri = 'repos/{user}/{repo}/git/trees/{sha}'
7+
resource = Tree
8+
9+
def clean_uri(self):
10+
if self.recursive:
11+
return self.uri + '?recursive=1'
12+
13+
14+
class Create(Request):
15+
uri = 'repos/{user}/{repo}/git/trees'
16+
resource = Tree
17+
body_schema = {
18+
'schema': ('tree',),
19+
'required': ('tree',),
20+
}

pygithub3/resources/git_data.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
from .base import Resource
5+
from .repos import Author, Commit
6+
7+
8+
class Blob(Resource):
9+
def __str__(self):
10+
return "<Blob (%s)>" % getattr(self, 'content', '')
11+
12+
13+
class Reference(Resource):
14+
def __str__(self):
15+
return '<Reference (%s)>' % getattr(self, 'ref', '')
16+
17+
18+
class Tag(Resource):
19+
_maps = {'object': Commit,
20+
'tagger': Author,} # committer? tagger?
21+
def __str__(self):
22+
return '<Tag (%s)>' % getattr(self, 'tag', '')
23+
24+
25+
class Tree(Resource):
26+
def __str__(self):
27+
return '<Tree (%s)>' % getattr(self, 'sha', '')
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
from pygithub3.services.base import Service
5+
from .blobs import Blobs
6+
from .commits import Commits
7+
from .references import References
8+
from .tags import Tags
9+
from .trees import Trees
10+
11+
def GitData(Service):
12+
"""Consume `Git Data API <http://developer.github.com/v3/git/>`_"""
13+
14+
def __init__(self, **config):
15+
self.blobs = Blobs(**config)
16+
self.commits = Commits(**config)
17+
self.references = References(**config)
18+
self.tags = Tags(**config)
19+
self.trees = Trees(**config)
20+
super(GitData, self).__init__(**config)
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
from pygithub3.services.base import Service
5+
6+
7+
class Blobs(Service):
8+
"""Consume `Blobs API <http://developer.github.com/v3/git/blobs/>`_"""
9+
10+
def get(self, sha, user=None, repo=None):
11+
"""Get a particular blob
12+
13+
:param str sha: The sha of the blob to get
14+
15+
"""
16+
request = self.make_request('git_data.blobs.get', sha=sha,
17+
user=user, repo=repo)
18+
return self._get(request)
19+
20+
def create(self, data, user=None, repo=None):
21+
"""Create a blob"""
22+
request = self.make_request('git_data.blobs.create', body=data,
23+
user=user, repo=repo)
24+
return self._post(request)

0 commit comments

Comments
 (0)