Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/windows-testing.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -16,7 +16,7 @@ jobs:
strategy:
fail-fast: True
matrix:
python-version: ['3.9', '3.10', '3.11']
python-version: ['3.10', '3.11']
steps:
- uses: actions/checkout@v4
with:
Expand Down
40 changes: 40 additions & 0 deletions docs/release.rst
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,12 +18,20 @@ Release notes
Unreleased
----------

.. _release_2.17.0:

2.17.0
------

Enhancements
~~~~~~~~~~~~

* Added type hints to ``zarr.creation.create()``.
By :user:`David Stansby <dstansby>` :issue:`1536`.

* Pyodide support: Don't require fasteners on Emscripten.
By :user:`Hood Chatham <hoodmane>` :issue:`1663`.

Docs
~~~~

Expand All@@ -45,9 +53,21 @@ Docs
* Minor tweak to advanced indexing tutorial examples.
By :user:`Ross Barnowski <rossbar>` :issue:`1550`.

* Automatically document array members using sphinx-automodapi.
By :user:`David Stansby <dstansby>` :issue:`1547`.

* Add a markdown file documenting the current and former core-developer team.
By :user:`Joe Hamman <jhamman>` :issue:`1628`.

* Add Norman Rzepka to core-dev team.
By :user:`Joe Hamman <jhamman>` :issue:`1630`.

* Added section about accessing zip files that are on s3.
By :user:`Jeff Peck <jeffpeck10x>` :issue:`1613`.

* Add V3 roadmap and design document.
By :user:`Joe Hamman <jhamman>` :issue:`1583`.

Maintenance
~~~~~~~~~~~

Expand DownExpand Up@@ -75,6 +95,26 @@ Maintenance
* Remove ``sphinx-rtd-theme`` dependency from ``pyproject.toml``.
By :user:`Sanket Verma <MSanKeys963>` :issue:`1563`.

* Remove ``CODE_OF_CONDUCT.md`` file from the Zarr-Python repository.
By :user:`Sanket Verma <MSanKeys963>` :issue:`1572`.

* Bump version of black in pre-commit.
By :user:`David Stansby <dtstansby>` :issue:`1559`.

* Use list comprehension where applicable.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1555`.

* Use format specification mini-language to format string.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1558`.

* Single startswith() call instead of multiple ones.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1556`.

* Move codespell options around.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1196`.

* Remove unused mypy ignore comments.
By :user:`David Stansby <dtstansby>` :issue:`1602`.

.. _release_2.16.1:

Expand Down
2 changes: 1 addition & 1 deletion requirements_dev_optional.txt
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,4 +20,4 @@ pytest-timeout==2.2.0
h5py==3.10.0
fsspec==2023.12.2
s3fs==2023.12.2
moto[server]>=4.0.8
moto[server]>=5.0.1
28 changes: 20 additions & 8 deletions zarr/tests/test_core.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -73,7 +73,15 @@
)
from zarr.tests.test_storage_v3 import DummyStorageTransfomer
from zarr.util import buffer_size
from zarr.tests.util import abs_container, skip_test_env_var, have_fsspec, mktemp
from zarr.tests.util import (
abs_container,
have_bsddb3,
have_fsspec,
have_lmdb,
have_sqlite3,
mktemp,
skip_test_env_var,
)
from zarr.types import DIMENSION_SEPARATOR

# noinspection PyMethodMayBeStatic
Expand DownExpand Up@@ -2038,9 +2046,11 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_bsddb3 is False, reason="needs bsddb3")
class TestArrayWithDBMStoreBerkeleyDB(TestArray):
def create_store(self):
bsddb3 = pytest.importorskip("bsddb3")
import bsddb3

path = mktemp(suffix=".dbm")
atexit.register(os.remove, path)
store = DBMStore(path, flag="n", open=bsddb3.btopen)
Expand All@@ -2050,9 +2060,9 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_lmdb is False, reason="needs lmdb")
class TestArrayWithLMDBStore(TestArray):
def create_store(self):
pytest.importorskip("lmdb")
path = mktemp(suffix=".lmdb")
atexit.register(atexit_rmtree, path)
store = LMDBStore(path, buffers=True)
Expand All@@ -2065,9 +2075,9 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_lmdb is False, reason="needs lmdb")
class TestArrayWithLMDBStoreNoBuffers(TestArray):
def create_store(self):
pytest.importorskip("lmdb")
path = mktemp(suffix=".lmdb")
atexit.register(atexit_rmtree, path)
store = LMDBStore(path, buffers=False)
Expand All@@ -2077,9 +2087,9 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_sqlite3 is False, reason="needs sqlite3")
class TestArrayWithSQLiteStore(TestArray):
def create_store(self):
pytest.importorskip("sqlite3")
path = mktemp(suffix=".db")
atexit.register(atexit_rmtree, path)
store = SQLiteStore(path)
Expand DownExpand Up@@ -2758,9 +2768,11 @@ def test_nbytes_stored(self):


@pytest.mark.skipif(not v3_api_available, reason="V3 is disabled")
@pytest.mark.skipif(have_bsddb3 is False, reason="needs bsddb3")
class TestArrayWithDBMStoreV3BerkeleyDB(TestArrayV3):
def create_store(self) -> DBMStoreV3:
bsddb3 = pytest.importorskip("bsddb3")
import bsddb3

path = mktemp(suffix=".dbm")
atexit.register(os.remove, path)
store = DBMStoreV3(path, flag="n", open=bsddb3.btopen)
Expand All@@ -2771,11 +2783,11 @@ def test_nbytes_stored(self):


@pytest.mark.skipif(not v3_api_available, reason="V3 is disabled")
@pytest.mark.skipif(have_lmdb is False, reason="needs lmdb")
class TestArrayWithLMDBStoreV3(TestArrayV3):
lmdb_buffers = True

def create_store(self) -> LMDBStoreV3:
pytest.importorskip("lmdb")
path = mktemp(suffix=".lmdb")
atexit.register(atexit_rmtree, path)
store = LMDBStoreV3(path, buffers=self.lmdb_buffers)
Expand All@@ -2797,9 +2809,9 @@ def test_nbytes_stored(self):


@pytest.mark.skipif(not v3_api_available, reason="V3 is disabled")
@pytest.mark.skipif(have_sqlite3 is False, reason="needs sqlite3")
class TestArrayWithSQLiteStoreV3(TestArrayV3):
def create_store(self):
pytest.importorskip("sqlite3")
path = mktemp(suffix=".db")
atexit.register(atexit_rmtree, path)
store = SQLiteStoreV3(path)
Expand Down
2 changes: 1 addition & 1 deletion zarr/tests/test_storage.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -1396,7 +1396,7 @@ def s3(request):
port = 5555
endpoint_uri = "http://127.0.0.1:%d/" % port
proc = subprocess.Popen(
shlex.split("moto_server s3 -p %d" % port),
shlex.split("moto_server -p %d" % port),
stderr=subprocess.DEVNULL,
stdout=subprocess.DEVNULL,
)
Expand Down
24 changes: 24 additions & 0 deletions zarr/tests/util.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -69,6 +69,30 @@ def skip_test_env_var(name):
have_fsspec = False


try:
import bsddb3 # noqa: F401

have_bsddb3 = True
except ImportError: # pragma: no cover
have_bsddb3 = False


try:
import lmdb # noqa: F401

have_lmdb = True
except ImportError: # pragma: no cover
have_lmdb = False


try:
import sqlite3 # noqa: F401

have_sqlite3 = True
except ImportError: # pragma: no cover
have_sqlite3 = False


