hiku.query

Hiku doesn’t rely on any specific query language, internally it uses generic query representation to describe result and it could be constructed by parsing different suitable query languages.

However, Hiku provides built-in way to parse graphql query into hiku.query.Node:

Example:

{ foo { bar { baz } } }

This query will be read internally as:

Node([Field('foo'),
      Link('bar', Node([Field('baz')]))])

And query result will look like this:

{
    'foo': 1,
    'bar': {
        'baz': 2,
    },
}
class hiku.query.Field(name: str, options: Dict[str, Any] | None = None, alias: str | None = None, directives: Tuple[Directive, ...] | None = None)

Represents a field of the node

Parameters:
  • name – name of the field

  • options (optional) – field options – mapping of names to values

  • alias (optional) – field’s name in result

Represents a link to the node

Parameters:
  • name – name of the link

  • node – collection of fields and links – Node

  • options (optional) – link options – mapping of names to values

  • alias (optional) – link’s name in result

class hiku.query.Node(fields: Sequence[Field | Link], fragments: Sequence[Fragment] | None = None, ordered: bool = False)

Represents collection of fields, links and fragments

Parameters:
  • fields – list of Field, Link, Fragment

  • fragments – list of Fragment

  • ordered – whether to compute fields of this node sequentially in order or not

property fragments_map: OrderedDict[str, Fragment]

Only named fragments

hiku.query.merge(nodes: Iterable[Node]) Node

Merges multiple queries into one query

Parameters:

nodes – queries, represented as list of Node

Returns:

merged query as one Node