diff --git a/.gitignore b/.gitignore index ab82702..5340732 100644 --- a/.gitignore +++ b/.gitignore @@ -112,3 +112,7 @@ venv.bak/ # mypy .mypy_cache/ .vscode/settings.json + +# data output +*.zarr +*.nc \ No newline at end of file diff --git a/examples/notebooks/access_sen2.ipynb b/examples/notebooks/access_sen2.ipynb new file mode 100644 index 0000000..2e518f7 --- /dev/null +++ b/examples/notebooks/access_sen2.ipynb @@ -0,0 +1,542 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "ffcb827f-8a61-418e-8fd0-c4497c8d4979", + "metadata": {}, + "outputs": [], + "source": [ + "from dask.distributed import Client\n", + "from xcube.core.store import new_data_store" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "30a1afb0-d595-4632-b0c5-1d6cf036692f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "
\n", + "
\n", + "

Client

\n", + "

Client-008115f8-a74b-11ef-8869-e86538487431

\n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
Connection method: Cluster objectCluster type: distributed.LocalCluster
\n", + " Dashboard: http://127.0.0.1:8787/status\n", + "
\n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "

Cluster Info

\n", + "
\n", + "
\n", + "
\n", + "
\n", + "

LocalCluster

\n", + "

c62fbfa1

\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + " \n", + "
\n", + " Dashboard: http://127.0.0.1:8787/status\n", + " \n", + " Workers: 4\n", + "
\n", + " Total threads: 16\n", + " \n", + " Total memory: 30.15 GiB\n", + "
Status: runningUsing processes: True
\n", + "\n", + "
\n", + " \n", + "

Scheduler Info

\n", + "
\n", + "\n", + "
\n", + "
\n", + "
\n", + "
\n", + "

Scheduler

\n", + "

Scheduler-1e64469d-f6c3-49a9-9372-3dfba3dd2bd4

\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " Comm: tcp://127.0.0.1:36673\n", + " \n", + " Workers: 4\n", + "
\n", + " Dashboard: http://127.0.0.1:8787/status\n", + " \n", + " Total threads: 16\n", + "
\n", + " Started: Just now\n", + " \n", + " Total memory: 30.15 GiB\n", + "
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "

Workers

\n", + "
\n", + "\n", + " \n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "

Worker: 0

\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + "\n", + " \n", + "\n", + "
\n", + " Comm: tcp://127.0.0.1:46869\n", + " \n", + " Total threads: 4\n", + "
\n", + " Dashboard: http://127.0.0.1:42221/status\n", + " \n", + " Memory: 7.54 GiB\n", + "
\n", + " Nanny: tcp://127.0.0.1:36911\n", + "
\n", + " Local directory: /tmp/dask-scratch-space/worker-bvufia4s\n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "

Worker: 1

\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + "\n", + " \n", + "\n", + "
\n", + " Comm: tcp://127.0.0.1:46319\n", + " \n", + " Total threads: 4\n", + "
\n", + " Dashboard: http://127.0.0.1:42915/status\n", + " \n", + " Memory: 7.54 GiB\n", + "
\n", + " Nanny: tcp://127.0.0.1:45839\n", + "
\n", + " Local directory: /tmp/dask-scratch-space/worker-_vuflvvw\n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "

Worker: 2

\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + "\n", + " \n", + "\n", + "
\n", + " Comm: tcp://127.0.0.1:39313\n", + " \n", + " Total threads: 4\n", + "
\n", + " Dashboard: http://127.0.0.1:43265/status\n", + " \n", + " Memory: 7.54 GiB\n", + "
\n", + " Nanny: tcp://127.0.0.1:41843\n", + "
\n", + " Local directory: /tmp/dask-scratch-space/worker-zj2r9vf3\n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "

Worker: 3