def abs_container():
from azure.core.exceptions import ResourceExistsError
import azure.storage.blob as asb
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/windows-testing.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -16,7 +16,7 @@ jobs:
strategy:
fail-fast: True
matrix:
python-version: ['3.9', '3.10', '3.11']
python-version: ['3.10', '3.11']
steps:
- uses: actions/checkout@v4
with:
Expand Down
40 changes: 40 additions & 0 deletions docs/release.rst
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,12 +18,20 @@ Release notes
Unreleased
----------

.. _release_2.17.0:

2.17.0
------

Enhancements
~~~~~~~~~~~~

* Added type hints to ``zarr.creation.create()``.
By :user:`David Stansby <dstansby>` :issue:`1536`.

* Pyodide support: Don't require fasteners on Emscripten.
By :user:`Hood Chatham <hoodmane>` :issue:`1663`.

Docs
~~~~

Expand All@@ -45,9 +53,21 @@ Docs
* Minor tweak to advanced indexing tutorial examples.
By :user:`Ross Barnowski <rossbar>` :issue:`1550`.

* Automatically document array members using sphinx-automodapi.
By :user:`David Stansby <dstansby>` :issue:`1547`.

* Add a markdown file documenting the current and former core-developer team.
By :user:`Joe Hamman <jhamman>` :issue:`1628`.

* Add Norman Rzepka to core-dev team.
By :user:`Joe Hamman <jhamman>` :issue:`1630`.

* Added section about accessing zip files that are on s3.
By :user:`Jeff Peck <jeffpeck10x>` :issue:`1613`.

* Add V3 roadmap and design document.
By :user:`Joe Hamman <jhamman>` :issue:`1583`.

Maintenance
~~~~~~~~~~~

Expand DownExpand Up@@ -75,6 +95,26 @@ Maintenance
* Remove ``sphinx-rtd-theme`` dependency from ``pyproject.toml``.
By :user:`Sanket Verma <MSanKeys963>` :issue:`1563`.

* Remove ``CODE_OF_CONDUCT.md`` file from the Zarr-Python repository.
By :user:`Sanket Verma <MSanKeys963>` :issue:`1572`.

* Bump version of black in pre-commit.
By :user:`David Stansby <dtstansby>` :issue:`1559`.

* Use list comprehension where applicable.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1555`.

* Use format specification mini-language to format string.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1558`.

* Single startswith() call instead of multiple ones.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1556`.

* Move codespell options around.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1196`.

* Remove unused mypy ignore comments.
By :user:`David Stansby <dtstansby>` :issue:`1602`.

.. _release_2.16.1:

Expand Down
2 changes: 1 addition & 1 deletion requirements_dev_optional.txt
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,4 +20,4 @@ pytest-timeout==2.2.0
h5py==3.10.0
fsspec==2023.12.2
s3fs==2023.12.2
moto[server]>=4.0.8
moto[server]>=5.0.1
28 changes: 20 additions & 8 deletions zarr/tests/test_core.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -73,7 +73,15 @@
)
from zarr.tests.test_storage_v3 import DummyStorageTransfomer
from zarr.util import buffer_size
from zarr.tests.util import abs_container, skip_test_env_var, have_fsspec, mktemp
from zarr.tests.util import (
abs_container,
have_bsddb3,
have_fsspec,
have_lmdb,
have_sqlite3,
mktemp,
skip_test_env_var,
)
from zarr.types import DIMENSION_SEPARATOR

# noinspection PyMethodMayBeStatic
Expand DownExpand Up@@ -2038,9 +2046,11 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_bsddb3 is False, reason="needs bsddb3")
class TestArrayWithDBMStoreBerkeleyDB(TestArray):
def create_store(self):
bsddb3 = pytest.importorskip("bsddb3")
import bsddb3

path = mktemp(suffix=".dbm")
atexit.register(os.remove, path)
store = DBMStore(path, flag="n", open=bsddb3.btopen)
Expand All@@ -2050,9 +2060,9 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_lmdb is False, reason="needs lmdb")
class TestArrayWithLMDBStore(TestArray):
def create_store(self):
pytest.importorskip("lmdb")
path = mktemp(suffix=".lmdb")
atexit.register(atexit_rmtree, path)
store = LMDBStore(path, buffers=True)
Expand All@@ -2065,9 +2075,9 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_lmdb is False, reason="needs lmdb")
class TestArrayWithLMDBStoreNoBuffers(TestArray):
def create_store(self):
pytest.importorskip("lmdb")
path = mktemp(suffix=".lmdb")
atexit.register(atexit_rmtree, path)
store = LMDBStore(path, buffers=False)
Expand All@@ -2077,9 +2087,9 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_sqlite3 is False, reason="needs sqlite3")
class TestArrayWithSQLiteStore(TestArray):
def create_store(self):
pytest.importorskip("sqlite3")
path = mktemp(suffix=".db")
atexit.register(atexit_rmtree, path)
store = SQLiteStore(path)
Expand DownExpand Up@@ -2758,9 +2768,11 @@ def test_nbytes_stored(self):


@pytest.mark.skipif(not v3_api_available, reason="V3 is disabled")
@pytest.mark.skipif(have_bsddb3 is False, reason="needs bsddb3")
class TestArrayWithDBMStoreV3BerkeleyDB(TestArrayV3):
def create_store(self) -> DBMStoreV3:
bsddb3 = pytest.importorskip("bsddb3")
import bsddb3

path = mktemp(suffix=".dbm")
atexit.register(os.remove, path)
store = DBMStoreV3(path, flag="n", open=bsddb3.btopen)
Expand All@@ -2771,11 +2783,11 @@ def test_nbytes_stored(self):


@pytest.mark.skipif(not v3_api_available, reason="V3 is disabled")
@pytest.mark.skipif(have_lmdb is False, reason="needs lmdb")
class TestArrayWithLMDBStoreV3(TestArrayV3):
lmdb_buffers = True

def create_store(self) -> LMDBStoreV3:
pytest.importorskip("lmdb")
path = mktemp(suffix=".lmdb")
atexit.register(atexit_rmtree, path)
store = LMDBStoreV3(path, buffers=self.lmdb_buffers)
Expand All@@ -2797,9 +2809,9 @@ def test_nbytes_stored(self):


@pytest.mark.skipif(not v3_api_available, reason="V3 is disabled")
@pytest.mark.skipif(have_sqlite3 is False, reason="needs sqlite3")
class TestArrayWithSQLiteStoreV3(TestArrayV3):
def create_store(self):
pytest.importorskip("sqlite3")
path = mktemp(suffix=".db")
atexit.register(atexit_rmtree, path)
store = SQLiteStoreV3(path)
Expand Down
2 changes: 1 addition & 1 deletion zarr/tests/test_storage.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -1396,7 +1396,7 @@ def s3(request):
port = 5555
endpoint_uri = "http://127.0.0.1:%d/" % port
proc = subprocess.Popen(
shlex.split("moto_server s3 -p %d" % port),
shlex.split("moto_server -p %d" % port),
stderr=subprocess.DEVNULL,
stdout=subprocess.DEVNULL,
)
Expand Down
24 changes: 24 additions & 0 deletions zarr/tests/util.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -69,6 +69,30 @@ def skip_test_env_var(name):
have_fsspec = False


try:
import bsddb3 # noqa: F401

have_bsddb3 = True
except ImportError: # pragma: no cover
have_bsddb3 = False


try:
import lmdb # noqa: F401

have_lmdb = True
except ImportError: # pragma: no cover
have_lmdb = False


try:
import sqlite3 # noqa: F401

have_sqlite3 = True
except ImportError: # pragma: no cover
have_sqlite3 = False


