Skip to content

Commit 0440104

Browse files
committed
starting to fill in issues service; starting with GET for issues and milestones.
1 parent 4547f4a commit 0440104

File tree

6 files changed

+154
-0
lines changed

6 files changed

+154
-0
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# -*- encoding: utf-8 -*-
2+
3+
from pygithub3.requests.base import Request, ValidationError
4+
from pygithub3.resources.issues import Issue
5+
6+
class List(Request):
7+
8+
uri = 'issues'
9+
resource = Issue
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# -*- encoding: utf-8 -*-
2+
3+
from pygithub3.requests.base import Request
4+
from pygithub3.resources.issues import Milestone
5+
6+
class List(Request):
7+
8+
uri = 'issues/{user}/{repo}/milestones'
9+
resource = Milestone
10+
11+
12+
class Get(Request):
13+
14+
uri = 'issues/{user}/{repo}/milestones/{number}'
15+
resource = Milestone

pygithub3/resources/issues.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
from .base import Resource
5+
from .users import User
6+
7+
8+
class Issue(Resource):
9+
10+
_dates = ('created_at', 'updated_at', )
11+
_maps = {'pull_request': ..., 'milestone': Milestone, 'assignee': User, 'user': User}
12+
_collection_maps = {'labels': ..., }
13+
14+
def __str__(self):
15+
return '<Issue (%s)>' % getattr(self, 'title', '')
16+
17+
class Milestone(Resource):
18+
19+
_dates = ('created_at', )
20+
_maps = {'creator': User}
21+
22+
def __str__(self):
23+
return '<Milestone (%s)>' % getattr(self, 'description', '')
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
from pygithub3.services.base import Service
5+
from milestones import Milestones
6+
7+
8+
class Issue(Service):
9+
""" Consume `Issues API <http://developer.github.com/v3/issues>`_ """
10+
11+
def __init__(self, **config):
12+
self.milestones = Milestones(**config)
13+
super(Issue, self).__init__(**config)
14+
15+
def list(self):
16+
""" Get authenticated user's issues
17+
18+
:returns: A :doc:`result`
19+
20+
If you call it and you are authenticated, get the
21+
authenticated user's gists.
22+
23+
::
24+
25+
gist_service.list()
26+
"""
27+
request = self.request_builder('issues.list')
28+
return self._get_result(request)
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
from pygithub3.services.base import Service
5+
6+
7+
class Milestones(Service):
8+
""" Consume `Milestones API
9+
<http://developer.github.com/v3/issues/milestones>`_
10+
"""
11+
12+
def list(self, user=None, repo=None):
13+
""" Get a repository's issues
14+
15+
:param str user: Username
16+
:param str repo: Repo Name
17+
:returns: A :doc:`result`
18+
"""
19+
request = self.request_builder('issues.milestones.list', user=user, repo=repo)
20+
return self._get_result(request, **self._get_mimetype_as_header())
21+
22+
def get(self, number, user=None, repo=None):
23+
""" Get a single milestone
24+
25+
:param str user: Username
26+
:param str repo: Repo Name
27+
:param int number: Milestone number
28+
"""
29+
request = self.request_builder('issues.milestones.get', user=user, repo=repo, number=number)
30+
return self._get(request)
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#!/usr/bin/env python
2+
# -*- encoding: utf-8 -*-
3+
4+
import requests
5+
from mock import patch, Mock
6+
7+
from pygithub3.tests.utils.core import TestCase
8+
from pygithub3.resources.base import json
9+
from pygithub3.services.issues import Issue, Milestones
10+
from pygithub3.tests.utils.base import (mock_response, mock_response_result,
11+
mock_json)
12+
from pygithub3.tests.utils.services import _
13+
14+
json.dumps = Mock(side_effect=mock_json)
15+
json.loads = Mock(side_effect=mock_json)
16+
17+
@patch.object(requests.sessions.Session, 'request')
18+
class TestIssueService(TestCase):
19+
20+
def setUp(self):
21+
self.issues = Issue()
22+
23+
def test_LIST_without_user(self, request_method):
24+
request_method.return_value = mock_response_result()
25+
self.issues.list().all()
26+
self.assertEqual(request_method.call_args[0],
27+
('get', _('issues')))
28+
29+
@patch.object(requests.sessions.Session, 'request')
30+
class TestMilestonesService(TestCase):
31+
def setUp(self):
32+
self.ms = Milestones()
33+
34+
def test_LIST_with_user_and_repo(self, request_method):
35+
request_method.return_value = mock_response_result()
36+
self.ms.list(user='octocat', repo='Hello-World').all()
37+
self.assertEqual(request_method.call_args[0],
38+
('get', _('repos/octocat/Hello-World/milestones')))
39+
40+
def test_LIST_with_state(self, request_method):
41+
# Fail for now; I don't know how to do this test yet
42+
self.ms.abc()
43+
44+
def test_GET(self, request_method):
45+
46+
request_method.return_value = mock_response_result()
47+
self.ms.get(user='octocat', repo='Hello-World', number=1)
48+
self.assertEqual(request_method.call_args[0],
49+
('get', _('repos/octocat/Hello-World/milestones/1')))

0 commit comments

Comments
 (0)