Skip to content

Commit a92757b

Browse files
committed
Implement DateTimeField; close #9
1 parent 59e6fe8 commit a92757b

2 files changed

Lines changed: 41 additions & 0 deletions

File tree

adapters/fields.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
'BooleanField',
1414
'CharField',
1515
'DateField',
16+
'DateTimeField',
1617
'DecimalField',
1718
'Field',
1819
'FloatField',
@@ -41,6 +42,16 @@ def adapt(self, data):
4142
raise ValueError("Invalid date argument")
4243

4344

45+
class DateTimeField(BaseField):
46+
def adapt(self, data):
47+
if isinstance(data, datetime.datetime):
48+
return data
49+
elif isinstance(data, (str, unicode)):
50+
return dateutil.parser.parse(data)
51+
else:
52+
raise ValueError("Invalid date argument")
53+
54+
4455
class DecimalField(BaseField):
4556
def adapt(self, data):
4657
return Decimal(data)

tests/test_fields.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,3 +99,33 @@ def test_date_field_from_string(self):
9999
actual = adapters.DateField().adapt(date.strftime('%Y-%m-%d'))
100100
expected = date
101101
self.assertEqual(actual, expected)
102+
103+
def test_datetime_field(self):
104+
now = datetime.datetime.today()
105+
actual = adapters.DateTimeField().adapt(now)
106+
expected = now
107+
self.assertEqual(actual, expected)
108+
109+
def test_datetime_field_from_string(self):
110+
tzoffset = dateutil.tz.tzoffset(None, 7200)
111+
time = datetime.datetime(1986, 7, 25, 13, 14, 15, 16, tzinfo=tzoffset)
112+
113+
data = '1986-07-25 13:14:15.000016+02:00'
114+
actual = adapters.DateTimeField().adapt(data)
115+
expected = time
116+
self.assertEqual(actual, expected)
117+
118+
data = '1986-07-25 13:14:15.000016'
119+
actual = adapters.DateTimeField().adapt(data)
120+
expected = datetime.datetime(1986, 7, 25, 13, 14, 15, 16)
121+
self.assertEqual(actual, expected)
122+
123+
data = '1986-07-25 13:14:15'
124+
actual = adapters.DateTimeField().adapt(data)
125+
expected = datetime.datetime(1986, 7, 25, 13, 14, 15)
126+
self.assertEqual(actual, expected)
127+
128+
data = '1986-07-25 13:14'
129+
actual = adapters.DateTimeField().adapt(data)
130+
expected = datetime.datetime(1986, 7, 25, 13, 14)
131+
self.assertEqual(actual, expected)

0 commit comments

Comments
 (0)