Python · Snapshots

Snapshots

from ustore import Snapshot 1.0.0-rc.1 · d6d40961

API

ClassSnapshotA point-in-time state of the whole database, whose read verbs see what it pinned.41
lib.pyi:1693 ↗
class Snapshot
saveWrites the snapshot out as a new database of the same engine, holding exactly the collections it records, reporting the bytes of keys and values saved; a cancelled save removes what it wrote.
lib.pyi:1707 ↗
def save(
    path: PathLikeOrStr,
    /,
    *,
    progress: Progress | None = None,
) -> None
collection_findThe collection ID the name addresses at this snapshot.
lib.pyi:1711 ↗
def collection_find(name: str, arena: Arena, /) -> UUID
collection_listThe IDs of every collection at this snapshot, never a system one.
lib.pyi:1714 ↗
def collection_list(arena: Arena, /) -> tuple[UUID, ...]
closeReleases the snapshot once its deferred calls finished, unpinning the versions only it kept.
lib.pyi:1717 ↗
def close() -> None
database
lib.pyi:1696 ↗
database: Database
read_stampThe stamp the snapshot reads at: it sees every commit whose commit stamp is at or below it, and none above.
lib.pyi:1697 ↗
read_stamp: int
__getitem__The collection name addresses.
lib.pyi:812 ↗

Inherited from _Reads

def __getitem__(name: str) -> Collection
readReads a batch of binary values in one call, which no sequence of single reads matches for throughput.
lib.pyi:815 ↗

Inherited from _Reads

def read(
    keys: KeysLike,
    arena: Arena,
    /,
    *,
    collection: CollectionLike,
    offset: int = 0,
    limit: int | None = None,
) -> Values

Nothing is copied: the tape sits in the arena, and indexing the answer gives a memoryview over the stored bytes, or None for an absent key.

Returns: Values: One entry per key, in the order they were asked for. Raises: ContendedError: The arena serves another call or exports a buffer. Error: Whatever the engine reported.

Parameters

keysKeysLikeThe keys to read, as a sequence, a contiguous buffer of 16-byte keys, which is read in place, or one of 64-bit integers.
arenaArenaWhere the tape lands, rewound by this call.
collectionCollectionLikeThe collection, by identifier or by name.
offsetintByte of every value the read starts at, where an offset past the end reads empty.
limitint | NoneMost bytes of every value to read from the offset, or None for the rest of it.
getCopies one value out of a one-off arena, which read with an arena of yours avoids.
lib.pyi:844 ↗

Inherited from _Reads

def get(
    key: KeyLike,
    *,
    collection: CollectionLike,
) -> bytes | None
containsReads one presence into a one-off arena.
lib.pyi:847 ↗

Inherited from _Reads

def contains(
    key: KeyLike,
    *,
    collection: CollectionLike,
) -> bool
cursorA walk over the keys of one collection from start, reading nothing until its first pull, whose every pull blocks as this receiver's calls do.
lib.pyi:850 ↗

Inherited from _Reads

def cursor(
    start: KeyLike | None = None,
    /,
    *,
    collection: CollectionLike,
    end: KeyLike | None = None,
    direction: ScanDirection = ScanDirection.ASCENDING,
    patterns: Sequence[str | bytes] | None = None,
    pattern_kind: PatternKind = PatternKind.REGEX,
    sensitivity: CaseSensitivity = CaseSensitivity.CASED,
    predicate: Predicate | None = None,
    predicate_cost: PredicateCost = PredicateCost.CHEAP,
) -> Cursor

Calls ustore_blobs_cursor_init.

docs_cursorA walk over documents, keeping those filter matches.
lib.pyi:867 ↗

Inherited from _Reads

def docs_cursor(
    start: KeyLike | None = None,
    /,
    *,
    collection: CollectionLike,
    end: KeyLike | None = None,
    direction: ScanDirection = ScanDirection.ASCENDING,
    filter: str | bytes | None = None,
    predicate: Predicate | None = None,
    predicate_cost: PredicateCost = PredicateCost.CHEAP,
) -> Cursor

Calls ustore_docs_cursor_init.

pages_cursorA walk over pages, keeping those holding a node of the XPath filter, whose pulls render whole pages into outputs_encoding when asked.
lib.pyi:881 ↗

