William Easton
|
e3f02374c7
|
Support functools.partial and centralize callable utilities
functools.partial objects failed at registration (@mcp.tool didn't
recognize them) and at call time (update_wrapper set __wrapped__
causing Pydantic to ignore bound arguments).
Introduces centralized utilities replacing scattered patterns across
11 files:
callable_utils.py:
- is_callable_object(): TypeGuard replacing inspect.isroutine() in
7 decorator entry points — recognizes partials as callables
- get_callable_name(): Extracts useful names from any callable type,
including partials without update_wrapper
- prepare_callable(): Strips __wrapped__, unwraps callable classes
and staticmethod — replaces 4 duplicated blocks
decorators.py:
- set_fastmcp_meta(): Attaches __fastmcp__ metadata through __func__
for bound methods — replaces 5 identical 2-line blocks
TaskConfig:
- normalize(): Converts bool|TaskConfig|None to TaskConfig — replaces
4 identical 6-line if/elif/else blocks
No behavior changes beyond the bug fix: existing lambda rejection,
validation, and error handling remain per-module policy.
Closes #3266
🤖 Generated with Claude Code
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-05-12 22:46:13 -05:00 |
|