Skip to content

Commit 107b12b

Browse files
committed
Merge copitux#12 'services/issues'
2 parents 9dedea7 + e383e91 commit 107b12b

File tree

22 files changed

+1204
-6
lines changed

22 files changed

+1204
-6
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@
55
MANIFEST
66
docs/_build
77
dist/
8+
build/
89
*egg-info

docs/issues.rst

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
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+
.. attribute:: labels
31+
32+
:ref:`Labels service`
33+
34+
.. attribute:: milestones
35+
36+
:ref:`Milestones service`
37+
38+
.. _Comments service:
39+
40+
Comments
41+
--------
42+
43+
.. autoclass:: pygithub3.services.issues.Comments
44+
:members:
45+
46+
.. _Events service:
47+
48+
Events
49+
------
50+
51+
.. autoclass:: pygithub3.services.issues.Events
52+
:members:
53+
54+
.. _Labels service:
55+
56+
Labels
57+
------
58+
59+
.. autoclass:: pygithub3.services.issues.Labels
60+
:members:
61+
62+
.. _Milestones service:
63+
64+
Milestones
65+
----------
66+
67+
.. autoclass:: pygithub3.services.issues.Milestones
68+
:members:
69+
70+
.. _github issues doc: http://developer.github.com/v3/issues
71+
.. _github comments doc: http://developer.github.com/v3/issues/comments
72+
.. _github events doc: http://developer.github.com/v3/issues/events
73+
.. _github labels doc: http://developer.github.com/v3/issues/labels
74+
.. _github milestones doc: http://developer.github.com/v3/issues/milestones

docs/services.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,5 +75,6 @@ List of services
7575
git_data
7676
pull_requests
7777
orgs
78+
issues
7879

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

pygithub3/github.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,14 @@ def __init__(self, **config):
2020
from pygithub3.services.git_data import GitData
2121
from pygithub3.services.pull_requests import PullRequests
2222
from pygithub3.services.orgs import Org
23+
from pygithub3.services.issues import Issue
2324
self._users = User(**config)
2425
self._repos = Repo(**config)
2526
self._gists = Gist(**config)
2627
self._git_data = GitData(**config)
2728
self._pull_requests = PullRequests(**config)
2829
self._orgs = Org(**config)
30+
self._issues = Issue(**config)
2931

