diff options
Diffstat (limited to 'pygithub3')
-rw-r--r-- | pygithub3/requests/issues/milestones.py | 14 | ||||
-rw-r--r-- | pygithub3/services/issues/labels.py | 7 | ||||
-rw-r--r-- | pygithub3/services/issues/milestones.py | 107 |
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) |