def abs_container():
from azure.core.exceptions import ResourceExistsError
import azure.storage.blob as asb
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/windows-testing.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -16,7 +16,7 @@ jobs:
strategy:
fail-fast: True
matrix:
python-version: ['3.9', '3.10', '3.11']
python-version: ['3.10', '3.11']
steps:
- uses: actions/checkout@v4
with:
Expand Down
40 changes: 40 additions & 0 deletions docs/release.rst
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,12 +18,20 @@ Release notes
Unreleased
----------

.. _release_2.17.0:

2.17.0
------

Enhancements
~~~~~~~~~~~~

* Added type hints to ``zarr.creation.create()``.
By :user:`David Stansby <dstansby>` :issue:`1536`.

* Pyodide support: Don't require fasteners on Emscripten.
By :user:`Hood Chatham <hoodmane>` :issue:`1663`.

Docs
~~~~

Expand All@@ -45,9 +53,21 @@ Docs
* Minor tweak to advanced indexing tutorial examples.
By :user:`Ross Barnowski <rossbar>` :issue:`1550`.

* Automatically document array members using sphinx-automodapi.
By :user:`David Stansby <dstansby>` :issue:`1547`.

* Add a markdown file documenting the current and former core-developer team.
By :user:`Joe Hamman <jhamman>` :issue:`1628`.

* Add Norman Rzepka to core-dev team.
By :user:`Joe Hamman <jhamman>` :issue:`1630`.

* Added section about accessing zip files that are on s3.
By :user:`Jeff Peck <jeffpeck10x>` :issue:`1613`.

* Add V3 roadmap and design document.
By :user:`Joe Hamman <jhamman>` :issue:`1583`.

Maintenance
~~~~~~~~~~~

Expand DownExpand Up@@ -75,6 +95,26 @@ Maintenance
* Remove ``sphinx-rtd-theme`` dependency from ``pyproject.toml``.
By :user:`Sanket Verma <MSanKeys963>` :issue:`1563`.

* Remove ``CODE_OF_CONDUCT.md`` file from the Zarr-Python repository.
By :user:`Sanket Verma <MSanKeys963>` :issue:`1572`.

* Bump version of black in pre-commit.
By :user:`David Stansby <dtstansby>` :issue:`1559`.

* Use list comprehension where applicable.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1555`.

* Use format specification mini-language to format string.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1558`.

* Single startswith() call instead of multiple ones.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1556`.

* Move codespell options around.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1196`.

* Remove unused mypy ignore comments.
By :user:`David Stansby <dtstansby>` :issue:`1602`.

.. _release_2.16.1:

Expand Down
2 changes: 1 addition & 1 deletion requirements_dev_optional.txt
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,4 +20,4 @@ pytest-timeout==2.2.0
h5py==3.10.0
fsspec==2023.12.2
s3fs==2023.12.2
moto[server]>=4.0.8
moto[server]>=5.0.1
28 changes: 20 additions & 8 deletions zarr/tests/test_core.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -73,7 +73,15 @@
)
from zarr.tests.test_storage_v3 import DummyStorageTransfomer
from zarr.util import buffer_size
from zarr.tests.util import abs_container, skip_test_env_var, have_fsspec, mktemp
from zarr.tests.util import (
abs_container,
have_bsddb3,
have_fsspec,
have_lmdb,
have_sqlite3,
mktemp,
skip_test_env_var,
)
from zarr.types import DIMENSION_SEPARATOR

# noinspection PyMethodMayBeStatic
Expand DownExpand Up@@ -2038,9 +2046,11 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_bsddb3 is False, reason="needs bsddb3")
class TestArrayWithDBMStoreBerkeleyDB(TestArray):
def create_store(self):
bsddb3 = pytest.importorskip("bsddb3")
import bsddb3

path = mktemp(suffix=".dbm")
atexit.register(os.remove, path)
store = DBMStore(path, flag="n", open=bsddb3.btopen)
Expand All@@ -2050,9 +2060,9 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_lmdb is False, reason="needs lmdb")
class TestArrayWithLMDBStore(TestArray):
def create_store(self):
pytest.importorskip("lmdb")
path = mktemp(suffix=".lmdb")
atexit.register(atexit_rmtree, path)
store = LMDBStore(path, buffers=True)
Expand All@@ -2065,9 +2075,9 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_lmdb is False, reason="needs lmdb")
class TestArrayWithLMDBStoreNoBuffers(TestArray):
def create_store(self):
pytest.importorskip("lmdb")
path = mktemp(suffix=".lmdb")
atexit.register(atexit_rmtree, path)
store = LMDBStore(path, buffers=False)
Expand All@@ -2077,9 +2087,9 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_sqlite3 is False, reason="needs sqlite3")
class TestArrayWithSQLiteStore(TestArray):
def create_store(self):
pytest.importorskip("sqlite3")
path = mktemp(suffix=".db")
atexit.register(atexit_rmtree, path)
store = SQLiteStore(path)
Expand DownExpand Up@@ -2758,9 +2768,11 @@ def test_nbytes_stored(self):


@pytest.mark.skipif(not v3_api_available, reason="V3 is disabled")
@pytest.mark.skipif(have_bsddb3 is False, reason="needs bsddb3")
class TestArrayWithDBMStoreV3BerkeleyDB(TestArrayV3):
def create_store(self) -> DBMStoreV3:
bsddb3 = pytest.importorskip("bsddb3")
import bsddb3

path = mktemp(suffix=".dbm")
atexit.register(os.remove, path)
store = DBMStoreV3(path, flag="n", open=bsddb3.btopen)
Expand All@@ -2771,11 +2783,11 @@ def test_nbytes_stored(self):


@pytest.mark.skipif(not v3_api_available, reason="V3 is disabled")
@pytest.mark.skipif(have_lmdb is False, reason="needs lmdb")
class TestArrayWithLMDBStoreV3(TestArrayV3):
lmdb_buffers = True

def create_store(self) -> LMDBStoreV3:
pytest.importorskip("lmdb")
path = mktemp(suffix=".lmdb")
atexit.register(atexit_rmtree, path)
store = LMDBStoreV3(path, buffers=self.lmdb_buffers)
Expand All@@ -2797,9 +2809,9 @@ def test_nbytes_stored(self):


@pytest.mark.skipif(not v3_api_available, reason="V3 is disabled")
@pytest.mark.skipif(have_sqlite3 is False, reason="needs sqlite3")
class TestArrayWithSQLiteStoreV3(TestArrayV3):
def create_store(self):
pytest.importorskip("sqlite3")
path = mktemp(suffix=".db")
atexit.register(atexit_rmtree, path)
store = SQLiteStoreV3(path)
Expand Down
2 changes: 1 addition & 1 deletion zarr/tests/test_storage.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -1396,7 +1396,7 @@ def s3(request):
port = 5555
endpoint_uri = "http://127.0.0.1:%d/" % port
proc = subprocess.Popen(
shlex.split("moto_server s3 -p %d" % port),
shlex.split("moto_server -p %d" % port),
stderr=subprocess.DEVNULL,
stdout=subprocess.DEVNULL,
)
Expand Down
24 changes: 24 additions & 0 deletions zarr/tests/util.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -69,6 +69,30 @@ def skip_test_env_var(name):
have_fsspec = False


try:
import bsddb3 # noqa: F401

have_bsddb3 = True
except ImportError: # pragma: no cover
have_bsddb3 = False


try:
import lmdb # noqa: F401

have_lmdb = True
except ImportError: # pragma: no cover
have_lmdb = False


try:
import sqlite3 # noqa: F401

have_sqlite3 = True
except ImportError: # pragma: no cover
have_sqlite3 = False


