Skip to content

Commit c81eb66

Browse files
committed
v1.20.5 Improve date inferring
1 parent 5e9d7f6 commit c81eb66

File tree

3 files changed

+19
-12
lines changed

3 files changed

+19
-12
lines changed

tableschema/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.20.4
1+
1.20.5

tableschema/schema.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,7 @@ def __hash__(self):
550550
'array',
551551
'datetime',
552552
'time',
553-
'date',
553+
('date', ('%Y-%m-%d', '%Y/%m/%d', '%d/%m/%Y', '%m/%d/%Y', '%Y%m%d', '%Y.%m.%d')),
554554
'integer',
555555
'number',
556556
'boolean',
@@ -569,12 +569,17 @@ def __init__(self, missing_values):
569569
self.missing_values = missing_values
570570

571571
def cast(self, value):
572-
for priority, name in enumerate(_INFER_TYPE_ORDER):
572+
for priority, type_rec in enumerate(_INFER_TYPE_ORDER):
573+
if isinstance(type_rec, tuple):
574+
name, formats = type_rec
575+
else:
576+
name, formats = type_rec, ['default']
573577
cast = getattr(types, 'cast_%s' % name)
574578
if value not in self.missing_values:
575-
result = cast('default', value)
576-
if result != config.ERROR:
577-
yield (name, 'default', priority)
579+
for format in formats:
580+
result = cast(format, value)
581+
if result != config.ERROR:
582+
yield (name, format, priority)
578583

579584

580585
class _TypeResolver(object):

tests/test_schema.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -309,19 +309,21 @@ def test_save(tmpdir, apply_defaults):
309309

310310
def test_infer():
311311
data = [
312-
['id', 'age', 'name'],
313-
['1','39','Paul'],
314-
['2','23','Jimmy'],
315-
['3','36','Jane'],
316-
['4','N/A','Judy'],
312+
['id', 'age', 'name', 'dob'],
313+
['1','39','Paul','28/1/1979'],
314+
['2','23','Jimmy','13/6/1995'],
315+
['3','36','Jane','17/9/1980'],
316+
['4','N/A','Judy','19/4/1983'],
317317
]
318318
schema = Schema()
319319
schema.infer(data)
320320
assert schema.descriptor == {
321321
'fields': [
322322
{'format': 'default', 'name': 'id', 'type': 'integer'},
323323
{'format': 'default', 'name': 'age', 'type': 'integer'},
324-
{'format': 'default', 'name': 'name', 'type': 'string'}],
324+
{'format': 'default', 'name': 'name', 'type': 'string'},
325+
{'format': '%d/%m/%Y', 'name': 'dob', 'type': 'date'},
326+
],
325327
'missingValues': ['']}
326328
data = [
327329
['id', 'age', 'name'],

0 commit comments

Comments
 (0)