Use get_type_hints() in function_schema()
#3693
Draft
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #3685.
Todo still: update tests in https://github.com/pydantic/pydantic-ai/blob/main/tests/test_function_schema.py to generate the whole function schema to test the actual logic. The issue is that when
function_schema()relied on_takes_ctx()previous to this PR, the logic to unwrap the original function differed:_takes_ctx()unwrapped a whole bunch of possible wrappers (properties, classmethods, partial, even classes having a__call__()), which is not the case with_typing_extra.get_function_type_hints()(which only unwrapped partials).To maintain backwards compatibility, I kept the the partial unwrapping, and will see what needs to be taken into account when updating such tests.
This is a first step in removing usage of this private Pydantic utility, I will then do follow up PRs.