aboutsummaryrefslogtreecommitdiffstats
path: root/pygithub3/services/issues/__init__.py
blob: ada2dca6e2c87dd85b783b5a4e60f7924e18f307 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# -*- encoding: utf-8 -*-

from datetime import datetime

from pygithub3.services.base import Service, MimeTypeMixin
from pygithub3.resources.base import GITHUB_DATE_FORMAT
from .comments import Comments
from .events import Events
from .labels import Labels
from .milestones import Milestones


class Issue(Service, MimeTypeMixin):
    """ Consume `Issues API <http://developer.github.com/v3/issues>`_ """

    def __init__(self, **config):
        self.comments = Comments(**config)
        self.events = Events(**config)
        self.labels = Labels(**config)
        self.milestones = Milestones(**config)
        super(Issue, self).__init__(**config)

    def list(self, filter='assigned', state='open', labels='', sort='created',
            direction='desc', since=None):
        """ List your issues

        :param str filter: 'assigned', 'created', 'mentioned' or 'subscribed'
        :param str state: 'open' or 'closed'
        :param str labels: List of comma separated Label names. e.g: bug,ui,
                           @high
        :param str sort: 'created', 'updated' or 'comments'
        :param str direction: 'asc' or 'desc'
        :param datetime since: Date filter
        :returns: A :doc:`result`

        .. warning::
            You must be authenticated
        """
        params = dict(filter=filter, state=state, labels=labels, sort=sort,
            direction=direction)
        try:
            date = datetime.strptime(since, GITHUB_DATE_FORMAT)
            params.update(since=date)
        except:
            pass

        request = self.request_builder('issues.list')
        return self._get_result(request, **params)

    def list_by_repo(self, user=None, repo=None, milestone='*', state='open',
            assignee='*', mentioned='', labels='', sort='created',
            direction='desc', since=None):
        """ List issues for a repo

        :param str milestone: Milestone ID, 'none' or '*'
        :param str state: 'open' or 'closed'
        :param str assignee: Username, 'none' or '*'
        :param str mentioned: Username
        :param str labels: List of comma separated Label names. e.g: bug,ui,
                           @high
        :param str sort: 'created', 'updated' or 'comments'
        :param str direction: 'asc' or 'desc'
        :param datetime since: Date filter
        :returns: A :doc:`result`

        .. note::
            Remember :ref:`config precedence`
        """
        params = dict(milestone=milestone, state=state, assignee=assignee,
            mentioned=mentioned, labels=labels, sort=sort, direction=direction)
        try:
            date = datetime.strptime(since, GITHUB_DATE_FORMAT)
            params.update(since=date)
        except:
            pass

        request = self.make_request('issues.list_by_repo', user=user,
            repo=repo)
        return self._get_result(request, **params)

    def get(self, number, user=None, repo=None):
        """ Get a single issue

        :param int number: Issue number
        :param str user: Username
        :param str repo: Repo name

        .. note::
            Remember :ref:`config precedence`
        """
        request = self.make_request('issues.get', user=user, repo=repo,
            number=number)
        return self._get(request)

    def create(self, data, user=None, repo=None):
        """ Create an issue

        :param dict data: Input. See `github issues doc`_
        :param str user: Username
        :param str repo: Repo name

        .. warning::
            You must be authenticated

        .. note::
            Remember :ref:`config precedence`

        ::

            issues_service.create(dict(title='My test issue',
                body='This needs to be fixed ASAP.',
                assignee='copitux'))
        """
        request = self.make_request('issues.create', user=user, repo=repo,
            body=data)
        return self._post(request)

    def update(self, number, data, user=None, repo=None):
        """ Update an issue

        :param int number: Issue number
        :param dict data: Input. See `github issues doc`_
        :param str user: Username
        :param str repo: Repo name

        .. warning::
            You must be authenticated

        .. note::
            Remember :ref:`config precedence`
        """
        request = self.make_request('issues.update', user=user, repo=repo,
            number=number, body=data)
        return self._patch(request)