def abs_container():
from azure.core.exceptions import ResourceExistsError
import azure.storage.blob as asb
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/windows-testing.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -16,7 +16,7 @@ jobs:
strategy:
fail-fast: True
matrix:
python-version: ['3.9', '3.10', '3.11']
python-version: ['3.10', '3.11']
steps:
- uses: actions/checkout@v4
with:
Expand Down
40 changes: 40 additions & 0 deletions docs/release.rst
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,12 +18,20 @@ Release notes
Unreleased
----------

.. _release_2.17.0:

2.17.0
------

Enhancements
~~~~~~~~~~~~

* Added type hints to ``zarr.creation.create()``.
By :user:`David Stansby <dstansby>` :issue:`1536`.

* Pyodide support: Don't require fasteners on Emscripten.
By :user:`Hood Chatham <hoodmane>` :issue:`1663`.

Docs
~~~~

Expand All@@ -45,9 +53,21 @@ Docs
* Minor tweak to advanced indexing tutorial examples.
By :user:`Ross Barnowski <rossbar>` :issue:`1550`.

* Automatically document array members using sphinx-automodapi.
By :user:`David Stansby <dstansby>` :issue:`1547`.

* Add a markdown file documenting the current and former core-developer team.
By :user:`Joe Hamman <jhamman>` :issue:`1628`.

* Add Norman Rzepka to core-dev team.
By :user:`Joe Hamman <jhamman>` :issue:`1630`.

* Added section about accessing zip files that are on s3.
By :user:`Jeff Peck <jeffpeck10x>` :issue:`1613`.

* Add V3 roadmap and design document.
By :user:`Joe Hamman <jhamman>` :issue:`1583`.

Maintenance
~~~~~~~~~~~

Expand DownExpand Up@@ -75,6 +95,26 @@ Maintenance
* Remove ``sphinx-rtd-theme`` dependency from ``pyproject.toml``.
By :user:`Sanket Verma <MSanKeys963>` :issue:`1563`.

* Remove ``CODE_OF_CONDUCT.md`` file from the Zarr-Python repository.
By :user:`Sanket Verma <MSanKeys963>` :issue:`1572`.

* Bump version of black in pre-commit.
By :user:`David Stansby <dtstansby>` :issue:`1559`.

* Use list comprehension where applicable.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1555`.

* Use format specification mini-language to format string.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1558`.

* Single startswith() call instead of multiple ones.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1556`.

* Move codespell options around.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1196`.

* Remove unused mypy ignore comments.
By :user:`David Stansby <dtstansby>` :issue:`1602`.

.. _release_2.16.1:

Expand Down
2 changes: 1 addition & 1 deletion requirements_dev_optional.txt
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,4 +20,4 @@ pytest-timeout==2.2.0
h5py==3.10.0
fsspec==2023.12.2
s3fs==2023.12.2
moto[server]>=4.0.8
moto[server]>=5.0.1
28 changes: 20 additions & 8 deletions zarr/tests/test_core.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -73,7 +73,15 @@
)
from zarr.tests.test_storage_v3 import DummyStorageTransfomer
from zarr.util import buffer_size
from zarr.tests.util import abs_container, skip_test_env_var, have_fsspec, mktemp
from zarr.tests.util import (
abs_container,
have_bsddb3,
have_fsspec,
have_lmdb,
have_sqlite3,
mktemp,
skip_test_env_var,
)
from zarr.types import DIMENSION_SEPARATOR

# noinspection PyMethodMayBeStatic
Expand DownExpand Up@@ -2038,9 +2046,11 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_bsddb3 is False, reason="needs bsddb3")
class TestArrayWithDBMStoreBerkeleyDB(TestArray):
def create_store(self):
bsddb3 = pytest.importorskip("bsddb3")
import bsddb3

path = mktemp(suffix=".dbm")
atexit.register(os.remove, path)
store = DBMStore(path, flag="n", open=bsddb3.btopen)
Expand All@@ -2050,9 +2060,9 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_lmdb is False, reason="needs lmdb")
class TestArrayWithLMDBStore(TestArray):
def create_store(self):
pytest.importorskip("lmdb")
path = mktemp(suffix=".lmdb")
atexit.register(atexit_rmtree, path)
store = LMDBStore(path, buffers=True)
Expand All@@ -2065,9 +2075,9 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_lmdb is False, reason="needs lmdb")
class TestArrayWithLMDBStoreNoBuffers(TestArray):
def create_store(self):
pytest.importorskip("lmdb")
path = mktemp(suffix=".lmdb")
atexit.register(atexit_rmtree, path)
store = LMDBStore(path, buffers=False)
Expand All@@ -2077,9 +2087,9 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_sqlite3 is False, reason="needs sqlite3")
class TestArrayWithSQLiteStore(TestArray):
def create_store(self):
pytest.importorskip("sqlite3")
path = mktemp(suffix=".db")
atexit.register(atexit_rmtree, path)
store = SQLiteStore(path)
Expand DownExpand Up@@ -2758,9 +2768,11 @@ def test_nbytes_stored(self):


@pytest.mark.skipif(not v3_api_available, reason="V3 is disabled")
@pytest.mark.skipif(have_bsddb3 is False, reason="needs bsddb3")
class TestArrayWithDBMStoreV3BerkeleyDB(TestArrayV3):
def create_store(self) -> DBMStoreV3:
bsddb3 = pytest.importorskip("bsddb3")
import bsddb3

path = mktemp(suffix=".dbm")
atexit.register(os.remove, path)
store = DBMStoreV3(path, flag="n", open=bsddb3.btopen)
Expand All@@ -2771,11 +2783,11 @@ def test_nbytes_stored(self):


@pytest.mark.skipif(not v3_api_available, reason="V3 is disabled")
@pytest.mark.skipif(have_lmdb is False, reason="needs lmdb")
class TestArrayWithLMDBStoreV3(TestArrayV3):
lmdb_buffers = True

def create_store(self) -> LMDBStoreV3:
pytest.importorskip("lmdb")
path = mktemp(suffix=".lmdb")
atexit.register(atexit_rmtree, path)
store = LMDBStoreV3(path, buffers=self.lmdb_buffers)
Expand All@@ -2797,9 +2809,9 @@ def test_nbytes_stored(self):


@pytest.mark.skipif(not v3_api_available, reason="V3 is disabled")
@pytest.mark.skipif(have_sqlite3 is False, reason="needs sqlite3")
class TestArrayWithSQLiteStoreV3(TestArrayV3):
def create_store(self):
pytest.importorskip("sqlite3")
path = mktemp(suffix=".db")
atexit.register(atexit_rmtree, path)
store = SQLiteStoreV3(path)
Expand Down
2 changes: 1 addition & 1 deletion zarr/tests/test_storage.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -1396,7 +1396,7 @@ def s3(request):
port = 5555
endpoint_uri = "http://127.0.0.1:%d/" % port
proc = subprocess.Popen(
shlex.split("moto_server s3 -p %d" % port),
shlex.split("moto_server -p %d" % port),
stderr=subprocess.DEVNULL,
stdout=subprocess.DEVNULL,
)
Expand Down
24 changes: 24 additions & 0 deletions zarr/tests/util.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -69,6 +69,30 @@ def skip_test_env_var(name):
have_fsspec = False


try:
import bsddb3 # noqa: F401

have_bsddb3 = True
except ImportError: # pragma: no cover
have_bsddb3 = False


try:
import lmdb # noqa: F401

have_lmdb = True
except ImportError: # pragma: no cover
have_lmdb = False


try:
import sqlite3 # noqa: F401

have_sqlite3 = True
except ImportError: # pragma: no cover
have_sqlite3 = False