Inherited from _Reads

def pages_cursor(
    start: KeyLike | None = None,
    /,
    *,
    collection: CollectionLike,
    end: KeyLike | None = None,
    direction: ScanDirection = ScanDirection.ASCENDING,
    filter: str | bytes | None = None,
    predicate: Predicate | None = None,
    predicate_cost: PredicateCost = PredicateCost.CHEAP,
    outputs_encoding: PageEncoding = PageEncoding.XML,
) -> Cursor

Calls ustore_pages_cursor_init.

graph_vertices_cursorA walk over the vertices of one graph collection.
lib.pyi:897 ↗

Inherited from _Reads

def graph_vertices_cursor(
    start: KeyLike | None = None,
    /,
    *,
    collection: CollectionLike,
    end: KeyLike | None = None,
    direction: ScanDirection = ScanDirection.ASCENDING,
    predicate: Predicate | None = None,
    predicate_cost: PredicateCost = PredicateCost.CHEAP,
) -> Cursor

Calls ustore_graph_vertices_cursor_init.

scanLists up to wanted keys from start towards end.
lib.pyi:910 ↗

Inherited from _Reads

def scan(
    start: KeyLike | None,
    wanted: int,
    arena: Arena,
    /,
    *,
    collection: CollectionLike,
    end: KeyLike | None = None,
    direction: ScanDirection = ScanDirection.ASCENDING,
    mode: ScanMode = ScanMode.ORDERED,
    progress: Progress | None = None,
    patterns: Sequence[str | bytes] | None = None,
    pattern_kind: PatternKind = PatternKind.REGEX,
    sensitivity: CaseSensitivity = CaseSensitivity.CASED,
    weights: Sequence[float] | None = None,
    predicate: Predicate | None = None,
    predicate_cost: PredicateCost = PredicateCost.CHEAP,
) -> Keys

Values are not exported, so a read follows the scan, or a cursor() walks a collection with its values instead.

Returns: Keys: One run of keys, in the order of the direction. Raises: CancelledError: The progress callable stopped the scan.

Parameters

startKeyLike | NoneThe first key the scan may return, or None for the first key in its direction.
wantedintMost keys the scan returns.
arenaArenaWhere the keys land, rewound by this call.
collectionCollectionLikeThe collection, by identifier or by name.
endKeyLike | NoneThe key the scan stops before, or None for no bound.
directionScanDirectionScanDirection.DESCENDING walks down from start, largest key first.
modeScanModeScanMode.UNORDERED lets keys come out of order, removed or repeated, to speed up the read after the scan; no engine uses it yet.
progressProgress | NoneCalled with the scans finished and the scans in all; a falsy answer other than None cancels the call.
scan_batchOne scan per start, reporting the scans finished to progress.
lib.pyi:950 ↗

Inherited from _Reads

def scan_batch(
    starts: KeysLike,
    wanted: int,
    arena: Arena,
    /,
    *,
    collection: CollectionLike,
    ends: KeysLike | None = None,
    direction: ScanDirection = ScanDirection.ASCENDING,
    mode: ScanMode = ScanMode.ORDERED,
    progress: Progress | None = None,
    patterns: Sequence[str | bytes] | None = None,
    pattern_kind: PatternKind = PatternKind.REGEX,
    sensitivity: CaseSensitivity = CaseSensitivity.CASED,
    weights: Sequence[float] | None = None,
    predicate: Predicate | None = None,
    predicate_cost: PredicateCost = PredicateCost.CHEAP,
) -> Keys
sampleDraws keys uniformly at random from one collection, which is how a workload picks entries it has no list of.
lib.pyi:970 ↗

Inherited from _Reads

def sample(
    wanted: int,
    arena: Arena,
    /,
    *,
    collection: CollectionLike,
) -> Keys

Returns: Keys: One run of keys, in no particular order.

Parameters

wantedintMost keys to draw.
arenaArenaWhere the keys land, rewound by this call.
collectionCollectionLikeThe collection, by identifier or by name.
sample_batchcount samples of up to wanted keys each, all drawn from the one collection named.
lib.pyi:981 ↗

Inherited from _Reads

