Skip to content

Commit

Permalink
modify tests
Browse files Browse the repository at this point in the history
  • Loading branch information
oarnauru committed Jul 28, 2014
1 parent 2d2dbd1 commit 42bcfd4
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 33 deletions.
27 changes: 13 additions & 14 deletions dirty_models/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -204,19 +204,22 @@ def parse_format(self, value):

def get_parsed_value(self, value):
try:
return self.date_parsers[self.parse_format]['parser'](value)
parser = self.date_parsers.get(self.parse_format, {}).get('parser')
if callable(parser):
return parser(value)
return datetime.strptime(value, parser)
except:
return value
return None

def get_formatter_value(self, value):
def get_formatted_value(self, value):
try:
formatter = self.date_parsers.get(self.parse_format, {}).get('formatter')
if callable(formatter):
return formatter(value)

return datetime.strptime(datetime.strftime(value, formatter), formatter)
return value.strftime(format=formatter)
except:
return None
return str(value)


class TimeField(DateTimeBaseField):
Expand All @@ -236,10 +239,9 @@ def convert_value(self, value):
if not self.parse_format:
value = dateutil_parse(value)
return value.time()
parsed_value = self.get_parsed_value(value)

return self.convert_value(self.get_formatter_value(parsed_value)) \
or self.convert_value(datetime.strptime(parsed_value, format))
return self.convert_value(self.get_parsed_value(value)) \
or self.convert_value(datetime.strptime(value, format))
except ValueError:
return None
elif isinstance(value, datetime):
Expand Down Expand Up @@ -269,10 +271,9 @@ def convert_value(self, value):
if not self.parse_format:
value = dateutil_parse(value)
return value.date()
parsed_value = self.get_parsed_value(value)

return self.convert_value(self.get_formatter_value(parsed_value)) \
or self.convert_value(datetime.strptime(parsed_value, format))
return self.convert_value(self.get_parsed_value(value)) \
or self.convert_value(datetime.strptime(value, format))
except(TypeError, ValueError):
return None
elif isinstance(value, datetime):
Expand Down Expand Up @@ -302,9 +303,7 @@ def convert_value(self, value):
if not self.parse_format:
return dateutil_parse(value)

parsed_value = self.get_parsed_value(value)

return self.get_formatter_value(parsed_value) or datetime.strptime(parsed_value, format)
return self.get_parsed_value(value) or datetime.strptime(value, format)
except(TypeError, ValueError):
return None
elif isinstance(value, date):
Expand Down
45 changes: 26 additions & 19 deletions tests/dirty_models/tests_fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -695,13 +695,14 @@ def test_datetime_field_using_is8061_parser_and_formatter(self):
self.assertFalse(field.check_value(data))
self.assertTrue(field.can_use_value(data))
self.assertEqual(field.use_value(data), datetime(year=2012, month=9, day=11,
hour=13, minute=2, second=41))
hour=13, minute=2, second=41,
tzinfo=timezone.utc))

def test_datetime_field_using_is8061_without_formatter(self):
field = DateTimeField('iso8061')
field.date_parsers = {
'iso8061': {
'parser': iso8601.parse_date
'parser': 'bruce_wayne'
}
}
data = '2012-09-11T13:02:41Z'
Expand Down Expand Up @@ -736,7 +737,8 @@ def parser_format(value):
self.assertFalse(field.check_value(data))
self.assertTrue(field.can_use_value(data))
self.assertEqual(field.use_value(data), datetime(year=2012, month=9, day=11,
hour=13, minute=2, second=41))
hour=13, minute=2, second=41,
tzinfo=timezone.utc))

def test_datetime_field_using_is8061_bad_str(self):
field = DateTimeField('iso8061')
Expand Down Expand Up @@ -764,7 +766,8 @@ def test_time_field_using_is8061(self):
data = '2012-09-11T13:02:41Z'
self.assertFalse(field.check_value(data))
self.assertTrue(field.can_use_value(data))
self.assertEqual(field.use_value(data), time(hour=13, minute=2, second=41))
self.assertEqual(field.use_value(data), time(hour=13, minute=2, second=41,
tzinfo=timezone.utc))

def test_time_field_using_is8061_bad_str(self):
field = TimeField('iso8061')
Expand Down Expand Up @@ -812,7 +815,7 @@ def test_datetime_field_using_is8061_def_format(self):

def get_format(value):
format = '%Y-%m-%dT%H:%M:%SZ'
return datetime.strptime(datetime.strftime(value, format), format)
return datetime.strftime(value, format)

field = DateTimeField('iso8061')
field.date_parsers = {
Expand All @@ -822,30 +825,34 @@ def get_format(value):
}
}

data = '2012-09-11T13:02:41Z'
self.assertFalse(field.check_value(data))
self.assertTrue(field.can_use_value(data))
self.assertEqual(field.use_value(data), datetime(year=2012, month=9, day=11,
hour=13, minute=2, second=41))
data = datetime(year=2012, month=9, day=11,
hour=13, minute=2, second=41,
tzinfo=timezone.utc)
self.assertEqual(field.get_formatted_value(data), '2012-09-11T13:02:41Z')

def test_date_field_using_is8061_def_format_bad_str(self):
def test_date_field_using_is8061_bad_format_str(self):

def get_format(value):
format = '%Y-%m-%dT%H:%M:%SZ'
return datetime.strptime(datetime.strftime(value, format), format)
field = DateTimeField()

data = datetime(year=2012, month=9, day=11,
hour=13, minute=2, second=41,
tzinfo=timezone.utc)
self.assertEqual(field.get_formatted_value(data), '2012-09-11 13:02:41+00:00')

def test_date_field_using_is8061_format_str(self):

field = DateTimeField('iso8061')
field.date_parsers = {
'iso8061': {
'formatter': get_format,
'formatter': '%Y-%m-%dT%H:%M:%SZ',
'parser': iso8601.parse_date
}
}

data = '2012-09-50T13:02:41Z'
self.assertFalse(field.check_value(data))
self.assertTrue(field.can_use_value(data))
self.assertIsNone(field.use_value(data))
data = datetime(year=2012, month=9, day=11,
hour=13, minute=2, second=41,
tzinfo=timezone.utc)
self.assertEqual(field.get_formatted_value(data), '2012-09-11T13:02:41Z')

def test_model_field_desc(self):
class TestModel(BaseModel):
Expand Down

0 comments on commit 42bcfd4

Please sign in to comment.