Types are the smallest definition of structure in Schematics. They represent structure by offering functions to inspect or mutate the data in some way.
According to Schematics, a type is an instance of a way to do three things:
These properties are implemented as to_native, to_primitive, and validate.
A simple example is the DateTimeType.
>>> from schematics.types import DateTimeType
>>> dt_t = DateTimeType()
The to_native function transforms an ISO8601 formatted date string into a Python datetime.datetime.
>>> dt = dt_t.to_native('2013-08-31T02:21:21.486072')
>>> dt
datetime.datetime(2013, 8, 31, 2, 21, 21, 486072)
The to_primitive function changes it back to a langauge agnostic form, in this case an ISO8601 formatted string, just like we used above.
>>> dt_t.to_primitive(dt)
'2013-08-31T02:21:21.486072'
Validation can be as simple as successfully calling to_native, but sometimes more is needed. data or behavior during a typical use, like serialization.
Let’s look at the StringType. We’ll set a max_length of 10.
>>> st = StringType(max_length=10)
>>> st.to_native('this is longer than 10')
u'this is longer than 10'
It converts to a string just fine. Now, let’s attempt to validate it.
>>> st.validate('this is longer than 10')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "schematics/types/base.py", line 164, in validate
raise ValidationError(errors)
schematics.exceptions.ValidationError: [u'String value is too long.']