\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + "\n", + " \n", + "\n", + "
\n", + " Comm: tcp://127.0.0.1:39439\n", + " \n", + " Total threads: 4\n", + "
\n", + " Dashboard: http://127.0.0.1:36971/status\n", + " \n", + " Memory: 7.54 GiB\n", + "
\n", + " Nanny: tcp://127.0.0.1:37675\n", + "
\n", + " Local directory: /tmp/dask-scratch-space/worker-x0jec76w\n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "\n", + "
\n", + "
\n", + "\n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "\n", + "
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "client = Client()\n", + "client" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "163c7928-2733-4026-a080-18a886674afb", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "bb2b69ce-52ef-4ef6-aeba-5e161e1e70b7", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/pystac_client/item_search.py:447: DoesNotConformTo: Server does not conform to SORT\n", + " warnings.warn(DoesNotConformTo(\"SORT\"))\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-11-01\n", + "2023-11-04\n", + "2023-11-06\n", + " Size: 40kB\n", + "Dimensions: (time: 3, y: 16, x: 16)\n", + "Coordinates:\n", + " * y (y) float64 128B 5.893e+06 5.893e+06 ... 5.893e+06 5.893e+06\n", + " * x (x) float64 128B 6.596e+05 6.596e+05 ... 6.597e+05 6.597e+05\n", + " * time (time) datetime64[ns] 24B 2023-11-01 2023-11-04 2023-11-06\n", + "Data variables: (12/14)\n", + " B01 (time, y, x) float32 3kB dask.array\n", + " B02 (time, y, x) float32 3kB dask.array\n", + " B03 (time, y, x) float32 3kB dask.array\n", + " B04 (time, y, x) float32 3kB dask.array\n", + " B05 (time, y, x) float32 3kB dask.array\n", + " B06 (time, y, x) float32 3kB dask.array\n", + " ... ...\n", + " B8A (time, y, x) float32 3kB dask.array\n", + " B09 (time, y, x) float32 3kB dask.array\n", + " B11 (time, y, x) float32 3kB dask.array\n", + " B12 (time, y, x) float32 3kB dask.array\n", + " SCL (time, y, x) float32 3kB dask.array\n", + " crs int64 8B 0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-11-20 15:23:59,599 - distributed.worker - ERROR - Compute Failed\n", + "Key: ('open_rasterio-getitem-getitem-ad51d4c7e31dd6885a9fc316331b348a', 5, 2)\n", + "State: executing\n", + "Task: \n", + "Exception: \"RasterioIOError('Access Denied')\"\n", + "Traceback: ' File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/dask/array/core.py\", line 122, in getter\\n c = np.asarray(c)\\n ^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/core/indexing.py\", line 578, in __array__\\n return np.asarray(self.get_duck_array(), dtype=dtype, copy=copy)\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/core/indexing.py\", line 583, in get_duck_array\\n return self.array.get_duck_array()\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/core/indexing.py\", line 794, in get_duck_array\\n return self.array.get_duck_array()\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/core/indexing.py\", line 657, in get_duck_array\\n array = self.array[self.key]\\n ~~~~~~~~~~^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/rioxarray/_io.py\", line 455, in __getitem__\\n return indexing.explicit_indexing_adapter(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/core/indexing.py\", line 1018, in explicit_indexing_adapter\\n result = raw_indexing_method(raw_key.tuple)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/rioxarray/_io.py\", line 430, in _getitem\\n self.manager.acquire(needs_lock=False), self.vrt_params\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/backends/file_manager.py\", line 193, in acquire\\n file, _ = self._acquire_with_cache_info(needs_lock)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/backends/file_manager.py\", line 217, in _acquire_with_cache_info\\n file = self._opener(*self._args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/rioxarray/_io.py\", line 981, in _single_band_open\\n riods=rasterio.open(*args, **kwargs),\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/rasterio/env.py\", line 463, in wrapper\\n return f(*args, **kwds)\\n ^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/rasterio/__init__.py\", line 355, in open\\n dataset = DatasetReader(path, driver=driver, sharing=sharing, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \"rasterio/_base.pyx\", line 312, in rasterio._base.DatasetBase.__init__\\n'\n", + "\n", + "2024-11-20 15:23:59,599 - distributed.worker - ERROR - Compute Failed\n", + "Key: ('open_rasterio-getitem-getitem-17912c0d2c39c1673f3e9cfe8b4ce287', 0, 2)\n", + "State: executing\n", + "Task: \n", + "Exception: \"RasterioIOError('Access Denied')\"\n", + "Traceback: ' File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/dask/array/core.py\", line 122, in getter\\n c = np.asarray(c)\\n ^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/core/indexing.py\", line 578, in __array__\\n return np.asarray(self.get_duck_array(), dtype=dtype, copy=copy)\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/core/indexing.py\", line 583, in get_duck_array\\n return self.array.get_duck_array()\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/core/indexing.py\", line 794, in get_duck_array\\n return self.array.get_duck_array()\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/core/indexing.py\", line 657, in get_duck_array\\n array = self.array[self.key]\\n ~~~~~~~~~~^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/rioxarray/_io.py\", line 455, in __getitem__\\n return indexing.explicit_indexing_adapter(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/core/indexing.py\", line 1018, in explicit_indexing_adapter\\n result = raw_indexing_method(raw_key.tuple)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/rioxarray/_io.py\", line 430, in _getitem\\n self.manager.acquire(needs_lock=False), self.vrt_params\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/backends/file_manager.py\", line 193, in acquire\\n file, _ = self._acquire_with_cache_info(needs_lock)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/backends/file_manager.py\", line 217, in _acquire_with_cache_info\\n file = self._opener(*self._args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/rioxarray/_io.py\", line 981, in _single_band_open\\n riods=rasterio.open(*args, **kwargs),\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/rasterio/env.py\", line 463, in wrapper\\n return f(*args, **kwds)\\n ^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/rasterio/__init__.py\", line 355, in open\\n dataset = DatasetReader(path, driver=driver, sharing=sharing, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \"rasterio/_base.pyx\", line 312, in rasterio._base.DatasetBase.__init__\\n'\n", + "\n", + "2024-11-20 15:23:59,599 - distributed.worker - ERROR - Compute Failed\n", + "Key: ('open_rasterio-getitem-getitem-0db8df8f1e6ca87957d8c756fddeecbc', 0, 2)\n", + "State: executing\n", + "Task: \n", + "Exception: \"RasterioIOError('Access Denied')\"\n", + "Traceback: ' File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/dask/array/core.py\", line 122, in getter\\n c = np.asarray(c)\\n ^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/core/indexing.py\", line 578, in __array__\\n return np.asarray(self.get_duck_array(), dtype=dtype, copy=copy)\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/core/indexing.py\", line 583, in get_duck_array\\n return self.array.get_duck_array()\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/core/indexing.py\", line 794, in get_duck_array\\n return self.array.get_duck_array()\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/core/indexing.py\", line 657, in get_duck_array\\n array = self.array[self.key]\\n ~~~~~~~~~~^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/rioxarray/_io.py\", line 455, in __getitem__\\n return indexing.explicit_indexing_adapter(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/core/indexing.py\", line 1018, in explicit_indexing_adapter\\n result = raw_indexing_method(raw_key.tuple)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/rioxarray/_io.py\", line 430, in _getitem\\n self.manager.acquire(needs_lock=False), self.vrt_params\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/backends/file_manager.py\", line 193, in acquire\\n file, _ = self._acquire_with_cache_info(needs_lock)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/backends/file_manager.py\", line 217, in _acquire_with_cache_info\\n file = self._opener(*self._args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/rioxarray/_io.py\", line 981, in _single_band_open\\n riods=rasterio.open(*args, **kwargs),\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/rasterio/env.py\", line 463, in wrapper\\n return f(*args, **kwds)\\n ^^^^^^^^^^^^^^^^\\n File \"/home/konstantin/micromamba/envs/xcube-stac/lib/python3.12/site-packages/rasterio/__init__.py\", line 355, in open\\n dataset = DatasetReader(path, driver=driver, sharing=sharing, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \"rasterio/_base.pyx\", line 312, in rasterio._base.DatasetBase.__init__\\n'\n", + "\n" + ] + }, + { + "ename": "RasterioIOError", + "evalue": "Access Denied", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m~/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/backends/file_manager.py:211\u001b[0m, in \u001b[0;36m_acquire_with_cache_info\u001b[0;34m()\u001b[0m\n\u001b[1;32m 210\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 211\u001b[0m file \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cache[\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_key]\n\u001b[1;32m 212\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m:\n", + "File \u001b[0;32m~/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/backends/lru_cache.py:56\u001b[0m, in \u001b[0;36m__getitem__\u001b[0;34m()\u001b[0m\n\u001b[1;32m 55\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_lock:\n\u001b[0;32m---> 56\u001b[0m value \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cache[key]\n\u001b[1;32m 57\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cache\u001b[38;5;241m.\u001b[39mmove_to_end(key)\n", + "\u001b[0;31mKeyError\u001b[0m: [, ('s3://eodata/Sentinel-2/MSI/L2A/2023/11/04/S2A_MSIL2A_20231104T092141_N0509_R093_T35UPV_20231104T134703.SAFE/GRANULE/L2A_T35UPV_A043705_20231104T092333/IMG_DATA/R20m/T35UPV_20231104T092141_B06_20m.jp2',), 'r', (('bidx', 0), ('sharing', False)), '87a2e1bd-d036-4327-8a12-33a9cf35b7af']", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001b[0;31mCPLE_AWSAccessDeniedError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32mrasterio/_base.pyx:310\u001b[0m, in \u001b[0;36mrasterio._base.DatasetBase.__init__\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32mrasterio/_base.pyx:221\u001b[0m, in \u001b[0;36mrasterio._base.open_dataset\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32mrasterio/_err.pyx:359\u001b[0m, in \u001b[0;36mrasterio._err.exc_wrap_pointer\u001b[0;34m()\u001b[0m\n", + "\u001b[0;31mCPLE_AWSAccessDeniedError\u001b[0m: Access Denied", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001b[0;31mRasterioIOError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[3], line 39\u001b[0m\n\u001b[1;32m 37\u001b[0m \u001b[38;5;28mprint\u001b[39m(ds)\n\u001b[1;32m 38\u001b[0m store_file \u001b[38;5;241m=\u001b[39m new_data_store(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mfile\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m---> 39\u001b[0m \u001b[43mstore_file\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwrite_data\u001b[49m\u001b[43m(\u001b[49m\u001b[43mds\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mminicube_test2.zarr\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mreplace\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xcube/core/store/fs/store.py:380\u001b[0m, in \u001b[0;36mBaseFsDataStore.write_data\u001b[0;34m(self, data, data_id, writer_id, replace, **write_params)\u001b[0m\n\u001b[1;32m 378\u001b[0m fs_path \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_convert_data_id_into_fs_path(data_id)\n\u001b[1;32m 379\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfs\u001b[38;5;241m.\u001b[39mmakedirs(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mroot, exist_ok\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[0;32m--> 380\u001b[0m written_fs_path \u001b[38;5;241m=\u001b[39m \u001b[43mwriter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwrite_data\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 381\u001b[0m \u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfs_path\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mreplace\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mreplace\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mroot\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mroot\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mwrite_params\u001b[49m\n\u001b[1;32m 382\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 383\u001b[0m \u001b[38;5;66;03m# Verify, accessors fulfill their write_data() contract\u001b[39;00m\n\u001b[1;32m 384\u001b[0m assert_true(\n\u001b[1;32m 385\u001b[0m fs_path \u001b[38;5;241m==\u001b[39m written_fs_path,\n\u001b[1;32m 386\u001b[0m message\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mFsDataAccessor implementations must \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 387\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mreturn the data_id passed in.\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 388\u001b[0m )\n", + "File \u001b[0;32m~/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xcube/core/store/fs/impl/dataset.py:184\u001b[0m, in \u001b[0;36mDatasetZarrFsDataAccessor.write_data\u001b[0;34m(self, data, data_id, replace, **write_params)\u001b[0m\n\u001b[1;32m 182\u001b[0m consolidated \u001b[38;5;241m=\u001b[39m write_params\u001b[38;5;241m.\u001b[39mpop(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mconsolidated\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[1;32m 183\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 184\u001b[0m \u001b[43mdata\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mto_zarr\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 185\u001b[0m \u001b[43m \u001b[49m\u001b[43mzarr_store\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 186\u001b[0m \u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mw\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mreplace\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01melse\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 187\u001b[0m \u001b[43m \u001b[49m\u001b[43mconsolidated\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mconsolidated\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 188\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mwrite_params\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 189\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 190\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 191\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m DataStoreError(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mFailed to write\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m dataset \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mdata_id\u001b[38;5;132;01m!r}\u001b[39;00m\u001b[38;5;124m: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00me\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01me\u001b[39;00m\n", + "File \u001b[0;32m~/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/core/dataset.py:2595\u001b[0m, in \u001b[0;36mDataset.to_zarr\u001b[0;34m(self, store, chunk_store, mode, synchronizer, group, encoding, compute, consolidated, append_dim, region, safe_chunks, storage_options, zarr_version, zarr_format, write_empty_chunks, chunkmanager_store_kwargs)\u001b[0m\n\u001b[1;32m 2427\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Write dataset contents to a zarr group.\u001b[39;00m\n\u001b[1;32m 2428\u001b[0m \n\u001b[1;32m 2429\u001b[0m \u001b[38;5;124;03mZarr chunks are determined in the following way:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 2591\u001b[0m \u001b[38;5;124;03m The I/O user guide, with more details and examples.\u001b[39;00m\n\u001b[1;32m 2592\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 2593\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mxarray\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mbackends\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mapi\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m to_zarr\n\u001b[0;32m-> 2595\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mto_zarr\u001b[49m\u001b[43m(\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;66;43;03m# type: ignore[call-overload,misc]\u001b[39;49;00m\n\u001b[1;32m 2596\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2597\u001b[0m \u001b[43m \u001b[49m\u001b[43mstore\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstore\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2598\u001b[0m \u001b[43m \u001b[49m\u001b[43mchunk_store\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunk_store\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2599\u001b[0m \u001b[43m \u001b[49m\u001b[43mstorage_options\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstorage_options\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2600\u001b[0m \u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmode\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2601\u001b[0m \u001b[43m \u001b[49m\u001b[43msynchronizer\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msynchronizer\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2602\u001b[0m \u001b[43m \u001b[49m\u001b[43mgroup\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mgroup\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2603\u001b[0m \u001b[43m \u001b[49m\u001b[43mencoding\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mencoding\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2604\u001b[0m \u001b[43m \u001b[49m\u001b[43mcompute\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcompute\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2605\u001b[0m \u001b[43m \u001b[49m\u001b[43mconsolidated\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mconsolidated\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2606\u001b[0m \u001b[43m \u001b[49m\u001b[43mappend_dim\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mappend_dim\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2607\u001b[0m \u001b[43m \u001b[49m\u001b[43mregion\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mregion\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2608\u001b[0m \u001b[43m \u001b[49m\u001b[43msafe_chunks\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msafe_chunks\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2609\u001b[0m \u001b[43m \u001b[49m\u001b[43mzarr_version\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mzarr_version\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2610\u001b[0m \u001b[43m \u001b[49m\u001b[43mzarr_format\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mzarr_format\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2611\u001b[0m \u001b[43m \u001b[49m\u001b[43mwrite_empty_chunks\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mwrite_empty_chunks\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2612\u001b[0m \u001b[43m \u001b[49m\u001b[43mchunkmanager_store_kwargs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunkmanager_store_kwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2613\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/backends/api.py:2240\u001b[0m, in \u001b[0;36mto_zarr\u001b[0;34m(dataset, store, chunk_store, mode, synchronizer, group, encoding, compute, consolidated, append_dim, region, safe_chunks, storage_options, zarr_version, zarr_format, write_empty_chunks, chunkmanager_store_kwargs)\u001b[0m\n\u001b[1;32m 2238\u001b[0m \u001b[38;5;66;03m# TODO: figure out how to properly handle unlimited_dims\u001b[39;00m\n\u001b[1;32m 2239\u001b[0m dump_to_store(dataset, zstore, writer, encoding\u001b[38;5;241m=\u001b[39mencoding)\n\u001b[0;32m-> 2240\u001b[0m writes \u001b[38;5;241m=\u001b[39m \u001b[43mwriter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msync\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 2241\u001b[0m \u001b[43m \u001b[49m\u001b[43mcompute\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcompute\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mchunkmanager_store_kwargs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunkmanager_store_kwargs\u001b[49m\n\u001b[1;32m 2242\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2244\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m compute:\n\u001b[1;32m 2245\u001b[0m _finalize_store(writes, zstore)\n", + "File \u001b[0;32m~/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/backends/common.py:277\u001b[0m, in \u001b[0;36mArrayWriter.sync\u001b[0;34m(self, compute, chunkmanager_store_kwargs)\u001b[0m\n\u001b[1;32m 274\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m chunkmanager_store_kwargs \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 275\u001b[0m chunkmanager_store_kwargs \u001b[38;5;241m=\u001b[39m {}\n\u001b[0;32m--> 277\u001b[0m delayed_store \u001b[38;5;241m=\u001b[39m \u001b[43mchunkmanager\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstore\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 278\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msources\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 279\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtargets\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 280\u001b[0m \u001b[43m \u001b[49m\u001b[43mlock\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlock\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 281\u001b[0m \u001b[43m \u001b[49m\u001b[43mcompute\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcompute\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 282\u001b[0m \u001b[43m \u001b[49m\u001b[43mflush\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 283\u001b[0m \u001b[43m \u001b[49m\u001b[43mregions\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mregions\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 284\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mchunkmanager_store_kwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 285\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 286\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msources \u001b[38;5;241m=\u001b[39m []\n\u001b[1;32m 287\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtargets \u001b[38;5;241m=\u001b[39m []\n", + "File \u001b[0;32m~/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/namedarray/daskmanager.py:249\u001b[0m, in \u001b[0;36mDaskManager.store\u001b[0;34m(self, sources, targets, **kwargs)\u001b[0m\n\u001b[1;32m 241\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mstore\u001b[39m(\n\u001b[1;32m 242\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 243\u001b[0m sources: Any \u001b[38;5;241m|\u001b[39m Sequence[Any],\n\u001b[1;32m 244\u001b[0m targets: Any,\n\u001b[1;32m 245\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Any,\n\u001b[1;32m 246\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Any:\n\u001b[1;32m 247\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mdask\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01marray\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m store\n\u001b[0;32m--> 249\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mstore\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 250\u001b[0m \u001b[43m \u001b[49m\u001b[43msources\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msources\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 251\u001b[0m \u001b[43m \u001b[49m\u001b[43mtargets\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtargets\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 252\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 253\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/micromamba/envs/xcube-stac/lib/python3.12/site-packages/dask/array/core.py:1282\u001b[0m, in \u001b[0;36mstore\u001b[0;34m(***failed resolving arguments***)\u001b[0m\n\u001b[1;32m 1280\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m compute:\n\u001b[1;32m 1281\u001b[0m store_dsk \u001b[38;5;241m=\u001b[39m HighLevelGraph(layers, dependencies)\n\u001b[0;32m-> 1282\u001b[0m \u001b[43mcompute_as_if_collection\u001b[49m\u001b[43m(\u001b[49m\u001b[43mArray\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstore_dsk\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmap_keys\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1283\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1285\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n", + "File \u001b[0;32m~/micromamba/envs/xcube-stac/lib/python3.12/site-packages/dask/base.py:397\u001b[0m, in \u001b[0;36mcompute_as_if_collection\u001b[0;34m(cls, dsk, keys, scheduler, get, **kwargs)\u001b[0m\n\u001b[1;32m 395\u001b[0m schedule \u001b[38;5;241m=\u001b[39m get_scheduler(scheduler\u001b[38;5;241m=\u001b[39mscheduler, \u001b[38;5;28mcls\u001b[39m\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mcls\u001b[39m, get\u001b[38;5;241m=\u001b[39mget)\n\u001b[1;32m 396\u001b[0m dsk2 \u001b[38;5;241m=\u001b[39m optimization_function(\u001b[38;5;28mcls\u001b[39m)(dsk, keys, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m--> 397\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mschedule\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdsk2\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkeys\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/micromamba/envs/xcube-stac/lib/python3.12/site-packages/distributed/client.py:3493\u001b[0m, in \u001b[0;36mClient.get\u001b[0;34m(self, dsk, keys, workers, allow_other_workers, resources, sync, asynchronous, direct, retries, priority, fifo_timeout, actors, **kwargs)\u001b[0m\n\u001b[1;32m 3491\u001b[0m should_rejoin \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[1;32m 3492\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 3493\u001b[0m results \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgather\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpacked\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43masynchronous\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43masynchronous\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdirect\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdirect\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3494\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[1;32m 3495\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m f \u001b[38;5;129;01min\u001b[39;00m futures\u001b[38;5;241m.\u001b[39mvalues():\n", + "File \u001b[0;32m~/micromamba/envs/xcube-stac/lib/python3.12/site-packages/distributed/client.py:2566\u001b[0m, in \u001b[0;36mClient.gather\u001b[0;34m(self, futures, errors, direct, asynchronous)\u001b[0m\n\u001b[1;32m 2563\u001b[0m local_worker \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 2565\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m shorten_traceback():\n\u001b[0;32m-> 2566\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msync\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 2567\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_gather\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2568\u001b[0m \u001b[43m \u001b[49m\u001b[43mfutures\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2569\u001b[0m \u001b[43m \u001b[49m\u001b[43merrors\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43merrors\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2570\u001b[0m \u001b[43m \u001b[49m\u001b[43mdirect\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdirect\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2571\u001b[0m \u001b[43m \u001b[49m\u001b[43mlocal_worker\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlocal_worker\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2572\u001b[0m \u001b[43m \u001b[49m\u001b[43masynchronous\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43masynchronous\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2573\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/core/indexing.py:578\u001b[0m, in \u001b[0;36m__array__\u001b[0;34m()\u001b[0m\n\u001b[1;32m 574\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__array__\u001b[39m(\n\u001b[1;32m 575\u001b[0m \u001b[38;5;28mself\u001b[39m, dtype: np\u001b[38;5;241m.\u001b[39mtyping\u001b[38;5;241m.\u001b[39mDTypeLike \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m/\u001b[39m, \u001b[38;5;241m*\u001b[39m, copy: \u001b[38;5;28mbool\u001b[39m \u001b[38;5;241m|\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 576\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m np\u001b[38;5;241m.\u001b[39mndarray:\n\u001b[1;32m 577\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m Version(np\u001b[38;5;241m.\u001b[39m__version__) \u001b[38;5;241m>\u001b[39m\u001b[38;5;241m=\u001b[39m Version(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m2.0.0\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[0;32m--> 578\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m np\u001b[38;5;241m.\u001b[39masarray(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_duck_array(), dtype\u001b[38;5;241m=\u001b[39mdtype, copy\u001b[38;5;241m=\u001b[39mcopy)\n\u001b[1;32m 579\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 580\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m np\u001b[38;5;241m.\u001b[39masarray(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_duck_array(), dtype\u001b[38;5;241m=\u001b[39mdtype)\n", + "File \u001b[0;32m~/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/core/indexing.py:583\u001b[0m, in \u001b[0;36mget_duck_array\u001b[0;34m()\u001b[0m\n\u001b[1;32m 582\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mget_duck_array\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[0;32m--> 583\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39marray\u001b[38;5;241m.\u001b[39mget_duck_array()\n", + "File \u001b[0;32m~/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/core/indexing.py:794\u001b[0m, in \u001b[0;36mget_duck_array\u001b[0;34m()\u001b[0m\n\u001b[1;32m 793\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mget_duck_array\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[0;32m--> 794\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39marray\u001b[38;5;241m.\u001b[39mget_duck_array()\n", + "File \u001b[0;32m~/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/core/indexing.py:657\u001b[0m, in \u001b[0;36mget_duck_array\u001b[0;34m()\u001b[0m\n\u001b[1;32m 653\u001b[0m array \u001b[38;5;241m=\u001b[39m apply_indexer(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39marray, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mkey)\n\u001b[1;32m 654\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 655\u001b[0m \u001b[38;5;66;03m# If the array is not an ExplicitlyIndexedNDArrayMixin,\u001b[39;00m\n\u001b[1;32m 656\u001b[0m \u001b[38;5;66;03m# it may wrap a BackendArray so use its __getitem__\u001b[39;00m\n\u001b[0;32m--> 657\u001b[0m array \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39marray[\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mkey]\n\u001b[1;32m 659\u001b[0m \u001b[38;5;66;03m# self.array[self.key] is now a numpy array when\u001b[39;00m\n\u001b[1;32m 660\u001b[0m \u001b[38;5;66;03m# self.array is a BackendArray subclass\u001b[39;00m\n\u001b[1;32m 661\u001b[0m \u001b[38;5;66;03m# and self.key is BasicIndexer((slice(None, None, None),))\u001b[39;00m\n\u001b[1;32m 662\u001b[0m \u001b[38;5;66;03m# so we need the explicit check for ExplicitlyIndexed\u001b[39;00m\n\u001b[1;32m 663\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(array, ExplicitlyIndexed):\n", + "File \u001b[0;32m~/micromamba/envs/xcube-stac/lib/python3.12/site-packages/rioxarray/_io.py:455\u001b[0m, in \u001b[0;36m__getitem__\u001b[0;34m()\u001b[0m\n\u001b[1;32m 454\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__getitem__\u001b[39m(\u001b[38;5;28mself\u001b[39m, key):\n\u001b[0;32m--> 455\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m indexing\u001b[38;5;241m.\u001b[39mexplicit_indexing_adapter(\n\u001b[1;32m 456\u001b[0m key, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mshape, indexing\u001b[38;5;241m.\u001b[39mIndexingSupport\u001b[38;5;241m.\u001b[39mOUTER, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_getitem\n\u001b[1;32m 457\u001b[0m )\n", + "File \u001b[0;32m~/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/core/indexing.py:1018\u001b[0m, in \u001b[0;36mexplicit_indexing_adapter\u001b[0;34m()\u001b[0m\n\u001b[1;32m 996\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Support explicit indexing by delegating to a raw indexing method.\u001b[39;00m\n\u001b[1;32m 997\u001b[0m \n\u001b[1;32m 998\u001b[0m \u001b[38;5;124;03mOuter and/or vectorized indexers are supported by indexing a second time\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1015\u001b[0m \u001b[38;5;124;03mIndexing result, in the form of a duck numpy-array.\u001b[39;00m\n\u001b[1;32m 1016\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 1017\u001b[0m raw_key, numpy_indices \u001b[38;5;241m=\u001b[39m decompose_indexer(key, shape, indexing_support)\n\u001b[0;32m-> 1018\u001b[0m result \u001b[38;5;241m=\u001b[39m raw_indexing_method(raw_key\u001b[38;5;241m.\u001b[39mtuple)\n\u001b[1;32m 1019\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m numpy_indices\u001b[38;5;241m.\u001b[39mtuple:\n\u001b[1;32m 1020\u001b[0m \u001b[38;5;66;03m# index the loaded np.ndarray\u001b[39;00m\n\u001b[1;32m 1021\u001b[0m indexable \u001b[38;5;241m=\u001b[39m NumpyIndexingAdapter(result)\n", + "File \u001b[0;32m~/micromamba/envs/xcube-stac/lib/python3.12/site-packages/rioxarray/_io.py:430\u001b[0m, in \u001b[0;36m_getitem\u001b[0;34m()\u001b[0m\n\u001b[1;32m 427\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 428\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlock:\n\u001b[1;32m 429\u001b[0m riods \u001b[38;5;241m=\u001b[39m _ensure_warped_vrt(\n\u001b[0;32m--> 430\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmanager\u001b[38;5;241m.\u001b[39macquire(needs_lock\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m), \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mvrt_params\n\u001b[1;32m 431\u001b[0m )\n\u001b[1;32m 432\u001b[0m out \u001b[38;5;241m=\u001b[39m riods\u001b[38;5;241m.\u001b[39mread(band_key, window\u001b[38;5;241m=\u001b[39mwindow, masked\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmasked)\n\u001b[1;32m 433\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_unsigned_dtype \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "File \u001b[0;32m~/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/backends/file_manager.py:193\u001b[0m, in \u001b[0;36macquire\u001b[0;34m()\u001b[0m\n\u001b[1;32m 178\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21macquire\u001b[39m(\u001b[38;5;28mself\u001b[39m, needs_lock\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m):\n\u001b[1;32m 179\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Acquire a file object from the manager.\u001b[39;00m\n\u001b[1;32m 180\u001b[0m \n\u001b[1;32m 181\u001b[0m \u001b[38;5;124;03m A new file is only opened if it has expired from the\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 191\u001b[0m \u001b[38;5;124;03m An open file object, as returned by ``opener(*args, **kwargs)``.\u001b[39;00m\n\u001b[1;32m 192\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 193\u001b[0m file, _ \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_acquire_with_cache_info(needs_lock)\n\u001b[1;32m 194\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m file\n", + "File \u001b[0;32m~/micromamba/envs/xcube-stac/lib/python3.12/site-packages/xarray/backends/file_manager.py:217\u001b[0m, in \u001b[0;36m_acquire_with_cache_info\u001b[0;34m()\u001b[0m\n\u001b[1;32m 215\u001b[0m kwargs \u001b[38;5;241m=\u001b[39m kwargs\u001b[38;5;241m.\u001b[39mcopy()\n\u001b[1;32m 216\u001b[0m kwargs[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmode\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_mode\n\u001b[0;32m--> 217\u001b[0m file \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_opener(\u001b[38;5;241m*\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_args, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 218\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_mode \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mw\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m 219\u001b[0m \u001b[38;5;66;03m# ensure file doesn't get overridden when opened again\u001b[39;00m\n\u001b[1;32m 220\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_mode \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124ma\u001b[39m\u001b[38;5;124m\"\u001b[39m\n", + "File \u001b[0;32m~/micromamba/envs/xcube-stac/lib/python3.12/site-packages/rioxarray/_io.py:981\u001b[0m, in \u001b[0;36m_single_band_open\u001b[0;34m()\u001b[0m\n\u001b[1;32m 976\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_single_band_open\u001b[39m(\u001b[38;5;241m*\u001b[39margs, bidx\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 977\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 978\u001b[0m \u001b[38;5;124;03m Open file as if it only has a single band\u001b[39;00m\n\u001b[1;32m 979\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[1;32m 980\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m SingleBandDatasetReader(\n\u001b[0;32m--> 981\u001b[0m riods\u001b[38;5;241m=\u001b[39mrasterio\u001b[38;5;241m.\u001b[39mopen(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs),\n\u001b[1;32m 982\u001b[0m bidx\u001b[38;5;241m=\u001b[39mbidx,\n\u001b[1;32m 983\u001b[0m )\n", + "File \u001b[0;32m~/micromamba/envs/xcube-stac/lib/python3.12/site-packages/rasterio/env.py:463\u001b[0m, in \u001b[0;36mwrapper\u001b[0;34m()\u001b[0m\n\u001b[1;32m 460\u001b[0m session \u001b[38;5;241m=\u001b[39m DummySession()\n\u001b[1;32m 462\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m env_ctor(session\u001b[38;5;241m=\u001b[39msession):\n\u001b[0;32m--> 463\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m f(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwds)\n", + "File \u001b[0;32m~/micromamba/envs/xcube-stac/lib/python3.12/site-packages/rasterio/__init__.py:355\u001b[0m, in \u001b[0;36mopen\u001b[0;34m()\u001b[0m\n\u001b[1;32m 352\u001b[0m path \u001b[38;5;241m=\u001b[39m _parse_path(raw_dataset_path)\n\u001b[1;32m 354\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m mode \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[0;32m--> 355\u001b[0m dataset \u001b[38;5;241m=\u001b[39m DatasetReader(path, driver\u001b[38;5;241m=\u001b[39mdriver, sharing\u001b[38;5;241m=\u001b[39msharing, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 356\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m mode \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mr+\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m 357\u001b[0m dataset \u001b[38;5;241m=\u001b[39m get_writer_for_path(path, driver\u001b[38;5;241m=\u001b[39mdriver)(\n\u001b[1;32m 358\u001b[0m path, mode, driver\u001b[38;5;241m=\u001b[39mdriver, sharing\u001b[38;5;241m=\u001b[39msharing, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs\n\u001b[1;32m 359\u001b[0m )\n", + "File \u001b[0;32mrasterio/_base.pyx:312\u001b[0m, in \u001b[0;36mrasterio._base.DatasetBase.__init__\u001b[0;34m()\u001b[0m\n", + "\u001b[0;31mRasterioIOError\u001b[0m: Access Denied" + ] + } + ], + "source": [ + "credentials = {\n", + " \"key\": \"O0M0CUQIDQO9TDZ4D8NR\",\n", + " \"secret\": \"qPUyXs9G6j8on6MY5KPhQNHuA5uZTqxEscrbBCGx\",\n", + "}\n", + "store = new_data_store(\"stac-cdse\", stack_mode=True, **credentials)\n", + "bbox = [\n", + " 29.386939788333212,\n", + " 53.16233384987463,\n", + " 29.38925624089212,\n", + " 53.163636088441415,\n", + "]\n", + "bbox_utm = [659574, 5892990, 659724, 5893140]\n", + "ds = store.open_data(\n", + " data_id=\"SENTINEL-2\",\n", + " bbox=bbox_utm,\n", + " time_range=[\"2023-11-01\", \"2023-11-06\"],\n", + " processing_level=\"L2A\",\n", + " spatial_res=10,\n", + " tile_size=(16, 16),\n", + " crs=\"EPSG:32635\",\n", + " bands=[\n", + " \"B01\",\n", + " \"B02\",\n", + " \"B03\",\n", + " \"B04\",\n", + " \"B05\",\n", + " \"B06\",\n", + " \"B07\",\n", + " \"B08\",\n", + " \"B8A\",\n", + " \"B09\",\n", + " \"B11\",\n", + " \"B12\",\n", + " \"SCL\",\n", + " ],\n", + ")\n", + "print(ds)\n", + "store_file = new_data_store(\"file\")\n", + "store_file.write_data(ds, \"minicube_test2.zarr\", replace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c6e80b83-a749-49ed-a60e-ecfe9c4356d8", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a237cf4a-d9d3-4fd6-b148-202eb6fb7388", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.7" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/examples/notebooks/access_sen2_stacktime_mosaicking.py b/examples/notebooks/access_sen2_stacktime_mosaicking.py index 89e43f4..545a02b 100644 --- a/examples/notebooks/access_sen2_stacktime_mosaicking.py +++ b/examples/notebooks/access_sen2_stacktime_mosaicking.py @@ -1,9 +1,11 @@ from xcube.core.store import new_data_store -from xcube_stac._utils import reproject_bbox -import matplotlib.pyplot as plt -import os -from pathlib import Path -import zarr + +# from dask.distributed import Client +# import psutil +# import time +# import os +# import threading +# import matplotlib.pyplot as plt # attrs = { # "site_id": 1280, @@ -43,6 +45,19 @@ # "time_range_end": "2024-04-30", # } +# client = Client() +# time.sleep(3) + + +# def print_memory(): +# while True: +# print(psutil.Process(os.getpid()).memory_info().rss / 1024**3) +# time.sleep(1) +# +# +# daemon = threading.Thread(target=print_memory, daemon=True, name="Monitor") +# daemon.start() + credentials = { "key": "O0M0CUQIDQO9TDZ4D8NR", @@ -61,7 +76,7 @@ ds = store.open_data( data_id="SENTINEL-2", bbox=bbox_utm, - time_range=["2023-11-01", "2023-11-06"], + time_range=["2023-11-01", "2023-12-01"], processing_level="L2A", spatial_res=10, tile_size=(16, 16), @@ -83,8 +98,6 @@ ], ) print(ds) -ds.B03[0].plot() -plt.show() store_file = new_data_store("file") store_file.write_data(ds, "minicube_test2.zarr", replace=True) diff --git a/examples/notebooks/earth_search_sentinel2_l2a_stack_mode.ipynb b/examples/notebooks/earth_search_sentinel2_l2a_stack_mode.ipynb index cdc9819..f21ae50 100644 --- a/examples/notebooks/earth_search_sentinel2_l2a_stack_mode.ipynb +++ b/examples/notebooks/earth_search_sentinel2_l2a_stack_mode.ipynb @@ -7592,7 +7592,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.5" + "version": "3.12.7" } }, "nbformat": 4, diff --git a/xcube_stac/store_mode.py b/xcube_stac/store_mode.py index 9a28bf3..1406b1a 100644 --- a/xcube_stac/store_mode.py +++ b/xcube_stac/store_mode.py @@ -36,7 +36,6 @@ from xcube.core.gridmapping import GridMapping from xcube.core.resampling import resample_in_space from xcube.util.jsonschema import JsonObjectSchema -import xmltodict from .accessor import ( HttpsDataAccessor, @@ -514,7 +513,6 @@ def open_data( list_ds_items = [] for item in items_for_date: list_ds_asset = [] - angles = self._get_angles_from_item(item) for band in open_params["bands"]: ds = rioxarray.open_rasterio( item.assets[band].href, @@ -604,14 +602,6 @@ def _get_mosaic_timestamps(self, grouped: dict, items: list[pystac.Item]): grouped_new[new_key] = value return grouped - def _get_angles_from_item(self, item): - bucket_name = "eodata" - href = item.assets["granule_metadata"].href.replace("s3://eodata/", "") - response = self._util.s3_boto.get_object(Bucket=bucket_name, Key=href) - xml_content = response["Body"].read().decode("utf-8") - xml_dict = xmltodict.parse(xml_content) - return xml_dict - def _mosaic_first_non_nan(list_ds): dim = "dummy" diff --git a/xcube_stac/util.py b/xcube_stac/util.py index 39f13ba..c45d4ef 100644 --- a/xcube_stac/util.py +++ b/xcube_stac/util.py @@ -1,7 +1,6 @@ import collections from typing import Iterator, Union -import boto3 import numpy as np import pystac import pystac_client.client @@ -294,13 +293,6 @@ def __init__(self, storage_options_s3: dict): aws_access_key_id=storage_options_s3["key"], aws_secret_access_key=storage_options_s3["secret"], ) - self.s3_boto = boto3.client( - "s3", - endpoint_url=storage_options_s3["client_kwargs"]["endpoint_url"], - aws_access_key_id=storage_options_s3["key"], - aws_secret_access_key=storage_options_s3["secret"], - region_name="default", - ) self.env = rasterio.env.Env(session=self.session, AWS_VIRTUAL_HOSTING=False) self.env = self.env.__enter__() self.fs = s3fs.S3FileSystem(