Skip to content

Commit f88175d

Browse files
committed
Refactoring of datetime parsing.
1 parent ee70613 commit f88175d

4 files changed

Lines changed: 81 additions & 139 deletions

File tree

doc/api/core.rst

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,10 @@ Core
1212

1313
Set to ``False`` for timezone-aware :class:`datetime.datetime` objects
1414

15-
.. autofunction:: ghdate_to_datetime
16-
.. autofunction:: datetime_to_ghdate
15+
.. autofunction:: string_to_datetime
1716

18-
.. autofunction:: commitdate_to_datetime
17+
.. autofunction:: datetime_to_ghdate
1918
.. autofunction:: datetime_to_commitdate
20-
21-
.. autofunction:: userdate_to_datetime
22-
23-
.. autofunction:: isodate_to_datetime
2419
.. autofunction:: datetime_to_isodate
2520

2621
.. autofunction:: requires_auth

github2/core.py

Lines changed: 9 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@
1818
NAIVE = True
1919

2020

21-
def ghdate_to_datetime(github_date):
22-
"""Convert Github date string to Python datetime
21+
def string_to_datetime(string):
22+
"""Convert a string to Python datetime
2323
2424
:param str github_date: date string to parse
2525
"""
26-
parsed = parser.parse(github_date)
26+
parsed = parser.parse(string)
2727
if NAIVE:
2828
parsed = parsed.replace(tzinfo=None)
2929
return parsed
@@ -41,17 +41,6 @@ def datetime_to_ghdate(datetime_):
4141
return datetime_.strftime(GITHUB_DATE_FORMAT)
4242

4343

44-
def commitdate_to_datetime(commit_date):
45-
"""Convert commit date string to Python datetime
46-
47-
:param str github_date: date string to parse
48-
"""
49-
parsed = parser.parse(commit_date)
50-
if NAIVE:
51-
parsed = parsed.replace(tzinfo=None)
52-
return parsed
53-
54-
5544
def datetime_to_commitdate(datetime_):
5645
"""Convert Python datetime to Github date string
5746
@@ -68,34 +57,6 @@ def datetime_to_commitdate(datetime_):
6857
return "".join([date_without_tz, "%+03d:%02d" % (hours, minutes)])
6958

7059

