Pydantic प्लगइन्स
!!! चेतावनी "प्रायोगिक सुविधा" प्लगइन्स समर्थन प्रयोगात्मक है और मामूली रिलीज में परिवर्तन के अधीन है। जब तक सुविधा स्थिर नहीं हो जाती तब तक प्लगइन विकसित करने की अनुशंसा नहीं की जाती है।
पाइडेंटिक उपयोगकर्ताओं को प्लगइन्स बनाने की अनुमति देता है जिनका उपयोग लाइब्रेरी की कार्यक्षमता को बढ़ाने के लिए किया जा सकता है।
प्लगइन्स पायथन प्रवेश बिंदुओं के माध्यम से स्थापित किए जाते हैं। आप पायथन पैकेजिंग अथॉरिटी से प्रवेश बिंदु विनिर्देश में प्रवेश बिंदुओं के बारे में अधिक पढ़ सकते हैं।
यदि आपके पास my-pydantic-plugin
नामक एक प्रोजेक्ट है, तो आप अपने pyproject.toml
में निम्नलिखित जोड़कर एक प्लगइन बना सकते हैं:
[project.entry-points.pydantic]
my_plugin = "my_pydantic_plugin:plugin"
प्रवेश बिंदु समूह pydantic
है, my_plugin
प्लगइन का नाम है, my_pydantic_plugin
प्लगइन ऑब्जेक्ट को लोड करने के लिए मॉड्यूल है, और plugin
लोड करने के लिए ऑब्जेक्ट का नाम है।
प्लगइन्स उसी क्रम में लोड किए जाते हैं जिस क्रम में वे पाए जाते हैं, और जिस क्रम में वे पाए जाते हैं उसकी गारंटी नहीं होती है।
एक उपयोगकर्ता के रूप में, आप plugin_settings
मॉडल कॉन्फिग तर्क या क्लास कीवर्ड तर्क का उपयोग करके BaseModel
में प्लगइन के व्यवहार को संशोधित कर सकते हैं। यह तर्क सेटिंग्स का एक शब्दकोश लेता है जिसे सभी प्लगइन्स को वैसे ही पास कर दिया जाएगा। इसके बाद प्लगइन अपने व्यवहार को संशोधित करने के लिए इन सेटिंग्स का उपयोग कर सकता है। प्लगइन्स को plugin_settings
डिक्शनरी में प्लगइन विशिष्ट कुंजी में अपनी सेटिंग्स को अपनी समर्पित कुंजियों में अलग करने की अनुशंसा की जाती है।
from pydantic import BaseModel
class Foo(BaseModel, plugin_settings={'my-plugin': {'observe': 'all'}}): ...
एक प्लगइन बनाएं¶
??? एपीआई "एपीआई दस्तावेज़ीकरण" [pydantic.plugin
][पाइडेंटिक.प्लगइन]
पाइडेंटिक प्लगइन्स बनाने के लिए एक एपीआई प्रदान करता है। एपीआई को pydantic.plugin
मॉड्यूल के माध्यम से उजागर किया गया है।
अपने प्लगइन पर आप निम्नलिखित विधियों को लपेट सकते हैं:
validate_python
: पायथन ऑब्जेक्ट से डेटा को सत्यापित करने के लिए उपयोग किया जाता है।validate_json
: JSON स्ट्रिंग से डेटा को सत्यापित करने के लिए उपयोग किया जाता है।validate_strings
: स्ट्रिंग्स से डेटा को मान्य करने के लिए उपयोग किया जाता है।
प्रत्येक विधि के लिए, आप निम्नलिखित कॉलबैक लागू कर सकते हैं:
on_enter
: किसी फ़ील्ड का सत्यापन शुरू होने से पहले कॉल किया जाता है।on_success
: किसी फ़ील्ड का सत्यापन सफल होने पर कॉल किया जाता है।on_error
: फ़ील्ड का सत्यापन विफल होने पर कॉल किया जाता है।
आइए एक प्लगइन का उदाहरण देखें जो SchemaValidator
की validate_python
विधि को लपेटता है ।
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()
प्लगइन सेटिंग्स का उपयोग करना¶
विचार करें कि आपके पास "ऑब्जर्वर" नामक सेटिंग नामक एक प्लगइन है, तो आप इसे इस तरह उपयोग कर सकते हैं:
from pydantic import BaseModel
class Foo(BaseModel, plugin_settings={'observer': 'all'}): ...
प्रत्येक सत्यापन कॉल पर, plugin_settings
ईवेंट के लिए पंजीकृत कॉल करने योग्य को पास कर दिया जाएगा।
प्लगइन्स अक्षम करना¶
आप सभी या विशिष्ट प्लगइन को अक्षम करने के लिए पर्यावरण चर PYDANTIC_DISABLE_PLUGINS
उपयोग कर सकते हैं।
पर्यावरणपरिवर्ती तारक | अनुमत मान | विवरण |
---|---|---|
PYDANTIC_DISABLE_PLUGINS | __all__ , 1 , true | सभी प्लगइन्स अक्षम कर देता है |
अल्पविराम से अलग की गई स्ट्रिंग (उदाहरण के लिए my-plugin-1,my-plugin2 ) | निर्दिष्ट प्लगइन अक्षम करता है |
本文总阅读量次