Source code for ewokscore.tests.test_persistence

import sys

import pytest
from silx.io.dictdump import nxtodict

from ..hashing import UniversalHashable
from ..hashing import uhash
from ..persistence import instantiate_data_proxy
from ..persistence.json import JsonProxy
from ..persistence.nexus import NexusProxy


[docs] def test_json_proxy_uri(tmp_path): hashable = UniversalHashable(uhash("somedata")) identifier = str(hashable.uhash) proxy = JsonProxy() assert proxy.uri is None proxy = JsonProxy(uhash_source=hashable) assert proxy.uri is None if sys.platform == "win32": prefix = "json:///" else: prefix = "json://" proxy = JsonProxy(uhash_source=hashable, root_uri=str(tmp_path)) assert str(proxy.uri) == f"{prefix}{tmp_path/identifier}.json" tmpfile = tmp_path / "file" proxy = JsonProxy(uhash_source=hashable, root_uri=f"{tmpfile}.json") assert str(proxy.uri) == f"{prefix}{tmpfile/identifier}.json" proxy = JsonProxy(uhash_source=hashable, root_uri=f"{tmpfile}.json?path=/a") assert str(proxy.uri) == f"{prefix}{tmpfile/'a'/identifier}.json" proxy = JsonProxy(uhash_source=hashable, root_uri=f"{tmpfile}.json?path=/a/b") assert str(proxy.uri) == f"{prefix}{tmpfile/'a'/'b'/identifier}.json" proxy = JsonProxy(uhash_source=hashable, root_uri=f"{tmpfile}.json?path=/a/b/c") assert str(proxy.uri) == f"{prefix}{tmpfile/'a'/'b'/'c'/identifier}.json" proxy2 = JsonProxy(proxy.uri) assert proxy.uri == proxy2.uri assert str(proxy2.uri) == f"{prefix}{tmpfile/'a'/'b'/'c'/identifier}.json"
[docs] def test_nexus_proxy_uri(tmp_path): hashable = UniversalHashable(uhash("somedata")) identifier = str(hashable.uhash) proxy = NexusProxy() assert proxy.uri is None proxy = NexusProxy(uhash_source=hashable) assert proxy.uri is None if sys.platform == "win32": prefix = "nexus:///" else: prefix = "nexus://" proxy = NexusProxy(uhash_source=hashable, root_uri=str(tmp_path)) assert str(proxy.uri) == f"{prefix}{tmp_path/identifier}.nx?path={identifier}" tmpfile = tmp_path / "file" proxy = NexusProxy(uhash_source=hashable, root_uri=f"{tmpfile}.nx") assert str(proxy.uri) == f"{prefix}{tmpfile}.nx?path={identifier}" proxy = NexusProxy(uhash_source=hashable, root_uri=f"{tmpfile}.h5?path=/a") assert str(proxy.uri) == f"{prefix}{tmpfile}.h5?path=a/{identifier}" proxy = NexusProxy(uhash_source=hashable, root_uri=f"{tmpfile}.nx?path=/a/b") assert str(proxy.uri) == f"{prefix}{tmpfile}.nx?path=a/b/{identifier}" proxy = NexusProxy(uhash_source=hashable, root_uri=f"{tmpfile}.nx?path=/a/b/c") assert str(proxy.uri) == f"{prefix}{tmpfile}.nx?path=a/b/c/{identifier}" proxy2 = JsonProxy(proxy.uri) assert proxy.uri == proxy2.uri assert str(proxy2.uri) == f"{prefix}{tmpfile}.nx?path=a/b/c/{identifier}"
[docs] @pytest.mark.parametrize("scheme", ("json", "nexus")) @pytest.mark.parametrize("full", (True, False)) def test_proxy_dump(scheme, full, tmp_path): if scheme == "nexus": extension = ".nx" else: extension = ".json" root_uri = tmp_path if full: root_uri /= f"dataset{extension}::/scan/task/output_variable_a" if sys.platform == "win32": root_uri = f"{scheme}:///{root_uri}" else: root_uri = f"{scheme}://{root_uri}" hashable = UniversalHashable(uhash("somedata")) proxy = instantiate_data_proxy( scheme=scheme, uhash_source=hashable, root_uri=root_uri ) data = [1, 2, 3] proxy.dump(data) proxy2 = instantiate_data_proxy( scheme=scheme, uhash_source=hashable, root_uri=root_uri ) data2 = proxy2.load() if scheme == "nexus": data2 = data2.tolist() adict = nxtodict(str(proxy2.path)) assert adict["@NX_class"] == "NXroot" if full: adict = adict["scan"] assert adict["@NX_class"] == "NXentry" adict = adict["task"] assert adict["@NX_class"] == "NXprocess" adict = adict["output_variable_a"] assert adict["@NX_class"] == "NXcollection" assert data == data2