Skip to content

Commit

Permalink
(backport) avoid indexes collision for multi-base Reader
Browse files Browse the repository at this point in the history
  • Loading branch information
vincentsarago committed Nov 15, 2023
1 parent a814aaf commit c069da4
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 6 deletions.
1 change: 0 additions & 1 deletion CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@

=======
# 6.2.3.post1 (2023-11-16)

* validate `shape` in `ImageData.get_coverage_array` to avoid rasterio error when re-projecting the geometry [Backported from 6.2.6]
Expand Down
25 changes: 20 additions & 5 deletions rio_tiler/io/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -489,8 +489,11 @@ def tile(

asset_indexes = asset_indexes or {}

# We fall back to `indexes` if provided
indexes = kwargs.pop("indexes", None)

def _reader(asset: str, *args: Any, **kwargs: Any) -> ImageData:
idx = asset_indexes.get(asset) or kwargs.pop("indexes", None) # type: ignore
idx = asset_indexes.get(asset) or indexes # type: ignore

asset_info = self._get_asset_info(asset)
url = asset_info["url"]
Expand Down Expand Up @@ -567,8 +570,11 @@ def part(

asset_indexes = asset_indexes or {}

# We fall back to `indexes` if provided
indexes = kwargs.pop("indexes", None)

def _reader(asset: str, *args: Any, **kwargs: Any) -> ImageData:
idx = asset_indexes.get(asset) or kwargs.pop("indexes", None) # type: ignore
idx = asset_indexes.get(asset) or indexes # type: ignore

asset_info = self._get_asset_info(asset)
url = asset_info["url"]
Expand Down Expand Up @@ -643,8 +649,11 @@ def preview(

asset_indexes = asset_indexes or {}

# We fall back to `indexes` if provided
indexes = kwargs.pop("indexes", None)

def _reader(asset: str, **kwargs: Any) -> ImageData:
idx = asset_indexes.get(asset) or kwargs.pop("indexes", None) # type: ignore
idx = asset_indexes.get(asset) or indexes # type: ignore

asset_info = self._get_asset_info(asset)
url = asset_info["url"]
Expand Down Expand Up @@ -723,8 +732,11 @@ def point(

asset_indexes = asset_indexes or {}

# We fall back to `indexes` if provided
indexes = kwargs.pop("indexes", None)

def _reader(asset: str, *args, **kwargs: Any) -> PointData:
idx = asset_indexes.get(asset) or kwargs.pop("indexes", None) # type: ignore
idx = asset_indexes.get(asset) or indexes # type: ignore

asset_info = self._get_asset_info(asset)
url = asset_info["url"]
Expand Down Expand Up @@ -795,8 +807,11 @@ def feature(

asset_indexes = asset_indexes or {}

# We fall back to `indexes` if provided
indexes = kwargs.pop("indexes", None)

def _reader(asset: str, *args: Any, **kwargs: Any) -> ImageData:
idx = asset_indexes.get(asset) or kwargs.pop("indexes", None) # type: ignore
idx = asset_indexes.get(asset) or indexes # type: ignore

asset_info = self._get_asset_info(asset)
url = asset_info["url"]
Expand Down
16 changes: 16 additions & 0 deletions tests/test_io_stac.py
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,22 @@ def test_tile_valid(rio):
assert img.mask.shape == (256, 256)
assert img.band_names == ["green_b1", "green_b1", "red_b1", "red_b1"]

# check that indexes and asset_indexes are not conflicting
img = stac.tile(
71,
102,
8,
assets=("green", "red"),
indexes=None,
asset_indexes={
"green": (1,),
"red": 1,
},
)
assert img.data.shape == (2, 256, 256)
assert img.mask.shape == (256, 256)
assert img.band_names == ["green_b1", "red_b1"]

img = stac.tile(71, 102, 8, expression="green_b1*2;green_b1;red_b1*2")
assert img.data.shape == (3, 256, 256)
assert img.mask.shape == (256, 256)
Expand Down

0 comments on commit c069da4

Please sign in to comment.