subgrounds.transform module

Subgrounds request/response transformation layers module

This module defines interfaces (abstract classes) for transformation layers. Transformation layers, or transforms, can be applied to entire requests (see RequestTransform) or on a per-document basis (see DocumentTransform). Classes that implement either type of transforms can be used to perform modifications to queries and their response data.

For example, the TypeTransform class is used to tranform the response data of BigInt and BigDecimal fields (which are represented as strings in the response JSON data) to python int and float respectively (see the actual transforms in DEFAULT_SUBGRAPH_TRANSFORMS).

Transforms are also used to apply SyntheticField to queries and the response data (see LocalSyntheticField transform class). Each SyntheticField defined on a subgraph creates a new transformation layer by instantiating a new LocalSyntheticField object.

subgrounds.transform.select_data(select, data)
class subgrounds.transform.RequestTransform

Bases: abc.ABC

Abstract class representing a transformation layer to be applied to entire DataRequest objects.

abstract transform_request(req)

Method that will be applied to all DataRequest objects that pass through the transformation layer.

Parameters

req (DataRequest) -- The initial request object

Returns

The transformed request object

Return type

DataRequest

abstract transform_response(req, data)

Method to be applied to all response data data of requests that pass through the transformation layer.

req is the initial DataRequest object that yielded the resulting JSON data data.

Parameters
  • req (DataRequest) -- Initial data request object

  • data (list[dict[str, Any]]) -- JSON data blob resulting from the execution of the transformed data request.

Returns

The transformed response data

Return type

list[dict[str, Any]]

class subgrounds.transform.DocumentTransform

Bases: abc.ABC

Abstract class representing a transformation layer to be applied to Document objects.

abstract transform_document(doc)

Method that will be applied to all Document objects that pass through the transformation layer.

Parameters

doc (Document) -- The initial document

Returns

The transformed document

Return type

Document

abstract transform_response(req, data)

Method to be applied to all response data data of requests that pass through the transformation layer.

doc is the initial Document object that yielded the resulting JSON data data.

Parameters
  • doc (Document) -- Initial document

  • data (dict[str, Any]) -- JSON data blob resulting from the execution of the transformed document.

Returns

The transformed response data

Return type

dict[str, Any]

class subgrounds.transform.TypeTransform(type_, f)

Bases: subgrounds.transform.DocumentTransform

Transform to be applied to scalar fields on a per-type basis.

type_

Type indicating which scalar values (i.e.: values of that type) should be transformed using the function f

Type

TypeRef.T

f

Function to be applied to scalar values of type type_ in the response data.

Type

Callable[[Any], Any]

type_: subgrounds.schema.TypeRef.T
f: Callable[[Any], Any]
transform_document(doc)

Method that will be applied to all Document objects that pass through the transformation layer.

Parameters

doc (Document) -- The initial document

Returns

The transformed document

Return type

Document

transform_response(doc, data)

Method to be applied to all response data data of requests that pass through the transformation layer.

doc is the initial Document object that yielded the resulting JSON data data.

Parameters
  • doc (Document) -- Initial document

  • data (dict[str, Any]) -- JSON data blob resulting from the execution of the transformed document.

Returns

The transformed response data

Return type

dict[str, Any]

class subgrounds.transform.LocalSyntheticField(subgraph, fmeta, type_, f, default, args)

Bases: subgrounds.transform.DocumentTransform

Transform used to implement synthetic fields on GraphQL objects that only depend on values accessible from that object.

transform_document() replaces the field fmeta by the argument fields selections args if the synthetic field fmeta is present in the document.

transform_response() applied f to the fields corresponding to the argument selections args and places the result in the response.

subgraph

The subgraph to which the synthetic field's object belongs.

Type

Subgraph

fmeta

The synthetic field

Type

TypeMeta.FieldMeta

type_

The object for which the synthetic field is defined

Type

TypeMeta.ObjectMeta | TypeMeta.InterfaceMeta

f

The function to be applied to the argument fields

Type

Callable

default

The default value of the synthetic field used in case of exceptions (e.g.: division by zero)

Type

Any

args

The selections of the fields used as arguments to compute the synthetic field

Type

list[Selection]

subgraph: Subgraph
fmeta: TypeMeta.FieldMeta
type_: TypeMeta.ObjectMeta | TypeMeta.InterfaceMeta
f: Callable
default: Any
args: list[Selection]
transform_document(doc)

Method that will be applied to all Document objects that pass through the transformation layer.

Parameters

doc (Document) -- The initial document

Returns

The transformed document

Return type

Document

transform_response(doc, data)

Method to be applied to all response data data of requests that pass through the transformation layer.

doc is the initial Document object that yielded the resulting JSON data data.

Parameters
  • doc (Document) -- Initial document

  • data (dict[str, Any]) -- JSON data blob resulting from the execution of the transformed document.

Returns

The transformed response data

Return type

dict[str, Any]

class subgrounds.transform.SplitTransform(query)

Bases: subgrounds.transform.RequestTransform

transform_request(req)

Method that will be applied to all DataRequest objects that pass through the transformation layer.

Parameters

req (DataRequest) -- The initial request object

Returns

The transformed request object

Return type

DataRequest

transform_response(req, data)

Method to be applied to all response data data of requests that pass through the transformation layer.

req is the initial DataRequest object that yielded the resulting JSON data data.

Parameters
  • req (DataRequest) -- Initial data request object

  • data (list[dict[str, Any]]) -- JSON data blob resulting from the execution of the transformed data request.

Returns

The transformed response data

Return type

list[dict[str, Any]]