Source code for ds_provider_xledger_py_lib.serde.serializer
"""
**File:** ``serializer.py``
**Region:** ``ds_provider_xledger_py_lib/serde``
Description
-----------
Serialize dataset input dataframes into GraphQL request payloads.
"""
from __future__ import annotations
from typing import TYPE_CHECKING, Any, cast
from ds_common_logger_py_lib import Logger
from ds_resource_plugin_py_lib.common.serde.serialize.base import DataSerializer
from ..utils.query_builder import build_mutation, build_variables
if TYPE_CHECKING:
from ..enums import OperationType
from ..utils.introspection import MetaData
logger = Logger.get_logger(__name__, package=True)
[docs]
class XledgerSerializer(DataSerializer):
"""Build GraphQL payloads from dataframe input and loaded metadata."""
[docs]
def __call__(
self,
obj: Any,
**kwargs: Any,
) -> dict[str, Any]:
"""Serialize dataframe into GraphQL payload.
Args:
obj: Input dataframe.
**kwargs: Compatibility kwargs. Requires ``operation`` and
``metadata`` and ``operation_settings``.
Returns:
Payload in the form ``{"query": query, "variables": variables}``.
"""
operation = cast("OperationType", kwargs["operation"])
metadata = cast("MetaData", kwargs["metadata"])
operation_settings = kwargs["operation_settings"]
return_fields = getattr(operation_settings, "return_columns", None)
variables = build_variables(
obj=obj,
operation=operation,
metadata=metadata,
)
query = build_mutation(
metadata=metadata,
variables=variables,
return_fields=return_fields,
)
logger.debug("Query: %s", query)
logger.debug("Variables: %s", variables)
return {"query": query, "variables": variables}