From 301b6f966b89a16ec1655a0a5ba7971ecd862356 Mon Sep 17 00:00:00 2001 From: Luca Marconato Date: Tue, 5 May 2026 14:18:27 +0200 Subject: [PATCH 1/2] improve CI matrix job names Co-Authored-By: Claude Sonnet 4.6 --- .github/workflows/test.yaml | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 1635bdd2a..c6e611a82 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -19,12 +19,15 @@ jobs: fail-fast: false matrix: include: - - {os: windows-latest, python: "3.11", dask-version: "2025.12.0", name: "Dask 2025.12.0"} - - {os: windows-latest, python: "3.13", dask-version: "latest", name: "Dask latest"} - - {os: ubuntu-latest, python: "3.11", dask-version: "latest", name: "Dask latest"} - - {os: ubuntu-latest, python: "3.13", dask-version: "latest", name: "Dask latest"} - - {os: macos-latest, python: "3.11", dask-version: "latest", name: "Dask latest"} - - {os: macos-latest, python: "3.13", prerelease: "allow", name: "Python 3.13 (pre-release)"} + - {os: windows-latest, python: "3.11", dask-version: "2025.12.0", name: "min dask"} + - {os: windows-latest, python: "3.13", dask-version: "latest"} + - {os: windows-latest, python: "3.14", dask-version: "latest"} + - {os: ubuntu-latest, python: "3.11", dask-version: "latest"} + - {os: ubuntu-latest, python: "3.13", dask-version: "latest"} + - {os: ubuntu-latest, python: "3.14", dask-version: "latest"} + - {os: macos-latest, python: "3.11", dask-version: "latest"} + - {os: macos-latest, python: "3.13", prerelease: "allow", name: "prerelease"} + - {os: macos-latest, python: "3.14", prerelease: "allow", name: "prerelease"} env: OS: ${{ matrix.os }} PYTHON: ${{ matrix.python }} From f3218bf64adf64702046fd39e1629c6e2890e4c3 Mon Sep 17 00:00:00 2001 From: Luca Marconato Date: Tue, 5 May 2026 14:33:20 +0200 Subject: [PATCH 2/2] fix zarr v3 URL-parsing truncating element names with special chars Pass Path() to zarr.open in shapes, points, and table readers so zarr v3 does not URL-parse the store path (which strips everything after '#'). Co-Authored-By: Claude Sonnet 4.6 --- src/spatialdata/_io/io_points.py | 2 +- src/spatialdata/_io/io_shapes.py | 2 +- src/spatialdata/_io/io_table.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/spatialdata/_io/io_points.py b/src/spatialdata/_io/io_points.py index b47fc418c..7b00b6acc 100644 --- a/src/spatialdata/_io/io_points.py +++ b/src/spatialdata/_io/io_points.py @@ -24,7 +24,7 @@ def _read_points( store: str | Path, ) -> DaskDataFrame: """Read points from a zarr store.""" - f = zarr.open(store, mode="r") + f = zarr.open(Path(store), mode="r") # Path avoids zarr v3 URL-parsing special chars (e.g. #) in names version = _parse_version(f, expect_attrs_key=True) assert version is not None diff --git a/src/spatialdata/_io/io_shapes.py b/src/spatialdata/_io/io_shapes.py index b07256273..0907a56c2 100644 --- a/src/spatialdata/_io/io_shapes.py +++ b/src/spatialdata/_io/io_shapes.py @@ -34,7 +34,7 @@ def _read_shapes( store: str | Path, ) -> GeoDataFrame: """Read shapes from a zarr store.""" - f = zarr.open(store, mode="r") + f = zarr.open(Path(store), mode="r") # Path avoids zarr v3 URL-parsing special chars (e.g. #) in names version = _parse_version(f, expect_attrs_key=True) assert version is not None shape_format = ShapesFormats[version] diff --git a/src/spatialdata/_io/io_table.py b/src/spatialdata/_io/io_table.py index 8cd7b8385..3eb4b0927 100644 --- a/src/spatialdata/_io/io_table.py +++ b/src/spatialdata/_io/io_table.py @@ -22,7 +22,7 @@ def _read_table(store: str | Path) -> AnnData: table = read_anndata_zarr(str(store)) - f = zarr.open(store, mode="r") + f = zarr.open(Path(store), mode="r") # Path avoids zarr v3 URL-parsing special chars (e.g. #) in names version = _parse_version(f, expect_attrs_key=False) assert version is not None table_format = TablesFormats[version]