aboutsummaryrefslogtreecommitdiffstats
path: root/pygithub3/services/pull_requests/__init__.py
blob: 66d9e5826fc7fb79f9c07af53965bc2c9f162065 (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
from pygithub3.exceptions import BadRequest, NotFound
from pygithub3.services.base import Service, MimeTypeMixin
from .comments import Comments


class PullRequests(Service, MimeTypeMixin):
    """Consume `Pull Request API <http://developer.github.com/v3/pulls/>`_"""

    def __init__(self, **config):
        self.comments = Comments(**config)
        super(PullRequests, self).__init__(**config)

    def list(self, user=None, repo=None):
        """List all of the pull requests for a repo

        :param str user: Username
        :param str repo: Repository

        """
        return self._get_result(
            self.make_request('pull_requests.list', user=user, repo=repo)
        )

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

        :param str number: The number of the pull request to get
        :param str user: Username
        :param str repo: Repository

        """
        return self._get(
            self.make_request('pull_requests.get', number=number, user=user,
                              repo=repo)
        )

    def create(self, body, user=None, repo=None):
        """Create a pull request

        :param dict body: Data for the new pull request
        :param str user: Username
        :param str repo: Repository

        """
        return self._post(
            self.make_request('pull_requests.create', body=body, user=user,
                              repo=repo)
        )

    def update(self, number, body, user=None, repo=None):
        """Update a pull request

        :param str number: The number of the the pull request to update
        :param dict body: The data to update the pull request with
        :param str user: Username
        :param str repo: Repository

        """
        return self._patch(
            self.make_request('pull_requests.update', number=number,
                              body=body, user=user, repo=repo)
        )

    def list_commits(self, number, user=None, repo=None):
        """List the commits for a pull request

        :param str number: The number of the pull request to list commits for
        :param str user: Username
        :param str repo: Repository

        """
        return self._get_result(
            self.make_request('pull_requests.list_commits', number=number,
                              user=user, repo=repo)
        )

    def list_files(self, number, user=None, repo=None):
        """List the files for a pull request

        :param str number: The number of the pull request to list files for
        :param str user: Username
        :param str repo: Repository

        """
        return self._get_result(
            self.make_request('pull_requests.list_files', number=number,
                              user=user, repo=repo)
        )

    def merge_status(self, number, user=None, repo=None):
        """Gets whether a pull request has been merged or not.

        :param str number: The pull request to check
        :param str user: Username
        :param str repo: Repository

        """
        return self._bool(
            self.make_request('pull_requests.merge_status', number=number,
                              user=user, repo=repo)
        )

    def merge(self, number, message='', user=None, repo=None):
        """Merge a pull request.

        :param str number: The pull request to merge
        :param str user: Username
        :param str repo: Repository

        This currently raises an HTTP 405 error if the request is not
        mergable.

        """
        body = {'commit_message': message}
        return self._put(
            self.make_request('pull_requests.merge', number=number,
                              body=body, user=user, repo=repo)
        )