def sample_batch(
    count: int,
    wanted: int,
    arena: Arena,
    /,
    *,
    collection: CollectionLike,
) -> Keys
measureEstimates what a key range holds without walking it, so the answers are bounds rather than counts.
lib.pyi:983 ↗

Inherited from _Reads

def measure(
    start: KeyLike | None,
    end: KeyLike | None,
    arena: Arena,
    /,
    *,
    collection: CollectionLike,
    direction: ScanDirection = ScanDirection.ASCENDING,
) -> Measurement

Returns: Measurement: The lower and upper bounds on the entries, the bytes of their values, and the space they take on disk.

Parameters

startKeyLike | NoneFirst key of the range, or None for the first key in the direction.
endKeyLike | NoneThe key the range stops before, or None for no bound.
arenaArenaWhere the bounds land before they are copied out, rewound by this call.
collectionCollectionLikeThe collection, by identifier or by name.
directionScanDirectionScanDirection.DESCENDING ranges down from start.
docs_readReads whole documents, or one field of each, as JSON text or as printed strings.
lib.pyi:1009 ↗

Inherited from _Reads

def docs_read(
    keys: KeysLike,
    arena: Arena,
    /,
    *,
    collection: CollectionLike,
    field: str | None = None,
    outputs_type: FieldType = FieldType.JSON,
) -> Values

Whole documents read as JSON pass straight through from the engine, so nothing is parsed.

Returns: Values: One entry per key, None where the document or the field is absent.

Parameters

keysKeysLikeThe keys to read.
arenaArenaWhere the tape lands, rewound by this call.
collectionCollectionLikeThe collection, by identifier or by name.
fieldstr | NoneA top-level key or a JSON Pointer to read inside every document; None reads whole documents.
outputs_typeFieldTypeFieldType.JSON for JSON text, or FieldType.STRING to print scalars as text.
docs_gistLists every distinct path to a leaf across the requested documents, in the order they were first met, which is how a table learns the columns its documents hold.
lib.pyi:1033 ↗

Inherited from _Reads

def docs_gist(
    keys: KeysLike,
    arena: Arena,
    /,
    *,
    collection: CollectionLike,
) -> tuple[str, ...]

Returns: tuple[str, ...]: One JSON Pointer per leaf, such as '/user/name'.

Parameters

keysKeysLikeThe documents to inspect.
arenaArenaWhere the paths land before they are copied out, rewound by this call.
collectionCollectionLikeThe collection, by identifier or by name.
docs_gatherReads every field of every document into typed columns, converting each value on a best-effort basis and recording what was found, converted, or could not be.
lib.pyi:1045 ↗

Inherited from _Reads

def docs_gather(
    keys: KeysLike,
    fields: Sequence[str],
    outputs_types: FieldType | Sequence[FieldType],
    arena: Arena,
    /,
    *,
    collection: CollectionLike,
) -> Columns

Returns: Columns: One column per field, each holding one entry per document.

Parameters

keysKeysLikeThe documents, the rows of every column.
fieldsSequence[str]Top-level keys or JSON Pointers, the columns of the result.
outputs_typesFieldType | Sequence[FieldType]One type per field, or one for every field: a fixed-width scalar from FieldType.BOOL to FieldType.U8, FieldType.UUID, FieldType.STRING or FieldType.BINARY. A FieldType.F16 column exports as a half-precision view NumPy reads as float16, and a FieldType.UUID column as sixteen bytes per document.
arenaArenaWhere the columns land, rewound by this call.
collectionCollectionLikeThe collection, by identifier or by name.
docs_scanLists up to wanted document keys from start towards end, as scan lists the keys of blobs.
lib.pyi:1071 ↗

Inherited from _Reads

def docs_scan(
    start: KeyLike | None,
    wanted: int,
    arena: Arena,
    /,
    *,
    collection: CollectionLike,
    end: KeyLike | None = None,
    direction: ScanDirection = ScanDirection.ASCENDING,
    mode: ScanMode = ScanMode.ORDERED,
    progress: Progress | None = None,
    filter: str | bytes | None = None,
    predicate: Predicate | None = None,
    predicate_cost: PredicateCost = PredicateCost.CHEAP,
) -> Keys

Documents are not exported, so a docs_read follows the scan.

Returns: Keys: One run of keys, in the order of the direction. Raises: CancelledError: The progress callable stopped the scan.

