Skip to content
This repository was archived by the owner on Dec 17, 2019. It is now read-only.

Commit 61c4386

Browse files
conorbranaganAlejandro Gómez
authored andcommitted
Add issues service for issues, comments and events. has tests and updated docs
1 parent f85c7b1 commit 61c4386

File tree

11 files changed

+513
-0
lines changed

11 files changed

+513
-0
lines changed

docs/issues.rst

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
.. _Issues service:
2+
3+
Issues services
4+
===============
5+
6+
**Fast sample**::
7+
8+
from pygithub3 import Github
9+
10+
auth = dict(login='octocat', password='pass')
11+
gh = Github(**auth)
12+
13+
octocat_issues = gh.issues.list()
14+
octocat_repo_issues = gh.issues.list_by_repo('octocat', 'Hello-World')
15+
16+
Issues
17+
-----
18+
19+
.. autoclass:: pygithub3.services.issues.Issue
20+
:members:
21+
22+
.. attribute:: comments
23+
24+
:ref:`Comments service`
25+
26+
.. attribute:: events
27+
28+
:ref:`Events service`
29+
30+
.. _Comments service:
31+
32+
Comments
33+
----------
34+
35+
.. autoclass:: pygithub3.services.issues.Comments
36+
:members:
37+
38+
.. _ Events service:
39+
40+
Events
41+
-------
42+
43+
.. autoclass:: pygithub3.services.issues.Comments
44+
:members:
45+
46+
.. _github issues doc: http://developer.github.com/v3/issues
47+
.. _github comments doc: http://developer.github.com/v3/issues/comments

docs/services.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,5 +74,6 @@ List of services
7474
gists
7575
git_data
7676
pull_requests
77+
issues
7778

7879
.. _mimetypes: http://developer.github.com/v3/mime

pygithub3/github.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,16 @@ def __init__(self, **config):
1919
from pygithub3.services.gists import Gist
2020
from pygithub3.services.git_data import GitData
2121
from pygithub3.services.pull_requests import PullRequests
22+
from pygithub3.services.issues import Issue
2223
self._users = User(**config)
2324
self._repos = Repo(**config)
2425
self._gists = Gist(**config)
2526
self._git_data = GitData(**config)
2627
self._pull_requests = PullRequests(**config)
28+
self._users = User(**config)
29+
self._repos = Repo(**config)
30+
self._gists = Gist(**config)
31+
self._issues = Issue(**config)
2732

