Bug 2485863
| Summary: | FTBFS, F45FailsToInstall: python3-fastmcp+openai, python3-fastmcp | ||
|---|---|---|---|
| Product: | [Fedora] Fedora | Reporter: | Fedora Fails To Install <fti-bugs> |
| Component: | python-fastmcp | Assignee: | Rodolfo Olivieri <rodolfo.olivieri3> |
| Status: | NEW --- | QA Contact: | |
| Severity: | unspecified | Docs Contact: | |
| Priority: | unspecified | ||
| Version: | rawhide | CC: | mhroncok, rodolfo.olivieri3 |
| Target Milestone: | --- | Flags: | fti-bugs:
needinfo?
(rodolfo.olivieri3) |
| Target Release: | --- | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | --- | |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | Type: | --- | |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
| Embargoed: | |||
| Bug Depends On: | 2423878, 2485862, 2485894, 2485926, 2485928 | ||
| Bug Blocks: | 2412434, 2433836 | ||
|
Description
Fedora Fails To Install
2026-06-06 17:51:23 UTC
Hello, Please note that this comment was generated automatically by https://forge.fedoraproject.org/releng/tooling/src/branch/main/release-process/bug-filing/follow-policy/follow_policy.py If you feel that this output has mistakes, please open an issue at https://forge.fedoraproject.org/releng/tickets/issues This package fails to install and maintainers are advised to take one of the following actions: - Fix this bug and close this bugzilla once the update makes it to the repository. (The same script that posted this comment will eventually close this bugzilla when the fixed package reaches the repository, so you don't have to worry about it.) or - Move this bug to ASSIGNED if you plan on fixing this, but simply haven't done so yet. or - Orphan the package if you no longer plan to maintain it. If you do not take one of these actions, the process at https://docs.fedoraproject.org/en-US/fesco/Fails_to_build_from_source_Fails_to_install/#_package_removal_for_long_standing_ftbfs_and_fti_bugs will continue. This package may be orphaned in 7+ weeks. This is the first reminder (step 3) from the policy. Don't hesitate to ask for help on https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/ if you are unsure how to fix this bug. =================================== FAILURES ===================================
________ TestStatefulProxyClient.test_concurrent_log_requests_no_mixing ________
self = <tests.server.proxy.test_stateful_proxy_client.TestStatefulProxyClient object at 0xffffa9b62c10>
stateful_proxy_server = FastMCPProxy('FastMCPProxy-3e04')
async def test_concurrent_log_requests_no_mixing(
self, stateful_proxy_server: FastMCP
):
"""Test that concurrent log requests don't mix handlers (fixes #1068)."""
results: dict[str, LogMessage] = {}
async def log_handler_a(message: LogMessage) -> None:
results["logger_a"] = message
async def log_handler_b(message: LogMessage) -> None:
results["logger_b"] = message
async with (
> Client(stateful_proxy_server, log_handler=log_handler_a) as client_a,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Client(stateful_proxy_server, log_handler=log_handler_b) as client_b,
):
tests/server/proxy/test_stateful_proxy_client.py:84:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:503: in __aexit__
await self._disconnect()
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:630: in _disconnect
await self._session_state.session_task
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:648: in _session_runner
async with AsyncExitStack() as stack:
^^^^^^^^^^^^^^^^
/usr/lib64/python3.15/contextlib.py:813: in __aexit__
raise exc
/usr/lib64/python3.15/contextlib.py:796: in __aexit__
cb_suppress = await cb(*exc_details)
^^^^^^^^^^^^^^^^^^^^^^
/usr/lib64/python3.15/contextlib.py:283: in __aexit__
await anext(self.gen)
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:425: in _context_manager
with catch(get_catch_handlers()):
^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3.15/site-packages/exceptiongroup/_catch.py:39: in __exit__
raise unhandled from exc.__cause__
/usr/lib/python3.15/site-packages/exceptiongroup/_catch.py:65: in handle_exception
result = handler(matched)
^^^^^^^^^^^^^^^^
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/utilities/exceptions.py:29: in _exception_handler
raise leaf
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <anyio._backends._asyncio.CancelScope object at 0xffffa54dd4f0>
exc_type = <class 'asyncio.exceptions.CancelledError'>
exc_val = CancelledError("Cancelled via cancel scope ffffa54def30 by <Task pending name='Task-9347' coro=<Client._session_runner...astmcp-2.14.7-build/BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:648> cb=[Task.task_wakeup()]>")
def __exit__(
self,
exc_type: type[BaseException] | None,
exc_val: BaseException | None,
exc_tb: TracebackType | None,
) -> bool:
del exc_tb
if not self._active:
raise RuntimeError("This cancel scope is not active")
if current_task() is not self._host_task:
raise RuntimeError(
"Attempted to exit cancel scope in a different task than it was "
"entered in"
)
assert self._host_task is not None
host_task_state = _task_states.get(self._host_task)
if host_task_state is None or host_task_state.cancel_scope is not self:
> raise RuntimeError(
"Attempted to exit a cancel scope that isn't the current tasks's "
"current cancel scope"
)
E RuntimeError: Attempted to exit a cancel scope that isn't the current tasks's current cancel scope
/usr/lib/python3.15/site-packages/anyio/_backends/_asyncio.py:472: RuntimeError
----------------------------- Captured stderr call -----------------------------
[06/23/26 13:59:41] DEBUG Sending INFO to client (b): Hello, context.py:1044
world!
DEBUG Sending INFO to client (a): Hello, context.py:1044
world!
DEBUG Sending INFO to client (b): Hello, context.py:1044
world!
DEBUG Sending INFO to client (a): Hello, context.py:1044
world!
_________________ TestStatefulProxyClient.test_stateful_proxy __________________
self = <tests.server.proxy.test_stateful_proxy_client.TestStatefulProxyClient object at 0xffffa9b62d50>
stateful_proxy_server = FastMCPProxy('FastMCPProxy-1ccb')
async def test_stateful_proxy(self, stateful_proxy_server: FastMCP):
"""Test that the state shared across multiple calls for the same client (fixes #959)."""
> async with Client(stateful_proxy_server) as client:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests/server/proxy/test_stateful_proxy_client.py:104:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:503: in __aexit__
await self._disconnect()
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:630: in _disconnect
await self._session_state.session_task
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:648: in _session_runner
async with AsyncExitStack() as stack:
^^^^^^^^^^^^^^^^
/usr/lib64/python3.15/contextlib.py:813: in __aexit__
raise exc
/usr/lib64/python3.15/contextlib.py:796: in __aexit__
cb_suppress = await cb(*exc_details)
^^^^^^^^^^^^^^^^^^^^^^
/usr/lib64/python3.15/contextlib.py:283: in __aexit__
await anext(self.gen)
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:425: in _context_manager
with catch(get_catch_handlers()):
^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3.15/site-packages/exceptiongroup/_catch.py:39: in __exit__
raise unhandled from exc.__cause__
/usr/lib/python3.15/site-packages/exceptiongroup/_catch.py:65: in handle_exception
result = handler(matched)
^^^^^^^^^^^^^^^^
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/utilities/exceptions.py:29: in _exception_handler
raise leaf
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <anyio._backends._asyncio.CancelScope object at 0xffffa552d590>
exc_type = <class 'asyncio.exceptions.CancelledError'>
exc_val = CancelledError("Cancelled via cancel scope ffffa552c910 by <Task pending name='Task-9379' coro=<Client._session_runner...astmcp-2.14.7-build/BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:648> cb=[Task.task_wakeup()]>")
def __exit__(
self,
exc_type: type[BaseException] | None,
exc_val: BaseException | None,
exc_tb: TracebackType | None,
) -> bool:
del exc_tb
if not self._active:
raise RuntimeError("This cancel scope is not active")
if current_task() is not self._host_task:
raise RuntimeError(
"Attempted to exit cancel scope in a different task than it was "
"entered in"
)
assert self._host_task is not None
host_task_state = _task_states.get(self._host_task)
if host_task_state is None or host_task_state.cancel_scope is not self:
> raise RuntimeError(
"Attempted to exit a cancel scope that isn't the current tasks's "
"current cancel scope"
)
E RuntimeError: Attempted to exit a cancel scope that isn't the current tasks's current cancel scope
/usr/lib/python3.15/site-packages/anyio/_backends/_asyncio.py:472: RuntimeError
_____________ TestStatefulProxyClient.test_multi_proxies_no_mixing _____________
self = <tests.server.proxy.test_stateful_proxy_client.TestStatefulProxyClient object at 0xffffa9330180>
async def test_multi_proxies_no_mixing(self):
"""Test that the stateful proxy client won't be mixed in multi-proxies sessions."""
mcp_a, mcp_b = FastMCP(), FastMCP()
@mcp_a.tool
def tool_a() -> str:
return "a"
@mcp_b.tool
def tool_b() -> str:
return "b"
proxy_mcp_a = FastMCPProxy(
client_factory=StatefulProxyClient(mcp_a).new_stateful
)
proxy_mcp_b = FastMCPProxy(
client_factory=StatefulProxyClient(mcp_b).new_stateful
)
multi_proxy_mcp = FastMCP()
multi_proxy_mcp.mount(proxy_mcp_a, prefix="a")
multi_proxy_mcp.mount(proxy_mcp_b, prefix="b")
> async with Client(multi_proxy_mcp) as client:
^^^^^^^^^^^^^^^^^^^^^^^
tests/server/proxy/test_stateful_proxy_client.py:143:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:503: in __aexit__
await self._disconnect()
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:630: in _disconnect
await self._session_state.session_task
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:648: in _session_runner
async with AsyncExitStack() as stack:
^^^^^^^^^^^^^^^^
/usr/lib64/python3.15/contextlib.py:813: in __aexit__
raise exc
/usr/lib64/python3.15/contextlib.py:796: in __aexit__
cb_suppress = await cb(*exc_details)
^^^^^^^^^^^^^^^^^^^^^^
/usr/lib64/python3.15/contextlib.py:283: in __aexit__
await anext(self.gen)
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:425: in _context_manager
with catch(get_catch_handlers()):
^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3.15/site-packages/exceptiongroup/_catch.py:39: in __exit__
raise unhandled from exc.__cause__
/usr/lib/python3.15/site-packages/exceptiongroup/_catch.py:65: in handle_exception
result = handler(matched)
^^^^^^^^^^^^^^^^
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/utilities/exceptions.py:29: in _exception_handler
raise leaf
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <anyio._backends._asyncio.CancelScope object at 0xffffa54df2f0>
exc_type = <class 'asyncio.exceptions.CancelledError'>
exc_val = CancelledError("Cancelled via cancel scope ffffa54dead0 by <Task pending name='Task-9482' coro=<Client._session_runner...astmcp-2.14.7-build/BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:648> cb=[Task.task_wakeup()]>")
def __exit__(
self,
exc_type: type[BaseException] | None,
exc_val: BaseException | None,
exc_tb: TracebackType | None,
) -> bool:
del exc_tb
if not self._active:
raise RuntimeError("This cancel scope is not active")
if current_task() is not self._host_task:
raise RuntimeError(
"Attempted to exit cancel scope in a different task than it was "
"entered in"
)
assert self._host_task is not None
host_task_state = _task_states.get(self._host_task)
if host_task_state is None or host_task_state.cancel_scope is not self:
> raise RuntimeError(
"Attempted to exit a cancel scope that isn't the current tasks's "
"current cancel scope"
)
E RuntimeError: Attempted to exit a cancel scope that isn't the current tasks's current cancel scope
/usr/lib/python3.15/site-packages/anyio/_backends/_asyncio.py:472: RuntimeError
|