fastapi-gsap/.venv/lib/python3.12/site-packages/pydantic/experimental/arguments_schema.py
Tyler J King e744336385 fix: capability enforcement, credential safety, atomic delegations, input validation
C-6: ConnectorRuntime enforces capability_mask per operation.
     READ-only ACs cannot invoke MUTATE operations (wipe, lock, retire).
C-7: AC validated against database (exists, active, not expired)
     before connector invocation.
C-9: Delegated AC capability bounded by delegator's capability.
C-10: Command counter uses atomic SQL increment with limit check.
M-23: expire_stale() uses same atomic SQL pattern.

H-1: Sensitive credential fields hidden from repr/logs via repr=False.
H-2: Stub backend requires ALLOW_STUB_CREDENTIALS=true to activate.
H-3: Kerberos backend raises CredentialResolutionError instead of
     returning stub ticket.
H-4: Chronicle INTENT emitted before execution, RESULT after.
H-5: device_id validated as UUID before Graph API URL interpolation.
H-8: ConnectorRuntime enforces governance for all connector invocations.

Signed-off-by: Tyler King <tking@guildhouse.dev>
2026-04-14 08:13:27 -04:00

44 lines
1.8 KiB
Python

"""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)