71-
72-
def userdate_to_datetime(user_date):
73-
"""Convert user date string to Python datetime
74-
75-
Unfortunately this needs a special case because :meth:`~Github.users.show`
76-
and :meth:`~Github.users.search` return different formats for the
77-
``created_at`` attributes.
78-
79-
:param str user_date: date string to parse
80-
"""
81-
parsed = parser.parse(user_date)
82-
if NAIVE:
83-
parsed = parsed.replace(tzinfo=None)
84-
return parsed
85-
86-
87-
def isodate_to_datetime(iso_date):
88-
"""Convert commit date string to Python datetime
89-
90-
:param str github_date: date string to parse
91-
"""
92-
parsed = parser.parse(iso_date)
93-
if NAIVE:
94-
parsed = parsed.replace(tzinfo=None)
95-
return parsed
96-
97-
98-
9960
def datetime_to_isodate(datetime_):
10061
"""Convert Python datetime to Github date string
10162
@@ -223,22 +184,10 @@ def to_python(self, value):
223184
class DateAttribute(Attribute):
224185
format = "github"
225186
converter_for_format = {
226-
"github": {
227-
"to": ghdate_to_datetime,
228-
"from": datetime_to_ghdate,
229-
},
230-
"commit": {
231-
"to": commitdate_to_datetime,
232-
"from": datetime_to_commitdate,
233-
},
234-
"user": {
235-
"to" : userdate_to_datetime,
236-
"from": datetime_to_ghdate,
237-
},
238-
"iso": {
239-
"to": isodate_to_datetime,
240-
"from": datetime_to_isodate,
241-
}
187+
"github": datetime_to_ghdate,
188+
"commit": datetime_to_commitdate,
189+
"user": datetime_to_ghdate,
190+
"iso": datetime_to_isodate,
242191
}
243192

244193
def __init__(self, *args, **kwargs):
@@ -247,12 +196,12 @@ def __init__(self, *args, **kwargs):
247196

248197
def to_python(self, value):
249198
if value and not isinstance(value, datetime):
250-
return self.converter_for_format[self.format]["to"](value)
199+
return string_to_datetime(value)
251200
return value
252201

253202
def from_python(self, value):
254203
if value and isinstance(value, datetime):
255-
return self.converter_for_format[self.format]["from"](value)
204+
return self.converter_for_format[self.format](value)
256205
return value
257206

258207

tests/test_date_handling.py

Lines changed: 35 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -6,37 +6,36 @@
66

77
from nose.tools import assert_equals
88

9-
from github2.core import (ghdate_to_datetime, datetime_to_ghdate,
10-
commitdate_to_datetime, datetime_to_commitdate,
11-
isodate_to_datetime, datetime_to_isodate)
9+
from github2.core import (datetime_to_ghdate, datetime_to_commitdate,
10+
datetime_to_isodate, string_to_datetime)
1211

1312

1413
# Commented test cases are in PST, and aren't correctly handled with the
1514
# naïve datetime objects used in the current code base
1615

1716
def test_ghdate_to_datetime():
18-
assert_equals(ghdate_to_datetime('2011/05/22 00:24:15 -0700'),
17+
assert_equals(string_to_datetime('2011/05/22 00:24:15 -0700'),
1918
dt(2011, 5, 22, 0, 24, 15))
2019

21-
assert_equals(ghdate_to_datetime('2009/04/18 13:04:09 -0700'),
20+
assert_equals(string_to_datetime('2009/04/18 13:04:09 -0700'),
2221
dt(2009, 4, 18, 13, 4, 9))
23-
#assert_equals(ghdate_to_datetime('2009/11/12 21:15:17 -0800'),
22+
#assert_equals(string_to_datetime('2009/11/12 21:15:17 -0800'),
2423
# dt(2009, 11, 12, 21, 15, 17))
25-
#assert_equals(ghdate_to_datetime('2009/11/12 21:16:20 -0800'),
24+
#assert_equals(string_to_datetime('2009/11/12 21:16:20 -0800'),
2625
# dt(2009, 11, 12, 21, 16, 20))
27-
assert_equals(ghdate_to_datetime('2010/04/17 17:24:29 -0700'),
26+
assert_equals(string_to_datetime('2010/04/17 17:24:29 -0700'),
2827
dt(2010, 4, 17, 17, 24, 29))
29-
assert_equals(ghdate_to_datetime('2010/05/18 06:10:36 -0700'),
28+
assert_equals(string_to_datetime('2010/05/18 06:10:36 -0700'),
3029
dt(2010, 5, 18, 6, 10, 36))
31-
assert_equals(ghdate_to_datetime('2010/05/25 21:59:37 -0700'),
30+
assert_equals(string_to_datetime('2010/05/25 21:59:37 -0700'),
3231
dt(2010, 5, 25, 21, 59, 37))
33-
assert_equals(ghdate_to_datetime('2010/05/26 17:08:41 -0700'),
32+
assert_equals(string_to_datetime('2010/05/26 17:08:41 -0700'),
3433
dt(2010, 5, 26, 17, 8, 41))
35-
assert_equals(ghdate_to_datetime('2010/06/20 06:13:37 -0700'),
34+
assert_equals(string_to_datetime('2010/06/20 06:13:37 -0700'),
3635
dt(2010, 6, 20, 6, 13, 37))
37-
assert_equals(ghdate_to_datetime('2010/07/28 12:56:51 -0700'),
36+
assert_equals(string_to_datetime('2010/07/28 12:56:51 -0700'),
3837
dt(2010, 7, 28, 12, 56, 51))
39-
assert_equals(ghdate_to_datetime('2010/09/20 21:32:49 -0700'),
38+
assert_equals(string_to_datetime('2010/09/20 21:32:49 -0700'),
4039
dt(2010, 9, 20, 21, 32, 49))
4140

4241

@@ -67,28 +66,28 @@ def test_datetime_to_ghdate():
6766

6867

6968
def test_commitdate_to_datetime():
70-
assert_equals(commitdate_to_datetime('2011-05-22T00:24:15-07:00'),
69+
assert_equals(string_to_datetime('2011-05-22T00:24:15-07:00'),
7170
dt(2011, 5, 22, 0, 24, 15))
7271

73-
assert_equals(commitdate_to_datetime('2011-04-09T10:07:30-07:00'),
72+
assert_equals(string_to_datetime('2011-04-09T10:07:30-07:00'),
7473
dt(2011, 4, 9, 10, 7, 30))
75-
#assert_equals(commitdate_to_datetime('2011-02-19T07:16:11-08:00'),
74+
#assert_equals(string_to_datetime('2011-02-19T07:16:11-08:00'),
7675
# dt(2011, 2, 19, 7, 16, 11))
77-
#assert_equals(commitdate_to_datetime('2010-12-21T12:34:27-08:00'),
76+
#assert_equals(string_to_datetime('2010-12-21T12:34:27-08:00'),
7877
# dt(2010, 12, 21, 12, 34, 27))
79-
assert_equals(commitdate_to_datetime('2011-04-09T10:20:05-07:00'),
78+
assert_equals(string_to_datetime('2011-04-09T10:20:05-07:00'),
8079
dt(2011, 4, 9, 10, 20, 5))
81-
assert_equals(commitdate_to_datetime('2011-04-09T10:05:58-07:00'),
80+
assert_equals(string_to_datetime('2011-04-09T10:05:58-07:00'),
8281
dt(2011, 4, 9, 10, 5, 58))
83-
assert_equals(commitdate_to_datetime('2011-04-09T09:53:00-07:00'),
82+
assert_equals(string_to_datetime('2011-04-09T09:53:00-07:00'),
8483
dt(2011, 4, 9, 9, 53, 0))
85-
assert_equals(commitdate_to_datetime('2011-04-09T10:00:21-07:00'),
84+
assert_equals(string_to_datetime('2011-04-09T10:00:21-07:00'),
8685
dt(2011, 4, 9, 10, 0, 21))
87-
#assert_equals(commitdate_to_datetime('2010-12-16T15:10:59-08:00'),
86+
#assert_equals(string_to_datetime('2010-12-16T15:10:59-08:00'),
8887
# dt(2010, 12, 16, 15, 10, 59))
89-
assert_equals(commitdate_to_datetime('2011-04-09T09:53:00-07:00'),
88+
assert_equals(string_to_datetime('2011-04-09T09:53:00-07:00'),
9089
dt(2011, 4, 9, 9, 53, 0))
91-
assert_equals(commitdate_to_datetime('2011-04-09T09:53:00-07:00'),
90+
assert_equals(string_to_datetime('2011-04-09T09:53:00-07:00'),
9291
dt(2011, 4, 9, 9, 53, 0))
9392

9493

@@ -118,27 +117,27 @@ def test_datetime_to_commitdate():
118117
'2011-04-09T09:53:00-07:00')
119118

120119
def test_isodate_to_datetime():
121-
assert_equals(isodate_to_datetime('2011-05-22T00:24:15Z'),
120+
assert_equals(string_to_datetime('2011-05-22T00:24:15Z'),
122121
dt(2011, 5, 22, 0, 24, 15))
123-
assert_equals(isodate_to_datetime('2011-04-09T10:07:30Z'),
122+
assert_equals(string_to_datetime('2011-04-09T10:07:30Z'),
124123
dt(2011, 4, 9, 10, 7, 30))
125-
assert_equals(isodate_to_datetime('2011-02-19T07:16:11Z'),
124+
assert_equals(string_to_datetime('2011-02-19T07:16:11Z'),
126125
dt(2011, 2, 19, 7, 16, 11))
127-
assert_equals(isodate_to_datetime('2010-12-21T12:34:27Z'),
126+
assert_equals(string_to_datetime('2010-12-21T12:34:27Z'),
128127
dt(2010, 12, 21, 12, 34, 27))
129-
assert_equals(isodate_to_datetime('2011-04-09T10:20:05Z'),
128+
assert_equals(string_to_datetime('2011-04-09T10:20:05Z'),
130129
dt(2011, 4, 9, 10, 20, 5))
131-
assert_equals(isodate_to_datetime('2011-04-09T10:05:58Z'),
130+
assert_equals(string_to_datetime('2011-04-09T10:05:58Z'),
132131
dt(2011, 4, 9, 10, 5, 58))
133-
assert_equals(isodate_to_datetime('2011-04-09T09:53:00Z'),
132+
assert_equals(string_to_datetime('2011-04-09T09:53:00Z'),
134133
dt(2011, 4, 9, 9, 53, 0))
135-
assert_equals(isodate_to_datetime('2011-04-09T10:00:21Z'),
134+
assert_equals(string_to_datetime('2011-04-09T10:00:21Z'),
136135
dt(2011, 4, 9, 10, 0, 21))
137-
assert_equals(isodate_to_datetime('2010-12-16T15:10:59Z'),
136+
assert_equals(string_to_datetime('2010-12-16T15:10:59Z'),
138137
dt(2010, 12, 16, 15, 10, 59))
139-
assert_equals(isodate_to_datetime('2011-04-09T09:53:00Z'),
138+
assert_equals(string_to_datetime('2011-04-09T09:53:00Z'),
140139
dt(2011, 4, 9, 9, 53, 0))
141-
assert_equals(isodate_to_datetime('2011-04-09T09:53:00Z'),
140+
assert_equals(string_to_datetime('2011-04-09T09:53:00Z'),
142141
dt(2011, 4, 9, 9, 53, 0))
143142

144143

tests/test_tz_aware_date_handling.py

Lines changed: 35 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@
88
from nose.tools import assert_equals
99

1010
from github2 import core
11-
from github2.core import (ghdate_to_datetime, datetime_to_ghdate,
12-
commitdate_to_datetime, datetime_to_commitdate,
13-
isodate_to_datetime, datetime_to_isodate)
11+
from github2.core import (datetime_to_ghdate, datetime_to_commitdate,
12+
datetime_to_isodate, string_to_datetime)
1413

1514

1615
def setup_module():
@@ -32,27 +31,27 @@ def dt_utz(year, month, day, hour, minute, second):
3231

3332

3433
def test_ghdate_to_datetime():
35-
assert_equals(ghdate_to_datetime('2011/05/22 00:24:15 -0700'),
34+
assert_equals(string_to_datetime('2011/05/22 00:24:15 -0700'),
3635
dt_utz(2011, 5, 22, 7, 24, 15))
37-
assert_equals(ghdate_to_datetime('2009/04/18 13:04:09 -0700'),
36+
assert_equals(string_to_datetime('2009/04/18 13:04:09 -0700'),
3837
dt_utz(2009, 4, 18, 20, 4, 9))
39-
assert_equals(ghdate_to_datetime('2009/11/12 21:15:17 -0800'),
38+
assert_equals(string_to_datetime('2009/11/12 21:15:17 -0800'),
4039
dt_utz(2009, 11, 13, 5, 15, 17))
41-
assert_equals(ghdate_to_datetime('2009/11/12 21:16:20 -0800'),
40+
assert_equals(string_to_datetime('2009/11/12 21:16:20 -0800'),
4241
dt_utz(2009, 11, 13, 5, 16, 20))
43-
assert_equals(ghdate_to_datetime('2010/04/17 17:24:29 -0700'),
42+
assert_equals(string_to_datetime('2010/04/17 17:24:29 -0700'),
4443
dt_utz(2010, 4, 18, 0, 24, 29))
45-
assert_equals(ghdate_to_datetime('2010/05/18 06:10:36 -0700'),
44+
assert_equals(string_to_datetime('2010/05/18 06:10:36 -0700'),
4645
dt_utz(2010, 5, 18, 13, 10, 36))
47-
assert_equals(ghdate_to_datetime('2010/05/25 21:59:37 -0700'),
46+
assert_equals(string_to_datetime('2010/05/25 21:59:37 -0700'),
4847
dt_utz(2010, 5, 26, 4, 59, 37))
49-
assert_equals(ghdate_to_datetime('2010/05/26 17:08:41 -0700'),
48+
assert_equals(string_to_datetime('2010/05/26 17:08:41 -0700'),
5049
dt_utz(2010, 5, 27, 0, 8, 41))
51-
assert_equals(ghdate_to_datetime('2010/06/20 06:13:37 -0700'),
50+
assert_equals(string_to_datetime('2010/06/20 06:13:37 -0700'),
5251
dt_utz(2010, 6, 20, 13, 13, 37))
53-
assert_equals(ghdate_to_datetime('2010/07/28 12:56:51 -0700'),
52+
assert_equals(string_to_datetime('2010/07/28 12:56:51 -0700'),
5453
dt_utz(2010, 7, 28, 19, 56, 51))
55-
assert_equals(ghdate_to_datetime('2010/09/20 21:32:49 -0700'),
54+
assert_equals(string_to_datetime('2010/09/20 21:32:49 -0700'),
5655
dt_utz(2010, 9, 21, 4, 32, 49))
5756

5857

@@ -82,27 +81,27 @@ def test_datetime_to_ghdate():
8281

8382

8483
def test_commitdate_to_datetime():
85-
assert_equals(commitdate_to_datetime('2011-05-22T00:24:15-07:00'),
84+
assert_equals(string_to_datetime('2011-05-22T00:24:15-07:00'),
8685
dt_utz(2011, 5, 22, 7, 24, 15))
87-
assert_equals(commitdate_to_datetime('2011-04-09T10:07:30-07:00'),
86+
assert_equals(string_to_datetime('2011-04-09T10:07:30-07:00'),
8887
dt_utz(2011, 4, 9, 17, 7, 30))
89-
assert_equals(commitdate_to_datetime('2011-02-19T07:16:11-08:00'),
88+
assert_equals(string_to_datetime('2011-02-19T07:16:11-08:00'),
9089
dt_utz(2011, 2, 19, 15, 16, 11))
91-
assert_equals(commitdate_to_datetime('2010-12-21T12:34:27-08:00'),
90+
assert_equals(string_to_datetime('2010-12-21T12:34:27-08:00'),
9291
dt_utz(2010, 12, 21, 20, 34, 27))
93-
assert_equals(commitdate_to_datetime('2011-04-09T10:20:05-07:00'),
92+
assert_equals(string_to_datetime('2011-04-09T10:20:05-07:00'),
9493
dt_utz(2011, 4, 9, 17, 20, 5))
95-
assert_equals(commitdate_to_datetime('2011-04-09T10:05:58-07:00'),
94+
assert_equals(string_to_datetime('2011-04-09T10:05:58-07:00'),
9695
dt_utz(2011, 4, 9, 17, 5, 58))
97-
assert_equals(commitdate_to_datetime('2011-04-09T09:53:00-07:00'),
96+
assert_equals(string_to_datetime('2011-04-09T09:53:00-07:00'),
9897
dt_utz(2011, 4, 9, 16, 53, 0))
99-
assert_equals(commitdate_to_datetime('2011-04-09T10:00:21-07:00'),
98+
assert_equals(string_to_datetime('2011-04-09T10:00:21-07:00'),
10099
dt_utz(2011, 4, 9, 17, 0, 21))
101-
assert_equals(commitdate_to_datetime('2010-12-16T15:10:59-08:00'),
100+
assert_equals(string_to_datetime('2010-12-16T15:10:59-08:00'),
102101
dt_utz(2010, 12, 16, 23, 10, 59))
103-
assert_equals(commitdate_to_datetime('2011-04-09T09:53:00-07:00'),
102+
assert_equals(string_to_datetime('2011-04-09T09:53:00-07:00'),
104103
dt_utz(2011, 4, 9, 16, 53, 0))
105-
assert_equals(commitdate_to_datetime('2011-04-09T09:53:00-07:00'),
104+
assert_equals(string_to_datetime('2011-04-09T09:53:00-07:00'),
106105
dt_utz(2011, 4, 9, 16, 53, 0))
107106

108107

@@ -132,27 +131,27 @@ def test_datetime_to_commitdate():
132131

133132

134133
def test_isodate_to_datetime():
135-
assert_equals(isodate_to_datetime('2011-05-22T00:24:15Z'),
134+
assert_equals(string_to_datetime('2011-05-22T00:24:15Z'),
136135
dt_utz(2011, 5, 22, 0, 24, 15))
137-
assert_equals(isodate_to_datetime('2011-04-09T10:07:30Z'),
136+
assert_equals(string_to_datetime('2011-04-09T10:07:30Z'),
138137
dt_utz(2011, 4, 9, 10, 7, 30))
139-
assert_equals(isodate_to_datetime('2011-02-19T07:16:11Z'),
138+
assert_equals(string_to_datetime('2011-02-19T07:16:11Z'),
140139
dt_utz(2011, 2, 19, 7, 16, 11))
141-
assert_equals(isodate_to_datetime('2010-12-21T12:34:27Z'),
140+
assert_equals(string_to_datetime('2010-12-21T12:34:27Z'),
142141
dt_utz(2010, 12, 21, 12, 34, 27))
143-
assert_equals(isodate_to_datetime('2011-04-09T10:20:05Z'),
142+
assert_equals(string_to_datetime('2011-04-09T10:20:05Z'),
144143
dt_utz(2011, 4, 9, 10, 20, 5))
145-
assert_equals(isodate_to_datetime('2011-04-09T10:05:58Z'),
144+
assert_equals(string_to_datetime('2011-04-09T10:05:58Z'),
146145
dt_utz(2011, 4, 9, 10, 5, 58))
147-
assert_equals(isodate_to_datetime('2011-04-09T09:53:00Z'),
146+
assert_equals(string_to_datetime('2011-04-09T09:53:00Z'),
148147
dt_utz(2011, 4, 9, 9, 53, 0))
149-
assert_equals(isodate_to_datetime('2011-04-09T10:00:21Z'),
148+
assert_equals(string_to_datetime('2011-04-09T10:00:21Z'),
150149
dt_utz(2011, 4, 9, 10, 0, 21))
151-
assert_equals(isodate_to_datetime('2010-12-16T15:10:59Z'),
150+
assert_equals(string_to_datetime('2010-12-16T15:10:59Z'),
152151
dt_utz(2010, 12, 16, 15, 10, 59))
153-
assert_equals(isodate_to_datetime('2011-04-09T09:53:00Z'),
152+
assert_equals(string_to_datetime('2011-04-09T09:53:00Z'),
154153
dt_utz(2011, 4, 9, 9, 53, 0))
155-
assert_equals(isodate_to_datetime('2011-04-09T09:53:00Z'),
154+
assert_equals(string_to_datetime('2011-04-09T09:53:00Z'),
156155
dt_utz(2011, 4, 9, 9, 53, 0))
157156

158157

0 commit comments

Comments
 (0)