5

I'm trying to coerce string as date so it can validate date data type, but it still returns False:

from cerberus import Validator
from datetime import datetime

v = Validator()
v.schema = {'start_date': {'type': 'date','coerce':datetime.date}}
v.validate({'start_date': '2017-10-01'})
>>> False

I have tried to use the integer and it works. I'm not sure why date conversion is not working:

v = Validator()
v.schema = {'amount': {'type': 'integer','coerce': int}}
v.validate({'amount': '2'})
>>> True

Any help would be appreciated.

ivanleoncz
  • 9,070
  • 7
  • 57
  • 49
Aryan087
  • 516
  • 6
  • 25

1 Answers1

18

I am afraid that datetime.date alone won't convert a string to a date value. If you try that in the REPL this is what you get:

>>> datetime.date('2017-10-01')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: descriptor 'date' requires a 'datetime.datetime' object but received a 'str'

Try something like this instead:

from cerberus import Validator
from datetime import datetime

v = Validator()
to_date = lambda s: datetime.strptime(s, '%Y-%m-%d')
v.schema = {'start_date': {'type': 'datetime','coerce': to_date}}
v.validate({'start_date': '2017-10-01'})
>>> True
Nicola Iarocci
  • 6,606
  • 1
  • 20
  • 33