Source code for wolframclient.serializers.serializable
# -*- coding: utf-8 -*-
from __future__ import absolute_import, print_function, unicode_literals
__all__ = ["WLSerializable"]
[docs]class WLSerializable:
"""A class that can be serialized using :func:`~wolframclient.serializers.export`.
Custom serialization of a class is done by subclassing this class::
from wolframclient.serializers.serializable import WLSerializable
from wolframclient.language import wl
from wolframclient.serializers import export
class MyPythonClass(WLSerializable):
def __init__(self, *arguments):
self.arguments = arguments
def to_wl(self):
return wl.MyWolframFunction(*self.arguments)
Serialize :data:`MyPythonClass` using :func:`~wolframclient.serializers.export`::
>>> export(MyPythonClass('foo', 'bar'))
b'MyWolframFunction["foo", "bar"]'
Serialization is applied recursively; arguments are also serialized::
>>> export(MyPythonClass(1, 2, MyPythonClass(2, 3)))
'MyWolframFunction[1, 2, MyWolframFunction[2, 3]]'
"""
[docs] def to_wl(self):
""" Return the serialized form of a given Python class.
The returned value must be a combination of serializable types.
"""
raise NotImplementedError(
"class %s must implement a to_wl method" % self.__class__.__name__
)