Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tree falls on broken external HDF5 links #888

Open
toqduj opened this issue Feb 15, 2025 · 8 comments · May be fixed by #889
Open

tree falls on broken external HDF5 links #888

toqduj opened this issue Feb 15, 2025 · 8 comments · May be fixed by #889

Comments

@toqduj
Copy link

toqduj commented Feb 15, 2025

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 toqduj changed the title tree fails on broken external HDF5 links tree falls on broken external HDF5 links Feb 15, 2025
@danielballan danielballan linked a pull request Feb 15, 2025 that will close this issue
2 tasks
@danielballan
Copy link
Member

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

#889

@toqduj
Copy link
Author

toqduj commented Feb 16, 2025

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"
}

@danielballan
Copy link
Member

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
Copy link
Member

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

import importlib.util
if importlib.util.find_spec("dask.tokenize"):
# moved in dask version 2024.9.0
from dask.tokenize import normalize_object, normalize_token
from dask.tokenize import tokenize as dask_tokenize
else:
from dask.base import normalize_object, normalize_token
from dask.base import tokenize as dask_tokenize

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?

@toqduj
Copy link
Author

toqduj commented Feb 20, 2025

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

@danielballan
Copy link
Member

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.

@toqduj
Copy link
Author

toqduj commented Feb 21, 2025

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
Copy link
Author

toqduj commented Feb 22, 2025

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants