Serializable IPython Traitlets
serializable-traitlets (imported as straitlets) is a Python 2/3
compatible library providing a restricted subset of the classes from IPython
Traitlets. Within our restricted subset, we inherit all the benefits of
using regular traitlets, including static type declarations, dynamic
default generators, and attribute observers/validators.
By supporting only a limited (though still expressive) subset of Python
objects, however, we gain the ability to serialize and deserialize instances of
Serializable to and from various formats, including:
- JSON
- YAML
- base64-encoded strings
These properties make Serializables well-suited for configuration in
environments where objects need to be transferred between processes.
straitlets also provides users the ability to specify example values
for traits. If all traits of a Serializable class have examples (or
default values) provided, then we can auto-generate an example for the parent
class, and we can resursively generate examples for nested classes.
Basic Usage:
In [1]: from straitlets import Serializable, Integer, Dict, List
In [2]: class Foo(Serializable):
...: my_int = Integer()
...: my_dict = Dict()
...: my_list = List()
In [3]: instance = Foo(my_int=3, my_dict={'a': [1, 2], 'b': (3, 4)}, my_list=[5, None])
In [4]: print(instance.to_json())
{"my_int": 3, "my_dict": {"a": [1, 2], "b": [3, 4]}, "my_list": [5, null]}
In [5]: print(instance.to_yaml())
my_dict:
a:
- 1
- 2
b:
- 3
- 4
my_int: 3
my_list:
- 5
- nullAutogenerating Example Values:
from straitlets import Serializable, Integer, Instance
class Point(Serializable):
x = Integer().example(0)
y = Integer().example(0)
class Vector(Serializable):
# We can automatically generate example values for attributes
# declared as Instances of Serializable.
head = Instance(Point)
# Per-attribute overrides are still supported.
tail = Instance(Point).example(Point(x=1, y=3))
print(Vector.example_instance().to_yaml())
# head:
# x: 0
# y: 0
# tail:
# x: 1
# y: 3