Coverage for zanj / externals.py: 95%
21 statements
« prev ^ index » next coverage.py v7.13.4, created at 2026-02-21 22:18 -0700
« prev ^ index » next coverage.py v7.13.4, created at 2026-02-21 22:18 -0700
1"""for storing/retrieving an item externally in a ZANJ archive"""
3from __future__ import annotations
5import json
6from typing import IO, Any, Callable, Literal, NamedTuple, get_args
8import numpy as np
9from muutils.json_serialize.json_serialize import ObjectPath
11from zanj.consts import JSONitem
13# this is to make type checking work -- it will later be overridden
14_ZANJ_pre = Any
16ZANJ_MAIN: str = "__zanj__.json"
17ZANJ_META: str = "__zanj_meta__.json"
19ExternalItemType = Literal["jsonl", "npy"]
21ExternalItemType_vals = get_args(ExternalItemType)
23ExternalItem = NamedTuple(
24 "ExternalItem",
25 [
26 ("item_type", ExternalItemType),
27 ("data", Any),
28 ("path", ObjectPath),
29 ],
30)
33def load_jsonl(zanj: "LoadedZANJ", fp: IO[bytes]) -> list[JSONitem]: # type: ignore[name-defined] # noqa: F821
34 return [json.loads(line) for line in fp]
37def load_npy(zanj: "LoadedZANJ", fp: IO[bytes]) -> np.ndarray: # type: ignore[name-defined] # noqa: F821
38 return np.load(fp)
41EXTERNAL_LOAD_FUNCS: dict[ExternalItemType, Callable[[_ZANJ_pre, IO[bytes]], Any]] = {
42 "jsonl": load_jsonl,
43 "npy": load_npy,
44}
47def GET_EXTERNAL_LOAD_FUNC(item_type: str) -> Callable[[_ZANJ_pre, IO[bytes]], Any]:
48 if item_type not in EXTERNAL_LOAD_FUNCS:
49 raise ValueError(
50 f"unknown external item type: {item_type}, needs to be one of {EXTERNAL_LOAD_FUNCS.keys()}"
51 )
52 # safe to ignore since we just checked
53 return EXTERNAL_LOAD_FUNCS[item_type] # type: ignore[index]