aboutsummaryrefslogtreecommitdiffstats
path: root/pygithub3
diff options
context:
space:
mode:
Diffstat (limited to 'pygithub3')
-rw-r--r--pygithub3/requests/issues/milestones.py14
-rw-r--r--pygithub3/services/issues/labels.py7
-rw-r--r--pygithub3/services/issues/milestones.py107
3 files changed, 66 insertions, 62 deletions
diff --git a/pygithub3/requests/issues/milestones.py b/pygithub3/requests/issues/milestones.py
index 355c3b0..f695e1f 100644
--- a/pygithub3/requests/issues/milestones.py
+++ b/pygithub3/requests/issues/milestones.py
@@ -1,6 +1,6 @@
# -*- encoding: utf-8 -*-
-from pygithub3.requests.base import Request
+from pygithub3.requests.base import Request, ValidationError
from pygithub3.resources.issues import Milestone
@@ -22,15 +22,15 @@ class Create(Request):
'required': ('title',)
}
+ def clean_body(self): # Test if API normalize it
+ state = self.body.get('state', '')
+ if state.lower() not in ('open', 'closed'):
+ raise ValidationError("'state' must be 'open' or 'closed'")
-class Update(Request):
+
+class Update(Create):
uri = 'repos/{user}/{repo}/milestones/{number}'
- resource = Milestone
- body_schema = {
- 'schema': ('title', 'state', 'description', 'due_on'),
- 'required': ('title',)
- }
class Delete(Request):
diff --git a/pygithub3/services/issues/labels.py b/pygithub3/services/issues/labels.py
index a20e48e..931a6b4 100644
--- a/pygithub3/services/issues/labels.py
+++ b/pygithub3/services/issues/labels.py
@@ -142,8 +142,8 @@ class Labels(Service):
name=label)
return self._delete(request)
- def replace_all(self, number, labels, user=None, repo=None):
- """ Replace all labels of a issue
+ def replace_all(self, number, user=None, repo=None, *labels):
+ """ Replace all labels for a issue
:param int number: Issue number
:param list labels: New labels
@@ -152,6 +152,9 @@ class Labels(Service):
:returns: A :doc:`result`
.. note::
+ If labels weren't especified, it'd remove all labels from the issue
+
+ .. note::
Remember :ref:`config precedence`
"""
request = self.make_request('issues.labels.replace_all',
diff --git a/pygithub3/services/issues/milestones.py b/pygithub3/services/issues/milestones.py
index 851e9f2..fa0f95d 100644
--- a/pygithub3/services/issues/milestones.py
+++ b/pygithub3/services/issues/milestones.py
@@ -1,105 +1,106 @@
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
+from datetime import datetime
+
from pygithub3.services.base import Service
+from pygithub3.resources.base import GITHUB_DATE_FORMAT
class Milestones(Service):
- """ Consume `Milestones API
+ """ Consume `Milestones API
<http://developer.github.com/v3/issues/milestones>`_ """
- def list(self, user, repo):
+ def list(self, user=None, repo=None, state='open', sort='due_date',
+ direction='desc'):
""" List milestones for a repo
:param str user: Username
:param str repo: Repo name
+ :param str state: 'open' or 'closed'
+ :param str sort: 'due_date' or 'completeness'
+ :param str direction: 'asc' or 'desc'
:returns: A :doc:`result`
+
+ .. note::
+ Remember :ref:`config precedence`
"""
- request = self.request_builder('issues.milestones.list',
- user=user,
- repo=repo)
- return self._get_result(request)
+ request = self.make_request('issues.milestones.list', user=user,
+ repo=repo)
+ return self._get_result(request, state=state, sort=sort,
+ direction=direction)
- def get(self, user, repo, number):
+ def get(self, number, user=None, repo=None):
""" Get a single milestone
+ :param int number: Milestone number
:param str user: Username
:param str repo: Repo name
- :param int number: Milestone number
+
+ .. note::
+ Remember :ref:`config precedence`
"""
- request = self.request_builder('issues.milestones.get', user=user,
+ request = self.make_request('issues.milestones.get', user=user,
repo=repo, number=number)
return self._get(request)
- def create(self,
- user,
- repo,
- title,
- state=None,
- description=None,
- due_on=None):
+ def _normalize_due_on(self, data):
+ """ If ``due_on`` comes as ``datetime``, it'll normalize it """
+ try:
+ due_on = datetime.strptime(data.get('due_on'), GITHUB_DATE_FORMAT)
+ data.update({'due_on': due_on})
+ except:
+ pass
+
+ def create(self, data, user=None, repo=None):
""" Create a milestone
+ :param dict data: Input. See `github milestones doc`_
:param str user: Username
:param str repo: Repo name
- :param str title: Milestone title
- :param str state: Milestone state
- :param str description: Milestone description
- :param date due_on: Milestone due date
.. warning::
You must be authenticated
+
+ .. note::
+ Remember :ref:`config precedence`
"""
- request = self.request_builder('issues.milestones.create',
- user=user,
- repo=repo,
- body={'title': title,
- 'state': state,
- 'due_on': due_on})
+ self._normalize_due_on(data)
+ request = self.make_request('issues.milestones.create', user=user,
+ repo=repo, body=data)
return self._post(request)
- def update(self,
- user,
- repo,
- number,
- title,
- state=None,
- description=None,
- due_on=None):
+ def update(self, number, data, user=None, repo=None):
""" Update a milestone
+ :param int number: Milestone number
+ :param dict data: Input. See `github milestones doc`_
:param str user: Username
:param str repo: Repo name
- :param int number: Milestone number
- :param str title: Milestone title
- :param str state: Milestone state
- :param str description: Milestone description
- :param date due_on: Milestone due date
.. warning::
You must be authenticated
+
+ .. note::
+ Remember :ref:`config precedence`
"""
- request = self.request_builder('issues.milestones.update',
- user=user,
- repo=repo,
- number=number,
- body={'title': title,
- 'state': state,
- 'description': description,
- 'due_on': due_on, })
+ self._normalize_due_on(data)
+ request = self.make_request('issues.milestones.update', user=user,
+ repo=repo, number=number, body=data)
return self._patch(request)
- def delete(self, user, repo, number):
+ def delete(self, number, user=None, repo=None):
""" Delete a milestone
+ :param int number: Milestone number
:param str user: Username
:param str repo: Repo name
- :param int number: Milestone number
.. warning::
You must be authenticated
+
+ .. note::
+ Remember :ref:`config precedence`
"""
- request = self.request_builder('issues.milestones.delete',
- user=user,
- repo=repo,
- number=number)
+ request = self.make_request('issues.milestones.delete', user=user,
+ repo=repo, number=number)
self._delete(request)