def abs_container():
from azure.core.exceptions import ResourceExistsError
import azure.storage.blob as asb
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/windows-testing.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -16,7 +16,7 @@ jobs:
strategy:
fail-fast: True
matrix:
python-version: ['3.9', '3.10', '3.11']
python-version: ['3.10', '3.11']
steps:
- uses: actions/checkout@v4
with:
Expand Down
40 changes: 40 additions & 0 deletions docs/release.rst
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,12 +18,20 @@ Release notes
Unreleased
----------

.. _release_2.17.0:

2.17.0
------

Enhancements
~~~~~~~~~~~~

* Added type hints to ``zarr.creation.create()``.
By :user:`David Stansby <dstansby>` :issue:`1536`.

* Pyodide support: Don't require fasteners on Emscripten.
By :user:`Hood Chatham <hoodmane>` :issue:`1663`.

Docs
~~~~

Expand All@@ -45,9 +53,21 @@ Docs
* Minor tweak to advanced indexing tutorial examples.
By :user:`Ross Barnowski <rossbar>` :issue:`1550`.

* Automatically document array members using sphinx-automodapi.
By :user:`David Stansby <dstansby>` :issue:`1547`.

* Add a markdown file documenting the current and former core-developer team.
By :user:`Joe Hamman <jhamman>` :issue:`1628`.

* Add Norman Rzepka to core-dev team.
By :user:`Joe Hamman <jhamman>` :issue:`1630`.

* Added section about accessing zip files that are on s3.
By :user:`Jeff Peck <jeffpeck10x>` :issue:`1613`.

* Add V3 roadmap and design document.
By :user:`Joe Hamman <jhamman>` :issue:`1583`.

Maintenance
~~~~~~~~~~~

Expand DownExpand Up@@ -75,6 +95,26 @@ Maintenance
* Remove ``sphinx-rtd-theme`` dependency from ``pyproject.toml``.
By :user:`Sanket Verma <MSanKeys963>` :issue:`1563`.

* Remove ``CODE_OF_CONDUCT.md`` file from the Zarr-Python repository.
By :user:`Sanket Verma <MSanKeys963>` :issue:`1572`.

* Bump version of black in pre-commit.
By :user:`David Stansby <dtstansby>` :issue:`1559`.

* Use list comprehension where applicable.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1555`.

* Use format specification mini-language to format string.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1558`.

* Single startswith() call instead of multiple ones.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1556`.

* Move codespell options around.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1196`.

* Remove unused mypy ignore comments.
By :user:`David Stansby <dtstansby>` :issue:`1602`.

.. _release_2.16.1:

Expand Down
2 changes: 1 addition & 1 deletion requirements_dev_optional.txt
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,4 +20,4 @@ pytest-timeout==2.2.0
h5py==3.10.0
fsspec==2023.12.2
s3fs==2023.12.2
moto[server]>=4.0.8
moto[server]>=5.0.1
28 changes: 20 additions & 8 deletions zarr/tests/test_core.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -73,7 +73,15 @@
)
from zarr.tests.test_storage_v3 import DummyStorageTransfomer
from zarr.util import buffer_size
from zarr.tests.util import abs_container, skip_test_env_var, have_fsspec, mktemp
from zarr.tests.util import (
abs_container,
have_bsddb3,
have_fsspec,
have_lmdb,
have_sqlite3,
mktemp,
skip_test_env_var,
)
from zarr.types import DIMENSION_SEPARATOR

# noinspection PyMethodMayBeStatic
Expand DownExpand Up@@ -2038,9 +2046,11 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_bsddb3 is False, reason="needs bsddb3")
class TestArrayWithDBMStoreBerkeleyDB(TestArray):
def create_store(self):
bsddb3 = pytest.importorskip("bsddb3")
import bsddb3

path = mktemp(suffix=".dbm")
atexit.register(os.remove, path)
store = DBMStore(path, flag="n", open=bsddb3.btopen)
Expand All@@ -2050,9 +2060,9 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_lmdb is False, reason="needs lmdb")
class TestArrayWithLMDBStore(TestArray):
def create_store(self):
pytest.importorskip("lmdb")
path = mktemp(suffix=".lmdb")
atexit.register(atexit_rmtree, path)
store = LMDBStore(path, buffers=True)
Expand All@@ -2065,9 +2075,9 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_lmdb is False, reason="needs lmdb")
class TestArrayWithLMDBStoreNoBuffers(TestArray):
def create_store(self):
pytest.importorskip("lmdb")
path = mktemp(suffix=".lmdb")
atexit.register(atexit_rmtree, path)
store = LMDBStore(path, buffers=False)
Expand All@@ -2077,9 +2087,9 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_sqlite3 is False, reason="needs sqlite3")
class TestArrayWithSQLiteStore(TestArray):
def create_store(self):
pytest.importorskip("sqlite3")
path = mktemp(suffix=".db")
atexit.register(atexit_rmtree, path)
store = SQLiteStore(path)
Expand DownExpand Up@@ -2758,9 +2768,11 @@ def test_nbytes_stored(self):


@pytest.mark.skipif(not v3_api_available, reason="V3 is disabled")
@pytest.mark.skipif(have_bsddb3 is False, reason="needs bsddb3")
class TestArrayWithDBMStoreV3BerkeleyDB(TestArrayV3):
def create_store(self) -> DBMStoreV3:
bsddb3 = pytest.importorskip("bsddb3")
import bsddb3

path = mktemp(suffix=".dbm")
atexit.register(os.remove, path)
store = DBMStoreV3(path, flag="n", open=bsddb3.btopen)
Expand All@@ -2771,11 +2783,11 @@ def test_nbytes_stored(self):


@pytest.mark.skipif(not v3_api_available, reason="V3 is disabled")
@pytest.mark.skipif(have_lmdb is False, reason="needs lmdb")
class TestArrayWithLMDBStoreV3(TestArrayV3):
lmdb_buffers = True

def create_store(self) -> LMDBStoreV3:
pytest.importorskip("lmdb")
path = mktemp(suffix=".lmdb")
atexit.register(atexit_rmtree, path)
store = LMDBStoreV3(path, buffers=self.lmdb_buffers)
Expand All@@ -2797,9 +2809,9 @@ def test_nbytes_stored(self):


@pytest.mark.skipif(not v3_api_available, reason="V3 is disabled")
@pytest.mark.skipif(have_sqlite3 is False, reason="needs sqlite3")
class TestArrayWithSQLiteStoreV3(TestArrayV3):
def create_store(self):
pytest.importorskip("sqlite3")
path = mktemp(suffix=".db")
atexit.register(atexit_rmtree, path)
store = SQLiteStoreV3(path)
Expand Down
2 changes: 1 addition & 1 deletion zarr/tests/test_storage.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -1396,7 +1396,7 @@ def s3(request):
port = 5555
endpoint_uri = "http://127.0.0.1:%d/" % port
proc = subprocess.Popen(
shlex.split("moto_server s3 -p %d" % port),
shlex.split("moto_server -p %d" % port),
stderr=subprocess.DEVNULL,
stdout=subprocess.DEVNULL,
)
Expand Down
24 changes: 24 additions & 0 deletions zarr/tests/util.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -69,6 +69,30 @@ def skip_test_env_var(name):
have_fsspec = False


try:
import bsddb3 # noqa: F401

have_bsddb3 = True
except ImportError: # pragma: no cover
have_bsddb3 = False


try:
import lmdb # noqa: F401

have_lmdb = True
except ImportError: # pragma: no cover
have_lmdb = False


try:
import sqlite3 # noqa: F401

have_sqlite3 = True
except ImportError: # pragma: no cover
have_sqlite3 = False


