Ga naar inhoud

Pydantic-plugins

!!! waarschuwing "Experimentele functie" Ondersteuning voor plug-ins is experimenteel en kan in kleine releases worden gewijzigd. Het ontwikkelen van plug-ins wordt niet aanbevolen totdat de functie stabiel wordt.

Met Pydantic kunnen gebruikers plug-ins maken die kunnen worden gebruikt om de functionaliteit van de bibliotheek uit te breiden.

Plug-ins worden geïnstalleerd via Python-toegangspunten. Meer over entrypunten leest u in de Entrypoints-specificatie van de Python Packaging Authority.

Als u een project heeft met de naam my-pydantic-plugin , kunt u een plug-in maken door het volgende toe te voegen aan uw pyproject.toml :

[project.entry-points.pydantic]
my_plugin = "my_pydantic_plugin:plugin"

De ingangspuntgroep is pydantic , my_plugin is de naam van de plug-in, my_pydantic_plugin is de module waaruit het plug-inobject moet worden geladen, en plugin is de objectnaam die moet worden geladen.

Plug-ins worden geladen in de volgorde waarin ze worden gevonden, en de volgorde waarin ze worden gevonden is niet gegarandeerd.

Als gebruiker kunt u het gedrag van de plug-in in een BaseModel wijzigen met behulp van het plugin_settings Model Config- argument of het class-trefwoordargument. Voor dit argument is een woordenboek met instellingen nodig dat ongewijzigd aan alle plug-ins wordt doorgegeven. De plug-in kan deze instellingen vervolgens gebruiken om zijn gedrag te wijzigen. Het wordt voor plug-ins aanbevolen om hun instellingen te scheiden in hun eigen speciale sleutels in een plug-in-specifieke sleutel in het woordenboek plugin_settings .

from pydantic import BaseModel


class Foo(BaseModel, plugin_settings={'my-plugin': {'observe': 'all'}}): ...

Bouw een plug-in

??? api "API-documentatie" pydantic.plugin

Pydantic biedt een API voor het maken van plug-ins. De API wordt toegankelijk gemaakt via de pydantic.plugin -module.

Op uw plug-in kunt u de volgende methoden inpakken :

  • validate_python: wordt gebruikt om de gegevens van een Python-object te valideren.
  • validate_json: wordt gebruikt om de gegevens uit een JSON-tekenreeks te valideren.
  • validate_strings: wordt gebruikt om de gegevens uit tekenreeksen te valideren.

Voor elke methode kunt u de volgende callbacks implementeren:

  • on_enter : Wordt aangeroepen voordat de validatie van een veld begint.
  • on_success : Wordt aangeroepen wanneer de validatie van een veld slaagt.
  • on_error : Wordt aangeroepen wanneer de validatie van een veld mislukt.

Laten we een voorbeeld bekijken van een plug-in die de validate_python -methode van de SchemaValidator omhult .

from typing import Any, Dict, Optional, Union

from pydantic_core import CoreConfig, CoreSchema, ValidationError

from pydantic.plugin import (
    NewSchemaReturns,
    PydanticPluginProtocol,
    SchemaKind,
    SchemaTypePath,
    ValidatePythonHandlerProtocol,
)


class OnValidatePython(ValidatePythonHandlerProtocol):
    def on_enter(
        self,
        input: Any,
        *,
        strict: Optional[bool] = None,
        from_attributes: Optional[bool] = None,
        context: Optional[Dict[str, Any]] = None,
        self_instance: Optional[Any] = None,
    ) -> None:
        print(input)

    def on_success(self, result: Any) -> None:
        print(result)

    def on_error(self, error: ValidationError) -> None:
        print(error.json())


class Plugin(PydanticPluginProtocol):
    def new_schema_validator(
        self,
        schema: CoreSchema,
        schema_type: Any,
        schema_type_path: SchemaTypePath,
        schema_kind: SchemaKind,
        config: Union[CoreConfig, None],
        plugin_settings: Dict[str, object],
    ) -> NewSchemaReturns:
        return OnValidatePython(), None, None


plugin = Plugin()

Plugin-instellingen gebruiken

Bedenk dat je een plug-in hebt met de naam setting genaamd "observer", dan kun je deze als volgt gebruiken:

from pydantic import BaseModel


class Foo(BaseModel, plugin_settings={'observer': 'all'}): ...

Bij elke validatieoproep worden de plugin_settings doorgegeven aan een opvraagbare persoon die voor de gebeurtenissen is geregistreerd.

Plug-ins uitschakelen

U kunt omgevingsvariabele PYDANTIC_DISABLE_PLUGINS gebruiken om alle of specifieke plug-ins uit te schakelen.


Omgevingsvariabele

Toegestane waarden

Beschrijving
PYDANTIC_DISABLE_PLUGINS
__all__ , 1 , true

Schakelt alle plug-ins uit

Door komma's gescheiden tekenreeks (bijvoorbeeld my-plugin-1,my-plugin2 )

Schakelt gespecificeerde plug-in(s) uit

本文总阅读量