943acbc573
Durcit la convention de nommage des projets (dérive constatée : 'Sliding Automation', 'code_versioning'... au lieu des formes canoniques). - trilium_api.py : projets_canoniques() lit le référentiel = valeurs du label projet sur les notes de type=projet (source unique, pas de constante en dur). Note-projet CodeVersioning créée (manquait). - mcp_server.py : _valider_projet() branché dans les 6 tools de création (add_decision/history/backlog, new_conversation, create_entite, add_skill). Refuse un projet non canonique (suggestion si faute) ou inconnu (renvoi au processus de création de projet). Ne verrouille pas si référentiel illisible. - lint_audit.py : VAL-nommage aligné sur le référentiel (attrape casse, espace ET snake_case ; l'ancien 'contient un espace' ratait code_versioning). - Données : 79 notes ré-étiquetées vers les 3 formes canoniques. Quality by design : l'erreur de nommage devient impossible à l'écriture, le Lint n'est plus que le filet de sécurité.
123 lines
4.3 KiB
Python
123 lines
4.3 KiB
Python
"""Type annotations to use with `__get_pydantic_core_schema__` and `__get_pydantic_json_schema__`."""
|
|
|
|
from __future__ import annotations as _annotations
|
|
|
|
from typing import TYPE_CHECKING, Any, Union
|
|
|
|
from pydantic_core import core_schema
|
|
|
|
if TYPE_CHECKING:
|
|
from ._internal._namespace_utils import NamespacesTuple
|
|
from .json_schema import JsonSchemaMode, JsonSchemaValue
|
|
|
|
CoreSchemaOrField = Union[
|
|
core_schema.CoreSchema,
|
|
core_schema.ModelField,
|
|
core_schema.DataclassField,
|
|
core_schema.TypedDictField,
|
|
core_schema.ComputedField,
|
|
]
|
|
|
|
__all__ = 'GetJsonSchemaHandler', 'GetCoreSchemaHandler'
|
|
|
|
|
|
class GetJsonSchemaHandler:
|
|
"""Handler to call into the next JSON schema generation function.
|
|
|
|
Attributes:
|
|
mode: Json schema mode, can be `validation` or `serialization`.
|
|
"""
|
|
|
|
mode: JsonSchemaMode
|
|
|
|
def __call__(self, core_schema: CoreSchemaOrField, /) -> JsonSchemaValue:
|
|
"""Call the inner handler and get the JsonSchemaValue it returns.
|
|
This will call the next JSON schema modifying function up until it calls
|
|
into `pydantic.json_schema.GenerateJsonSchema`, which will raise a
|
|
`pydantic.errors.PydanticInvalidForJsonSchema` error if it cannot generate
|
|
a JSON schema.
|
|
|
|
Args:
|
|
core_schema: A `pydantic_core.core_schema.CoreSchema`.
|
|
|
|
Returns:
|
|
JsonSchemaValue: The JSON schema generated by the inner JSON schema modify
|
|
functions.
|
|
"""
|
|
raise NotImplementedError
|
|
|
|
def resolve_ref_schema(self, maybe_ref_json_schema: JsonSchemaValue, /) -> JsonSchemaValue:
|
|
"""Get the real schema for a `{"$ref": ...}` schema.
|
|
If the schema given is not a `$ref` schema, it will be returned as is.
|
|
This means you don't have to check before calling this function.
|
|
|
|
Args:
|
|
maybe_ref_json_schema: A JsonSchemaValue which may be a `$ref` schema.
|
|
|
|
Raises:
|
|
LookupError: If the ref is not found.
|
|
|
|
Returns:
|
|
JsonSchemaValue: A JsonSchemaValue that has no `$ref`.
|
|
"""
|
|
raise NotImplementedError
|
|
|
|
|
|
class GetCoreSchemaHandler:
|
|
"""Handler to call into the next CoreSchema schema generation function."""
|
|
|
|
def __call__(self, source_type: Any, /) -> core_schema.CoreSchema:
|
|
"""Call the inner handler and get the CoreSchema it returns.
|
|
This will call the next CoreSchema modifying function up until it calls
|
|
into Pydantic's internal schema generation machinery, which will raise a
|
|
`pydantic.errors.PydanticSchemaGenerationError` error if it cannot generate
|
|
a CoreSchema for the given source type.
|
|
|
|
Args:
|
|
source_type: The input type.
|
|
|
|
Returns:
|
|
CoreSchema: The `pydantic-core` CoreSchema generated.
|
|
"""
|
|
raise NotImplementedError
|
|
|
|
def generate_schema(self, source_type: Any, /) -> core_schema.CoreSchema:
|
|
"""Generate a schema unrelated to the current context.
|
|
Use this function if e.g. you are handling schema generation for a sequence
|
|
and want to generate a schema for its items.
|
|
Otherwise, you may end up doing something like applying a `min_length` constraint
|
|
that was intended for the sequence itself to its items!
|
|
|
|
Args:
|
|
source_type: The input type.
|
|
|
|
Returns:
|
|
CoreSchema: The `pydantic-core` CoreSchema generated.
|
|
"""
|
|
raise NotImplementedError
|
|
|
|
def resolve_ref_schema(self, maybe_ref_schema: core_schema.CoreSchema, /) -> core_schema.CoreSchema:
|
|
"""Get the real schema for a `definition-ref` schema.
|
|
If the schema given is not a `definition-ref` schema, it will be returned as is.
|
|
This means you don't have to check before calling this function.
|
|
|
|
Args:
|
|
maybe_ref_schema: A `CoreSchema`, `ref`-based or not.
|
|
|
|
Raises:
|
|
LookupError: If the `ref` is not found.
|
|
|
|
Returns:
|
|
A concrete `CoreSchema`.
|
|
"""
|
|
raise NotImplementedError
|
|
|
|
@property
|
|
def field_name(self) -> str | None:
|
|
"""Get the name of the closest field to this validator."""
|
|
raise NotImplementedError
|
|
|
|
def _get_types_namespace(self) -> NamespacesTuple:
|
|
"""Internal method used during type resolution for serializer annotations."""
|
|
raise NotImplementedError
|