11# -*- encoding: utf-8 -*-
22
3- from pygithub3 .services .base import Service
3+ from datetime import datetime
4+
5+ from pygithub3 .services .base import Service , MimeTypeMixin
6+ from pygithub3 .resources .base import GITHUB_DATE_FORMAT
47from .comments import Comments
58from .events import Events
69from .labels import Labels
710from .milestones import Milestones
811
9- class Issue (Service ):
12+
13+ class Issue (Service , MimeTypeMixin ):
1014 """ Consume `Issues API <http://developer.github.com/v3/issues>`_ """
1115
1216 def __init__ (self , ** config ):
@@ -16,70 +20,115 @@ def __init__(self, **config):
1620 self .milestones = Milestones (** config )
1721 super (Issue , self ).__init__ (** config )
1822
19- def list (self , data = {}):
23+ def list (self , filter = 'assigned' , state = 'open' , labels = '' , sort = 'created' ,
24+ direction = 'desc' , since = None ):
2025 """ List your issues
2126
22- :param dict data: Input. See `github issues doc`_
27+ :param str filter: 'assigned', 'created', 'mentioned' or 'subscribed'
28+ :param str state: 'open' or 'closed'
29+ :param str labels: List of comma separated Label names. e.g: bug,ui,
30+ @high
31+ :param str sort: 'created', 'updated' or 'comments'
32+ :param str direction: 'asc' or 'desc'
33+ :param datetime since: Date filter
2334 :returns: A :doc:`result`
2435
2536 .. warning::
2637 You must be authenticated
2738 """
28- request = self .request_builder ('issues.list' , body = data )
29- return self ._get_result (request )
30-
31- def list_by_repo (self , user , repo , data = {}):
39+ params = dict (filter = filter , state = state , labels = labels , sort = sort ,
40+ direction = direction )
41+ try :
42+ date = datetime .strptime (since , GITHUB_DATE_FORMAT )
43+ params .update (since = date )
44+ except :
45+ pass
46+
47+ request = self .request_builder ('issues.list' )
48+ return self ._get_result (request , ** params )
49+
50+ def list_by_repo (self , user = None , repo = None , milestone = '*' , state = 'open' ,
51+ assignee = '*' , mentioned = '' , labels = '' , sort = 'created' ,
52+ direction = 'desc' , since = None ):
3253 """ List issues for a repo
3354
34- :param dict data: Input. See `github issues doc`_
55+ :param str milestone: Milestone ID, 'none' or '*'
56+ :param str state: 'open' or 'closed'
57+ :param str assignee: Username, 'none' or '*'
58+ :param str mentioned: Username
59+ :param str labels: List of comma separated Label names. e.g: bug,ui,
60+ @high
61+ :param str sort: 'created', 'updated' or 'comments'
62+ :param str direction: 'asc' or 'desc'
63+ :param datetime since: Date filter
3564 :returns: A :doc:`result`
36- """
37- request = self .request_builder ('issues.list_by_repo' , user = user ,
38- repo = repo , body = data )
39- return self ._get_result (request )
4065
41- def get (self , user , repo , number ):
66+ .. note::
67+ Remember :ref:`config precedence`
68+ """
69+ params = dict (milestone = milestone , state = state , assignee = assignee ,
70+ mentioned = mentioned , labels = labels , sort = sort , direction = direction )
71+ try :
72+ date = datetime .strptime (since , GITHUB_DATE_FORMAT )
73+ params .update (since = date )
74+ except :
75+ pass
76+
77+ request = self .make_request ('issues.list_by_repo' , user = user ,
78+ repo = repo )
79+ return self ._get_result (request , ** params )
80+
81+ def get (self , number , user = None , repo = None ):
4282 """ Get a single issue
4383
84+ :param int number: Issue number
4485 :param str user: Username
4586 :param str repo: Repo name
46- :param int number: Issue number
87+
88+ .. note::
89+ Remember :ref:`config precedence`
4790 """
48- request = self .request_builder ('issues.get' , user = user , repo = repo ,
91+ request = self .make_request ('issues.get' , user = user , repo = repo ,
4992 number = number )
5093 return self ._get (request )
5194
52- def create (self , user , repo , data ):
95+ def create (self , data , user = None , repo = None ):
5396 """ Create an issue
5497
98+ :param dict data: Input. See `github issues doc`_
5599 :param str user: Username
56100 :param str repo: Repo name
57- :param dict data: Input. See `github issues doc`_
58101
59102 .. warning::
60103 You must be authenticated
61104
105+ .. note::
106+ Remember :ref:`config precedence`
107+
62108 ::
63109
64- issues_service.create(dict(title='My test issue',
110+ issues_service.create(dict(title='My test issue',
65111 body='This needs to be fixed ASAP.',
66112 assignee='copitux'))
67113 """
68- request = self .request_builder ('issues.create' , user = user , repo = repo ,
114+ request = self .make_request ('issues.create' , user = user , repo = repo ,
69115 body = data )
70116 return self ._post (request )
71117
72- def update (self , user , repo , number , data ):
118+ def update (self , number , data , user = None , repo = None ):
73119 """ Update an issue
74120
75- :param str user: Username
76- :param str repo: Repo name
77121 :param int number: Issue number
78122 :param dict data: Input. See `github issues doc`_
123+ :param str user: Username
124+ :param str repo: Repo name
79125
80126 .. warning::
81127 You must be authenticated
128+
129+ .. note::
130+ Remember :ref:`config precedence`
82131 """
83- request = self .request_builder ('issues.edit ' , user = user , repo = repo ,
132+ request = self .make_request ('issues.update ' , user = user , repo = repo ,
84133 number = number , body = data )
85134 return self ._patch (request )
0 commit comments