Skip to content
Snippets Groups Projects
Commit 23408823 authored by Wout De Nolf's avatar Wout De Nolf
Browse files

Merge branch 'fix_data_url_win32' into 'main'

fix data url on windows

See merge request !60
parents 935df68e f15a2e7c
No related branches found
No related tags found
1 merge request!60fix data url on windows
Pipeline #115487 passed
import sys
import logging
from numbers import Integral, Number
from typing import Iterator, List, Optional, Tuple, Sequence, Union
......@@ -30,12 +31,15 @@ def get_data(
data: Union[str, ArrayLike, Number], **options
) -> Union[numpy.ndarray, Number]:
if isinstance(data, str):
data_url = url.DataUrl(data)
data_url = url.as_dataurl(data)
filename, h5path, idx = url.h5dataset_url_parse(data_url)
if filename.endswith(".h5") or filename.endswith(".nx"):
return _get_hdf5_data(filename, h5path, idx=idx, **options)
if not data_url.scheme():
data_url = f"fabio://{data}"
if sys.platform == "win32":
data_url = f"fabio:///{data}"
else:
data_url = f"fabio://{data}"
return silx_get_data(data_url)
elif isinstance(data, (Sequence, Number, numpy.ndarray)):
return data
......
......@@ -3,8 +3,9 @@ from contextlib import contextmanager
from typing import Union, Iterator, Optional, Tuple
import h5py
from silx.io.url import DataUrl
from silx.io import h5py_utils
from .url import DataUrl
from .url import as_dataurl
def ensure_nxclass(group: h5py.Group) -> None:
......@@ -30,13 +31,13 @@ def select_default_plot(nxdata: h5py.Group) -> None:
def create_url(url: str, **open_options) -> DataUrl:
url = DataUrl(url)
url = as_dataurl(url)
filename = url.file_path()
os.makedirs(os.path.dirname(filename), exist_ok=True)
open_options.setdefault("mode", "a")
with h5py_utils.open_item(filename, "/", **open_options) as parent:
h5item, _ = _create_h5group(parent, url.data_path())
return DataUrl(f"{filename}::{h5item.name}")
return as_dataurl(f"{filename}::{h5item.name}")
def get_nxentry(h5item: Union[h5py.Dataset, h5py.Group]):
......@@ -57,8 +58,7 @@ def create_nexus_group(
"""
:yields: (h5group, already_existed)
"""
if not isinstance(url, DataUrl):
url = DataUrl(url)
url = as_dataurl(url)
filename = url.file_path()
itemname = url.data_path()
if not itemname:
......
import sys
from typing import Tuple, Union
from silx.io.url import DataUrl
def h5dataset_url_parse(url: Union[str, DataUrl]) -> Tuple[str, str, Tuple]:
def as_dataurl(url: Union[str, DataUrl]) -> DataUrl:
if isinstance(url, str) and sys.platform == "win32":
url = url.replace("\\", "/")
if not isinstance(url, DataUrl):
url = DataUrl(url)
return url
def h5dataset_url_parse(url: Union[str, DataUrl]) -> Tuple[str, str, Tuple]:
url = as_dataurl(url)
filename = str(url.file_path())
h5path = url.data_path()
if h5path is None:
......
import sys
import numpy
import h5py
from fabio.edfimage import edfimage
......@@ -6,7 +5,6 @@ import pytest
from ..data import bliss
@pytest.mark.skipif(sys.platform == "win32", reason="silx DataUrl fails on windows")
def test_get_data_edf(tmpdir):
filename = str(tmpdir / "data.edf")
img1 = numpy.random.uniform(((10, 12)))
......
import sys
import pytest
from ..data import nexus
@pytest.mark.skipif(sys.platform == "win32", reason="silx DataUrl fails on windows")
def test_create_nexus_group(tmpdir):
with nexus.create_nexus_group(str(tmpdir / "file.h5")) as (h5item, already_existed):
assert not already_existed
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment