| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- """Experimental module exposing a function to generate a core schema that validates callable arguments."""
- from __future__ import annotations
- from collections.abc import Callable
- from typing import Any, Literal
- from pydantic_core import CoreSchema
- from pydantic import ConfigDict
- from pydantic._internal import _config, _generate_schema, _namespace_utils
- def generate_arguments_schema(
- func: Callable[..., Any],
- schema_type: Literal['arguments', 'arguments-v3'] = 'arguments-v3',
- parameters_callback: Callable[[int, str, Any], Literal['skip'] | None] | None = None,
- config: ConfigDict | None = None,
- ) -> CoreSchema:
- """Generate the schema for the arguments of a function.
- Args:
- func: The function to generate the schema for.
- schema_type: The type of schema to generate.
- parameters_callback: A callable that will be invoked for each parameter. The callback
- should take three required arguments: the index, the name and the type annotation
- (or [`Parameter.empty`][inspect.Parameter.empty] if not annotated) of the parameter.
- The callback can optionally return `'skip'`, so that the parameter gets excluded
- from the resulting schema.
- config: The configuration to use.
- Returns:
- The generated schema.
- """
- generate_schema = _generate_schema.GenerateSchema(
- _config.ConfigWrapper(config),
- ns_resolver=_namespace_utils.NsResolver(namespaces_tuple=_namespace_utils.ns_for_function(func)),
- )
- if schema_type == 'arguments':
- schema = generate_schema._arguments_schema(func, parameters_callback) # pyright: ignore[reportArgumentType]
- else:
- schema = generate_schema._arguments_v3_schema(func, parameters_callback) # pyright: ignore[reportArgumentType]
- return generate_schema.clean_schema(schema)
|