Skip to content

Commit 59e6fe8

Browse files
committed
Implement DateField; close #8
1 parent b93b769 commit 59e6fe8

2 files changed

Lines changed: 31 additions & 2 deletions

File tree

adapters/fields.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,15 @@
1010

1111

1212
__all__ = [
13-
'BooleanField', 'CharField', 'DecimalField', 'Field', 'FloatField',
14-
'IntField', 'TimeField']
13+
'BooleanField',
14+
'CharField',
15+
'DateField',
16+
'DecimalField',
17+
'Field',
18+
'FloatField',
19+
'IntField',
20+
'TimeField',
21+
]
1522

1623

1724
class BooleanField(BaseField):
@@ -24,6 +31,16 @@ def adapt(self, data):
2431
return unicode(data)
2532

2633

34+
class DateField(BaseField):
35+
def adapt(self, data):
36+
if isinstance(data, datetime.date):
37+
return data
38+
elif isinstance(data, (str, unicode)):
39+
return dateutil.parser.parse(data).date()
40+
else:
41+
raise ValueError("Invalid date argument")
42+
43+
2744
class DecimalField(BaseField):
2845
def adapt(self, data):
2946
return Decimal(data)

tests/test_fields.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,15 @@ def test_time_field_from_string(self):
8787
actual = adapters.TimeField().adapt(time.strftime('%H:%M'))
8888
expected = datetime.time(13, 14)
8989
self.assertEqual(actual, expected)
90+
91+
def test_date_field(self):
92+
today = datetime.datetime.today().date()
93+
actual = adapters.DateField().adapt(today)
94+
expected = today
95+
self.assertEqual(actual, expected)
96+
97+
def test_date_field_from_string(self):
98+
date = datetime.date(1986, 7, 25)
99+
actual = adapters.DateField().adapt(date.strftime('%Y-%m-%d'))
100+
expected = date
101+
self.assertEqual(actual, expected)

0 commit comments

Comments
 (0)