Skip to content

Commit 5cd7ad5

Browse files
committed
Refact normalize of dates into base.Service
1 parent 488252c commit 5cd7ad5

File tree

4 files changed

+32
-32
lines changed

4 files changed

+32
-32
lines changed

pygithub3/services/base.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
#!/usr/bin/env python
22
# -*- encoding: utf-8 -*-
33

4+
from datetime import datetime
5+
46
from pygithub3.core.client import Client
7+
from pygithub3.core.errors import NotFound
58
from pygithub3.core.result import smart, normal
69
from pygithub3.requests.base import Factory
7-
from pygithub3.core.errors import NotFound
10+
from pygithub3.resources.base import GITHUB_DATE_FORMAT
811

912

1013
class Service(object):
@@ -41,6 +44,15 @@ def __init__(self, **config):
4144
self._client = Client(**config)
4245
self.request_builder = Factory()
4346

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+
4456
@property
4557
def remaining_requests(self):
4658
return Client.remaining_requests

pygithub3/services/issues/__init__.py

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

3-
from datetime import datetime
4-
53
from pygithub3.services.base import Service, MimeTypeMixin
6-
from pygithub3.resources.base import GITHUB_DATE_FORMAT
74
from .comments import Comments
85
from .events import Events
96
from .labels import Labels
@@ -30,20 +27,15 @@ def list(self, filter='assigned', state='open', labels='', sort='created',
3027
@high
3128
:param str sort: 'created', 'updated' or 'comments'
3229
:param str direction: 'asc' or 'desc'
33-
:param datetime since: Date filter
30+
:param datetime since: Date filter (datetime or str in ISO 8601)
3431
:returns: A :doc:`result`
3532
3633
.. warning::
3734
You must be authenticated
3835
"""
3936
params = dict(filter=filter, state=state, labels=labels, sort=sort,
4037
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)
4739
request = self.request_builder('issues.list')
4840
return self._get_result(request, **params)
4941

@@ -60,20 +52,15 @@ def list_by_repo(self, user=None, repo=None, milestone='*', state='open',
6052
@high
6153
:param str sort: 'created', 'updated' or 'comments'
6254
:param str direction: 'asc' or 'desc'
63-
:param datetime since: Date filter
55+
:param datetime since: Date filter (datetime or str in ISO 8601)
6456
:returns: A :doc:`result`
6557
6658
.. note::
6759
Remember :ref:`config precedence`
6860
"""
6961
params = dict(milestone=milestone, state=state, assignee=assignee,
7062
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)
7764
request = self.make_request('issues.list_by_repo', user=user,
7865
repo=repo)
7966
return self._get_result(request, **params)

pygithub3/services/issues/milestones.py

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
#!/usr/bin/env python
22
# -*- encoding: utf-8 -*-
33

4-
from datetime import datetime
5-
64
from pygithub3.services.base import Service
7-
from pygithub3.resources.base import GITHUB_DATE_FORMAT
5+
86

97
class Milestones(Service):
108
""" Consume `Milestones API
@@ -43,14 +41,6 @@ def get(self, number, user=None, repo=None):
4341
repo=repo, number=number)
4442
return self._get(request)
4543

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-
5444
def create(self, data, user=None, repo=None):
5545
""" Create a milestone
5646
@@ -64,7 +54,7 @@ def create(self, data, user=None, repo=None):
6454
.. note::
6555
Remember :ref:`config precedence`
6656
"""
67-
self._normalize_due_on(data)
57+
self._normalize_date('due_on', data)
6858
request = self.make_request('issues.milestones.create', user=user,
6959
repo=repo, body=data)
7060
return self._post(request)
@@ -83,7 +73,7 @@ def update(self, number, data, user=None, repo=None):
8373
.. note::
8474
Remember :ref:`config precedence`
8575
"""
86-
self._normalize_due_on(data)
76+
self._normalize_date('due_on', data)
8777
request = self.make_request('issues.milestones.update', user=user,
8878
repo=repo, number=number, body=data)
8979
return self._patch(request)

pygithub3/tests/services/test_core.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
#!/usr/bin/env python
22
# -*- encoding: utf-8 -*-
33

4-
import requests
4+
from datetime import datetime
55

6+
import requests
67
from mock import patch
78

89
from pygithub3.tests.utils.core import TestCase
@@ -54,6 +55,16 @@ def test_GET_result(self, request_method):
5455
self.assertFalse(request_method.called)
5556
self.assertIsInstance(result, base.Result)
5657

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+
5768

5869
@patch.object(requests.sessions.Session, 'request')
5970
class TestMimeType(TestCase):

0 commit comments

Comments
 (0)