def abs_container():
from azure.core.exceptions import ResourceExistsError
import azure.storage.blob as asb
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/windows-testing.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -16,7 +16,7 @@ jobs:
strategy:
fail-fast: True
matrix:
python-version: ['3.9', '3.10', '3.11']
python-version: ['3.10', '3.11']
steps:
- uses: actions/checkout@v4
with:
Expand Down
40 changes: 40 additions & 0 deletions docs/release.rst
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,12 +18,20 @@ Release notes
Unreleased
----------

.. _release_2.17.0:

2.17.0
------

Enhancements
~~~~~~~~~~~~

* Added type hints to ``zarr.creation.create()``.
By :user:`David Stansby <dstansby>` :issue:`1536`.

* Pyodide support: Don't require fasteners on Emscripten.
By :user:`Hood Chatham <hoodmane>` :issue:`1663`.

Docs
~~~~

Expand All@@ -45,9 +53,21 @@ Docs
* Minor tweak to advanced indexing tutorial examples.
By :user:`Ross Barnowski <rossbar>` :issue:`1550`.

* Automatically document array members using sphinx-automodapi.
By :user:`David Stansby <dstansby>` :issue:`1547`.

* Add a markdown file documenting the current and former core-developer team.
By :user:`Joe Hamman <jhamman>` :issue:`1628`.

* Add Norman Rzepka to core-dev team.
By :user:`Joe Hamman <jhamman>` :issue:`1630`.

* Added section about accessing zip files that are on s3.
By :user:`Jeff Peck <jeffpeck10x>` :issue:`1613`.

* Add V3 roadmap and design document.
By :user:`Joe Hamman <jhamman>` :issue:`1583`.

Maintenance
~~~~~~~~~~~

Expand DownExpand Up@@ -75,6 +95,26 @@ Maintenance
* Remove ``sphinx-rtd-theme`` dependency from ``pyproject.toml``.
By :user:`Sanket Verma <MSanKeys963>` :issue:`1563`.

* Remove ``CODE_OF_CONDUCT.md`` file from the Zarr-Python repository.
By :user:`Sanket Verma <MSanKeys963>` :issue:`1572`.

* Bump version of black in pre-commit.
By :user:`David Stansby <dtstansby>` :issue:`1559`.

* Use list comprehension where applicable.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1555`.

* Use format specification mini-language to format string.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1558`.

* Single startswith() call instead of multiple ones.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1556`.

* Move codespell options around.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1196`.

* Remove unused mypy ignore comments.
By :user:`David Stansby <dtstansby>` :issue:`1602`.

.. _release_2.16.1:

Expand Down
2 changes: 1 addition & 1 deletion requirements_dev_optional.txt
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,4 +20,4 @@ pytest-timeout==2.2.0
h5py==3.10.0
fsspec==2023.12.2
s3fs==2023.12.2
moto[server]>=4.0.8
moto[server]>=5.0.1
28 changes: 20 additions & 8 deletions zarr/tests/test_core.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -73,7 +73,15 @@
)
from zarr.tests.test_storage_v3 import DummyStorageTransfomer
from zarr.util import buffer_size
from zarr.tests.util import abs_container, skip_test_env_var, have_fsspec, mktemp
from zarr.tests.util import (
abs_container,
have_bsddb3,
have_fsspec,
have_lmdb,
have_sqlite3,
mktemp,
skip_test_env_var,
)
from zarr.types import DIMENSION_SEPARATOR

# noinspection PyMethodMayBeStatic
Expand DownExpand Up@@ -2038,9 +2046,11 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_bsddb3 is False, reason="needs bsddb3")
class TestArrayWithDBMStoreBerkeleyDB(TestArray):
def create_store(self):
bsddb3 = pytest.importorskip("bsddb3")
import bsddb3

path = mktemp(suffix=".dbm")
atexit.register(os.remove, path)
store = DBMStore(path, flag="n", open=bsddb3.btopen)
Expand All@@ -2050,9 +2060,9 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_lmdb is False, reason="needs lmdb")
class TestArrayWithLMDBStore(TestArray):
def create_store(self):
pytest.importorskip("lmdb")
path = mktemp(suffix=".lmdb")
atexit.register(atexit_rmtree, path)
store = LMDBStore(path, buffers=True)
Expand All@@ -2065,9 +2075,9 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_lmdb is False, reason="needs lmdb")
class TestArrayWithLMDBStoreNoBuffers(TestArray):
def create_store(self):
pytest.importorskip("lmdb")
path = mktemp(suffix=".lmdb")
atexit.register(atexit_rmtree, path)
store = LMDBStore(path, buffers=False)
Expand All@@ -2077,9 +2087,9 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_sqlite3 is False, reason="needs sqlite3")
class TestArrayWithSQLiteStore(TestArray):
def create_store(self):
pytest.importorskip("sqlite3")
path = mktemp(suffix=".db")
atexit.register(atexit_rmtree, path)
store = SQLiteStore(path)
Expand DownExpand Up@@ -2758,9 +2768,11 @@ def test_nbytes_stored(self):


@pytest.mark.skipif(not v3_api_available, reason="V3 is disabled")
@pytest.mark.skipif(have_bsddb3 is False, reason="needs bsddb3")
class TestArrayWithDBMStoreV3BerkeleyDB(TestArrayV3):
def create_store(self) -> DBMStoreV3:
bsddb3 = pytest.importorskip("bsddb3")
import bsddb3

path = mktemp(suffix=".dbm")
atexit.register(os.remove, path)
store = DBMStoreV3(path, flag="n", open=bsddb3.btopen)
Expand All@@ -2771,11 +2783,11 @@ def test_nbytes_stored(self):


@pytest.mark.skipif(not v3_api_available, reason="V3 is disabled")
@pytest.mark.skipif(have_lmdb is False, reason="needs lmdb")
class TestArrayWithLMDBStoreV3(TestArrayV3):
lmdb_buffers = True

def create_store(self) -> LMDBStoreV3:
pytest.importorskip("lmdb")
path = mktemp(suffix=".lmdb")
atexit.register(atexit_rmtree, path)
store = LMDBStoreV3(path, buffers=self.lmdb_buffers)
Expand All@@ -2797,9 +2809,9 @@ def test_nbytes_stored(self):


@pytest.mark.skipif(not v3_api_available, reason="V3 is disabled")
@pytest.mark.skipif(have_sqlite3 is False, reason="needs sqlite3")
class TestArrayWithSQLiteStoreV3(TestArrayV3):
def create_store(self):
pytest.importorskip("sqlite3")
path = mktemp(suffix=".db")
atexit.register(atexit_rmtree, path)
store = SQLiteStoreV3(path)
Expand Down
2 changes: 1 addition & 1 deletion zarr/tests/test_storage.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -1396,7 +1396,7 @@ def s3(request):
port = 5555
endpoint_uri = "http://127.0.0.1:%d/" % port
proc = subprocess.Popen(
shlex.split("moto_server s3 -p %d" % port),
shlex.split("moto_server -p %d" % port),
stderr=subprocess.DEVNULL,
stdout=subprocess.DEVNULL,
)
Expand Down
24 changes: 24 additions & 0 deletions zarr/tests/util.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -69,6 +69,30 @@ def skip_test_env_var(name):
have_fsspec = False


try:
import bsddb3 # noqa: F401

have_bsddb3 = True
except ImportError: # pragma: no cover
have_bsddb3 = False


try:
import lmdb # noqa: F401

have_lmdb = True
except ImportError: # pragma: no cover
have_lmdb = False


try:
import sqlite3 # noqa: F401

have_sqlite3 = True
except ImportError: # pragma: no cover
have_sqlite3 = False


def abs_container():
from azure.core.exceptions import ResourceExistsError
import azure.storage.blob as asb
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/windows-testing.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -16,7 +16,7 @@ jobs:
strategy:
fail-fast: True
matrix:
python-version: ['3.9', '3.10', '3.11']
python-version: ['3.10', '3.11']
steps:
- uses: actions/checkout@v4
with:
Expand Down
40 changes: 40 additions & 0 deletions docs/release.rst
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,12 +18,20 @@ Release notes
Unreleased
----------

