From 5bd3a9da8a8b3878fd7bfa4b3aced3d85baaa5f0 Mon Sep 17 00:00:00 2001 From: David Medina Date: Sun, 3 Jun 2012 14:43:00 +0200 Subject: WIP on issues Fix GET params Config precendence of user/repo TODO: milestones , fix tests and test it --- pygithub3/services/issues/__init__.py | 97 ++++++++++++++++++++++++++--------- 1 file changed, 73 insertions(+), 24 deletions(-) (limited to 'pygithub3/services/issues/__init__.py') diff --git a/pygithub3/services/issues/__init__.py b/pygithub3/services/issues/__init__.py index e8e3493..ada2dca 100644 --- a/pygithub3/services/issues/__init__.py +++ b/pygithub3/services/issues/__init__.py @@ -1,12 +1,16 @@ # -*- encoding: utf-8 -*- -from pygithub3.services.base import Service +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): + +class Issue(Service, MimeTypeMixin): """ Consume `Issues API `_ """ def __init__(self, **config): @@ -16,70 +20,115 @@ class Issue(Service): self.milestones = Milestones(**config) super(Issue, self).__init__(**config) - def list(self, data={}): + def list(self, filter='assigned', state='open', labels='', sort='created', + direction='desc', since=None): """ List your issues - :param dict data: Input. See `github issues doc`_ + :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 """ - request = self.request_builder('issues.list', body=data) - return self._get_result(request) - - def list_by_repo(self, user, repo, data={}): + 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 dict data: Input. See `github issues doc`_ + :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` - """ - request = self.request_builder('issues.list_by_repo', user=user, - repo=repo, body=data) - return self._get_result(request) - def get(self, user, repo, number): + .. 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 - :param int number: Issue number + + .. note:: + Remember :ref:`config precedence` """ - request = self.request_builder('issues.get', user=user, repo=repo, + request = self.make_request('issues.get', user=user, repo=repo, number=number) return self._get(request) - def create(self, user, repo, data): + 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 - :param dict data: Input. See `github issues doc`_ .. warning:: You must be authenticated + .. note:: + Remember :ref:`config precedence` + :: - issues_service.create(dict(title='My test issue', + issues_service.create(dict(title='My test issue', body='This needs to be fixed ASAP.', assignee='copitux')) """ - request = self.request_builder('issues.create', user=user, repo=repo, + request = self.make_request('issues.create', user=user, repo=repo, body=data) return self._post(request) - def update(self, user, repo, number, data): + def update(self, number, data, user=None, repo=None): """ Update an issue - :param str user: Username - :param str repo: Repo name :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.request_builder('issues.edit', user=user, repo=repo, + request = self.make_request('issues.update', user=user, repo=repo, number=number, body=data) return self._patch(request) -- cgit v1.2.3-59-g8ed1b