Plugin Pydantic
!!! peringatan Dukungan plugin "Fitur eksperimental" bersifat eksperimental dan dapat berubah dalam rilis kecil. Tidak disarankan mengembangkan plugin sampai fitur menjadi stabil.
Pydantic memungkinkan pengguna membuat plugin yang dapat digunakan untuk memperluas fungsionalitas perpustakaan.
Plugin diinstal melalui titik masuk Python. Anda dapat membaca lebih lanjut tentang titik masuk di spesifikasi Titik masuk dari Otoritas Pengemasan Python.
Jika Anda memiliki proyek bernama my-pydantic-plugin
, Anda dapat membuat plugin dengan menambahkan yang berikut ke pyproject.toml
Anda :
[project.entry-points.pydantic]
my_plugin = "my_pydantic_plugin:plugin"
Grup titik masuknya adalah pydantic
, my_plugin
adalah nama pluginnya, my_pydantic_plugin
adalah modul tempat memuat objek plugin, dan plugin
adalah nama objek yang akan dimuat.
Plugin dimuat sesuai urutan penemuannya, dan urutan penemuannya tidak dijamin.
Sebagai pengguna, Anda dapat mengubah perilaku plugin di BaseModel
menggunakan argumen plugin_settings
Model Config atau argumen kata kunci kelas. Argumen ini mengambil kamus pengaturan yang akan diteruskan ke semua plugin apa adanya. Plugin kemudian dapat menggunakan pengaturan ini untuk mengubah perilakunya. Direkomendasikan bagi plugin untuk memisahkan pengaturannya ke dalam kunci khusus mereka sendiri di kunci khusus plugin di kamus plugin_settings
.
from pydantic import BaseModel
class Foo(BaseModel, plugin_settings={'my-plugin': {'observe': 'all'}}): ...
Bangun sebuah plugin¶
??? api "Dokumentasi API" pydantic.plugin
Pydantic menyediakan API untuk membuat plugin. API diekspos melalui modul pydantic.plugin
.
Di plugin Anda, Anda dapat menggabungkan metode berikut:
validate_python
: Digunakan untuk memvalidasi data dari objek Python.validate_json
: Digunakan untuk memvalidasi data dari string JSON.validate_strings
: Digunakan untuk memvalidasi data dari string.
Untuk setiap metode, Anda dapat menerapkan callback berikut:
on_enter
: Dipanggil sebelum validasi suatu bidang dimulai.on_success
: Dipanggil ketika validasi suatu bidang berhasil.on_error
: Dipanggil ketika validasi suatu bidang gagal.
Mari kita lihat contoh plugin yang menggabungkan metode validate_python
dari SchemaValidator
.
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()
Menggunakan Pengaturan Plugin¶
Anggaplah Anda memiliki plugin bernama setting bernama "observer", maka Anda dapat menggunakannya seperti ini:
from pydantic import BaseModel
class Foo(BaseModel, plugin_settings={'observer': 'all'}): ...
Pada setiap panggilan validasi, plugin_settings
akan diteruskan ke callable yang terdaftar untuk acara tersebut.
Menonaktifkan Plugin¶
Anda dapat menggunakan variabel lingkungan PYDANTIC_DISABLE_PLUGINS
untuk menonaktifkan semua atau plugin tertentu.
Variabel Lingkungan | Nilai yang Diizinkan | Keterangan |
---|---|---|
PYDANTIC_DISABLE_PLUGINS | __all__ , 1 , true | Menonaktifkan semua plugin |
String yang dipisahkan koma (misalnya my-plugin-1,my-plugin2 ) | Menonaktifkan plugin tertentu |
本文总阅读量次