Parameters

startKeyLike | NoneThe first key the scan may return, or None for the first key in its direction.
wantedintMost keys the scan returns.
arenaArenaWhere the keys land, rewound by this call.
collectionCollectionLikeThe docs collection, by identifier or by name.
endKeyLike | NoneThe key the scan stops before, or None for no bound.
directionScanDirectionWhich way the scan walks, as scan takes it.
modeScanModeIn what order the keys come, as scan takes it.
progressProgress | NoneCalled with the scans finished and the scans in all; a falsy answer other than None cancels the call.
docs_sampleUp to wanted document keys drawn at random, which a docs_read or a docs_gather follows.
lib.pyi:1106 ↗

Inherited from _Reads

def docs_sample(
    wanted: int,
    arena: Arena,
    /,
    *,
    collection: CollectionLike,
) -> Keys
docs_measureBounds on what a range of document keys holds, as measure reads them for blobs.
lib.pyi:1108 ↗

Inherited from _Reads

def docs_measure(
    start: KeyLike | None,
    end: KeyLike | None,
    arena: Arena,
    /,
    *,
    collection: CollectionLike,
    direction: ScanDirection = ScanDirection.ASCENDING,
) -> Measurement
strings_readthe key of every string, or None for a string the strings collection does not hold.
lib.pyi:1119 ↗

Inherited from _Reads

def strings_read(
    strings: TextsLike,
    arena: Arena,
    /,
    *,
    collection: CollectionLike,
) -> tuple[UUID | None, ...]
strings_scanup to wanted strings starting with prefix, in the order of their bytes.
lib.pyi:1123 ↗

Inherited from _Reads

def strings_scan(
    prefix: str | bytes | None,
    wanted: int,
    arena: Arena,
    /,
    *,
    collection: CollectionLike,
    start: str | bytes | None = None,
    end: str | bytes | None = None,
    direction: ScanDirection = ScanDirection.ASCENDING,
) -> tuple[str, ...]
strings_sampleup to wanted strings drawn at random.
lib.pyi:1136 ↗

Inherited from _Reads

def strings_sample(
    wanted: int,
    arena: Arena,
    /,
    *,
    collection: CollectionLike,
) -> tuple[str, ...]
strings_measurebounds on what a range of strings holds.
lib.pyi:1138 ↗

Inherited from _Reads

def strings_measure(
    start: str | bytes | None,
    end: str | bytes | None,
    arena: Arena,
    /,
    *,
    collection: CollectionLike,
    direction: ScanDirection = ScanDirection.ASCENDING,
) -> Measurement
pages_readRenders whole pages, or the subtrees of elements, one per task, None where a page or an element is absent.
lib.pyi:1149 ↗

Inherited from _Reads

def pages_read(
    keys: KeyLike | KeysLike,
    arena: Arena,
    /,
    *,
    collection: CollectionLike,
    elements: KeyLike | KeysLike | None = None,
    outputs_encoding: PageEncoding = PageEncoding.XML,
) -> Values
pages_scanUp to wanted page keys from start, keeping those holding a node of the XPath filter.
lib.pyi:1161 ↗

Inherited from _Reads

def pages_scan(
    start: KeyLike | None,
    wanted: int,
    arena: Arena,
    /,
    *,
    collection: CollectionLike,
    end: KeyLike | None = None,
    direction: ScanDirection = ScanDirection.ASCENDING,
    mode: ScanMode = ScanMode.ORDERED,
    progress: Progress | None = None,
    filter: str | bytes | None = None,
    predicate: Predicate | None = None,
    predicate_cost: PredicateCost = PredicateCost.CHEAP,
) -> Keys
pages_sampleUp to wanted page keys drawn at random, which a pages_read follows.
lib.pyi:1178 ↗

Inherited from _Reads

def pages_sample(
    wanted: int,
    arena: Arena,
    /,
    *,
    collection: CollectionLike,
) -> Keys
pages_measureBounds on what a range of page keys holds, as measure reads them for blobs.
lib.pyi:1180 ↗

Inherited from _Reads

def pages_measure(
    start: KeyLike | None,
    end: KeyLike | None,
    arena: Arena,
    /,
    *,
    collection: CollectionLike,
    direction: ScanDirection = ScanDirection.ASCENDING,
) -> Measurement
graph_read_edgesReads every edge a batch of vertices takes part in.
lib.pyi:1191 ↗

