Skip to content

Commit a9d6d74

Browse files
authored
test(ci): Add CI for minimum supported dependency versions (zarr-developers#2423)
* test(ci): add test environment for upstream dependencies * try PIP_INDEX_URL again * test(ci): add test environment for oldest supported dependency versions * use a matrix again
1 parent 4a18c5a commit a9d6d74

File tree

3 files changed

+56
-16
lines changed

3 files changed

+56
-16
lines changed

.github/workflows/test.yml

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,19 @@ jobs:
4444
run: |
4545
hatch env run --env test.py${{ matrix.python-version }}-${{ matrix.numpy-version }}-${{ matrix.dependency-set }} run
4646
47-
upstream:
48-
name: py=${{ matrix.python-version }}-upstream
47+
test-upstream-and-min-deps:
48+
name: py=${{ matrix.python-version }}-${{ matrix.dependency-set }}
4949

5050
runs-on: ubuntu-latest
5151
strategy:
5252
matrix:
53-
python-version: ['3.13']
54-
53+
python-version: ['3.11', "3.13"]
54+
dependency-set: ["upstream", "min_deps"]
55+
exclude:
56+
- python-version: "3.13"
57+
dependency-set: min_deps
58+
- python-version: "3.11"
59+
dependency-set: upstream
5560
steps:
5661
- uses: actions/checkout@v4
5762
- name: Set up Python
@@ -65,8 +70,8 @@ jobs:
6570
pip install hatch
6671
- name: Set Up Hatch Env
6772
run: |
68-
hatch env create upstream
69-
hatch env run -e upstream list-env
73+
hatch env create ${{ matrix.dependency-set }}
74+
hatch env run -e ${{ matrix.dependency-set }} list-env
7075
- name: Run Tests
7176
run: |
72-
hatch env run --env upstream run
77+
hatch env run --env ${{ matrix.dependency-set }} run

pyproject.toml

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,13 @@ requires-python = ">=3.11"
2828
dependencies = [
2929
'asciitree',
3030
'numpy>=1.25',
31-
'numcodecs>=0.10.2',
32-
'fsspec>2024',
33-
'crc32c',
34-
'typing_extensions',
35-
'donfig',
31+
'numcodecs>=0.13',
32+
'fsspec>=2022.10.0',
33+
'crc32c>=2.3',
34+
'typing_extensions>=4.6',
35+
'donfig>=0.8',
3636
]
37+
3738
dynamic = [
3839
"version",
3940
]
@@ -98,7 +99,7 @@ extra = [
9899
]
99100
optional = [
100101
'lmdb',
101-
'universal-pathlib',
102+
'universal-pathlib>=0.0.22',
102103
]
103104

104105
[project.urls]
@@ -184,6 +185,7 @@ build = "cd docs && make html"
184185
serve = "sphinx-autobuild docs docs/_build --host 0.0.0.0"
185186

186187
[tool.hatch.envs.upstream]
188+
python = "3.13"
187189
dependencies = [
188190
'numpy', # from scientific-python-nightly-wheels
189191
'numcodecs @ git+https://github.com/zarr-developers/numcodecs',
@@ -212,6 +214,35 @@ run-mypy = "mypy src"
212214
run-hypothesis = "pytest --hypothesis-profile ci tests/test_properties.py tests/test_store/test_stateful*"
213215
list-env = "pip list"
214216

217+
[tool.hatch.envs.min_deps]
218+
description = """Test environment for minimum supported dependencies
219+
220+
See Spec 0000 for details and drop schedule: https://scientific-python.org/specs/spec-0000/
221+
"""
222+
python = "3.11"
223+
dependencies = [
224+
'numpy==1.25.*',
225+
'numcodecs==0.13.*', # 0.13 needed for? (should be 0.11)
226+
'fsspec==2022.10.0',
227+
's3fs==2022.10.0',
228+
'universal_pathlib==0.0.22',
229+
'crc32c==2.3.*',
230+
'typing_extensions==4.6.*', # 4.5 needed for @deprecated, 4.6 for Buffer
231+
'donfig==0.8.*',
232+
# test deps
233+
'hypothesis',
234+
'pytest',
235+
'pytest-cov',
236+
'pytest-asyncio',
237+
'moto[s3]',
238+
]
239+
240+
[tool.hatch.envs.min_deps.scripts]
241+
run = "pytest --verbose"
242+
run-hypothesis = "pytest --hypothesis-profile ci tests/test_properties.py tests/test_store/test_stateful*"
243+
list-env = "pip list"
244+
245+
215246
[tool.ruff]
216247
line-length = 100
217248
force-exclude = true

src/zarr/storage/remote.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
from typing import TYPE_CHECKING, Any, Self
44

5-
import fsspec
6-
75
from zarr.abc.store import ByteRangeRequest, Store
86
from zarr.storage.common import _dereference_path
97

@@ -130,7 +128,13 @@ def from_url(
130128
-------
131129
RemoteStore
132130
"""
133-
fs, path = fsspec.url_to_fs(url, **storage_options)
131+
try:
132+
from fsspec import url_to_fs
133+
except ImportError:
134+
# before fsspec==2024.3.1
135+
from fsspec.core import url_to_fs
136+
137+
fs, path = url_to_fs(url, **storage_options)
134138
return cls(fs=fs, path=path, mode=mode, allowed_exceptions=allowed_exceptions)
135139

136140
async def clear(self) -> None:

0 commit comments

Comments
 (0)