Zum Inhalt

Pydantic-Plugins

!!! Warnung „Experimentelle Funktion“ Die Plugin-Unterstützung ist experimentell und kann sich in Nebenversionen ändern. Die Entwicklung von Plugins wird nicht empfohlen, bis die Funktion stabil ist.

Mit Pydantic können Benutzer Plugins erstellen, mit denen die Funktionalität der Bibliothek erweitert werden kann.

Plugins werden über Python-Einstiegspunkte installiert. Weitere Informationen zu Einstiegspunkten finden Sie in der Spezifikation „Einstiegspunkte“ der Python Packaging Authority.

Falls Sie ein Projekt namens my-pydantic-plugin haben, können Sie ein Plugin erstellen, indem Sie Folgendes zu Ihrer pyproject.toml hinzufügen:

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

Die Einstiegspunktgruppe ist pydantic , my_plugin ist der Name des Plugins, my_pydantic_plugin ist das Modul, aus dem das Plugin-Objekt geladen werden soll, und plugin ist der zu ladende Objektname.

Plugins werden in der Reihenfolge geladen, in der sie gefunden werden. Die Reihenfolge, in der sie gefunden werden, kann nicht garantiert werden.

Als Benutzer können Sie das Verhalten des Plugins in einem BaseModel mithilfe des Arguments plugin_settings Model Config “ oder des Schlüsselwortarguments „class“ ändern. Dieses Argument benötigt ein Wörterbuch mit Einstellungen, das unverändert an alle Plugins übergeben wird. Das Plugin kann diese Einstellungen dann verwenden, um sein Verhalten zu ändern. Für Plugins wird empfohlen, ihre Einstellungen in ihre eigenen dedizierten Schlüssel in einem Plugin-spezifischen Schlüssel im Wörterbuch plugin_settings aufzuteilen.

from pydantic import BaseModel


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

Erstellen Sie ein Plugin

??? API „API-Dokumentation“ pydantic.plugin

Pydantic stellt eine API zum Erstellen von Plugins bereit. Die API wird über das Modul pydantic.plugin bereitgestellt.

In Ihrem Plugin können Sie die folgenden Methoden einschließen :

  • validate_python: Wird zum Validieren der Daten eines Python-Objekts verwendet.
  • validate_json: Wird zum Validieren der Daten aus einer JSON-Zeichenfolge verwendet.
  • validate_strings: Wird zum Validieren der Daten aus Strings verwendet.

Für jede Methode können Sie die folgenden Rückrufe implementieren:

  • on_enter : Wird aufgerufen, bevor die Validierung eines Felds beginnt.
  • on_success : Wird aufgerufen, wenn die Validierung eines Felds erfolgreich ist.
  • on_error : Wird aufgerufen, wenn die Validierung eines Felds fehlschlägt.

Sehen wir uns ein Beispiel eines Plugins an, das die Methode validate_python des SchemaValidator umschließt .

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

Verwenden von Plugin-Einstellungen

Bedenken Sie, dass Sie ein Plugin namens „observer“ haben, dann können Sie es wie folgt verwenden:

from pydantic import BaseModel


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

Bei jedem Validierungsaufruf werden die plugin_settings an einen für die Ereignisse registrierten Aufruf übergeben.

Plugins deaktivieren

Sie können die Umgebungsvariable PYDANTIC_DISABLE_PLUGINS verwenden, um alle oder bestimmte Plugins zu deaktivieren.


Umgebungsvariable

Zulässige Werte

Beschreibung
PYDANTIC_DISABLE_PLUGINS
__all__ , 1 , true

Deaktiviert alle Plugins

Durch Kommas getrennte Zeichenfolge (z. B. my-plugin-1,my-plugin2 )

Deaktiviert angegebene(s) Plugin(s)

本文总阅读量