Source code for httk.optimade.backend.partial

"""Markers for property values transmitted via the partial data protocol.

A field extractor may return a :class:`PartialValue` in place of a concrete
value when the value is too large to include inline, or when its list axes are
sliceable. The endpoint layer turns it into ``null`` plus
``meta.partial_data_links`` (only the endpoint knows the base URL), slices it
inline when a ``dimension_slices`` query parameter is supplied, or streams it
via the JSON Lines partial data endpoint.
"""

from collections.abc import Callable
from dataclasses import dataclass
from typing import Any


@dataclass(frozen=True)
[docs] class PartialDimension: """One list axis of a :class:`PartialValue`. ``length`` is the number of items along the axis (``None`` when unknown or entry-dependent and not declared). ``sliceable`` indicates whether the server can honour a slice request for this axis. """
[docs] name: str
[docs] length: int | None = None
[docs] sliceable: bool = False
@dataclass(frozen=True)
[docs] class PartialValue: """A property value provided lazily, one slice at a time. ``fetch`` takes a tuple of Python slices (one per dimension, with the usual *exclusive* stop) and returns the corresponding nested lists. """
[docs] dimensions: tuple[PartialDimension, ...]
[docs] fetch: Callable[[tuple[slice, ...]], Any]