.. _release_2.17.0:

2.17.0
------

Enhancements
~~~~~~~~~~~~

* Added type hints to ``zarr.creation.create()``.
By :user:`David Stansby <dstansby>` :issue:`1536`.

* Pyodide support: Don't require fasteners on Emscripten.
By :user:`Hood Chatham <hoodmane>` :issue:`1663`.

Docs
~~~~

Expand All@@ -45,9 +53,21 @@ Docs
* Minor tweak to advanced indexing tutorial examples.
By :user:`Ross Barnowski <rossbar>` :issue:`1550`.

* Automatically document array members using sphinx-automodapi.
By :user:`David Stansby <dstansby>` :issue:`1547`.

* Add a markdown file documenting the current and former core-developer team.
By :user:`Joe Hamman <jhamman>` :issue:`1628`.

* Add Norman Rzepka to core-dev team.
By :user:`Joe Hamman <jhamman>` :issue:`1630`.

* Added section about accessing zip files that are on s3.
By :user:`Jeff Peck <jeffpeck10x>` :issue:`1613`.

* Add V3 roadmap and design document.
By :user:`Joe Hamman <jhamman>` :issue:`1583`.

Maintenance
~~~~~~~~~~~

Expand DownExpand Up@@ -75,6 +95,26 @@ Maintenance
* Remove ``sphinx-rtd-theme`` dependency from ``pyproject.toml``.
By :user:`Sanket Verma <MSanKeys963>` :issue:`1563`.

* Remove ``CODE_OF_CONDUCT.md`` file from the Zarr-Python repository.
By :user:`Sanket Verma <MSanKeys963>` :issue:`1572`.

* Bump version of black in pre-commit.
By :user:`David Stansby <dtstansby>` :issue:`1559`.

* Use list comprehension where applicable.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1555`.

* Use format specification mini-language to format string.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1558`.

* Single startswith() call instead of multiple ones.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1556`.

* Move codespell options around.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1196`.

* Remove unused mypy ignore comments.
By :user:`David Stansby <dtstansby>` :issue:`1602`.

.. _release_2.16.1:

Expand Down
2 changes: 1 addition & 1 deletion requirements_dev_optional.txt
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,4 +20,4 @@ pytest-timeout==2.2.0
h5py==3.10.0
fsspec==2023.12.2
s3fs==2023.12.2
moto[server]>=4.0.8
moto[server]>=5.0.1
28 changes: 20 additions & 8 deletions zarr/tests/test_core.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -73,7 +73,15 @@
)
from zarr.tests.test_storage_v3 import DummyStorageTransfomer
from zarr.util import buffer_size
from zarr.tests.util import abs_container, skip_test_env_var, have_fsspec, mktemp
from zarr.tests.util import (
abs_container,
have_bsddb3,
have_fsspec,
have_lmdb,
have_sqlite3,
mktemp,
skip_test_env_var,
)
from zarr.types import DIMENSION_SEPARATOR

# noinspection PyMethodMayBeStatic
Expand DownExpand Up@@ -2038,9 +2046,11 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_bsddb3 is False, reason="needs bsddb3")
class TestArrayWithDBMStoreBerkeleyDB(TestArray):
def create_store(self):
bsddb3 = pytest.importorskip("bsddb3")
import bsddb3

path = mktemp(suffix=".dbm")
atexit.register(os.remove, path)
store = DBMStore(path, flag="n", open=bsddb3.btopen)
Expand All@@ -2050,9 +2060,9 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_lmdb is False, reason="needs lmdb")
class TestArrayWithLMDBStore(TestArray):
def create_store(self):
pytest.importorskip("lmdb")
path = mktemp(suffix=".lmdb")
atexit.register(atexit_rmtree, path)
store = LMDBStore(path, buffers=True)
Expand All@@ -2065,9 +2075,9 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_lmdb is False, reason="needs lmdb")
class TestArrayWithLMDBStoreNoBuffers(TestArray):
def create_store(self):
pytest.importorskip("lmdb")
path = mktemp(suffix=".lmdb")
atexit.register(atexit_rmtree, path)
store = LMDBStore(path, buffers=False)
Expand All@@ -2077,9 +2087,9 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_sqlite3 is False, reason="needs sqlite3")
class TestArrayWithSQLiteStore(TestArray):
def create_store(self):
pytest.importorskip("sqlite3")
path = mktemp(suffix=".db")
atexit.register(atexit_rmtree, path)
store = SQLiteStore(path)
Expand DownExpand Up@@ -2758,9 +2768,11 @@ def test_nbytes_stored(self):


@pytest.mark.skipif(not v3_api_available, reason="V3 is disabled")
@pytest.mark.skipif(have_bsddb3 is False, reason="needs bsddb3")
class TestArrayWithDBMStoreV3BerkeleyDB(TestArrayV3):
def create_store(self) -> DBMStoreV3:
bsddb3 = pytest.importorskip("bsddb3")
import bsddb3

path = mktemp(suffix=".dbm")
atexit.register(os.remove, path)
store = DBMStoreV3(path, flag="n", open=bsddb3.btopen)
Expand All@@ -2771,11 +2783,11 @@ def test_nbytes_stored(self):


@pytest.mark.skipif(not v3_api_available, reason="V3 is disabled")
@pytest.mark.skipif(have_lmdb is False, reason="needs lmdb")
class TestArrayWithLMDBStoreV3(TestArrayV3):
lmdb_buffers = True

def create_store(self) -> LMDBStoreV3:
pytest.importorskip("lmdb")
path = mktemp(suffix=".lmdb")
atexit.register(atexit_rmtree, path)
store = LMDBStoreV3(path, buffers=self.lmdb_buffers)
Expand All@@ -2797,9 +2809,9 @@ def test_nbytes_stored(self):


@pytest.mark.skipif(not v3_api_available, reason="V3 is disabled")
@pytest.mark.skipif(have_sqlite3 is False, reason="needs sqlite3")
class TestArrayWithSQLiteStoreV3(TestArrayV3):
def create_store(self):
pytest.importorskip("sqlite3")
path = mktemp(suffix=".db")
atexit.register(atexit_rmtree, path)
store = SQLiteStoreV3(path)
Expand Down
2 changes: 1 addition & 1 deletion zarr/tests/test_storage.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -1396,7 +1396,7 @@ def s3(request):
port = 5555
endpoint_uri = "http://127.0.0.1:%d/" % port
proc = subprocess.Popen(
shlex.split("moto_server s3 -p %d" % port),
shlex.split("moto_server -p %d" % port),
stderr=subprocess.DEVNULL,
stdout=subprocess.DEVNULL,
)
Expand Down
24 changes: 24 additions & 0 deletions zarr/tests/util.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -69,6 +69,30 @@ def skip_test_env_var(name):
have_fsspec = False


try:
import bsddb3 # noqa: F401

have_bsddb3 = True
except ImportError: # pragma: no cover
have_bsddb3 = False


try:
import lmdb # noqa: F401

have_lmdb = True
except ImportError: # pragma: no cover
have_lmdb = False


try:
import sqlite3 # noqa: F401

have_sqlite3 = True
except ImportError: # pragma: no cover
have_sqlite3 = False


def abs_container():
from azure.core.exceptions import ResourceExistsError
import azure.storage.blob as asb
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/windows-testing.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -16,7 +16,7 @@ jobs:
strategy:
fail-fast: True
matrix:
python-version: ['3.9', '3.10', '3.11']
python-version: ['3.10', '3.11']
steps:
- uses: actions/checkout@v4
with:
Expand Down
40 changes: 40 additions & 0 deletions docs/release.rst
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,12 +18,20 @@ Release notes
Unreleased
----------

