developmentseed / developmentseed/titiler-cmr

AttributeError: 'DataArray' object has no attribute 'values'

Open
#124 0 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
Python
Stars
25
Forks
9
Avg merge
1d 6m
Merged PRs (30d)
1

Description

When hitting `/WebMercatorQuad/map.html?backend=xarray&concept_id=C3294057315-ASF&datetime=2025-11-03T00:00:00Z&variable=displacement&colormap_name=terrain&rescale=-0.1,0.05`, I noticed the following error appear in the logs.

When I zoom in close enough to the Santa Cruz, CA area to see some tiles, it seems okey, but when I then zoom out just a bit, that seems to trigger this error.

```plain
tiler-cmr | INFO: 192.168.65.1:21242 - "GET /tiles/WebMercatorQuad/8/40/100%401x?backend=xarray&concept_id=C3294057315-ASF&datetime=2025-11-03T00%3A00%3A00Z&variable=displacement&colormap_name=terrain&rescale=-0.1%2C0.05 HTTP/1.1" 500 Internal Server Error
tiler-cmr | ERROR: Exception in ASGI application
tiler-cmr | Traceback (most recent call last):
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/uvicorn/protocols/http/h11_impl.py", line 403, in run_asgi
tiler-cmr | result = await app( # type: ignore[func-returns-value]
tiler-cmr | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__
tiler-cmr | return await self.app(scope, receive, send)
tiler-cmr | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/fastapi/applications.py", line 1135, in __call__
tiler-cmr | await super().__call__(scope, receive, send)
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/starlette/applications.py", line 107, in __call__
tiler-cmr | await self.middleware_stack(scope, receive, send)
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 186, in __call__
tiler-cmr | raise exc
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 164, in __call__
tiler-cmr | await self.app(scope, receive, _send)
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/titiler/core/middleware.py", line 153, in __call__
tiler-cmr | raise exception
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/titiler/core/middleware.py", line 139, in __call__
tiler-cmr | await self.app(scope, receive, send)
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/titiler/core/middleware.py", line 57, in __call__
tiler-cmr | await self.app(scope, receive, send_wrapper)
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/starlette/middleware/cors.py", line 85, in __call__
tiler-cmr | await self.app(scope, receive, send)
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
tiler-cmr | await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
tiler-cmr | raise exc
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
tiler-cmr | await app(scope, receive, sender)
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
tiler-cmr | await self.app(scope, receive, send)
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/starlette/routing.py", line 716, in __call__
tiler-cmr | await self.middleware_stack(scope, receive, send)
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/starlette/routing.py", line 736, in app
tiler-cmr | await route.handle(scope, receive, send)
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/starlette/routing.py", line 290, in handle
tiler-cmr | await self.app(scope, receive, send)
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/fastapi/routing.py", line 115, in app
tiler-cmr | await wrap_app_handling_exceptions(app, request)(scope, receive, send)
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
tiler-cmr | raise exc
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
tiler-cmr | await app(scope, receive, sender)
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/fastapi/routing.py", line 101, in app
tiler-cmr | response = await f(request)
tiler-cmr | ^^^^^^^^^^^^^^^^
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/fastapi/routing.py", line 355, in app
tiler-cmr | raw_response = await run_endpoint_function(
tiler-cmr | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/fastapi/routing.py", line 245, in run_endpoint_function
tiler-cmr | return await run_in_threadpool(dependant.call, **values)
tiler-cmr | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/starlette/concurrency.py", line 32, in run_in_threadpool
tiler-cmr | return await anyio.to_thread.run_sync(func)
tiler-cmr | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/anyio/to_thread.py", line 56, in run_sync
tiler-cmr | return await get_async_backend().run_sync_in_worker_thread(
tiler-cmr | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 2441, in run_sync_in_worker_thread
tiler-cmr | return await future
tiler-cmr | ^^^^^^^^^^^^
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 943, in run
tiler-cmr | result = context.run(func, *args)
tiler-cmr | ^^^^^^^^^^^^^^^^^^^^^^^^
tiler-cmr | File "/app/titiler/cmr/factory.py", line 606, in tiles_endpoint
tiler-cmr | image, _ = src_dst.tile(
tiler-cmr | ^^^^^^^^^^^^^
tiler-cmr | File "/app/titiler/cmr/backend.py", line 360, in tile
tiler-cmr | return mosaic_reader(mosaic_assets, _reader, tile_x, tile_y, tile_z, **kwargs)
tiler-cmr | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/rio_tiler/mosaic/reader.py", line 89, in mosaic_reader
tiler-cmr | for img, asset in filter_tasks(
tiler-cmr | ^^^^^^^^^^^^^
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/rio_tiler/tasks.py", line 34, in filter_tasks
tiler-cmr | yield future.result(), asset
tiler-cmr | ^^^^^^^^^^^^^^^
tiler-cmr | File "/usr/local/lib/python3.12/concurrent/futures/_base.py", line 449, in result
tiler-cmr | return self.__get_result()
tiler-cmr | ^^^^^^^^^^^^^^^^^^^
tiler-cmr | File "/usr/local/lib/python3.12/concurrent/futures/_base.py", line 401, in __get_result
tiler-cmr | raise self._exception
tiler-cmr | File "/usr/local/lib/python3.12/concurrent/futures/thread.py", line 59, in run
tiler-cmr | result = self.fn(*self.args, **self.kwargs)
tiler-cmr | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tiler-cmr | File "/app/titiler/cmr/backend.py", line 344, in _reader
tiler-cmr | return src_dst.tile(x, y, z, **kwargs)
tiler-cmr | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/rio_tiler/io/xarray.py", line 285, in tile
tiler-cmr | da = da.rio.reproject(
tiler-cmr | ^^^^^^^^^^^^^^^^^
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/rioxarray/raster_array.py", line 471, in reproject
tiler-cmr | source=self._obj.values,
tiler-cmr | ^^^^^^^^^^^^^^^^
tiler-cmr | File "/app/.venv/lib/python3.12/site-packages/xarray/core/common.py", line 300, in __getattr__
tiler-cmr | raise AttributeError(
tiler-cmr | AttributeError: 'DataArray' object has no attribute 'values'
```

Contributor guide

Open the contributing guide

Research direction

Reproduce the WebMercatorQuad request while zooming out, then trace the failure from titiler/cmr/factory.py:tiles_endpoint through titiler/cmr/backend.py:tile and _reader. Compare the xarray tile path with the rioxarray reproject call shown in the traceback; done means the request no longer returns HTTP 500 for this case.

Written by the indexing model from the issue text.

Assessment

Tech stack
fastapi, python
Domain
backend
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.