Skip to content

Commit efcfc0d

Browse files
rollakariv
authored andcommitted
Temporal format property fix (#117)
* Extended the existing test * Fixed for time fields
1 parent 741f530 commit efcfc0d

File tree

3 files changed

+26
-9
lines changed

3 files changed

+26
-9
lines changed

data/temporal.csv

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
date,event
2-
2015-01-02,start
3-
2016-06-25,finish
1+
event,datetime,date,time
2+
start,2015-01-02T15:30:45,2015-01-02,15:30:45
3+
end,2016-06-25T08:10:04,2016-06-25,08:10:04

dataflows/processors/dumpers/file_formats.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ def __init__(self, writer, schema, temporal_format_property=None):
4242
if field.type in ['datetime', 'date', 'time']:
4343
format = field.descriptor.get(self.temporal_format_property, None)
4444
if format:
45-
serializer = partial(datetime.datetime.strftime, format=format)
45+
strftime = getattr(datetime, field.type).strftime
46+
serializer = partial(strftime, format=format)
4647
field.descriptor['serializer'] = serializer
4748

4849
@classmethod

tests/test_lib.py

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1420,7 +1420,11 @@ def test_force_temporal_format():
14201420
Flow(
14211421
load('data/temporal.csv',
14221422
name='temporal',
1423-
override_fields={'date': {'outputFormat': '%m/%d/%y'}}),
1423+
override_fields={
1424+
'datetime': {'type': 'datetime', 'outputFormat': '%y|%m|%d %H|%M|%S'},
1425+
'date': {'outputFormat': '%y|%m|%d'},
1426+
'time': {'outputFormat': '%H|%M|%S'},
1427+
}),
14241428
dump_to_path('out/force_temporal_format',
14251429
temporal_format_property='outputFormat')
14261430
).process()
@@ -1434,12 +1438,24 @@ def test_force_temporal_format():
14341438
# Assert
14351439
assert package.descriptor['resources'][0]['schema'] == {
14361440
'fields': [
1437-
{'format': '%m/%d/%y', 'name': 'date', 'type': 'date'},
1438-
{'format': 'default', 'name': 'event', 'type': 'string'}
1441+
{'format': 'default', 'name': 'event', 'type': 'string'},
1442+
{'format': '%y|%m|%d %H|%M|%S', 'name': 'datetime', 'type': 'datetime'},
1443+
{'format': '%y|%m|%d', 'name': 'date', 'type': 'date'},
1444+
{'format': '%H|%M|%S', 'name': 'time', 'type': 'time'},
14391445
],
14401446
'missingValues': [''],
14411447
}
14421448
assert data == [[
1443-
{'date': datetime.date(2015, 1, 2), 'event': 'start'},
1444-
{'date': datetime.date(2016, 6, 25), 'event': 'finish'}
1449+
{
1450+
'event': 'start',
1451+
'datetime': datetime.datetime(2015, 1, 2, 15, 30, 45),
1452+
'date': datetime.date(2015, 1, 2),
1453+
'time': datetime.time(15, 30, 45),
1454+
},
1455+
{
1456+
'event': 'end',
1457+
'datetime': datetime.datetime(2016, 6, 25, 8, 10, 4),
1458+
'date': datetime.date(2016, 6, 25),
1459+
'time': datetime.time(8, 10, 4),
1460+
}
14451461
]]

0 commit comments

Comments
 (0)