3032
@property
3133
def remaining_requests(self):
@@ -68,8 +70,16 @@ def pull_requests(self):
6870
"""
6971
return self._pull_requests
7072

73+
@property
7174
def orgs(self):
7275
"""
7376
:ref:`Orgs service <Orgs service>`
7477
"""
7578
return self._orgs
79+
80+
@property
81+
def issues(self):
82+
"""
83+
:ref:`Issues service <Issues service>`
84+
"""
85+
return self._issues

pygithub3/requests/base.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ def dumps(self):
2727
def parse(self):
2828
""" Parse body with schema-required rules """
2929
if not hasattr(self.content, 'items'):
30-
raise ValidationError("'%s' needs a content dictionary"
31-
% self.__class__.__name__)
30+
raise ValidationError("It needs a content dictionary (%s)" % (
31+
self.content, ))
3232
parsed = dict([(key, self.content[key]) for key in self.schema
3333
if key in self.content])
3434
for attr_required in self.required:
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
from pygithub3.requests.base import Request
5+
from pygithub3.resources.issues import Issue
6+
7+
8+
class List(Request):
9+
10+
uri = 'issues'
11+
resource = Issue
12+
13+
14+
class List_by_repo(Request):
15+
16+
uri = 'repos/{user}/{repo}/issues'
17+
resource = Issue
18+
19+
20+
class Get(Request):
21+
22+
uri = 'repos/{user}/{repo}/issues/{number}'
23+
resource = Issue
24+
25+
26+
class Create(Request):
27+
28+
uri = 'repos/{user}/{repo}/issues'
29+
resource = Issue
30+
body_schema = {
31+
'schema': ('title', 'body', 'assignee', 'milestone', 'labels'),
32+
'required': ('title', )
33+
}
34+
35+
36+
class Update(Request):
37+
38+
uri = 'repos/{user}/{repo}/issues/{number}'
39+
resource = Issue
40+
body_schema = {
41+
'schema': ('title', 'body', 'assignee', 'state', 'milestone',
42+
'lables'),
43+
'required': ()
44+
}
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
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
# -*- encoding: utf-8 -*-
2+
3+
from pygithub3.requests.base import Request, ValidationError
4+
from pygithub3.resources.issues import Label
5+
6+
7+
class List(Request):
8+
9+
uri = 'repos/{user}/{repo}/labels'
10+
resource = Label
11+
12+
13+
class Get(Request):
14+
uri = 'repos/{user}/{repo}/labels/{name}'
15+
resource = Label
16+
17+
18+
class Create(Request):
19+
uri = 'repos/{user}/{repo}/labels'
20+
resource = Label
21+
body_schema = {
22+
'schema': ('name', 'color'),
23+
'required': ('name', 'color' )
24+
}
25+
26+
def clean_body(self):
27+
color = self.body.get('color', '')
28+
if not Label.is_valid_color(color):
29+
raise ValidationError('colors must have 6 hexadecimal characters, '
30+
'without # in the beggining')
31+
else:
32+
return self.body
33+
34+
35+
class Update(Create):
36+
37+
uri = 'repos/{user}/{repo}/labels/{name}'
38+
resource = Label
39+
body_schema = {
40+
'schema': ('name', 'color'),
41+
'required': ('name', 'color' )
42+
}
43+
44+
45+
class Delete(Request):
46+
uri = 'repos/{user}/{repo}/labels/{name}'
47+
resource = Label
48+
49+
50+
class List_by_issue(Request):
51+
uri = 'repos/{user}/{repo}/issues/{number}/labels'
52+
resource = Label
53+
54+
55+
class Add_to_issue(Request):
56+
uri = 'repos/{user}/{repo}/issues/{number}/labels'
57+
resource = Label
58+
59+
60+
class Remove_from_issue(Request):
61+
uri = 'repos/{user}/{repo}/issues/{number}/labels/{name}'
62+
resource = Label
63+
64+
65+
class Replace_all(Request):
66+
uri = 'repos/{user}/{repo}/issues/{number}/labels'
67+
resource = Label
68+
69+
70+
class Remove_all(Request):
71+
uri = 'repos/{user}/{repo}/issues/{number}/labels'
72+
resource = Label
73+
74+
75+
class List_by_milestone(Request):
76+
uri = 'repos/{user}/{repo}/milestones/{number}/labels'
77+
resource = Label
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# -*- encoding: utf-8 -*-
2+
3+
from pygithub3.requests.base import Request, ValidationError
4+
from pygithub3.resources.issues import Milestone
5+
6+
7+
class List(Request):
8+
uri = 'repos/{user}/{repo}/milestones'
9+
resource = Milestone
10+
11+
12+
class Get(Request):
13+
uri = 'repos/{user}/{repo}/milestones/{number}'
14+
resource = Milestone
15+
16+
17+
class Create(Request):
18+
uri = 'repos/{user}/{repo}/milestones'
19+
resource = Milestone
20+
body_schema = {
21+
'schema': ('title', 'state', 'description', 'due_on'),
22+
'required': ('title',)
23+
}
24+
25+
def clean_body(self): # Test if API normalize it
26+
state = self.body.get('state', '')
27+
if state and state.lower() not in ('open', 'closed'):
28+
raise ValidationError("'state' must be 'open' or 'closed'")
29+
return self.body
30+
31+
32+
class Update(Create):
33+
34+
uri = 'repos/{user}/{repo}/milestones/{number}'
35+
36+
37+
class Delete(Request):
38+
uri = 'repos/{user}/{repo}/milestones/{number}'
39+
resource = Milestone

0 commit comments

Comments
 (0)