.. _release_2.17.0:

2.17.0
------

Enhancements
~~~~~~~~~~~~

* Added type hints to ``zarr.creation.create()``.
By :user:`David Stansby <dstansby>` :issue:`1536`.

* Pyodide support: Don't require fasteners on Emscripten.
By :user:`Hood Chatham <hoodmane>` :issue:`1663`.

Docs
~~~~

Expand All@@ -45,9 +53,21 @@ Docs
* Minor tweak to advanced indexing tutorial examples.
By :user:`Ross Barnowski <rossbar>` :issue:`1550`.

* Automatically document array members using sphinx-automodapi.
By :user:`David Stansby <dstansby>` :issue:`1547`.

* Add a markdown file documenting the current and former core-developer team.
By :user:`Joe Hamman <jhamman>` :issue:`1628`.

* Add Norman Rzepka to core-dev team.
By :user:`Joe Hamman <jhamman>` :issue:`1630`.

* Added section about accessing zip files that are on s3.
By :user:`Jeff Peck <jeffpeck10x>` :issue:`1613`.

* Add V3 roadmap and design document.
By :user:`Joe Hamman <jhamman>` :issue:`1583`.

Maintenance
~~~~~~~~~~~

Expand DownExpand Up@@ -75,6 +95,26 @@ Maintenance
* Remove ``sphinx-rtd-theme`` dependency from ``pyproject.toml``.
By :user:`Sanket Verma <MSanKeys963>` :issue:`1563`.

* Remove ``CODE_OF_CONDUCT.md`` file from the Zarr-Python repository.
By :user:`Sanket Verma <MSanKeys963>` :issue:`1572`.

* Bump version of black in pre-commit.
By :user:`David Stansby <dtstansby>` :issue:`1559`.

* Use list comprehension where applicable.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1555`.

* Use format specification mini-language to format string.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1558`.

* Single startswith() call instead of multiple ones.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1556`.

* Move codespell options around.
By :user:`Dimitri Papadopoulos Orfanos <DimitriPapadopoulos>` :issue:`1196`.

* Remove unused mypy ignore comments.
By :user:`David Stansby <dtstansby>` :issue:`1602`.

.. _release_2.16.1:

Expand Down
2 changes: 1 addition & 1 deletion requirements_dev_optional.txt
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,4 +20,4 @@ pytest-timeout==2.2.0
h5py==3.10.0
fsspec==2023.12.2
s3fs==2023.12.2
moto[server]>=4.0.8
moto[server]>=5.0.1
28 changes: 20 additions & 8 deletions zarr/tests/test_core.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -73,7 +73,15 @@
)
from zarr.tests.test_storage_v3 import DummyStorageTransfomer
from zarr.util import buffer_size
from zarr.tests.util import abs_container, skip_test_env_var, have_fsspec, mktemp
from zarr.tests.util import (
abs_container,
have_bsddb3,
have_fsspec,
have_lmdb,
have_sqlite3,
mktemp,
skip_test_env_var,
)
from zarr.types import DIMENSION_SEPARATOR

# noinspection PyMethodMayBeStatic
Expand DownExpand Up@@ -2038,9 +2046,11 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_bsddb3 is False, reason="needs bsddb3")
class TestArrayWithDBMStoreBerkeleyDB(TestArray):
def create_store(self):
bsddb3 = pytest.importorskip("bsddb3")
import bsddb3

path = mktemp(suffix=".dbm")
atexit.register(os.remove, path)
store = DBMStore(path, flag="n", open=bsddb3.btopen)
Expand All@@ -2050,9 +2060,9 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_lmdb is False, reason="needs lmdb")
class TestArrayWithLMDBStore(TestArray):
def create_store(self):
pytest.importorskip("lmdb")
path = mktemp(suffix=".lmdb")
atexit.register(atexit_rmtree, path)
store = LMDBStore(path, buffers=True)
Expand All@@ -2065,9 +2075,9 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_lmdb is False, reason="needs lmdb")
class TestArrayWithLMDBStoreNoBuffers(TestArray):
def create_store(self):
pytest.importorskip("lmdb")
path = mktemp(suffix=".lmdb")
atexit.register(atexit_rmtree, path)
store = LMDBStore(path, buffers=False)
Expand All@@ -2077,9 +2087,9 @@ def test_nbytes_stored(self):
pass # not implemented


@pytest.mark.skipif(have_sqlite3 is False, reason="needs sqlite3")
class TestArrayWithSQLiteStore(TestArray):
def create_store(self):
pytest.importorskip("sqlite3")
path = mktemp(suffix=".db")
atexit.register(atexit_rmtree, path)
store = SQLiteStore(path)
Expand DownExpand Up@@ -2758,9 +2768,11 @@ def test_nbytes_stored(self):


@pytest.mark.skipif(not v3_api_available, reason="V3 is disabled")
@pytest.mark.skipif(have_bsddb3 is False, reason="needs bsddb3")
class TestArrayWithDBMStoreV3BerkeleyDB(TestArrayV3):
def create_store(self) -> DBMStoreV3:
bsddb3 = pytest.importorskip("bsddb3")
import bsddb3

path = mktemp(suffix=".dbm")
atexit.register(os.remove, path)
store = DBMStoreV3(path, flag="n", open=bsddb3.btopen)
Expand All@@ -2771,11 +2783,11 @@ def test_nbytes_stored(self):


@pytest.mark.skipif(not v3_api_available, reason="V3 is disabled")
@pytest.mark.skipif(have_lmdb is False, reason="needs lmdb")
class TestArrayWithLMDBStoreV3(TestArrayV3):
lmdb_buffers = True

def create_store(self) -> LMDBStoreV3:
pytest.importorskip("lmdb")
path = mktemp(suffix=".lmdb")
atexit.register(atexit_rmtree, path)
store = LMDBStoreV3(path, buffers=self.lmdb_buffers)
Expand All@@ -2797,9 +2809,9 @@ def test_nbytes_stored(self):


@pytest.mark.skipif(not v3_api_available, reason="V3 is disabled")
@pytest.mark.skipif(have_sqlite3 is False, reason="needs sqlite3")
class TestArrayWithSQLiteStoreV3(TestArrayV3):
def create_store(self):
pytest.importorskip("sqlite3")
path = mktemp(suffix=".db")
atexit.register(atexit_rmtree, path)
store = SQLiteStoreV3(path)
Expand Down
2 changes: 1 addition & 1 deletion zarr/tests/test_storage.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -1396,7 +1396,7 @@ def s3(request):
port = 5555
endpoint_uri = "http://127.0.0.1:%d/" % port
proc = subprocess.Popen(
shlex.split("moto_server s3 -p %d" % port),
shlex.split("moto_server -p %d" % port),
stderr=subprocess.DEVNULL,
stdout=subprocess.DEVNULL,
)
Expand Down
24 changes: 24 additions & 0 deletions zarr/tests/util.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -69,6 +69,30 @@ def skip_test_env_var(name):
have_fsspec = False


try:
import bsddb3 # noqa: F401

have_bsddb3 = True
except ImportError: # pragma: no cover
have_bsddb3 = False


try:
import lmdb # noqa: F401

have_lmdb = True
except ImportError: # pragma: no cover
have_lmdb = False


try:
import sqlite3 # noqa: F401

have_sqlite3 = True
except ImportError: # pragma: no cover
have_sqlite3 = False


def abs_container():
from azure.core.exceptions import ResourceExistsError
import azure.storage.blob as asb
Expand Down