prefect.serializers
¶
Data serializer implementations
These serializers are registered for use with DataDocument
types
JSONSerializer
¶
Serializes data to JSON.
Input types must be compatible with the stdlib json library.
Wraps the json
library to serialize to UTF-8 bytes instead of string types.
Source code in prefect/serializers.py
class JSONSerializer:
"""
Serializes data to JSON.
Input types must be compatible with the stdlib json library.
Wraps the `json` library to serialize to UTF-8 bytes instead of string types.
"""
@staticmethod
def dumps(data: Any) -> bytes:
return json.dumps(data).encode()
@staticmethod
def loads(blob: bytes) -> Any:
return json.loads(blob.decode())
PackageManifestSerializer
¶
Serializes a package manifest.
Source code in prefect/serializers.py
class PackageManifestSerializer:
"""
Serializes a package manifest.
"""
@staticmethod
def dumps(data: "PackageManifest") -> bytes:
return data.json().encode()
@staticmethod
def loads(blob: bytes) -> "PackageManifest":
from prefect.packaging.base import PackageManifest
return PackageManifest.parse_raw(blob)
PickleSerializer
¶
Serializes arbitrary objects using the pickle protocol.
Wraps cloudpickle
to encode bytes in base64 for safe transmission.
Source code in prefect/serializers.py
class PickleSerializer:
"""
Serializes arbitrary objects using the pickle protocol.
Wraps `cloudpickle` to encode bytes in base64 for safe transmission.
"""
@staticmethod
def dumps(data: Any) -> bytes:
data_bytes = cloudpickle.dumps(data)
return base64.encodebytes(data_bytes)
@staticmethod
def loads(blob: bytes) -> Any:
return cloudpickle.loads(base64.decodebytes(blob))
# TODO: Consider adding python version data to pickle payloads to raise
# more helpful errors for users.
# A TypeError("expected bytes-like object, not int") will be raised if
# a document is deserialized by Python 3.7 and serialized by 3.8+
ResultSerializer
¶
Serializes a result object
Source code in prefect/serializers.py
class ResultSerializer:
"""
Serializes a result object
"""
@staticmethod
def dumps(data: "_Result") -> bytes:
return data.json().encode()
@staticmethod
def loads(blob: bytes) -> "_Result":
from prefect.results import _Result
return _Result.parse_raw(blob)