tiled icon indicating copy to clipboard operation
tiled copied to clipboard

tree falls on broken external HDF5 links

Open toqduj opened this issue 11 months ago • 8 comments

It seems that when I have HDF5 files with external links that can no longer be reached, Tiled throws an error. Perhaps the better way would be to quietly accept a broken link and continue to read whatever is there.

to reproduce:

On the command line, I have started the server:

tiled serve directory --public ~/Documents/BAM/Measurements/newMouseTest/Measurements/SAXS002/data/2025/20250125/autoproc

In the Jupyter notebook, I then have the following lines:

from tiled.client import from_uri

# Connect to the Tiled server
client = from_uri("http://localhost:8000")
from tiled.utils import tree
tree(client)

This gives me the following output in the notebook:

├── MOUSE_20250125_2_164_processed_250129_182256
---------------------------------------------------------------------------
HTTPStatusError                           Traceback (most recent call last)
Cell In[35], [line 2](vscode-notebook-cell:?execution_count=35&line=2)
      [1](vscode-notebook-cell:?execution_count=35&line=1) from tiled.utils import tree
----> [2](vscode-notebook-cell:?execution_count=35&line=2) tree(client)

File ~/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/utils.py:401, in tree(tree, max_lines)
    [399](https://file+.vscode-resource.vscode-cdn.net/Users/bpauw/Code/Julias_camonitor_log/~/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/utils.py:399)     print("<Empty>")
    [400](https://file+.vscode-resource.vscode-cdn.net/Users/bpauw/Code/Julias_camonitor_log/~/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/utils.py:400)     return
--> [401](https://file+.vscode-resource.vscode-cdn.net/Users/bpauw/Code/Julias_camonitor_log/~/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/utils.py:401) for counter, line in enumerate(gen_tree(tree), start=1):
    [402](https://file+.vscode-resource.vscode-cdn.net/Users/bpauw/Code/Julias_camonitor_log/~/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/utils.py:402)     if (max_lines is not None) and (counter > max_lines):
    [403](https://file+.vscode-resource.vscode-cdn.net/Users/bpauw/Code/Julias_camonitor_log/~/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/utils.py:403)         print(
    [404](https://file+.vscode-resource.vscode-cdn.net/Users/bpauw/Code/Julias_camonitor_log/~/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/utils.py:404)             f"<Output truncated at {max_lines} lines. "
    [405](https://file+.vscode-resource.vscode-cdn.net/Users/bpauw/Code/Julias_camonitor_log/~/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/utils.py:405)             "Adjust tree's max_lines parameter to see more.>"
    [406](https://file+.vscode-resource.vscode-cdn.net/Users/bpauw/Code/Julias_camonitor_log/~/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/utils.py:406)         )

File ~/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/utils.py:361, in gen_tree(tree, nodes, last)
    [359](https://file+.vscode-resource.vscode-cdn.net/Users/bpauw/Code/Julias_camonitor_log/~/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/utils.py:359)     last_index = len(fast_tree) - 1
    [360](https://file+.vscode-resource.vscode-cdn.net/Users/bpauw/Code/Julias_camonitor_log/~/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/utils.py:360)     for index, node in enumerate(fast_tree):
--> [361](https://file+.vscode-resource.vscode-cdn.net/Users/bpauw/Code/Julias_camonitor_log/~/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/utils.py:361)         yield from gen_tree(fast_tree, [node], [index == last_index])
    [362](https://file+.vscode-resource.vscode-cdn.net/Users/bpauw/Code/Julias_camonitor_log/~/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/utils.py:362) else:
    [363](https://file+.vscode-resource.vscode-cdn.net/Users/bpauw/Code/Julias_camonitor_log/~/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/utils.py:363)     value = fast_tree[nodes[-1]]

File ~/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/utils.py:367, in gen_tree(tree, nodes, last)
    [365](https://file+.vscode-resource.vscode-cdn.net/Users/bpauw/Code/Julias_camonitor_log/~/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/utils.py:365)     yield _line(nodes, last)
...
     [61](https://file+.vscode-resource.vscode-cdn.net/Users/bpauw/Code/Julias_camonitor_log/~/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/client/utils.py:61) )
---> [62](https://file+.vscode-resource.vscode-cdn.net/Users/bpauw/Code/Julias_camonitor_log/~/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/client/utils.py:62) raise httpx.HTTPStatusError(message, request=request, response=response)

HTTPStatusError: Server error '500 Internal Server Error' for url 'http://localhost:8000/api/v1/search/MOUSE_20250125_2_164_processed_250129_182256?page%5Boffset%5D=0&sort='
For more information, server admin can search server logs for correlation ID c61dee2f554fc2fb.

And the following in the shell:

[d03c8f792a002f1d] 127.0.0.1:56801 (admin) - "GET /api/v1/metadata/?fields=structure_family&fields=structure&fields=specs HTTP/1.1" 304 Not Modified
[dd245c2e47d41de7] 127.0.0.1:56802 (admin) - "GET /api/v1/metadata/?fields=structure_family&fields=structure&fields=specs&fields=metadata&fields=sorting&fields=count HTTP/1.1" 304 Not Modified
[0a126aea72e74c3b] 127.0.0.1:56800 (admin) - "GET /api/v1/search/?page[offset]=0&page[limit]=10&fields= HTTP/1.1" 304 Not Modified
[f942f5ef4da1f6d0] 127.0.0.1:56801 (admin) - "GET /api/v1/search/?page[offset]=0&page[limit]=10&fields= HTTP/1.1" 304 Not Modified
[40a531958e8c8e12] 127.0.0.1:56802 (admin) - "GET /api/v1/search/?page[offset]=0&page[limit]=10&fields= HTTP/1.1" 304 Not Modified
[51a88c8624c8d25f] 127.0.0.1:56807 (public) - "GET /api/v1/search/?fields=&sort= HTTP/1.1" 200 OK
[c520edb601e4ede1] 127.0.0.1:56807 (public) - "GET /api/v1/search/?fields=&sort= HTTP/1.1" 200 OK
[53fad7aa6d8feb52] 127.0.0.1:56807 (public) - "GET /api/v1/search/?fields=&sort= HTTP/1.1" 200 OK
[3eeac0e820a7e3de] 127.0.0.1:56807 (public) - "GET /api/v1/metadata/MOUSE_20250125_2_164_processed_250129_182256 HTTP/1.1" 200 OK
[7acfce78f4015989] 127.0.0.1:56807 (public) - "GET /api/v1/search/MOUSE_20250125_2_164_processed_250129_182256?fields=&sort= HTTP/1.1" 200 OK
[c61dee2f554fc2fb] 127.0.0.1:56807 (public) - "GET /api/v1/search/MOUSE_20250125_2_164_processed_250129_182256?page%5Boffset%5D=0&sort= HTTP/1.1" 500 Internal Server Error
[c61dee2f554fc2fb] ERROR:    Exception in ASGI application
Traceback (most recent call last):
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/_utils.py", line 76, in collapse_excgroups
    yield
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/base.py", line 182, in __call__
    recv_stream.close()
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 767, in __aexit__
    raise BaseExceptionGroup(
exceptiongroup.ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/uvicorn/protocols/http/httptools_impl.py", line 409, in run_asgi
    result = await app(  # type: ignore[func-returns-value]
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__
    return await self.app(scope, receive, send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/fastapi/applications.py", line 1054, in __call__
    await super().__call__(scope, receive, send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/applications.py", line 112, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/errors.py", line 187, in __call__
    raise exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/errors.py", line 165, in __call__
    await self.app(scope, receive, _send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/asgi_correlation_id/middleware.py", line 90, in __call__
    await self.app(scope, receive, handle_outgoing_request)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/base.py", line 182, in __call__
    recv_stream.close()
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/contextlib.py", line 135, in __exit__
    self.gen.throw(type, value, traceback)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    raise exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/base.py", line 179, in __call__
    response = await self.dispatch_func(request, call_next)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/server/app.py", line 879, in current_principal_logging_filter
    response = await call_next(request)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/base.py", line 154, in call_next
    raise app_exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/base.py", line 141, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/base.py", line 182, in __call__
    recv_stream.close()
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/contextlib.py", line 135, in __exit__
    self.gen.throw(type, value, traceback)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    raise exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/base.py", line 179, in __call__
    response = await self.dispatch_func(request, call_next)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/server/app.py", line 860, in capture_metrics_prometheus
    response = await call_next(request)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/base.py", line 154, in call_next
    raise app_exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/base.py", line 141, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/base.py", line 182, in __call__
    recv_stream.close()
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/contextlib.py", line 135, in __exit__
    self.gen.throw(type, value, traceback)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    raise exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/base.py", line 179, in __call__
    response = await self.dispatch_func(request, call_next)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/server/app.py", line 815, in capture_metrics
    response = await call_next(request)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/base.py", line 154, in call_next
    raise app_exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/base.py", line 141, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/base.py", line 182, in __call__
    recv_stream.close()
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/contextlib.py", line 135, in __exit__
    self.gen.throw(type, value, traceback)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    raise exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/base.py", line 179, in __call__
    response = await self.dispatch_func(request, call_next)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/server/app.py", line 761, in set_cookies
    response = await call_next(request)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/base.py", line 154, in call_next
    raise app_exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/base.py", line 141, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/base.py", line 182, in __call__
    recv_stream.close()
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/contextlib.py", line 135, in __exit__
    self.gen.throw(type, value, traceback)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    raise exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/base.py", line 179, in __call__
    response = await self.dispatch_func(request, call_next)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/server/app.py", line 753, in client_compatibility_check
    response = await call_next(request)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/base.py", line 154, in call_next
    raise app_exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/base.py", line 141, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/base.py", line 182, in __call__
    recv_stream.close()
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/contextlib.py", line 135, in __exit__
    self.gen.throw(type, value, traceback)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    raise exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/base.py", line 179, in __call__
    response = await self.dispatch_func(request, call_next)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/server/app.py", line 714, in double_submit_cookie_csrf_protection
    response = await call_next(request)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/base.py", line 154, in call_next
    raise app_exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/base.py", line 141, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/server/compression.py", line 27, in __call__
    await responder(scope, receive, send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/server/compression.py", line 48, in __call__
    await self.app(scope, receive, self.send_compressed)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/cors.py", line 85, in __call__
    await self.app(scope, receive, send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/middleware/exceptions.py", line 62, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/routing.py", line 715, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/routing.py", line 735, in app
    await route.handle(scope, receive, send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/routing.py", line 288, in handle
    await self.app(scope, receive, send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/routing.py", line 76, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/starlette/routing.py", line 73, in app
    response = await f(request)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/fastapi/routing.py", line 301, in app
    raw_response = await run_endpoint_function(
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/fastapi/routing.py", line 212, in run_endpoint_function
    return await dependant.call(**values)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/server/router.py", line 290, in route_with_sig
    return await route(*args, **kwargs)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/server/router.py", line 197, in search
    resource, metadata_stale_at, must_revalidate = await construct_entries_response(
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/server/core.py", line 231, in construct_entries_response
    resource = await construct_resource(
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/server/core.py", line 464, in construct_resource
    contents[key] = await construct_resource(
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/server/core.py", line 464, in construct_resource
    contents[key] = await construct_resource(
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/server/core.py", line 456, in construct_resource
    for key, adapter in entry.items():
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/iterviews.py", line 112, in __iter__
    yield from self._items_slice(0, None, 1)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/adapters/hdf5.py", line 255, in _items_slice
    items = [(key, self[key]) for key in list(self)]
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/adapters/hdf5.py", line 255, in <listcomp>
    items = [(key, self[key]) for key in list(self)]
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/tiled/adapters/hdf5.py", line 154, in __getitem__
    value = self._file[key]
  File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
  File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.9/site-packages/h5py/_hl/group.py", line 357, in __getitem__
    oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
  File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
  File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
  File "h5py/h5o.pyx", line 257, in h5py.h5o.open
KeyError: "Unable to open object (unable to open external file, external link file name = 'beam_profile/eiger_511_master.h5')"

toqduj avatar Feb 15 '25 13:02 toqduj

Hello @toqduj! I agree. How's this branch work for you?

https://github.com/bluesky/tiled/pull/889

danielballan avatar Feb 15 '25 14:02 danielballan

Thanks for looking into this... I installed it using pip install --upgrade git+https://github.com/danielballan/tiled.git

But I must be doing something wrong with the install, I get the following importerror, that does not resolve with an upgrade of dask....:

│ /Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/tiled/server/etag.py:1 in <module>          │
│                                                                                                                       │
│ ❱  1 from dask.base import normalize_object, normalize_token                                                          │
│    2 from dask.base import tokenize as dask_tokenize                                                                  │
│    3                                                                                                                  │
│    4                                                                                                                  │
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
ImportError: cannot import name 'normalize_object' from 'dask.base' 
(/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/dask/base.py)

Dask version seems to be:

{
 "date": "2025-02-13T17:00:59-0600",
 "dirty": false,
 "error": null,
 "full-revisionid": "4d71629d1f22ced0dd780919f22e70a642ec6753",
 "version": "2025.2.0"
}

toqduj avatar Feb 16 '25 12:02 toqduj

This looks like a very recent backward-incompatible change in dask. Recently there have been a wave of changes to dask APIs that I would have considered "public" based on their names, but are not treated as public by the current maintainers. Try downgrading dask for the purposes of this issue, and we'll open a separate issue to look at managing this change in dask.

danielballan avatar Feb 18 '25 14:02 danielballan

Actually, I take that back. This code does address a backward-incompatible change in dask, but it happened in 2024.9.0.

https://github.com/bluesky/tiled/blob/819d194253a888b2a87208524675036baac8a8fa/tiled/server/etag.py#L1-L9

In the current version of dask, the function is still here:

https://github.com/dask/dask/blob/e260e34e6db8b0b883e8323623abfd0e9499e508/dask/tokenize.py#L195

Are you able to import dask.tokenize in your environment?

danielballan avatar Feb 18 '25 20:02 danielballan

Thanks for taking a look. dask.tokenize can be imported yes.

toqduj avatar Feb 20 '25 17:02 toqduj

Then, the question why you are ending up the dask.base section of the code quoted above. You should be in the dask.tokenize section, I would think.

danielballan avatar Feb 20 '25 18:02 danielballan

with me, etag.py starts like this:

from dask.base import normalize_object, normalize_token
from dask.base import tokenize as dask_tokenize


def tokenize(obj):
    # This just uses dask for now but may evolve to something custom in future.
    return dask_tokenize(obj)

so it seems it's not the right version. it was tiled-0.1.0b6.dev1+g356dbab That is the version that installs when I run pip install --upgrade git+https://github.com/danielballan/tiled.git

I see you're about 13 steps ahead though. So, after cloning and switching to the tree-skip-errors branch, when I run it on my directory, I get a few ... angry comments from tree(client):

├── MOUSE_20250125_2_164_processed_250129_182256
SKIPPING due to error: Server error '500 Internal Server Error' for url 'http://localhost:8000/api/v1/search/MOUSE_20250125_2_164_processed_250129_182256?page%5Boffset%5D=0&sort='
For more information, server admin can search server logs for correlation ID dfafd026e2c19b7d.
SKIPPING due to error: [Errno 54] Connection reset by peer
├── MOUSE_20250125_2_221_processed_250129_182341
SKIPPING due to error: Server error '500 Internal Server Error' for url 'http://localhost:8000/api/v1/search/MOUSE_20250125_2_221_processed_250129_182341?page%5Boffset%5D=0&sort='
For more information, server admin can search server logs for correlation ID 7653ac7d2650cb85.
SKIPPING due to error: [Errno 54] Connection reset by peer
├── MOUSE_20250125_2_117_processed_250129_182218
SKIPPING due to error: Server error '500 Internal Server Error' for url 'http://localhost:8000/api/v1/search/MOUSE_20250125_2_117_processed_250129_182218?page%5Boffset%5D=0&sort='
For more information, server admin can search server logs for correlation ID 7ab64dd0f4d4e499.
SKIPPING due to error: [Errno 54] Connection reset by peer
├── MOUSE_20250125_2_72_processed_250129_182143
SKIPPING due to error: Server error '500 Internal Server Error' for url 'http://localhost:8000/api/v1/search/MOUSE_20250125_2_72_processed_250129_182143?page%5Boffset%5D=0&sort='
For more information, server admin can search server logs for correlation ID 5671607ebd98683f.
SKIPPING due to error: [Errno 54] Connection reset by peer
├── MOUSE_20250125_2_4_processed_250129_182050
SKIPPING due to error: Server error '500 Internal Server Error' for url 'http://localhost:8000/api/v1/search/MOUSE_20250125_2_4_processed_250129_182050?page%5Boffset%5D=0&sort='
For more information, server admin can search server logs for correlation ID 86fc4a383f4a6011.
SKIPPING due to error: [Errno 54] Connection reset by peer
├── MOUSE_20250125_2_53_processed_250129_182128
SKIPPING due to error: Server error '500 Internal Server Error' for url 'http://localhost:8000/api/v1/search/MOUSE_20250125_2_53_processed_250129_182128?page%5Boffset%5D=0&sort='
For more information, server admin can search server logs for correlation ID 52a27e6a5fa9791a.
SKIPPING due to error: [Errno 54] Connection reset by peer
├── MOUSE_20250125_2_40_processed_250129_182117
SKIPPING due to error: Server error '500 Internal Server Error' for url 'http://localhost:8000/api/v1/search/MOUSE_20250125_2_40_processed_250129_182117?page%5Boffset%5D=0&sort='
For more information, server admin can search server logs for correlation ID 203991ceb7859f2e.
<Output truncated at 20 lines. Adjust tree's max_lines parameter to see more.>

And in the terminal running the server, I see it is equally unhappy:

 200 OK
[cf7445f9b98f69d5] 127.0.0.1:53651 (public) - "GET /api/v1/search/MOUSE_20250125_2_53_processed_250129_182128?fields=&sort= HTTP/1.1" 200 OK
[52a27e6a5fa9791a] 127.0.0.1:53651 (public) - "GET /api/v1/search/MOUSE_20250125_2_53_processed_250129_182128?page%5Boffset%5D=0&sort= HTTP/1.1" 500 Internal Server Error
[52a27e6a5fa9791a] ERROR:    Exception in ASGI application
  + Exception Group Traceback (most recent call last):
  |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_utils.py", line 76, in collapse_excgroups
  |     yield
  |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 178, in __call__
  |     async with anyio.create_task_group() as task_group:
  |                ^^^^^^^^^^^^^^^^^^^^^^^^^
  |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 767, in __aexit__
  |     raise BaseExceptionGroup(
  | ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
  +-+---------------- 1 ----------------
    | Traceback (most recent call last):
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/uvicorn/protocols/http/httptools_impl.py", line 409, in run_asgi
    |     result = await app(  # type: ignore[func-returns-value]
    |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__
    |     return await self.app(scope, receive, send)
    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/fastapi/applications.py", line 1054, in __call__
    |     await super().__call__(scope, receive, send)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/applications.py", line 112, in __call__
    |     await self.middleware_stack(scope, receive, send)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 187, in __call__
    |     raise exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 165, in __call__
    |     await self.app(scope, receive, _send)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/asgi_correlation_id/middleware.py", line 90, in __call__
    |     await self.app(scope, receive, handle_outgoing_request)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 177, in __call__
    |     with recv_stream, send_stream, collapse_excgroups():
    |                                    ^^^^^^^^^^^^^^^^^^^^
    |   File "/opt/homebrew/Cellar/[email protected]/3.12.8/Frameworks/Python.framework/Versions/3.12/lib/python3.12/contextlib.py", line 158, in __exit__
    |     self.gen.throw(value)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    |     raise exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 179, in __call__
    |     response = await self.dispatch_func(request, call_next)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/server/app.py", line 879, in current_principal_logging_filter
    |     response = await call_next(request)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 154, in call_next
    |     raise app_exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 141, in coro
    |     await self.app(scope, receive_or_disconnect, send_no_error)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 177, in __call__
    |     with recv_stream, send_stream, collapse_excgroups():
    |                                    ^^^^^^^^^^^^^^^^^^^^
    |   File "/opt/homebrew/Cellar/[email protected]/3.12.8/Frameworks/Python.framework/Versions/3.12/lib/python3.12/contextlib.py", line 158, in __exit__
    |     self.gen.throw(value)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    |     raise exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 179, in __call__
    |     response = await self.dispatch_func(request, call_next)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/server/app.py", line 860, in capture_metrics_prometheus
    |     response = await call_next(request)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 154, in call_next
    |     raise app_exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 141, in coro
    |     await self.app(scope, receive_or_disconnect, send_no_error)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 177, in __call__
    |     with recv_stream, send_stream, collapse_excgroups():
    |                                    ^^^^^^^^^^^^^^^^^^^^
    |   File "/opt/homebrew/Cellar/[email protected]/3.12.8/Frameworks/Python.framework/Versions/3.12/lib/python3.12/contextlib.py", line 158, in __exit__
    |     self.gen.throw(value)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    |     raise exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 179, in __call__
    |     response = await self.dispatch_func(request, call_next)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/server/app.py", line 815, in capture_metrics
    |     response = await call_next(request)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 154, in call_next
    |     raise app_exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 141, in coro
    |     await self.app(scope, receive_or_disconnect, send_no_error)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 177, in __call__
    |     with recv_stream, send_stream, collapse_excgroups():
    |                                    ^^^^^^^^^^^^^^^^^^^^
    |   File "/opt/homebrew/Cellar/[email protected]/3.12.8/Frameworks/Python.framework/Versions/3.12/lib/python3.12/contextlib.py", line 158, in __exit__
    |     self.gen.throw(value)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    |     raise exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 179, in __call__
    |     response = await self.dispatch_func(request, call_next)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/server/app.py", line 761, in set_cookies
    |     response = await call_next(request)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 154, in call_next
    |     raise app_exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 141, in coro
    |     await self.app(scope, receive_or_disconnect, send_no_error)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 177, in __call__
    |     with recv_stream, send_stream, collapse_excgroups():
    |                                    ^^^^^^^^^^^^^^^^^^^^
    |   File "/opt/homebrew/Cellar/[email protected]/3.12.8/Frameworks/Python.framework/Versions/3.12/lib/python3.12/contextlib.py", line 158, in __exit__
    |     self.gen.throw(value)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    |     raise exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 179, in __call__
    |     response = await self.dispatch_func(request, call_next)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/server/app.py", line 753, in client_compatibility_check
    |     response = await call_next(request)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 154, in call_next
    |     raise app_exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 141, in coro
    |     await self.app(scope, receive_or_disconnect, send_no_error)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 177, in __call__
    |     with recv_stream, send_stream, collapse_excgroups():
    |                                    ^^^^^^^^^^^^^^^^^^^^
    |   File "/opt/homebrew/Cellar/[email protected]/3.12.8/Frameworks/Python.framework/Versions/3.12/lib/python3.12/contextlib.py", line 158, in __exit__
    |     self.gen.throw(value)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    |     raise exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 179, in __call__
    |     response = await self.dispatch_func(request, call_next)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/server/app.py", line 714, in double_submit_cookie_csrf_protection
    |     response = await call_next(request)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 154, in call_next
    |     raise app_exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 141, in coro
    |     await self.app(scope, receive_or_disconnect, send_no_error)
    |   File "/Users/bpauw/Code/tiled/tiled/server/compression.py", line 27, in __call__
    |     await responder(scope, receive, send)
    |   File "/Users/bpauw/Code/tiled/tiled/server/compression.py", line 48, in __call__
    |     await self.app(scope, receive, self.send_compressed)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/cors.py", line 85, in __call__
    |     await self.app(scope, receive, send)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 62, in __call__
    |     await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    |     raise exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    |     await app(scope, receive, sender)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/routing.py", line 715, in __call__
    |     await self.middleware_stack(scope, receive, send)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/routing.py", line 735, in app
    |     await route.handle(scope, receive, send)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/routing.py", line 288, in handle
    |     await self.app(scope, receive, send)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/routing.py", line 76, in app
    |     await wrap_app_handling_exceptions(app, request)(scope, receive, send)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    |     raise exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    |     await app(scope, receive, sender)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/routing.py", line 73, in app
    |     response = await f(request)
    |                ^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/fastapi/routing.py", line 301, in app
    |     raw_response = await run_endpoint_function(
    |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/fastapi/routing.py", line 212, in run_endpoint_function
    |     return await dependant.call(**values)
    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/server/router.py", line 290, in route_with_sig
    |     return await route(*args, **kwargs)
    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/server/router.py", line 197, in search
    |     resource, metadata_stale_at, must_revalidate = await construct_entries_response(
    |                                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/server/core.py", line 231, in construct_entries_response
    |     resource = await construct_resource(
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/server/core.py", line 464, in construct_resource
    |     contents[key] = await construct_resource(
    |                     ^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/server/core.py", line 464, in construct_resource
    |     contents[key] = await construct_resource(
    |                     ^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/server/core.py", line 456, in construct_resource
    |     for key, adapter in entry.items():
    |                         ^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/iterviews.py", line 112, in __iter__
    |     yield from self._items_slice(0, None, 1)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/adapters/hdf5.py", line 245, in _items_slice
    |     items = [(key, self[key]) for key in list(self)]
    |                    ~~~~^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/adapters/hdf5.py", line 144, in __getitem__
    |     value = self._file[key]
    |             ~~~~~~~~~~^^^^^
    |   File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
    |   File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/h5py/_hl/group.py", line 357, in __getitem__
    |     oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
    |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
    |   File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
    |   File "h5py/h5o.pyx", line 257, in h5py.h5o.open
    | KeyError: "Unable to open object (unable to open external file, external link file name = 'beam_profile/eiger_178_master.h5')"
    +------------------------------------

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/uvicorn/protocols/http/httptools_impl.py", line 409, in run_asgi
    result = await app(  # type: ignore[func-returns-value]
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__
    return await self.app(scope, receive, send)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/fastapi/applications.py", line 1054, in __call__
    await super().__call__(scope, receive, send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/applications.py", line 112, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 187, in __call__
    raise exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 165, in __call__
    await self.app(scope, receive, _send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/asgi_correlation_id/middleware.py", line 90, in __call__
    await self.app(scope, receive, handle_outgoing_request)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 177, in __call__
    with recv_stream, send_stream, collapse_excgroups():
                                   ^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/[email protected]/3.12.8/Frameworks/Python.framework/Versions/3.12/lib/python3.12/contextlib.py", line 158, in __exit__
    self.gen.throw(value)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    raise exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 179, in __call__
    response = await self.dispatch_func(request, call_next)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/tiled/tiled/server/app.py", line 879, in current_principal_logging_filter
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 154, in call_next
    raise app_exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 141, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 177, in __call__
    with recv_stream, send_stream, collapse_excgroups():
                                   ^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/[email protected]/3.12.8/Frameworks/Python.framework/Versions/3.12/lib/python3.12/contextlib.py", line 158, in __exit__
    self.gen.throw(value)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    raise exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 179, in __call__
    response = await self.dispatch_func(request, call_next)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/tiled/tiled/server/app.py", line 860, in capture_metrics_prometheus
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 154, in call_next
    raise app_exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 141, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 177, in __call__
    with recv_stream, send_stream, collapse_excgroups():
                                   ^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/[email protected]/3.12.8/Frameworks/Python.framework/Versions/3.12/lib/python3.12/contextlib.py", line 158, in __exit__
    self.gen.throw(value)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    raise exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 179, in __call__
    response = await self.dispatch_func(request, call_next)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/tiled/tiled/server/app.py", line 815, in capture_metrics
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 154, in call_next
    raise app_exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 141, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 177, in __call__
    with recv_stream, send_stream, collapse_excgroups():
                                   ^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/[email protected]/3.12.8/Frameworks/Python.framework/Versions/3.12/lib/python3.12/contextlib.py", line 158, in __exit__
    self.gen.throw(value)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    raise exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 179, in __call__
    response = await self.dispatch_func(request, call_next)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/tiled/tiled/server/app.py", line 761, in set_cookies
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 154, in call_next
    raise app_exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 141, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 177, in __call__
    with recv_stream, send_stream, collapse_excgroups():
                                   ^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/[email protected]/3.12.8/Frameworks/Python.framework/Versions/3.12/lib/python3.12/contextlib.py", line 158, in __exit__
    self.gen.throw(value)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    raise exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 179, in __call__
    response = await self.dispatch_func(request, call_next)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/tiled/tiled/server/app.py", line 753, in client_compatibility_check
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 154, in call_next
    raise app_exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 141, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 177, in __call__
    with recv_stream, send_stream, collapse_excgroups():
                                   ^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/[email protected]/3.12.8/Frameworks/Python.framework/Versions/3.12/lib/python3.12/contextlib.py", line 158, in __exit__
    self.gen.throw(value)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    raise exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 179, in __call__
    response = await self.dispatch_func(request, call_next)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/tiled/tiled/server/app.py", line 714, in double_submit_cookie_csrf_protection
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 154, in call_next
    raise app_exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 141, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/Users/bpauw/Code/tiled/tiled/server/compression.py", line 27, in __call__
    await responder(scope, receive, send)
  File "/Users/bpauw/Code/tiled/tiled/server/compression.py", line 48, in __call__
    await self.app(scope, receive, self.send_compressed)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/cors.py", line 85, in __call__
    await self.app(scope, receive, send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 62, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/routing.py", line 715, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/routing.py", line 735, in app
    await route.handle(scope, receive, send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/routing.py", line 288, in handle
    await self.app(scope, receive, send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/routing.py", line 76, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/routing.py", line 73, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/fastapi/routing.py", line 301, in app
    raw_response = await run_endpoint_function(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/fastapi/routing.py", line 212, in run_endpoint_function
    return await dependant.call(**values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/tiled/tiled/server/router.py", line 290, in route_with_sig
    return await route(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/tiled/tiled/server/router.py", line 197, in search
    resource, metadata_stale_at, must_revalidate = await construct_entries_response(
                                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/tiled/tiled/server/core.py", line 231, in construct_entries_response
    resource = await construct_resource(
               ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/tiled/tiled/server/core.py", line 464, in construct_resource
    contents[key] = await construct_resource(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/tiled/tiled/server/core.py", line 464, in construct_resource
    contents[key] = await construct_resource(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/tiled/tiled/server/core.py", line 456, in construct_resource
    for key, adapter in entry.items():
                        ^^^^^^^^^^^^^
  File "/Users/bpauw/Code/tiled/tiled/iterviews.py", line 112, in __iter__
    yield from self._items_slice(0, None, 1)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/tiled/tiled/adapters/hdf5.py", line 245, in _items_slice
    items = [(key, self[key]) for key in list(self)]
                   ~~~~^^^^^
  File "/Users/bpauw/Code/tiled/tiled/adapters/hdf5.py", line 144, in __getitem__
    value = self._file[key]
            ~~~~~~~~~~^^^^^
  File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
  File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/h5py/_hl/group.py", line 357, in __getitem__
    oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
  File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
  File "h5py/h5o.pyx", line 257, in h5py.h5o.open
KeyError: "Unable to open object (unable to open external file, external link file name = 'beam_profile/eiger_178_master.h5')"
[eb60abfe6cfc28ba] 127.0.0.1:53653 (public) - "GET /api/v1/metadata/MOUSE_20250125_2_40_processed_250129_182117 HTTP/1.1" 200 OK
[c65c66ca90d6aea3] 127.0.0.1:53653 (public) - "GET /api/v1/search/MOUSE_20250125_2_40_processed_250129_182117?fields=&sort= HTTP/1.1" 200 OK
[203991ceb7859f2e] 127.0.0.1:53653 (public) - "GET /api/v1/search/MOUSE_20250125_2_40_processed_250129_182117?page%5Boffset%5D=0&sort= HTTP/1.1" 500 Internal Server Error
[203991ceb7859f2e] ERROR:    Exception in ASGI application
  + Exception Group Traceback (most recent call last):
  |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_utils.py", line 76, in collapse_excgroups
  |     yield
  |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 178, in __call__
  |     async with anyio.create_task_group() as task_group:
  |                ^^^^^^^^^^^^^^^^^^^^^^^^^
  |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 767, in __aexit__
  |     raise BaseExceptionGroup(
  | ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
  +-+---------------- 1 ----------------
    | Traceback (most recent call last):
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/uvicorn/protocols/http/httptools_impl.py", line 409, in run_asgi
    |     result = await app(  # type: ignore[func-returns-value]
    |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__
    |     return await self.app(scope, receive, send)
    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/fastapi/applications.py", line 1054, in __call__
    |     await super().__call__(scope, receive, send)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/applications.py", line 112, in __call__
    |     await self.middleware_stack(scope, receive, send)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 187, in __call__
    |     raise exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 165, in __call__
    |     await self.app(scope, receive, _send)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/asgi_correlation_id/middleware.py", line 90, in __call__
    |     await self.app(scope, receive, handle_outgoing_request)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 177, in __call__
    |     with recv_stream, send_stream, collapse_excgroups():
    |                                    ^^^^^^^^^^^^^^^^^^^^
    |   File "/opt/homebrew/Cellar/[email protected]/3.12.8/Frameworks/Python.framework/Versions/3.12/lib/python3.12/contextlib.py", line 158, in __exit__
    |     self.gen.throw(value)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    |     raise exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 179, in __call__
    |     response = await self.dispatch_func(request, call_next)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/server/app.py", line 879, in current_principal_logging_filter
    |     response = await call_next(request)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 154, in call_next
    |     raise app_exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 141, in coro
    |     await self.app(scope, receive_or_disconnect, send_no_error)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 177, in __call__
    |     with recv_stream, send_stream, collapse_excgroups():
    |                                    ^^^^^^^^^^^^^^^^^^^^
    |   File "/opt/homebrew/Cellar/[email protected]/3.12.8/Frameworks/Python.framework/Versions/3.12/lib/python3.12/contextlib.py", line 158, in __exit__
    |     self.gen.throw(value)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    |     raise exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 179, in __call__
    |     response = await self.dispatch_func(request, call_next)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/server/app.py", line 860, in capture_metrics_prometheus
    |     response = await call_next(request)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 154, in call_next
    |     raise app_exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 141, in coro
    |     await self.app(scope, receive_or_disconnect, send_no_error)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 177, in __call__
    |     with recv_stream, send_stream, collapse_excgroups():
    |                                    ^^^^^^^^^^^^^^^^^^^^
    |   File "/opt/homebrew/Cellar/[email protected]/3.12.8/Frameworks/Python.framework/Versions/3.12/lib/python3.12/contextlib.py", line 158, in __exit__
    |     self.gen.throw(value)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    |     raise exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 179, in __call__
    |     response = await self.dispatch_func(request, call_next)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/server/app.py", line 815, in capture_metrics
    |     response = await call_next(request)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 154, in call_next
    |     raise app_exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 141, in coro
    |     await self.app(scope, receive_or_disconnect, send_no_error)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 177, in __call__
    |     with recv_stream, send_stream, collapse_excgroups():
    |                                    ^^^^^^^^^^^^^^^^^^^^
    |   File "/opt/homebrew/Cellar/[email protected]/3.12.8/Frameworks/Python.framework/Versions/3.12/lib/python3.12/contextlib.py", line 158, in __exit__
    |     self.gen.throw(value)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    |     raise exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 179, in __call__
    |     response = await self.dispatch_func(request, call_next)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/server/app.py", line 761, in set_cookies
    |     response = await call_next(request)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 154, in call_next
    |     raise app_exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 141, in coro
    |     await self.app(scope, receive_or_disconnect, send_no_error)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 177, in __call__
    |     with recv_stream, send_stream, collapse_excgroups():
    |                                    ^^^^^^^^^^^^^^^^^^^^
    |   File "/opt/homebrew/Cellar/[email protected]/3.12.8/Frameworks/Python.framework/Versions/3.12/lib/python3.12/contextlib.py", line 158, in __exit__
    |     self.gen.throw(value)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    |     raise exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 179, in __call__
    |     response = await self.dispatch_func(request, call_next)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/server/app.py", line 753, in client_compatibility_check
    |     response = await call_next(request)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 154, in call_next
    |     raise app_exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 141, in coro
    |     await self.app(scope, receive_or_disconnect, send_no_error)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 177, in __call__
    |     with recv_stream, send_stream, collapse_excgroups():
    |                                    ^^^^^^^^^^^^^^^^^^^^
    |   File "/opt/homebrew/Cellar/[email protected]/3.12.8/Frameworks/Python.framework/Versions/3.12/lib/python3.12/contextlib.py", line 158, in __exit__
    |     self.gen.throw(value)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    |     raise exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 179, in __call__
    |     response = await self.dispatch_func(request, call_next)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/server/app.py", line 714, in double_submit_cookie_csrf_protection
    |     response = await call_next(request)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 154, in call_next
    |     raise app_exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 141, in coro
    |     await self.app(scope, receive_or_disconnect, send_no_error)
    |   File "/Users/bpauw/Code/tiled/tiled/server/compression.py", line 27, in __call__
    |     await responder(scope, receive, send)
    |   File "/Users/bpauw/Code/tiled/tiled/server/compression.py", line 48, in __call__
    |     await self.app(scope, receive, self.send_compressed)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/cors.py", line 85, in __call__
    |     await self.app(scope, receive, send)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 62, in __call__
    |     await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    |     raise exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    |     await app(scope, receive, sender)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/routing.py", line 715, in __call__
    |     await self.middleware_stack(scope, receive, send)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/routing.py", line 735, in app
    |     await route.handle(scope, receive, send)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/routing.py", line 288, in handle
    |     await self.app(scope, receive, send)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/routing.py", line 76, in app
    |     await wrap_app_handling_exceptions(app, request)(scope, receive, send)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    |     raise exc
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    |     await app(scope, receive, sender)
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/routing.py", line 73, in app
    |     response = await f(request)
    |                ^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/fastapi/routing.py", line 301, in app
    |     raw_response = await run_endpoint_function(
    |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/fastapi/routing.py", line 212, in run_endpoint_function
    |     return await dependant.call(**values)
    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/server/router.py", line 290, in route_with_sig
    |     return await route(*args, **kwargs)
    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/server/router.py", line 197, in search
    |     resource, metadata_stale_at, must_revalidate = await construct_entries_response(
    |                                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/server/core.py", line 231, in construct_entries_response
    |     resource = await construct_resource(
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/server/core.py", line 464, in construct_resource
    |     contents[key] = await construct_resource(
    |                     ^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/server/core.py", line 464, in construct_resource
    |     contents[key] = await construct_resource(
    |                     ^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/server/core.py", line 456, in construct_resource
    |     for key, adapter in entry.items():
    |                         ^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/iterviews.py", line 112, in __iter__
    |     yield from self._items_slice(0, None, 1)
    |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/adapters/hdf5.py", line 245, in _items_slice
    |     items = [(key, self[key]) for key in list(self)]
    |                    ~~~~^^^^^
    |   File "/Users/bpauw/Code/tiled/tiled/adapters/hdf5.py", line 144, in __getitem__
    |     value = self._file[key]
    |             ~~~~~~~~~~^^^^^
    |   File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
    |   File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
    |   File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/h5py/_hl/group.py", line 357, in __getitem__
    |     oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
    |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
    |   File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
    |   File "h5py/h5o.pyx", line 257, in h5py.h5o.open
    | KeyError: "Unable to open object (unable to open external file, external link file name = 'beam_profile/eiger_139_master.h5')"
    +------------------------------------

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/uvicorn/protocols/http/httptools_impl.py", line 409, in run_asgi
    result = await app(  # type: ignore[func-returns-value]
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__
    return await self.app(scope, receive, send)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/fastapi/applications.py", line 1054, in __call__
    await super().__call__(scope, receive, send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/applications.py", line 112, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 187, in __call__
    raise exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 165, in __call__
    await self.app(scope, receive, _send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/asgi_correlation_id/middleware.py", line 90, in __call__
    await self.app(scope, receive, handle_outgoing_request)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 177, in __call__
    with recv_stream, send_stream, collapse_excgroups():
                                   ^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/[email protected]/3.12.8/Frameworks/Python.framework/Versions/3.12/lib/python3.12/contextlib.py", line 158, in __exit__
    self.gen.throw(value)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    raise exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 179, in __call__
    response = await self.dispatch_func(request, call_next)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/tiled/tiled/server/app.py", line 879, in current_principal_logging_filter
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 154, in call_next
    raise app_exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 141, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 177, in __call__
    with recv_stream, send_stream, collapse_excgroups():
                                   ^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/[email protected]/3.12.8/Frameworks/Python.framework/Versions/3.12/lib/python3.12/contextlib.py", line 158, in __exit__
    self.gen.throw(value)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    raise exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 179, in __call__
    response = await self.dispatch_func(request, call_next)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/tiled/tiled/server/app.py", line 860, in capture_metrics_prometheus
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 154, in call_next
    raise app_exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 141, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 177, in __call__
    with recv_stream, send_stream, collapse_excgroups():
                                   ^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/[email protected]/3.12.8/Frameworks/Python.framework/Versions/3.12/lib/python3.12/contextlib.py", line 158, in __exit__
    self.gen.throw(value)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    raise exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 179, in __call__
    response = await self.dispatch_func(request, call_next)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/tiled/tiled/server/app.py", line 815, in capture_metrics
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 154, in call_next
    raise app_exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 141, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 177, in __call__
    with recv_stream, send_stream, collapse_excgroups():
                                   ^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/[email protected]/3.12.8/Frameworks/Python.framework/Versions/3.12/lib/python3.12/contextlib.py", line 158, in __exit__
    self.gen.throw(value)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    raise exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 179, in __call__
    response = await self.dispatch_func(request, call_next)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/tiled/tiled/server/app.py", line 761, in set_cookies
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 154, in call_next
    raise app_exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 141, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 177, in __call__
    with recv_stream, send_stream, collapse_excgroups():
                                   ^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/[email protected]/3.12.8/Frameworks/Python.framework/Versions/3.12/lib/python3.12/contextlib.py", line 158, in __exit__
    self.gen.throw(value)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    raise exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 179, in __call__
    response = await self.dispatch_func(request, call_next)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/tiled/tiled/server/app.py", line 753, in client_compatibility_check
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 154, in call_next
    raise app_exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 141, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 177, in __call__
    with recv_stream, send_stream, collapse_excgroups():
                                   ^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/[email protected]/3.12.8/Frameworks/Python.framework/Versions/3.12/lib/python3.12/contextlib.py", line 158, in __exit__
    self.gen.throw(value)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_utils.py", line 82, in collapse_excgroups
    raise exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 179, in __call__
    response = await self.dispatch_func(request, call_next)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/tiled/tiled/server/app.py", line 714, in double_submit_cookie_csrf_protection
    response = await call_next(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 154, in call_next
    raise app_exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/base.py", line 141, in coro
    await self.app(scope, receive_or_disconnect, send_no_error)
  File "/Users/bpauw/Code/tiled/tiled/server/compression.py", line 27, in __call__
    await responder(scope, receive, send)
  File "/Users/bpauw/Code/tiled/tiled/server/compression.py", line 48, in __call__
    await self.app(scope, receive, self.send_compressed)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/cors.py", line 85, in __call__
    await self.app(scope, receive, send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 62, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/routing.py", line 715, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/routing.py", line 735, in app
    await route.handle(scope, receive, send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/routing.py", line 288, in handle
    await self.app(scope, receive, send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/routing.py", line 76, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/starlette/routing.py", line 73, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/fastapi/routing.py", line 301, in app
    raw_response = await run_endpoint_function(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/fastapi/routing.py", line 212, in run_endpoint_function
    return await dependant.call(**values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/tiled/tiled/server/router.py", line 290, in route_with_sig
    return await route(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/tiled/tiled/server/router.py", line 197, in search
    resource, metadata_stale_at, must_revalidate = await construct_entries_response(
                                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/tiled/tiled/server/core.py", line 231, in construct_entries_response
    resource = await construct_resource(
               ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/tiled/tiled/server/core.py", line 464, in construct_resource
    contents[key] = await construct_resource(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/tiled/tiled/server/core.py", line 464, in construct_resource
    contents[key] = await construct_resource(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/tiled/tiled/server/core.py", line 456, in construct_resource
    for key, adapter in entry.items():
                        ^^^^^^^^^^^^^
  File "/Users/bpauw/Code/tiled/tiled/iterviews.py", line 112, in __iter__
    yield from self._items_slice(0, None, 1)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/bpauw/Code/tiled/tiled/adapters/hdf5.py", line 245, in _items_slice
    items = [(key, self[key]) for key in list(self)]
                   ~~~~^^^^^
  File "/Users/bpauw/Code/tiled/tiled/adapters/hdf5.py", line 144, in __getitem__
    value = self._file[key]
            ~~~~~~~~~~^^^^^
  File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
  File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
  File "/Users/bpauw/Code/Julias_camonitor_log/.venv/lib/python3.12/site-packages/h5py/_hl/group.py", line 357, in __getitem__
    oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
  File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
  File "h5py/h5o.pyx", line 257, in h5py.h5o.open
KeyError: "Unable to open object (unable to open external file, external link file name = 'beam_profile/eiger_139_master.h5')"

To make this easier to debug, I will try to make a few test files available on WeTransfer.. to be continued...

toqduj avatar Feb 21 '25 07:02 toqduj

WeTransfer link to the example files is here: https://we.tl/t-RBFzOMNA7T

toqduj avatar Feb 22 '25 11:02 toqduj

A possible fix is in PR #904 This will read what it can from the HDF5 tree, and put a small warning in the dataset when it encounters a KeyError.

toqduj avatar Mar 04 '25 16:03 toqduj