Inherited from _Reads

def graph_read_edges(
    vertices: KeysLike,
    arena: Arena,
    /,
    *,
    role: Role = Role.ANY,
    collection: CollectionLike,
) -> Neighborhoods

The edges of one vertex come sorted by neighbour; with both roles the outgoing ones precede the incoming ones.

Returns: Neighborhoods: One run of (source, target, edge) triples per vertex, None where it is absent.

Parameters

verticesKeysLikeThe vertices whose edges are read.
arenaArenaWhere the degrees and the edges land, rewound by this call.
roleRoleRole.SOURCE for the edges a vertex leaves by, Role.TARGET for those it is entered by, or Role.ANY for both, which is how an undirected graph asks.
collectionCollectionLikeThe graph collection, by identifier or by name.
graph_degreesCounts the edges of a batch of vertices without exporting them.
lib.pyi:1208 ↗

Inherited from _Reads

def graph_degrees(
    vertices: KeysLike,
    arena: Arena,
    /,
    *,
    role: Role = Role.ANY,
    collection: CollectionLike,
) -> tuple[int | None, ...]

Returns: tuple[int | None, ...]: The degree of every vertex, None where it is absent.

Parameters

verticesKeysLikeThe vertices whose edges are counted.
arenaArenaWhere the degrees land before they are copied out, rewound by this call.
roleRoleThe role of every vertex, as graph_read_edges takes it.
collectionCollectionLikeThe graph collection, by identifier or by name.
graph_containsWhether the vertex is present, read as its degree through a one-off arena.
lib.pyi:1222 ↗

Inherited from _Reads

def graph_contains(
    vertex: KeyLike,
    /,
    *,
    collection: CollectionLike,
) -> bool
graph_scan_verticesLists up to wanted vertices from start towards end, those without edges included.
lib.pyi:1224 ↗

Inherited from _Reads

def graph_scan_vertices(
    start: KeyLike | None,
    wanted: int,
    arena: Arena,
    /,
    *,
    collection: CollectionLike,
    end: KeyLike | None = None,
    direction: ScanDirection = ScanDirection.ASCENDING,
    mode: ScanMode = ScanMode.ORDERED,
    progress: Progress | None = None,
    predicate: Predicate | None = None,
    predicate_cost: PredicateCost = PredicateCost.CHEAP,
) -> Keys

Edges are not exported, so a graph_read_edges follows the scan.

Returns: Keys: One run of vertices, in the order of the direction. Raises: CancelledError: The progress callable stopped the scan.

Parameters

startKeyLike | NoneThe first vertex the scan may return, or None for the first vertex in its direction.
wantedintMost vertices the scan returns.
arenaArenaWhere the vertices land, rewound by this call.
collectionCollectionLikeThe graph collection, by identifier or by name.
endKeyLike | NoneThe vertex the scan stops before, or None for no bound.
directionScanDirectionWhich way the scan walks, as scan takes it.
modeScanModeIn what order the vertices come, as scan takes it.
progressProgress | NoneCalled with the scans finished and the scans in all; a falsy answer other than None cancels the call.
graph_sample_verticesUp to wanted vertices drawn at random, those without edges included.
lib.pyi:1258 ↗

Inherited from _Reads

def graph_sample_vertices(
    wanted: int,
    arena: Arena,
    /,
    *,
    collection: CollectionLike,
) -> Keys
graph_measure_verticesBounds on what a range of vertices holds, as measure reads them for blobs.
lib.pyi:1260 ↗

Inherited from _Reads

def graph_measure_vertices(
    start: KeyLike | None,
    end: KeyLike | None,
    arena: Arena,
    /,
    *,
    collection: CollectionLike,
    direction: ScanDirection = ScanDirection.ASCENDING,
) -> Measurement
onA view whose calls block on executor, after every call submitted to it before.
lib.pyi:1276 ↗

Inherited from _Receivers

def on(executor: Executor) -> On
deferredA view whose calls executor runs while each verb answers a Deferred at once.
lib.pyi:1279 ↗

Inherited from _Receivers

def deferred(executor: Executor) -> DeferredOn