Component
Downloads / Acquisition
Description
I assume this was caused by attempting to download an issue of Amazing Spider-Man with a floating point issue number, like "700.1"
pullbox | {"path": "/downloads", "method": "GET", "error": "Unknown format code 'd' for object of type 'float'", "event": "unhandled_error", "level": "error", "logger": "pullbox.app", "timestamp": "2026-08-28T18:00:49Z", "exception": " + Exception Group Traceback (most recent call last):\n | File "/opt/venv/lib/python3.14/site-packages/starlette/_utils.py", line 85, in create_collapsing_task_group\n | async with anyio.create_task_group() as tg:\n | ~~~~~~~~~~~~~~~~~~~~~~~^^\n | File "/opt/venv/lib/python3.14/site-packages/anyio/_backends/_asyncio.py", line 815, in aexit\n | raise BaseExceptionGroup(\n | "unhandled errors in a TaskGroup", self._exceptions\n | ) from None\n | ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)\n +-+---------------- 1 ----------------\n | Traceback (most recent call last):\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/errors.py", line 164, in call\n | await self.app(scope, receive, _send)\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call\n | response = await self.dispatch_func(request, call_next)\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 391, in dispatch\n | response = await call_next(request)\n | ^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next\n | raise app_exc from app_exc.cause or app_exc.context\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro\n | await self.app(scope, receive_or_disconnect, send_no_error)\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call\n | response = await self.dispatch_func(request, call_next)\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 238, in dispatch\n | response = await call_next(request)\n | ^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next\n | raise app_exc from app_exc.cause or app_exc.context\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro\n | await self.app(scope, receive_or_disconnect, send_no_error)\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call\n | response = await self.dispatch_func(request, call_next)\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 155, in dispatch\n | response = await call_next(request)\n | ^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next\n | raise app_exc from app_exc.cause or app_exc.context\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro\n | await self.app(scope, receive_or_disconnect, send_no_error)\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call\n | response = await self.dispatch_func(request, call_next)\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 289, in dispatch\n | return await call_next(request)\n | ^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next\n | raise app_exc from app_exc.cause or app_exc.context\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro\n | await self.app(scope, receive_or_disconnect, send_no_error)\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call\n | response = await self.dispatch_func(request, call_next)\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 96, in dispatch\n | return await call_next(request)\n | ^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next\n | raise app_exc from app_exc.cause or app_exc.context\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro\n | await self.app(scope, receive_or_disconnect, send_no_error)\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/exceptions.py", line 63, in call\n | await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)\n | File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app\n | raise exc\n | File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app\n | await app(scope, receive, sender)\n | File "/opt/venv/lib/python3.14/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in call\n | await self.app(scope, receive, send)\n | File "/opt/venv/lib/python3.14/site-packages/starlette/routing.py", line 670, in call\n | await self.middleware_stack(scope, receive, send)\n | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 2734, in app\n | await route.handle(scope, receive, send)\n | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1780, in handle\n | await self.original_router.handle(scope, receive, send)\n | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 2789, in handle\n | await included_router._handle_selected(scope, receive, send)\n | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1791, in _handle_selected\n | await route.handle(scope, receive, send)\n | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1780, in handle\n | await self.original_router.handle(scope, receive, send)\n | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 2789, in handle\n | await included_router._handle_selected(scope, receive, send)\n | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1800, in _handle_selected\n | await original_route.handle(scope, receive, send)\n | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1279, in handle\n | await app(scope, receive, send)\n | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 158, in app\n | await wrap_app_handling_exceptions(app, request)(scope, receive, send)\n | File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app\n | raise exc\n | File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app\n | await app(scope, receive, sender)\n | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 144, in app\n | response = await f(request)\n | ^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 706, in app\n | raw_response = await run_endpoint_function(\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n | ...<3 lines>...\n | )\n | ^\n | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 352, in run_endpoint_function\n | return await dependant.call(**values)\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/downloads_routes.py", line 959, in downloads\n | queue_ctx = await load_download_queue_context(session)\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/downloads_routes.py", line 511, in load_download_queue_context\n | renamed_names = await _queue_names(session, queue_items)\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/downloads_routes.py", line 158, in _queue_names\n | return await _build_queue_names(session, downloads)\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/routes.py", line 423, in _download_queue_names_bridge\n | return await _build_queue_names(session, downloads)\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/download_queue_names.py", line 110, in build_queue_names\n | full_name = format_comic_file(\n | series=series.title,\n | ...<6 lines>...\n | extension=preferred_ext,\n | )\n | File "/opt/venv/lib/python3.14/site-packages/pullbox/core/naming.py", line 653, in format_comic_file\n | name = name.replace("{Issue:03d}", f"{issue_val:03d}")\n | ^^^^^^^^^^^^^^^\n | ValueError: Unknown format code 'd' for object of type 'float'\n +------------------------------------\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/errors.py", line 164, in call\n await self.app(scope, receive, _send)\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call\n response = await self.dispatch_func(request, call_next)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 391, in dispatch\n response = await call_next(request)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next\n raise app_exc from app_exc.cause or app_exc.context\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro\n await self.app(scope, receive_or_disconnect, send_no_error)\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call\n response = await self.dispatch_func(request, call_next)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 238, in dispatch\n response = await call_next(request)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next\n raise app_exc from app_exc.cause or app_exc.context\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro\n await self.app(scope, receive_or_disconnect, send_no_error)\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call\n response = await self.dispatch_func(request, call_next)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 155, in dispatch\n response = await call_next(request)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next\n raise app_exc from app_exc.cause or app_exc.context\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro\n await self.app(scope, receive_or_disconnect, send_no_error)\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call\n response = await self.dispatch_func(request, call_next)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 289, in dispatch\n return await call_next(request)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next\n raise app_exc from app_exc.cause or app_exc.context\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro\n await self.app(scope, receive_or_disconnect, send_no_error)\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call\n response = await self.dispatch_func(request, call_next)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 96, in dispatch\n return await call_next(request)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next\n raise app_exc from app_exc.cause or app_exc.context\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro\n await self.app(scope, receive_or_disconnect, send_no_error)\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/exceptions.py", line 63, in call\n await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)\n File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app\n raise exc\n File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app\n await app(scope, receive, sender)\n File "/opt/venv/lib/python3.14/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in call\n await self.app(scope, receive, send)\n File "/opt/venv/lib/python3.14/site-packages/starlette/routing.py", line 670, in call\n await self.middleware_stack(scope, receive, send)\n File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 2734, in app\n await route.handle(scope, receive, send)\n File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1780, in handle\n await self.original_router.handle(scope, receive, send)\n File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 2789, in handle\n await included_router._handle_selected(scope, receive, send)\n File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1791, in _handle_selected\n await route.handle(scope, receive, send)\n File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1780, in handle\n await self.original_router.handle(scope, receive, send)\n File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 2789, in handle\n await included_router._handle_selected(scope, receive, send)\n File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1800, in _handle_selected\n await original_route.handle(scope, receive, send)\n File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1279, in handle\n await app(scope, receive, send)\n File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 158, in app\n await wrap_app_handling_exceptions(app, request)(scope, receive, send)\n File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app\n raise exc\n File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app\n await app(scope, receive, sender)\n File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 144, in app\n response = await f(request)\n ^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 706, in app\n raw_response = await run_endpoint_function(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n )\n ^\n File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 352, in run_endpoint_function\n return await dependant.call(**values)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/downloads_routes.py", line 959, in downloads\n queue_ctx = await load_download_queue_context(session)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/downloads_routes.py", line 511, in load_download_queue_context\n renamed_names = await _queue_names(session, queue_items)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/downloads_routes.py", line 158, in _queue_names\n return await _build_queue_names(session, downloads)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/routes.py", line 423, in _download_queue_names_bridge\n return await _build_queue_names(session, downloads)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/download_queue_names.py", line 110, in build_queue_names\n full_name = format_comic_file(\n series=series.title,\n ...<6 lines>...\n extension=preferred_ext,\n )\n File "/opt/venv/lib/python3.14/site-packages/pullbox/core/naming.py", line 653, in format_comic_file\n name = name.replace("{Issue:03d}", f"{issue_val:03d}")\n ^^^^^^^^^^^^^^^\nValueError: Unknown format code 'd' for object of type 'float'"}
pullbox | ERROR: Exception in ASGI application
pullbox | + Exception Group Traceback (most recent call last):
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/_utils.py", line 85, in create_collapsing_task_group
pullbox | | async with anyio.create_task_group() as tg:
pullbox | | ~~~~~~~~~~~~~~~~~~~~~~~^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/anyio/_backends/_asyncio.py", line 815, in aexit
pullbox | | raise BaseExceptionGroup(
pullbox | | "unhandled errors in a TaskGroup", self._exceptions
pullbox | | ) from None
pullbox | | ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
pullbox | +-+---------------- 1 ----------------
pullbox | | Traceback (most recent call last):
pullbox | | File "/opt/venv/lib/python3.14/site-packages/uvicorn/protocols/http/httptools_impl.py", line 422, in run_asgi
pullbox | | result = await app( # type: ignore[func-returns-value]
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | self.scope, self.receive, self.send
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | )
pullbox | | ^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/uvicorn/middleware/proxy_headers.py", line 63, in call
pullbox | | return await self.app(scope, receive, send)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/fastapi/applications.py", line 1163, in call
pullbox | | await super().call(scope, receive, send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/applications.py", line 96, in call
pullbox | | await self.middleware_stack(scope, receive, send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/errors.py", line 186, in call
pullbox | | raise exc
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/errors.py", line 164, in call
pullbox | | await self.app(scope, receive, _send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call
pullbox | | response = await self.dispatch_func(request, call_next)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 391, in dispatch
pullbox | | response = await call_next(request)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next
pullbox | | raise app_exc from app_exc.cause or app_exc.context
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro
pullbox | | await self.app(scope, receive_or_disconnect, send_no_error)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call
pullbox | | response = await self.dispatch_func(request, call_next)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 238, in dispatch
pullbox | | response = await call_next(request)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next
pullbox | | raise app_exc from app_exc.cause or app_exc.context
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro
pullbox | | await self.app(scope, receive_or_disconnect, send_no_error)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call
pullbox | | response = await self.dispatch_func(request, call_next)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 155, in dispatch
pullbox | | response = await call_next(request)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next
pullbox | | raise app_exc from app_exc.cause or app_exc.context
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro
pullbox | | await self.app(scope, receive_or_disconnect, send_no_error)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call
pullbox | | response = await self.dispatch_func(request, call_next)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 289, in dispatch
pullbox | | return await call_next(request)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next
pullbox | | raise app_exc from app_exc.cause or app_exc.context
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro
pullbox | | await self.app(scope, receive_or_disconnect, send_no_error)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call
pullbox | | response = await self.dispatch_func(request, call_next)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 96, in dispatch
pullbox | | return await call_next(request)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next
pullbox | | raise app_exc from app_exc.cause or app_exc.context
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro
pullbox | | await self.app(scope, receive_or_disconnect, send_no_error)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/exceptions.py", line 63, in call
pullbox | | await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
pullbox | | raise exc
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
pullbox | | await app(scope, receive, sender)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in call
pullbox | | await self.app(scope, receive, send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/routing.py", line 670, in call
pullbox | | await self.middleware_stack(scope, receive, send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 2734, in app
pullbox | | await route.handle(scope, receive, send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1780, in handle
pullbox | | await self.original_router.handle(scope, receive, send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 2789, in handle
pullbox | | await included_router._handle_selected(scope, receive, send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1791, in _handle_selected
pullbox | | await route.handle(scope, receive, send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1780, in handle
pullbox | | await self.original_router.handle(scope, receive, send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 2789, in handle
pullbox | | await included_router._handle_selected(scope, receive, send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1800, in _handle_selected
pullbox | | await original_route.handle(scope, receive, send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1279, in handle
pullbox | | await app(scope, receive, send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 158, in app
pullbox | | await wrap_app_handling_exceptions(app, request)(scope, receive, send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
pullbox | | raise exc
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
pullbox | | await app(scope, receive, sender)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 144, in app
pullbox | | response = await f(request)
pullbox | | ^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 706, in app
pullbox | | raw_response = await run_endpoint_function(
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | ...<3 lines>...
pullbox | | )
pullbox | | ^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 352, in run_endpoint_function
pullbox | | return await dependant.call(**values)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/downloads_routes.py", line 959, in downloads
pullbox | | queue_ctx = await load_download_queue_context(session)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/downloads_routes.py", line 511, in load_download_queue_context
pullbox | | renamed_names = await _queue_names(session, queue_items)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/downloads_routes.py", line 158, in _queue_names
pullbox | | return await _build_queue_names(session, downloads)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/routes.py", line 423, in _download_queue_names_bridge
pullbox | | return await _build_queue_names(session, downloads)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/download_queue_names.py", line 110, in build_queue_names
pullbox | | full_name = format_comic_file(
pullbox | | series=series.title,
pullbox | | ...<6 lines>...
pullbox | | extension=preferred_ext,
pullbox | | )
pullbox | | File "/opt/venv/lib/python3.14/site-packages/pullbox/core/naming.py", line 653, in format_comic_file
pullbox | | name = name.replace("{Issue:03d}", f"{issue_val:03d}")
pullbox | | ^^^^^^^^^^^^^^^
pullbox | | ValueError: Unknown format code 'd' for object of type 'float'
pullbox | +------------------------------------
pullbox |
pullbox | The above exception was the direct cause of the following exception:
pullbox |
pullbox | Traceback (most recent call last):
pullbox | File "/opt/venv/lib/python3.14/site-packages/uvicorn/protocols/http/httptools_impl.py", line 422, in run_asgi
pullbox | result = await app( # type: ignore[func-returns-value]
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | self.scope, self.receive, self.send
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | )
pullbox | ^
pullbox | File "/opt/venv/lib/python3.14/site-packages/uvicorn/middleware/proxy_headers.py", line 63, in call
pullbox | return await self.app(scope, receive, send)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/fastapi/applications.py", line 1163, in call
pullbox | await super().call(scope, receive, send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/applications.py", line 96, in call
pullbox | await self.middleware_stack(scope, receive, send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/errors.py", line 186, in call
pullbox | raise exc
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/errors.py", line 164, in call
pullbox | await self.app(scope, receive, _send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call
pullbox | response = await self.dispatch_func(request, call_next)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 391, in dispatch
pullbox | response = await call_next(request)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next
pullbox | raise app_exc from app_exc.cause or app_exc.context
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro
pullbox | await self.app(scope, receive_or_disconnect, send_no_error)
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call
pullbox | response = await self.dispatch_func(request, call_next)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 238, in dispatch
pullbox | response = await call_next(request)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next
pullbox | raise app_exc from app_exc.cause or app_exc.context
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro
pullbox | await self.app(scope, receive_or_disconnect, send_no_error)
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call
pullbox | response = await self.dispatch_func(request, call_next)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 155, in dispatch
pullbox | response = await call_next(request)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next
pullbox | raise app_exc from app_exc.cause or app_exc.context
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro
pullbox | await self.app(scope, receive_or_disconnect, send_no_error)
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call
pullbox | response = await self.dispatch_func(request, call_next)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 289, in dispatch
pullbox | return await call_next(request)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next
pullbox | raise app_exc from app_exc.cause or app_exc.context
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro
pullbox | await self.app(scope, receive_or_disconnect, send_no_error)
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call
pullbox | response = await self.dispatch_func(request, call_next)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 96, in dispatch
pullbox | return await call_next(request)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next
pullbox | raise app_exc from app_exc.cause or app_exc.context
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro
pullbox | await self.app(scope, receive_or_disconnect, send_no_error)
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/exceptions.py", line 63, in call
pullbox | await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
pullbox | raise exc
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
pullbox | await app(scope, receive, sender)
pullbox | File "/opt/venv/lib/python3.14/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in call
pullbox | await self.app(scope, receive, send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/routing.py", line 670, in call
pullbox | await self.middleware_stack(scope, receive, send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 2734, in app
pullbox | await route.handle(scope, receive, send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1780, in handle
pullbox | await self.original_router.handle(scope, receive, send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 2789, in handle
pullbox | await included_router._handle_selected(scope, receive, send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1791, in _handle_selected
pullbox | await route.handle(scope, receive, send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1780, in handle
pullbox | await self.original_router.handle(scope, receive, send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 2789, in handle
pullbox | await included_router._handle_selected(scope, receive, send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1800, in _handle_selected
pullbox | await original_route.handle(scope, receive, send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1279, in handle
pullbox | await app(scope, receive, send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 158, in app
pullbox | await wrap_app_handling_exceptions(app, request)(scope, receive, send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
pullbox | raise exc
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
pullbox | await app(scope, receive, sender)
pullbox | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 144, in app
pullbox | response = await f(request)
pullbox | ^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 706, in app
pullbox | raw_response = await run_endpoint_function(
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | ...<3 lines>...
pullbox | )
pullbox | ^
pullbox | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 352, in run_endpoint_function
pullbox | return await dependant.call(**values)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/downloads_routes.py", line 959, in downloads
pullbox | queue_ctx = await load_download_queue_context(session)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/downloads_routes.py", line 511, in load_download_queue_context
pullbox | renamed_names = await _queue_names(session, queue_items)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/downloads_routes.py", line 158, in _queue_names
pullbox | return await _build_queue_names(session, downloads)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/routes.py", line 423, in _download_queue_names_bridge
pullbox | return await _build_queue_names(session, downloads)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/download_queue_names.py", line 110, in build_queue_names
pullbox | full_name = format_comic_file(
pullbox | series=series.title,
pullbox | ...<6 lines>...
pullbox | extension=preferred_ext,
pullbox | )
pullbox | File "/opt/venv/lib/python3.14/site-packages/pullbox/core/naming.py", line 653, in format_comic_file
pullbox | name = name.replace("{Issue:03d}", f"{issue_val:03d}")
pullbox | ^^^^^^^^^^^^^^^
pullbox | ValueError: Unknown format code 'd' for object of type 'float'
Steps to Reproduce
- Download an issue with a floating point number
- Navigate to "Downloads"
Expected Behavior
Expected to see the list of downloads
Actual Behavior
I see an error: {"error":{"code":"INTERNAL_ERROR","message":"An unexpected error occurred."}}
Pullbox Version
1.1.2
Deployment Method
Docker
Operating System
Ubuntu 26.04
Diagnostic Package
pullbox-diagnostic-20260828-180735.zip
Screenshots
No response
Component
Downloads / Acquisition
Description
I assume this was caused by attempting to download an issue of Amazing Spider-Man with a floating point issue number, like "700.1"
pullbox | {"path": "/downloads", "method": "GET", "error": "Unknown format code 'd' for object of type 'float'", "event": "unhandled_error", "level": "error", "logger": "pullbox.app", "timestamp": "2026-08-28T18:00:49Z", "exception": " + Exception Group Traceback (most recent call last):\n | File "/opt/venv/lib/python3.14/site-packages/starlette/_utils.py", line 85, in create_collapsing_task_group\n | async with anyio.create_task_group() as tg:\n | ~~~~~~~~~~~~~~~~~~~~~~~^^\n | File "/opt/venv/lib/python3.14/site-packages/anyio/_backends/_asyncio.py", line 815, in aexit\n | raise BaseExceptionGroup(\n | "unhandled errors in a TaskGroup", self._exceptions\n | ) from None\n | ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)\n +-+---------------- 1 ----------------\n | Traceback (most recent call last):\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/errors.py", line 164, in call\n | await self.app(scope, receive, _send)\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call\n | response = await self.dispatch_func(request, call_next)\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 391, in dispatch\n | response = await call_next(request)\n | ^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next\n | raise app_exc from app_exc.cause or app_exc.context\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro\n | await self.app(scope, receive_or_disconnect, send_no_error)\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call\n | response = await self.dispatch_func(request, call_next)\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 238, in dispatch\n | response = await call_next(request)\n | ^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next\n | raise app_exc from app_exc.cause or app_exc.context\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro\n | await self.app(scope, receive_or_disconnect, send_no_error)\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call\n | response = await self.dispatch_func(request, call_next)\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 155, in dispatch\n | response = await call_next(request)\n | ^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next\n | raise app_exc from app_exc.cause or app_exc.context\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro\n | await self.app(scope, receive_or_disconnect, send_no_error)\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call\n | response = await self.dispatch_func(request, call_next)\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 289, in dispatch\n | return await call_next(request)\n | ^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next\n | raise app_exc from app_exc.cause or app_exc.context\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro\n | await self.app(scope, receive_or_disconnect, send_no_error)\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call\n | response = await self.dispatch_func(request, call_next)\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 96, in dispatch\n | return await call_next(request)\n | ^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next\n | raise app_exc from app_exc.cause or app_exc.context\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro\n | await self.app(scope, receive_or_disconnect, send_no_error)\n | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/exceptions.py", line 63, in call\n | await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)\n | File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app\n | raise exc\n | File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app\n | await app(scope, receive, sender)\n | File "/opt/venv/lib/python3.14/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in call\n | await self.app(scope, receive, send)\n | File "/opt/venv/lib/python3.14/site-packages/starlette/routing.py", line 670, in call\n | await self.middleware_stack(scope, receive, send)\n | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 2734, in app\n | await route.handle(scope, receive, send)\n | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1780, in handle\n | await self.original_router.handle(scope, receive, send)\n | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 2789, in handle\n | await included_router._handle_selected(scope, receive, send)\n | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1791, in _handle_selected\n | await route.handle(scope, receive, send)\n | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1780, in handle\n | await self.original_router.handle(scope, receive, send)\n | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 2789, in handle\n | await included_router._handle_selected(scope, receive, send)\n | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1800, in _handle_selected\n | await original_route.handle(scope, receive, send)\n | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1279, in handle\n | await app(scope, receive, send)\n | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 158, in app\n | await wrap_app_handling_exceptions(app, request)(scope, receive, send)\n | File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app\n | raise exc\n | File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app\n | await app(scope, receive, sender)\n | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 144, in app\n | response = await f(request)\n | ^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 706, in app\n | raw_response = await run_endpoint_function(\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n | ...<3 lines>...\n | )\n | ^\n | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 352, in run_endpoint_function\n | return await dependant.call(**values)\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/downloads_routes.py", line 959, in downloads\n | queue_ctx = await load_download_queue_context(session)\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/downloads_routes.py", line 511, in load_download_queue_context\n | renamed_names = await _queue_names(session, queue_items)\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/downloads_routes.py", line 158, in _queue_names\n | return await _build_queue_names(session, downloads)\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/routes.py", line 423, in _download_queue_names_bridge\n | return await _build_queue_names(session, downloads)\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/download_queue_names.py", line 110, in build_queue_names\n | full_name = format_comic_file(\n | series=series.title,\n | ...<6 lines>...\n | extension=preferred_ext,\n | )\n | File "/opt/venv/lib/python3.14/site-packages/pullbox/core/naming.py", line 653, in format_comic_file\n | name = name.replace("{Issue:03d}", f"{issue_val:03d}")\n | ^^^^^^^^^^^^^^^\n | ValueError: Unknown format code 'd' for object of type 'float'\n +------------------------------------\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/errors.py", line 164, in call\n await self.app(scope, receive, _send)\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call\n response = await self.dispatch_func(request, call_next)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 391, in dispatch\n response = await call_next(request)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next\n raise app_exc from app_exc.cause or app_exc.context\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro\n await self.app(scope, receive_or_disconnect, send_no_error)\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call\n response = await self.dispatch_func(request, call_next)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 238, in dispatch\n response = await call_next(request)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next\n raise app_exc from app_exc.cause or app_exc.context\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro\n await self.app(scope, receive_or_disconnect, send_no_error)\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call\n response = await self.dispatch_func(request, call_next)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 155, in dispatch\n response = await call_next(request)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next\n raise app_exc from app_exc.cause or app_exc.context\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro\n await self.app(scope, receive_or_disconnect, send_no_error)\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call\n response = await self.dispatch_func(request, call_next)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 289, in dispatch\n return await call_next(request)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next\n raise app_exc from app_exc.cause or app_exc.context\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro\n await self.app(scope, receive_or_disconnect, send_no_error)\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call\n response = await self.dispatch_func(request, call_next)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 96, in dispatch\n return await call_next(request)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next\n raise app_exc from app_exc.cause or app_exc.context\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro\n await self.app(scope, receive_or_disconnect, send_no_error)\n File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/exceptions.py", line 63, in call\n await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)\n File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app\n raise exc\n File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app\n await app(scope, receive, sender)\n File "/opt/venv/lib/python3.14/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in call\n await self.app(scope, receive, send)\n File "/opt/venv/lib/python3.14/site-packages/starlette/routing.py", line 670, in call\n await self.middleware_stack(scope, receive, send)\n File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 2734, in app\n await route.handle(scope, receive, send)\n File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1780, in handle\n await self.original_router.handle(scope, receive, send)\n File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 2789, in handle\n await included_router._handle_selected(scope, receive, send)\n File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1791, in _handle_selected\n await route.handle(scope, receive, send)\n File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1780, in handle\n await self.original_router.handle(scope, receive, send)\n File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 2789, in handle\n await included_router._handle_selected(scope, receive, send)\n File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1800, in _handle_selected\n await original_route.handle(scope, receive, send)\n File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1279, in handle\n await app(scope, receive, send)\n File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 158, in app\n await wrap_app_handling_exceptions(app, request)(scope, receive, send)\n File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app\n raise exc\n File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app\n await app(scope, receive, sender)\n File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 144, in app\n response = await f(request)\n ^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 706, in app\n raw_response = await run_endpoint_function(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n ...<3 lines>...\n )\n ^\n File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 352, in run_endpoint_function\n return await dependant.call(**values)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/downloads_routes.py", line 959, in downloads\n queue_ctx = await load_download_queue_context(session)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/downloads_routes.py", line 511, in load_download_queue_context\n renamed_names = await _queue_names(session, queue_items)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/downloads_routes.py", line 158, in _queue_names\n return await _build_queue_names(session, downloads)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/routes.py", line 423, in _download_queue_names_bridge\n return await _build_queue_names(session, downloads)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/download_queue_names.py", line 110, in build_queue_names\n full_name = format_comic_file(\n series=series.title,\n ...<6 lines>...\n extension=preferred_ext,\n )\n File "/opt/venv/lib/python3.14/site-packages/pullbox/core/naming.py", line 653, in format_comic_file\n name = name.replace("{Issue:03d}", f"{issue_val:03d}")\n ^^^^^^^^^^^^^^^\nValueError: Unknown format code 'd' for object of type 'float'"}
pullbox | ERROR: Exception in ASGI application
pullbox | + Exception Group Traceback (most recent call last):
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/_utils.py", line 85, in create_collapsing_task_group
pullbox | | async with anyio.create_task_group() as tg:
pullbox | | ~~~~~~~~~~~~~~~~~~~~~~~^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/anyio/_backends/_asyncio.py", line 815, in aexit
pullbox | | raise BaseExceptionGroup(
pullbox | | "unhandled errors in a TaskGroup", self._exceptions
pullbox | | ) from None
pullbox | | ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
pullbox | +-+---------------- 1 ----------------
pullbox | | Traceback (most recent call last):
pullbox | | File "/opt/venv/lib/python3.14/site-packages/uvicorn/protocols/http/httptools_impl.py", line 422, in run_asgi
pullbox | | result = await app( # type: ignore[func-returns-value]
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | self.scope, self.receive, self.send
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | )
pullbox | | ^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/uvicorn/middleware/proxy_headers.py", line 63, in call
pullbox | | return await self.app(scope, receive, send)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/fastapi/applications.py", line 1163, in call
pullbox | | await super().call(scope, receive, send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/applications.py", line 96, in call
pullbox | | await self.middleware_stack(scope, receive, send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/errors.py", line 186, in call
pullbox | | raise exc
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/errors.py", line 164, in call
pullbox | | await self.app(scope, receive, _send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call
pullbox | | response = await self.dispatch_func(request, call_next)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 391, in dispatch
pullbox | | response = await call_next(request)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next
pullbox | | raise app_exc from app_exc.cause or app_exc.context
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro
pullbox | | await self.app(scope, receive_or_disconnect, send_no_error)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call
pullbox | | response = await self.dispatch_func(request, call_next)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 238, in dispatch
pullbox | | response = await call_next(request)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next
pullbox | | raise app_exc from app_exc.cause or app_exc.context
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro
pullbox | | await self.app(scope, receive_or_disconnect, send_no_error)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call
pullbox | | response = await self.dispatch_func(request, call_next)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 155, in dispatch
pullbox | | response = await call_next(request)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next
pullbox | | raise app_exc from app_exc.cause or app_exc.context
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro
pullbox | | await self.app(scope, receive_or_disconnect, send_no_error)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call
pullbox | | response = await self.dispatch_func(request, call_next)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 289, in dispatch
pullbox | | return await call_next(request)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next
pullbox | | raise app_exc from app_exc.cause or app_exc.context
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro
pullbox | | await self.app(scope, receive_or_disconnect, send_no_error)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call
pullbox | | response = await self.dispatch_func(request, call_next)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 96, in dispatch
pullbox | | return await call_next(request)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next
pullbox | | raise app_exc from app_exc.cause or app_exc.context
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro
pullbox | | await self.app(scope, receive_or_disconnect, send_no_error)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/exceptions.py", line 63, in call
pullbox | | await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
pullbox | | raise exc
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
pullbox | | await app(scope, receive, sender)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in call
pullbox | | await self.app(scope, receive, send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/routing.py", line 670, in call
pullbox | | await self.middleware_stack(scope, receive, send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 2734, in app
pullbox | | await route.handle(scope, receive, send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1780, in handle
pullbox | | await self.original_router.handle(scope, receive, send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 2789, in handle
pullbox | | await included_router._handle_selected(scope, receive, send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1791, in _handle_selected
pullbox | | await route.handle(scope, receive, send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1780, in handle
pullbox | | await self.original_router.handle(scope, receive, send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 2789, in handle
pullbox | | await included_router._handle_selected(scope, receive, send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1800, in _handle_selected
pullbox | | await original_route.handle(scope, receive, send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1279, in handle
pullbox | | await app(scope, receive, send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 158, in app
pullbox | | await wrap_app_handling_exceptions(app, request)(scope, receive, send)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
pullbox | | raise exc
pullbox | | File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
pullbox | | await app(scope, receive, sender)
pullbox | | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 144, in app
pullbox | | response = await f(request)
pullbox | | ^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 706, in app
pullbox | | raw_response = await run_endpoint_function(
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | ...<3 lines>...
pullbox | | )
pullbox | | ^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 352, in run_endpoint_function
pullbox | | return await dependant.call(**values)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/downloads_routes.py", line 959, in downloads
pullbox | | queue_ctx = await load_download_queue_context(session)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/downloads_routes.py", line 511, in load_download_queue_context
pullbox | | renamed_names = await _queue_names(session, queue_items)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/downloads_routes.py", line 158, in _queue_names
pullbox | | return await _build_queue_names(session, downloads)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/routes.py", line 423, in _download_queue_names_bridge
pullbox | | return await _build_queue_names(session, downloads)
pullbox | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/download_queue_names.py", line 110, in build_queue_names
pullbox | | full_name = format_comic_file(
pullbox | | series=series.title,
pullbox | | ...<6 lines>...
pullbox | | extension=preferred_ext,
pullbox | | )
pullbox | | File "/opt/venv/lib/python3.14/site-packages/pullbox/core/naming.py", line 653, in format_comic_file
pullbox | | name = name.replace("{Issue:03d}", f"{issue_val:03d}")
pullbox | | ^^^^^^^^^^^^^^^
pullbox | | ValueError: Unknown format code 'd' for object of type 'float'
pullbox | +------------------------------------
pullbox |
pullbox | The above exception was the direct cause of the following exception:
pullbox |
pullbox | Traceback (most recent call last):
pullbox | File "/opt/venv/lib/python3.14/site-packages/uvicorn/protocols/http/httptools_impl.py", line 422, in run_asgi
pullbox | result = await app( # type: ignore[func-returns-value]
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | self.scope, self.receive, self.send
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | )
pullbox | ^
pullbox | File "/opt/venv/lib/python3.14/site-packages/uvicorn/middleware/proxy_headers.py", line 63, in call
pullbox | return await self.app(scope, receive, send)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/fastapi/applications.py", line 1163, in call
pullbox | await super().call(scope, receive, send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/applications.py", line 96, in call
pullbox | await self.middleware_stack(scope, receive, send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/errors.py", line 186, in call
pullbox | raise exc
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/errors.py", line 164, in call
pullbox | await self.app(scope, receive, _send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call
pullbox | response = await self.dispatch_func(request, call_next)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 391, in dispatch
pullbox | response = await call_next(request)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next
pullbox | raise app_exc from app_exc.cause or app_exc.context
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro
pullbox | await self.app(scope, receive_or_disconnect, send_no_error)
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call
pullbox | response = await self.dispatch_func(request, call_next)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 238, in dispatch
pullbox | response = await call_next(request)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next
pullbox | raise app_exc from app_exc.cause or app_exc.context
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro
pullbox | await self.app(scope, receive_or_disconnect, send_no_error)
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call
pullbox | response = await self.dispatch_func(request, call_next)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 155, in dispatch
pullbox | response = await call_next(request)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next
pullbox | raise app_exc from app_exc.cause or app_exc.context
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro
pullbox | await self.app(scope, receive_or_disconnect, send_no_error)
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call
pullbox | response = await self.dispatch_func(request, call_next)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 289, in dispatch
pullbox | return await call_next(request)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next
pullbox | raise app_exc from app_exc.cause or app_exc.context
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro
pullbox | await self.app(scope, receive_or_disconnect, send_no_error)
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 193, in call
pullbox | response = await self.dispatch_func(request, call_next)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/pullbox/api/middleware.py", line 96, in dispatch
pullbox | return await call_next(request)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 168, in call_next
pullbox | raise app_exc from app_exc.cause or app_exc.context
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/base.py", line 144, in coro
pullbox | await self.app(scope, receive_or_disconnect, send_no_error)
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/middleware/exceptions.py", line 63, in call
pullbox | await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
pullbox | raise exc
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
pullbox | await app(scope, receive, sender)
pullbox | File "/opt/venv/lib/python3.14/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in call
pullbox | await self.app(scope, receive, send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/routing.py", line 670, in call
pullbox | await self.middleware_stack(scope, receive, send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 2734, in app
pullbox | await route.handle(scope, receive, send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1780, in handle
pullbox | await self.original_router.handle(scope, receive, send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 2789, in handle
pullbox | await included_router._handle_selected(scope, receive, send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1791, in _handle_selected
pullbox | await route.handle(scope, receive, send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1780, in handle
pullbox | await self.original_router.handle(scope, receive, send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 2789, in handle
pullbox | await included_router._handle_selected(scope, receive, send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1800, in _handle_selected
pullbox | await original_route.handle(scope, receive, send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 1279, in handle
pullbox | await app(scope, receive, send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 158, in app
pullbox | await wrap_app_handling_exceptions(app, request)(scope, receive, send)
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
pullbox | raise exc
pullbox | File "/opt/venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
pullbox | await app(scope, receive, sender)
pullbox | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 144, in app
pullbox | response = await f(request)
pullbox | ^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 706, in app
pullbox | raw_response = await run_endpoint_function(
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | ...<3 lines>...
pullbox | )
pullbox | ^
pullbox | File "/opt/venv/lib/python3.14/site-packages/fastapi/routing.py", line 352, in run_endpoint_function
pullbox | return await dependant.call(**values)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/downloads_routes.py", line 959, in downloads
pullbox | queue_ctx = await load_download_queue_context(session)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/downloads_routes.py", line 511, in load_download_queue_context
pullbox | renamed_names = await _queue_names(session, queue_items)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/downloads_routes.py", line 158, in _queue_names
pullbox | return await _build_queue_names(session, downloads)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/routes.py", line 423, in _download_queue_names_bridge
pullbox | return await _build_queue_names(session, downloads)
pullbox | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pullbox | File "/opt/venv/lib/python3.14/site-packages/pullbox/ui/download_queue_names.py", line 110, in build_queue_names
pullbox | full_name = format_comic_file(
pullbox | series=series.title,
pullbox | ...<6 lines>...
pullbox | extension=preferred_ext,
pullbox | )
pullbox | File "/opt/venv/lib/python3.14/site-packages/pullbox/core/naming.py", line 653, in format_comic_file
pullbox | name = name.replace("{Issue:03d}", f"{issue_val:03d}")
pullbox | ^^^^^^^^^^^^^^^
pullbox | ValueError: Unknown format code 'd' for object of type 'float'
Steps to Reproduce
Expected Behavior
Expected to see the list of downloads
Actual Behavior
I see an error: {"error":{"code":"INTERNAL_ERROR","message":"An unexpected error occurred."}}
Pullbox Version
1.1.2
Deployment Method
Docker
Operating System
Ubuntu 26.04
Diagnostic Package
pullbox-diagnostic-20260828-180735.zip
Screenshots
No response