GeezerVison is showing github.com — Refact normalize of dates into base.Service · suliuzh/python-github3@5cd7ad5
File treeExpand file treeCollapse file tree Open diff view settings Expand file treeCollapse file tree Open diff view settings Collapse file Copy file name to clipboardExpand all lines: pygithub3/services/base.py +13-1Lines changed: 13 additions & 1 deletion | Original file line number | Diff line number | Diff line change |
|---|
| 1 | 1 | #!/usr/bin/env python | 2 | 2 | # -*- encoding: utf-8 -*- | 3 | 3 |
| | 4 | +from datetime import datetime | | 5 | + | 4 | 6 | from pygithub3.core.client import Client | | 7 | +from pygithub3.core.errors import NotFound | 5 | 8 | from pygithub3.core.result import smart, normal | 6 | 9 | from pygithub3.requests.base import Factory | 7 | | -from pygithub3.core.errors import NotFound | | 10 | +from pygithub3.resources.base import GITHUB_DATE_FORMAT | 8 | 11 |
| 9 | 12 |
| 10 | 13 | class Service(object): | @@ -41,6 +44,15 @@ def __init__(self, **config): | 41 | 44 | self._client = Client(**config) | 42 | 45 | self.request_builder = Factory() | 43 | 46 |
| | 47 | + def _normalize_date(self, key, _dict): | | 48 | + """ If ``key`` comes as ``datetime``, it'll normalize it """ | | 49 | + try: | | 50 | + key = str(key) | | 51 | + date = datetime.strftime(_dict.get(key), GITHUB_DATE_FORMAT) | | 52 | + _dict.update({key: date}) | | 53 | + except: | | 54 | + pass | | 55 | + | 44 | 56 | @property | 45 | 57 | def remaining_requests(self): | 46 | 58 | return Client.remaining_requests | |
Collapse file Copy file name to clipboardExpand all lines: pygithub3/services/issues/__init__.py +4-17Lines changed: 4 additions & 17 deletions | Original file line number | Diff line number | Diff line change |
|---|
| 1 | 1 | # -*- encoding: utf-8 -*- | 2 | 2 |
| 3 | | -from datetime import datetime | 4 | | - | 5 | 3 | from pygithub3.services.base import Service, MimeTypeMixin | 6 | | -from pygithub3.resources.base import GITHUB_DATE_FORMAT | 7 | 4 | from .comments import Comments | 8 | 5 | from .events import Events | 9 | 6 | from .labels import Labels | @@ -30,20 +27,15 @@ def list(self, filter='assigned', state='open', labels='', sort='created', | 30 | 27 | @high | 31 | 28 | :param str sort: 'created', 'updated' or 'comments' | 32 | 29 | :param str direction: 'asc' or 'desc' | 33 | | - :param datetime since: Date filter | | 30 | + :param datetime since: Date filter (datetime or str in ISO 8601) | 34 | 31 | :returns: A :doc:`result` | 35 | 32 |
| 36 | 33 | .. warning:: | 37 | 34 | You must be authenticated | 38 | 35 | """ | 39 | 36 | params = dict(filter=filter, state=state, labels=labels, sort=sort, | 40 | 37 | direction=direction) | 41 | | - try: | 42 | | - date = datetime.strptime(since, GITHUB_DATE_FORMAT) | 43 | | - params.update(since=date) | 44 | | - except: | 45 | | - pass | 46 | | - | | 38 | + self._normalize_data('since', params) | 47 | 39 | request = self.request_builder('issues.list') | 48 | 40 | return self._get_result(request, **params) | 49 | 41 |
| @@ -60,20 +52,15 @@ def list_by_repo(self, user=None, repo=None, milestone='*', state='open', | 60 | 52 | @high | 61 | 53 | :param str sort: 'created', 'updated' or 'comments' | 62 | 54 | :param str direction: 'asc' or 'desc' | 63 | | - :param datetime since: Date filter | | 55 | + :param datetime since: Date filter (datetime or str in ISO 8601) | 64 | 56 | :returns: A :doc:`result` | 65 | 57 |
| 66 | 58 | .. note:: | 67 | 59 | Remember :ref:`config precedence` | 68 | 60 | """ | 69 | 61 | params = dict(milestone=milestone, state=state, assignee=assignee, | 70 | 62 | mentioned=mentioned, labels=labels, sort=sort, direction=direction) | 71 | | - try: | 72 | | - date = datetime.strptime(since, GITHUB_DATE_FORMAT) | 73 | | - params.update(since=date) | 74 | | - except: | 75 | | - pass | 76 | | - | | 63 | + self._normalize_data('since', params) | 77 | 64 | request = self.make_request('issues.list_by_repo', user=user, | 78 | 65 | repo=repo) | 79 | 66 | return self._get_result(request, **params) | |
Collapse file Copy file name to clipboardExpand all lines: pygithub3/services/issues/milestones.py +3-13Lines changed: 3 additions & 13 deletions | Original file line number | Diff line number | Diff line change |
|---|
| 1 | 1 | #!/usr/bin/env python | 2 | 2 | # -*- encoding: utf-8 -*- | 3 | 3 |
| 4 | | -from datetime import datetime | 5 | | - | 6 | 4 | from pygithub3.services.base import Service | 7 | | -from pygithub3.resources.base import GITHUB_DATE_FORMAT | | 5 | + | 8 | 6 |
| 9 | 7 | class Milestones(Service): | 10 | 8 | """ Consume `Milestones API | @@ -43,14 +41,6 @@ def get(self, number, user=None, repo=None): | 43 | 41 | repo=repo, number=number) | 44 | 42 | return self._get(request) | 45 | 43 |
| 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 | 44 | def create(self, data, user=None, repo=None): | 55 | 45 | """ Create a milestone | 56 | 46 |
| @@ -64,7 +54,7 @@ def create(self, data, user=None, repo=None): | 64 | 54 | .. note:: | 65 | 55 | Remember :ref:`config precedence` | 66 | 56 | """ | 67 | | - self._normalize_due_on(data) | | 57 | + self._normalize_date('due_on', data) | 68 | 58 | request = self.make_request('issues.milestones.create', user=user, | 69 | 59 | repo=repo, body=data) | 70 | 60 | return self._post(request) | @@ -83,7 +73,7 @@ def update(self, number, data, user=None, repo=None): | 83 | 73 | .. note:: | 84 | 74 | Remember :ref:`config precedence` | 85 | 75 | """ | 86 | | - self._normalize_due_on(data) | | 76 | + self._normalize_date('due_on', data) | 87 | 77 | request = self.make_request('issues.milestones.update', user=user, | 88 | 78 | repo=repo, number=number, body=data) | 89 | 79 | return self._patch(request) | |
Collapse file Copy file name to clipboardExpand all lines: pygithub3/tests/services/test_core.py +12-1Lines changed: 12 additions & 1 deletion | Original file line number | Diff line number | Diff line change |
|---|
| 1 | 1 | #!/usr/bin/env python | 2 | 2 | # -*- encoding: utf-8 -*- | 3 | 3 |
| 4 | | -import requests | | 4 | +from datetime import datetime | 5 | 5 |
| | 6 | +import requests | 6 | 7 | from mock import patch | 7 | 8 |
| 8 | 9 | from pygithub3.tests.utils.core import TestCase | @@ -54,6 +55,16 @@ def test_GET_result(self, request_method): | 54 | 55 | self.assertFalse(request_method.called) | 55 | 56 | self.assertIsInstance(result, base.Result) | 56 | 57 |
| | 58 | + def test_normalize_ok(self, request_method): | | 59 | + data = {'test': datetime(2012, 12, 12, 3, 3, 3)} | | 60 | + self.s._normalize_date('test', data) | | 61 | + self.assertEqual(data['test'], '2012-12-12T03:03:03Z') | | 62 | + | | 63 | + def test_normalize_fail(self, request_method): | | 64 | + data = {'test': 'fail'} | | 65 | + self.s._normalize_date('test', data) | | 66 | + self.assertEqual(data['test'], 'fail') | | 67 | + | 57 | 68 |
| 58 | 69 | @patch.object(requests.sessions.Session, 'request') | 59 | 70 | class TestMimeType(TestCase): | |
|