2833
@property
2934
def remaining_requests(self):
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
from pygithub3.requests.base import Request, ValidationError
5+
from pygithub3.resources.issues import Issue
6+
7+
class List(Request):
8+
9+
uri = 'issues'
10+
resource = Issue
11+
body_schema = {
12+
'schema': ('filter', 'state', 'labels', 'sort', 'direction', 'since'),
13+
'required': ()
14+
}
15+
16+
17+
class List_by_repo(Request):
18+
19+
uri = 'repos/{user}/{repo}/issues'
20+
resource = Issue
21+
body_schema = {
22+
'schema': ('milestone', 'state', 'assignee', 'mentioned', 'labels',
23+
'sort', 'direction', 'since'),
24+
'required': ()
25+
}
26+
27+
28+
class Get(Request):
29+
30+
uri = 'repos/{user}/{repo}/issues/{number}'
31+
resource = Issue
32+
33+
34+
class Create(Request):
35+
36+
uri = 'repos/{user}/{repo}/issues'
37+
resource = Issue
38+
body_schema = {
39+
'schema': ('title', 'body', 'assignee', 'milestone', 'labels'),
40+
'required': ('title', )
41+
}
42+
43+
44+
class Edit(Request):
45+
46+
uri = 'repos/{user}/{repo}/issues/{number}'
47+
resource = Issue
48+
body_schema = {
49+
'schema': ('title', 'body', 'assignee', 'state', 'milestone', 'lables'),
50+
'required': ()
51+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
from pygithub3.requests.base import Request, ValidationError
5+
from pygithub3.resources.issues import Comment
6+
7+
class List(Request):
8+
9+
uri = 'repos/{user}/{repo}/issues/{number}/comments'
10+
resource = Comment
11+
12+
13+
class Get(Request):
14+
15+
uri = 'repos/{user}/{repo}/issues/comments/{id}'
16+
resource = Comment
17+
18+
19+
class Create(Request):
20+
21+
uri = 'repos/{user}/{repo}/issues/{number}/comments'
22+
resource = Comment
23+
body_schema = {
24+
'schema': ('body', ),
25+
'required': ('body', )
26+
}
27+
28+
29+
class Edit(Request):
30+
31+
uri = 'repos/{user}/{repo}/issues/comments/{id}'
32+
resource = Comment
33+
body_schema = {
34+
'schema': ('body', ),
35+
'required': ('body', )
36+
}
37+
38+
39+
class Delete(Request):
40+
41+
uri = 'repos/{user}/{repo}/issues/comments/{id}'
42+
resource = Comment
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
from pygithub3.requests.base import Request, ValidationError
5+
from pygithub3.resources.issues import Event
6+
7+
class List_by_issue(Request):
8+
9+
uri = 'repos/{user}/{repo}/issues/{number}/events'
10+
resource = Event
11+
12+
13+
class List_by_repo(Request):
14+
15+
uri = 'repos/{user}/{repo}/issues/events'
16+
resource = Event
17+
18+
19+
class Get(Request):
20+
21+
uri = 'repos/{user}/{repo}/issues/events/{id}'
22+
resource = Event

pygithub3/resources/issues.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
from .base import Resource
5+
from .users import User
6+
7+
class Issue(Resource):
8+
9+
_dates = ('created_at', 'updated_at')
10+
_maps = {'assignee': User}
11+
12+
def __str__(self):
13+
return '<Issue (%s)>' % getattr(self, 'number', '')
14+
15+
16+
class Comment(Resource):
17+
18+
_dates = ('created_at', 'update_at')
19+
_maps = {'user': User}
20+
21+
def __str__(self):
22+
return '<Comment (%s)>' % (getattr(self, 'user', ''))
23+
24+
25+
class Event(Resource):
26+
27+
_dates = ('created_at', )
28+
_maps = {'actor': User}
29+
30+
def __str__(self):
31+
return '<Event (%s)>' % (getattr(self, 'commit_id', ''))
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
from pygithub3.services.base import Service
5+
from .comments import Comments
6+
from .events import Events
7+
8+
class Issue(Service):
9+
""" Consume `Issues API <http://developer.github.com/v3/issues>`_ """
10+
11+
def __init__(self, **config):
12+
self.comments = Comments(**config)
13+
self.events = Events(**config)
14+
super(Issue, self).__init__(**config)
15+
16+
def list(self, data={}):
17+
""" List your issues
18+
19+
:param dict data: Input. See `github issues doc`_
20+
:returns: A :doc:`result`
21+
22+
.. warning::
23+
You must be authenticated
24+
"""
25+
request = self.request_builder('issues.list', body=data)
26+
return self._get_result(request)
27+
28+
def list_by_repo(self, user, repo, data={}):
29+
""" List issues for a repo
30+
31+
:param dict data: Input. See `github issues doc`_
32+
:returns: A :doc:`result`
33+
"""
34+
request = self.request_builder('issues.list_by_repo', user=user,
35+
repo=repo, body=data)
36+
return self._get_result(request)
37+
38+
def get(self, user, repo, number):
39+
""" Get a single issue
40+
41+
:param str user: Username
42+
:param str repo: Repo name
43+
:param int number: Issue number
44+
"""
45+
request = self.request_builder('issues.get', user=user, repo=repo,
46+
number=number)
47+
return self._get(request)
48+
49+
def create(self, user, repo, data):
50+
""" Create an issue
51+
52+
:param str user: Username
53+
:param str repo: Repo name
54+
:param dict data: Input. See `github issues doc`_
55+
56+
.. warning::
57+
You must be authenticated
58+
59+
::
60+
61+
issues_service.create(dict(title='My test issue',
62+
body='This needs to be fixed ASAP.',
63+
assignee='copitux'))
64+
"""
65+
request = self.request_builder('issues.create', user=user, repo=repo,
66+
body=data)
67+
return self._post(request)
68+
69+
def update(self, user, repo, number, data):
70+
""" Edit an issue
71+
72+
:param str user: Username
73+
:param str repo: Repo name
74+
:param int number: Issue number
75+
:param dict data: Input. See `github issues doc`_
76+
77+
.. warning::
78+
You must be authenticated
79+
"""
80+
request = self.request_builder('issues.edit', user=user, repo=repo,
81+
number=number, body=data)
82+
return self._patch(request)
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
from pygithub3.services.base import Service
5+
6+
class Comments(Service):
7+
""" Consume `Comments API
8+
<http://developer.github.com/v3/issues/comments>`_ """
9+
10+
def list(self, user, repo, number):
11+
""" List comments for an issue
12+
13+
:param str user: Username
14+
:param str repo: Repo name
15+
:param int number: Issue number
16+
:returns: A :doc:`result`
17+
"""
18+
request = self.request_builder('issues.comments.list', user=user,
19+
repo=repo, number=number)
20+
return self._get_result(request)
21+
22+
def get(self, user, repo, id):
23+
""" Get a single comment
24+
25+
:param str user: Username
26+
:param str repo: Repo name
27+
:param int id: Comment id
28+
"""
29+
request = self.request_builder('issues.comments.get', user=user,
30+
repo=repo, id=id)
31+
return self._get(request)
32+
33+
def create(self, user, repo, number, message):
34+
""" Create a comment on an issue
35+
36+
:param str user: Username
37+
:param str repo: Repo name
38+
:param int number: Issue number
39+
:param str message: Comment message
40+
41+
.. warning::
42+
You must be authenticated
43+
"""
44+
request = self.request_builder('issues.comments.create', user=user,
45+
repo=repo, number=number, body={'body': message})
46+
return self._post(request)
47+
48+
def update(self, user, repo, id, message):
49+
""" Update a comment on an issue
50+
51+
:param str user: Username
52+
:param str repo: Repo name
53+
:param int id: Issue id
54+
:param str message: Comment message
55+
56+
.. warning::
57+
You must be authenticated
58+
"""
59+
request = self.request_builder('issues.comments.edit', user=user,
60+
repo=repo, id=id, body={'body': message})
61+
return self._patch(request)
62+
63+
def delete(self, user, repo, id):
64+
""" Delete a single comment
65+
66+
:param str user: Username
67+
:param str repo: Repo name
68+
:param int id: Comment id
69+
70+
... warning::
71+
You must be authenticated
72+
"""
73+
request = self.request_builder('issues.comments.delete', user=user,
74+
repo=repo, id=id)
75+
self._delete(request)

0 commit comments

Comments
 (0)