Skip to content
This repository was archived by the owner on Jun 25, 2019. It is now read-only.

Commit ce110c8

Browse files
committed
issues.milestones service
Also fix doc in issues.labels
1 parent 5bd3a9d commit ce110c8

File tree

3 files changed

+66
-62
lines changed

3 files changed

+66
-62
lines changed

pygithub3/requests/issues/milestones.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# -*- encoding: utf-8 -*-
22

3-
from pygithub3.requests.base import Request
3+
from pygithub3.requests.base import Request, ValidationError
44
from pygithub3.resources.issues import Milestone
55

66

@@ -22,15 +22,15 @@ class Create(Request):
2222
'required': ('title',)
2323
}
2424

25+
def clean_body(self): # Test if API normalize it
26+
state = self.body.get('state', '')
27+
if state.lower() not in ('open', 'closed'):
28+
raise ValidationError("'state' must be 'open' or 'closed'")
2529

26-
class Update(Request):
30+
31+
class Update(Create):
2732

2833
uri = 'repos/{user}/{repo}/milestones/{number}'
29-
resource = Milestone
30-
body_schema = {
31-
'schema': ('title', 'state', 'description', 'due_on'),
32-
'required': ('title',)
33-
}
3434

3535

3636
class Delete(Request):

pygithub3/services/issues/labels.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,15 +142,18 @@ def remove_from_issue(self, number, label, user=None, repo=None):
142142
name=label)
143143
return self._delete(request)
144144

145-
def replace_all(self, number, labels, user=None, repo=None):
146-
""" Replace all labels of a issue
145+
def replace_all(self, number, user=None, repo=None, *labels):
146+
""" Replace all labels for a issue
147147
148148
:param int number: Issue number
149149
:param list labels: New labels
150150
:param str user: Username
151151
:param str repo: Repo name
152152
:returns: A :doc:`result`
153153
154+
.. note::
155+
If labels weren't especified, it'd remove all labels from the issue
156+
154157
.. note::
155158
Remember :ref:`config precedence`
156159
"""
Lines changed: 54 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,105 +1,106 @@
11
#!/usr/bin/env python
22
# -*- encoding: utf-8 -*-
33

4+
from datetime import datetime
5+
46
from pygithub3.services.base import Service
7+
from pygithub3.resources.base import GITHUB_DATE_FORMAT
58

69
class Milestones(Service):
7-
""" Consume `Milestones API
10+
""" Consume `Milestones API
811
<http://developer.github.com/v3/issues/milestones>`_ """
912

10-
def list(self, user, repo):
13+
def list(self, user=None, repo=None, state='open', sort='due_date',
14+
direction='desc'):
1115
""" List milestones for a repo
1216
1317
:param str user: Username
1418
:param str repo: Repo name
19+
:param str state: 'open' or 'closed'
20+
:param str sort: 'due_date' or 'completeness'
21+
:param str direction: 'asc' or 'desc'
1522
:returns: A :doc:`result`
23+
24+
.. note::
25+
Remember :ref:`config precedence`
1626
"""
17-
request = self.request_builder('issues.milestones.list',
18-
user=user,
19-
repo=repo)
20-
return self._get_result(request)
27+
request = self.make_request('issues.milestones.list', user=user,
28+
repo=repo)
29+
return self._get_result(request, state=state, sort=sort,
30+
direction=direction)
2131

22-
def get(self, user, repo, number):
32+
def get(self, number, user=None, repo=None):
2333
""" Get a single milestone
2434
35+
:param int number: Milestone number
2536
:param str user: Username
2637
:param str repo: Repo name
27-
:param int number: Milestone number
38+
39+
.. note::
40+
Remember :ref:`config precedence`
2841
"""
29-
request = self.request_builder('issues.milestones.get', user=user,
42+
request = self.make_request('issues.milestones.get', user=user,
3043
repo=repo, number=number)
3144
return self._get(request)
3245

33-
def create(self,
34-
user,
35-
repo,
36-
title,
37-
state=None,
38-
description=None,
39-
due_on=None):
46+
def _normalize_due_on(self, data):
47+
""" If ``due_on`` comes as ``datetime``, it'll normalize it """
48+
try:
49+
due_on = datetime.strptime(data.get('due_on'), GITHUB_DATE_FORMAT)
50+
data.update({'due_on': due_on})
51+
except:
52+
pass
53+
54+
def create(self, data, user=None, repo=None):
4055
""" Create a milestone
4156
57+
:param dict data: Input. See `github milestones doc`_
4258
:param str user: Username
4359
:param str repo: Repo name
44-
:param str title: Milestone title
45-
:param str state: Milestone state
46-
:param str description: Milestone description
47-
:param date due_on: Milestone due date
4860
4961
.. warning::
5062
You must be authenticated
63+
64+
.. note::
65+
Remember :ref:`config precedence`
5166
"""
52-
request = self.request_builder('issues.milestones.create',
53-
user=user,
54-
repo=repo,
55-
body={'title': title,
56-
'state': state,
57-
'due_on': due_on})
67+
self._normalize_due_on(data)
68+
request = self.make_request('issues.milestones.create', user=user,
69+
repo=repo, body=data)
5870
return self._post(request)
5971

60-
def update(self,
61-
user,
62-
repo,
63-
number,
64-
title,
65-
state=None,
66-
description=None,
67-
due_on=None):
72+
def update(self, number, data, user=None, repo=None):
6873
""" Update a milestone
6974
75+
:param int number: Milestone number
76+
:param dict data: Input. See `github milestones doc`_
7077
:param str user: Username
7178
:param str repo: Repo name
72-
:param int number: Milestone number
73-
:param str title: Milestone title
74-
:param str state: Milestone state
75-
:param str description: Milestone description
76-
:param date due_on: Milestone due date
7779
7880
.. warning::
7981
You must be authenticated
82+
83+
.. note::
84+
Remember :ref:`config precedence`
8085
"""
81-
request = self.request_builder('issues.milestones.update',
82-
user=user,
83-
repo=repo,
84-
number=number,
85-
body={'title': title,
86-
'state': state,
87-
'description': description,
88-
'due_on': due_on, })
86+
self._normalize_due_on(data)
87+
request = self.make_request('issues.milestones.update', user=user,
88+
repo=repo, number=number, body=data)
8989
return self._patch(request)
9090

91-
def delete(self, user, repo, number):
91+
def delete(self, number, user=None, repo=None):
9292
""" Delete a milestone
9393
94+
:param int number: Milestone number
9495
:param str user: Username
9596
:param str repo: Repo name
96-
:param int number: Milestone number
9797
9898
.. warning::
9999
You must be authenticated
100+
101+
.. note::
102+
Remember :ref:`config precedence`
100103
"""
101-
request = self.request_builder('issues.milestones.delete',
102-
user=user,
103-
repo=repo,
104-
number=number)
104+
request = self.make_request('issues.milestones.delete', user=user,
105+
repo=repo, number=number)
105106
self._delete(request)

0 commit comments

Comments
 (0)