Skip to content

json_utils

CLASS DESCRIPTION
CustomEncoder

Encoder which can serialize a few non-standard selected types.

FUNCTION DESCRIPTION
json_dumps

The standard json.dumps, with a custom encoder.

Classes

CustomEncoder

Bases: JSONEncoder

Encoder which can serialize a few non-standard selected types.

Source code in fractal_server/json_utils.py
class CustomEncoder(json.JSONEncoder):
    """
    Encoder which can serialize a few non-standard selected types.
    """

    def default(self: Self, obj: Any):
        if isinstance(obj, datetime):
            return obj.isoformat()
        elif isinstance(obj, Path):
            return obj.as_posix()
        elif isinstance(obj, UUID):
            return str(obj)
        return super().default(obj)

Functions:

json_dumps(obj)

The standard json.dumps, with a custom encoder.

This could be optimized through pydantic.TypeAdapter if needed, as in

pydantic.TypeAdapter(Any).dump_json(obj).decode()
See benchmarks/json_serialization/ folder for details.

Source code in fractal_server/json_utils.py
def json_dumps(obj: Any) -> str:
    """
    The standard `json.dumps`, with a custom encoder.

    This could be optimized through `pydantic.TypeAdapter` if needed, as in
    ```
    pydantic.TypeAdapter(Any).dump_json(obj).decode()
    ```
    See `benchmarks/json_serialization/` folder for details.
    """
    return json.dumps(obj, cls=CustomEncoder)