Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

No logic to handle case where no microscope image is provided for the frontend

Open
#551 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
Half a day
Newbie friendliness
45/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
fastapi, python
Domain
api, backend

Research direction

Start in murfey/server/api/hub.py at get_instrument_image, where the traceback shows FileResponse receiving a None image_path. Reproduce the endpoint request for an instrument without a microscope image and trace the configured value. Done means that no-image case is handled without the shown TypeError.

Written by the indexing model from the issue text.

Description

bug server web ui

There is currently no logic in the Murfey server to handle a case where no microscope image has been supplied.

    Traceback (most recent call last):

      File "/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 "/venv/lib/python3.12/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__
        return await self.app(scope, receive, send)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      File "/venv/lib/python3.12/site-packages/fastapi/applications.py", line 1054, in __call__
        await super().__call__(scope, receive, send)

      File "/venv/lib/python3.12/site-packages/starlette/applications.py", line 112, in __call__
        await self.middleware_stack(scope, receive, send)

      File "/venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 187, in __call__
        raise exc

      File "/venv/lib/python3.12/site-packages/starlette/middleware/errors.py", line 165, in __call__
        await self.app(scope, receive, _send)

      File "/venv/lib/python3.12/site-packages/starlette/middleware/cors.py", line 85, in __call__
        await self.app(scope, receive, send)

      File "/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 "/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
        raise exc

      File "/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
        await app(scope, receive, sender)

      File "/venv/lib/python3.12/site-packages/starlette/routing.py", line 714, in __call__
        await self.middleware_stack(scope, receive, send)

      File "/venv/lib/python3.12/site-packages/starlette/routing.py", line 734, in app
        await route.handle(scope, receive, send)

      File "/venv/lib/python3.12/site-packages/starlette/routing.py", line 288, in handle
        await self.app(scope, receive, send)

      File "/venv/lib/python3.12/site-packages/starlette/routing.py", line 76, in app
        await wrap_app_handling_exceptions(app, request)(scope, receive, send)

      File "/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
        raise exc

      File "/venv/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
        await app(scope, receive, sender)

      File "/venv/lib/python3.12/site-packages/starlette/routing.py", line 73, in app
        response = await f(request)
                   ^^^^^^^^^^^^^^^^

      File "/venv/lib/python3.12/site-packages/fastapi/routing.py", line 301, in app
        raw_response = await run_endpoint_function(
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      File "/venv/lib/python3.12/site-packages/fastapi/routing.py", line 214, in run_endpoint_function
        return await run_in_threadpool(dependant.call, **values)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      File "/venv/lib/python3.12/site-packages/starlette/concurrency.py", line 37, in run_in_threadpool
        return await anyio.to_thread.run_sync(func)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      File "/venv/lib/python3.12/site-packages/anyio/to_thread.py", line 56, in run_sync
        return await get_async_backend().run_sync_in_worker_thread(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      File "/venv/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 2470, in run_sync_in_worker_thread
        return await future
               ^^^^^^^^^^^^

      File "/venv/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 967, in run
        result = context.run(func, *args)
                 ^^^^^^^^^^^^^^^^^^^^^^^^

      File "/venv/lib/python3.12/site-packages/murfey/server/api/hub.py", line 36, in get_instrument_image
        return FileResponse(config[instrument_name].image_path)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      File "/venv/lib/python3.12/site-packages/starlette/responses.py", line 313, in __init__
        media_type = guess_type(filename or path)[0] or "text/plain"
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      File "/usr/local/lib/python3.12/mimetypes.py", line 310, in guess_type
        return _db.guess_type(url, strict)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^

      File "/usr/local/lib/python3.12/mimetypes.py", line 122, in guess_type
        url = os.fspath(url)
              ^^^^^^^^^^^^^^

    TypeError: expected str, bytes or os.PathLike object, not NoneType
Dominant language
Python
Stars
2
Forks
1
Avg merge
1d 12h
Merged PRs (30d)
22

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from DiamondLightSource/python-murfey

All issues in DiamondLightSource/python-murfey

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.