पाइडेंटिक पाइथॉन मानक लाइब्रेरी से कई सामान्य प्रकारों का समर्थन करता है। यदि आपको कठोर प्रसंस्करण की आवश्यकता है तो सख्त प्रकार देखें, जिसमें यह भी शामिल है कि क्या आपको अनुमत मानों को सीमित करने की आवश्यकता है (उदाहरण के लिए सकारात्मक int
आवश्यकता है)।
बूलियन्स¶
यदि मान निम्न में से एक नहीं है तो एक मानक bool
फ़ील्ड एक ValidationError
बढ़ाएगा:
- एक वैध बूलियन (यानी
True
याFalse
), - पूर्णांक
0
या1
, - एक
str
जिसे जब लोअरकेस में बदला जाता है तो वह इनमें से एक होता है'0', 'off', 'f', 'false', 'n', 'no', '1', 'on', 't', 'true', 'y', 'yes'
- एक
bytes
जोstr
में डिकोड होने पर पिछले नियम के अनुसार मान्य है
!!! ध्यान दें यदि आप सख्त बूलियन तर्क चाहते हैं (उदाहरण के लिए एक फ़ील्ड जो केवल True
और False
की अनुमति देता है) तो आप StrictBool
उपयोग कर सकते हैं।
इनमें से कुछ व्यवहारों को प्रदर्शित करने वाली एक स्क्रिप्ट यहां दी गई है:
from pydantic import BaseModel, ValidationError
class BooleanModel(BaseModel):
bool_value: bool
print(BooleanModel(bool_value=False))
#> bool_value=False
print(BooleanModel(bool_value='False'))
#> bool_value=False
print(BooleanModel(bool_value=1))
#> bool_value=True
try:
BooleanModel(bool_value=[])
except ValidationError as e:
print(str(e))
"""
1 validation error for BooleanModel
bool_value
Input should be a valid boolean [type=bool_type, input_value=[], input_type=list]
"""
दिनांक समय प्रकार¶
पाइडेंटिक निम्नलिखित डेटाटाइम प्रकारों का समर्थन करता है:
datetime.datetime
¶
-
datetime
फ़ील्ड प्रकार के मान स्वीकार करेंगे:datetime
; एक मौजूदाdatetime
ऑब्जेक्टint
याfloat
; 1 जनवरी 1970 से यूनिक्स समय के रूप में माना जाता है, अर्थात सेकंड (यदि >=-2e10
और <=2e10
) या मिलीसेकंड (यदि <-2e10
या >2e10
)str
; निम्नलिखित प्रारूप स्वीकार किए जाते हैं:YYYY-MM-DD[T]HH:MM[:SS[.ffffff]][Z or [±]HH[:]MM]
YYYY-MM-DD
शिथिल मोड में स्वीकार किया जाता है, लेकिन सख्त मोड में नहींint
या एक स्ट्रिंग के रूप मेंfloat
(यूनिक्स समय के रूप में माना जाता है)
datetime.date
उदाहरण लैक्स मोड में स्वीकार किए जाते हैं, लेकिन सख्त मोड में नहीं
from datetime import datetime
from pydantic import BaseModel
class Event(BaseModel): dt: datetime = None
event = Event(dt='2032-04-23T10:20:30.400+02:30')
print(event.model_dump()) """ {'dt': datetime.datetime(2032, 4, 23, 10, 20, 30, 400000, tzinfo=TzInfo(+02:30))} """
datetime.date
¶
-
date
फ़ील्ड प्रकार के मान स्वीकार करेंगे:date
; एक मौजूदाdate
वस्तुint
याfloat
; उपरोक्तdatetime
के लिए वर्णित अनुसार ही संभाला गयाstr
; निम्नलिखित प्रारूप स्वीकार किए जाते हैं:YYYY-MM-DD
int
या एक स्ट्रिंग के रूप मेंfloat
(यूनिक्स समय के रूप में माना जाता है)
from datetime import date
from pydantic import BaseModel
class Birthday(BaseModel): d: date = None
my_birthday = Birthday(d=1679616000.0)
print(my_birthday.model_dump())
>¶
datetime.time
¶
-
time
फ़ील्ड प्रकार के मान स्वीकार करेंगे:time
; एक मौजूदाtime
वस्तुstr
; निम्नलिखित प्रारूप स्वीकार किए जाते हैं:HH:MM[:SS[.ffffff]][Z or [±]HH[:]MM]
from datetime import time
from pydantic import BaseModel
class Meeting(BaseModel): t: time = None
m = Meeting(t=time(4, 8, 16))
print(m.model_dump())
>¶
datetime.timedelta
¶
-
timedelta
फ़ील्ड प्रकार के मान स्वीकार करेंगे:timedelta
; एक मौजूदाtimedelta
ऑब्जेक्टint
याfloat
; सेकंड माना जाता हैstr
; निम्नलिखित प्रारूप स्वीकार किए जाते हैं:[-][DD]D[,][HH:MM:]SS[.ffffff]
- उदाहरण:
'1d,01:02:03.000004'
या'1D01:02:03.000004'
या'01:02:03'
- उदाहरण:
[±]P[DD]DT[HH]H[MM]M[SS]S
(टाइमडेल्टा के लिए आईएसओ 8601 प्रारूप)
from datetime import timedelta
from pydantic import BaseModel
class Model(BaseModel): td: timedelta = None
m = Model(td='P3DT12H30M5S')
print(m.model_dump())
>¶
संख्या प्रकार¶
पाइडेंटिक पायथन मानक लाइब्रेरी से निम्नलिखित संख्यात्मक प्रकारों का समर्थन करता है:
int
¶
- Pydantic
int(v)
का उपयोग प्रकारों कोint
से जोड़ने के लिए करता है; डेटा रूपांतरण के दौरान जानकारी के नुकसान के विवरण के लिए डेटा रूपांतरण देखें।
float
¶
- पाइडेंटिक फ़्लोट के मानों को बाध्य करने के लिए
float(v)
उपयोग करता है।
enum.IntEnum
¶
- सत्यापन: पाइडेंटिक जाँच करता है कि मान एक वैध
IntEnum
उदाहरण है। enum.IntEnum
के उपवर्ग के लिए सत्यापन: जाँचता है कि मान पूर्णांक enum का एक वैध सदस्य है; अधिक विवरण के लिए एनम और विकल्प देखें।
decimal.Decimal
¶
- सत्यापन: पाइडेंटिक मान को एक स्ट्रिंग में बदलने का प्रयास करता है, फिर स्ट्रिंग को
Decimal(v)
पर भेजता है। -
क्रमबद्धता: पाइडेंटिक [
Decimal
][दशमलव.दशमलव] प्रकारों को स्ट्रिंग के रूप में क्रमबद्ध करता है। यदि आप चाहें तो इस व्यवहार को ओवरराइड करने के लिए आप एक कस्टम सीरियलाइज़र का उपयोग कर सकते हैं। उदाहरण के लिए:from decimal import Decimal
from typing_extensions import Annotated
from pydantic import BaseModel, PlainSerializer
class Model(BaseModel): x: Decimal y: Annotated[ Decimal, PlainSerializer( lambda x: float(x), return_type=float, when_used='json' ), ]
my_model = Model(x=Decimal('1.1'), y=Decimal('2.1'))
print(my_model.model_dump()) # (1)!
>¶
print(my_model.model_dump(mode='json')) # (2)!
>¶
print(my_model.model_dump_json()) # (3)!
>¶
-
model_dump
का उपयोग करते हुए,x
औरy
दोनोंDecimal
प्रकार के उदाहरण बने रहते हैं mode='json'
के साथmodel_dump
का उपयोग करके,x
एकstring
के रूप में क्रमबद्ध किया जाता है, औरy
कस्टम सीरियलाइज़र लागू होने के कारण एकfloat
के रूप में क्रमबद्ध किया जाता है।model_dump_json
का उपयोग करके,x
एकstring
के रूप में क्रमबद्ध किया जाता है, औरy
कस्टम सीरियलाइज़र लागू होने के कारण एकfloat
के रूप में क्रमबद्ध किया जाता है।
[Enum
][एनम.एनम]¶
पाइडेंटिक विकल्पों को परिभाषित करने के लिए पायथन के मानक enum
कक्षाओं का उपयोग करता है।
enum.Enum
जाँचता है कि मान एक वैध Enum
उदाहरण है। enum.Enum
का उपवर्ग जाँचता है कि मान enum का वैध सदस्य है।
from enum import Enum, IntEnum
from pydantic import BaseModel, ValidationError
class FruitEnum(str, Enum):
pear = 'pear'
banana = 'banana'
class ToolEnum(IntEnum):
spanner = 1
wrench = 2
class CookingModel(BaseModel):
fruit: FruitEnum = FruitEnum.pear
tool: ToolEnum = ToolEnum.spanner
print(CookingModel())
#> fruit=<FruitEnum.pear: 'pear'> tool=<ToolEnum.spanner: 1>
print(CookingModel(tool=2, fruit='banana'))
#> fruit=<FruitEnum.banana: 'banana'> tool=<ToolEnum.wrench: 2>
try:
CookingModel(fruit='other')
except ValidationError as e:
print(e)
"""
1 validation error for CookingModel
fruit
Input should be 'pear' or 'banana' [type=enum, input_value='other', input_type=str]
"""
सूचियाँ और टुपल्स¶
list
¶
list
, tuple
, set
, frozenset
, [deque
][संग्रह.डेक], या जेनरेटर और list
में डालने की अनुमति देता है। जब एक सामान्य पैरामीटर प्रदान किया जाता है, तो सूची के सभी आइटमों पर उचित सत्यापन लागू किया जाता है।
typing.List
¶
उपरोक्त list
के समान ही संभाला गया।
from typing import List, Optional
from pydantic import BaseModel
class Model(BaseModel):
simple_list: Optional[list] = None
list_of_ints: Optional[List[int]] = None
print(Model(simple_list=['1', '2', '3']).simple_list)
#> ['1', '2', '3']
print(Model(list_of_ints=['1', '2', '3']).list_of_ints)
#> [1, 2, 3]
tuple
¶
list
, tuple
, set
, frozenset
, [deque
][कलेक्शन.डेक], या जनरेटर और कास्ट को tuple
की अनुमति देता है। जब सामान्य पैरामीटर प्रदान किए जाते हैं, तो टुपल के संबंधित आइटम पर उचित सत्यापन लागू किया जाता है
typing.Tuple
¶
उपरोक्त tuple
के समान ही संभाला गया।
from typing import Optional, Tuple
from pydantic import BaseModel
class Model(BaseModel):
simple_tuple: Optional[tuple] = None
tuple_of_different_types: Optional[Tuple[int, float, bool]] = None
print(Model(simple_tuple=[1, 2, 3, 4]).simple_tuple)
#> (1, 2, 3, 4)
print(Model(tuple_of_different_types=[3, 2, 1]).tuple_of_different_types)
#> (3, 2.0, True)
typing.NamedTuple
¶
typing.NamedTuple
के उपवर्ग tuple
के समान हैं, लेकिन दिए गए namedtuple
वर्ग के उदाहरण बनाते हैं।
collections.namedtuple
के उपवर्ग typing.NamedTuple
के उपवर्ग के समान हैं, लेकिन चूंकि फ़ील्ड प्रकार निर्दिष्ट नहीं हैं, इसलिए सभी फ़ील्ड को Any
प्रकार के रूप में माना जाता है।
from typing import NamedTuple
from pydantic import BaseModel, ValidationError
class Point(NamedTuple):
x: int
y: int
class Model(BaseModel):
p: Point
try:
Model(p=('1.3', '2'))
except ValidationError as e:
print(e)
"""
1 validation error for Model
p.0
Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='1.3', input_type=str]
"""
डेक¶
[deque
][संग्रह.डेक]¶
list
, tuple
, set
, frozenset
, [deque
][कलेक्शन.डेक], या जनरेटर और कास्ट को [deque
][कलेक्शन.डेक] की अनुमति देता है। जब सामान्य पैरामीटर प्रदान किए जाते हैं, तो deque
के संबंधित आइटम पर उचित सत्यापन लागू किया जाता है।
typing.Deque
¶
उपरोक्त deque
के समान ही संभाला गया।
from typing import Deque, Optional
from pydantic import BaseModel
class Model(BaseModel):
deque: Optional[Deque[int]] = None
print(Model(deque=[1, 2, 3]).deque)
#> deque([1, 2, 3])
सेट¶
set
¶
list
, tuple
, set
, frozenset
, [deque
][संग्रह.डेक], या जेनरेटर और set
में डालने की अनुमति देता है। जब एक सामान्य पैरामीटर प्रदान किया जाता है, तो सेट के सभी आइटमों पर उचित सत्यापन लागू किया जाता है।
typing.Set
¶
ऊपर set
के अनुसार ही संभाला गया।
from typing import Optional, Set
from pydantic import BaseModel
class Model(BaseModel):
simple_set: Optional[set] = None
set_of_ints: Optional[Set[int]] = None
print(Model(simple_set={'1', '2', '3'}).simple_set)
#> {'1', '2', '3'}
print(Model(simple_set=['1', '2', '3']).simple_set)
#> {'1', '2', '3'}
print(Model(set_of_ints=['1', '2', '3']).set_of_ints)
#> {1, 2, 3}
frozenset
¶
list
, tuple
, set
, frozenset
, [deque
][कलेक्शन.डेक], या जनरेटर और कास्ट को frozenset
की अनुमति देता है। जब एक सामान्य पैरामीटर प्रदान किया जाता है, तो जमे हुए सेट की सभी वस्तुओं पर उचित सत्यापन लागू किया जाता है।
typing.FrozenSet
¶
ऊपर frozenset
के समान ही संभाला गया।
from typing import FrozenSet, Optional
from pydantic import BaseModel
class Model(BaseModel):
simple_frozenset: Optional[frozenset] = None
frozenset_of_ints: Optional[FrozenSet[int]] = None
m1 = Model(simple_frozenset=['1', '2', '3'])
print(type(m1.simple_frozenset))
#> <class 'frozenset'>
print(sorted(m1.simple_frozenset))
#> ['1', '2', '3']
m2 = Model(frozenset_of_ints=['1', '2', '3'])
print(type(m2.frozenset_of_ints))
#> <class 'frozenset'>
print(sorted(m2.frozenset_of_ints))
#> [1, 2, 3]
अन्य पुनरावृत्तियाँ¶
typing.Sequence
¶
इसका उपयोग तब किया जाता है जब प्रदान किया गया मूल्य Sequence
एबीसी की आवश्यकताओं को पूरा करना चाहिए, और कंटेनर में मूल्यों का उत्सुकता से सत्यापन करना वांछनीय है। ध्यान दें कि जब सत्यापन कंटेनर के मूल्यों पर किया जाना चाहिए, तो कंटेनर का प्रकार संरक्षित नहीं किया जा सकता है क्योंकि सत्यापन अंततः मूल्यों को प्रतिस्थापित कर सकता है। हम गारंटी देते हैं कि मान्य मान वैध typing.Sequence
होगा, लेकिन इसका प्रकार प्रदान किए गए से भिन्न हो सकता है (आम तौर पर, यह एक list
बन जाएगा)।
typing.Iterable
¶
इसका उपयोग तब किया जाता है जब प्रदान किया गया मान पुनरावर्तनीय हो सकता है जिसका उपभोग नहीं किया जाना चाहिए। पार्सिंग और सत्यापन पर अधिक विवरण के लिए नीचे अनंत जेनरेटर देखें। typing.Sequence
के समान, हम गारंटी देते हैं कि मान्य परिणाम वैध typing.Iterable
होगा, लेकिन इसका प्रकार प्रदान किए गए से भिन्न हो सकता है। विशेष रूप से, भले ही एक गैर-जनरेटर प्रकार जैसे कि एक list
प्रदान की जाती है, प्रकार के क्षेत्र का पोस्ट-सत्यापन मूल्य typing.Iterable
एक जनरेटर होगा।
यहां typing.Sequence
का उपयोग करके एक सरल उदाहरण दिया गया है:
from typing import Sequence
from pydantic import BaseModel
class Model(BaseModel):
sequence_of_ints: Sequence[int] = None
print(Model(sequence_of_ints=[1, 2, 3, 4]).sequence_of_ints)
#> [1, 2, 3, 4]
print(Model(sequence_of_ints=(1, 2, 3, 4)).sequence_of_ints)
#> (1, 2, 3, 4)
अनंत जेनरेटर¶
यदि आपके पास एक जनरेटर है जिसे आप सत्यापित करना चाहते हैं, तो भी आप ऊपर बताए अनुसार Sequence
उपयोग कर सकते हैं। उस स्थिति में, जनरेटर का उपभोग किया जाएगा और एक सूची के रूप में मॉडल पर संग्रहीत किया जाएगा और इसके मूल्यों को Sequence
के प्रकार पैरामीटर (उदाहरण के लिए Sequence[int]
में int
) के विरुद्ध मान्य किया जाएगा।
हालाँकि, यदि आपके पास एक जनरेटर है जिसे आप उत्सुकता से उपभोग नहीं करना चाहते हैं (उदाहरण के लिए एक अनंत जनरेटर या रिमोट डेटा लोडर), तो आप Iterable
प्रकार के फ़ील्ड का उपयोग कर सकते हैं:
from typing import Iterable
from pydantic import BaseModel
class Model(BaseModel):
infinite: Iterable[int]
def infinite_ints():
i = 0
while True:
yield i
i += 1
m = Model(infinite=infinite_ints())
print(m)
"""
infinite=ValidatorIterator(index=0, schema=Some(Int(IntValidator { strict: false })))
"""
for i in m.infinite:
print(i)
#> 0
#> 1
#> 2
#> 3
#> 4
#> 5
#> 6
#> 7
#> 8
#> 9
#> 10
if i == 10:
break
!!! चेतावनी प्रारंभिक सत्यापन के दौरान, Iterable
फ़ील्ड केवल एक साधारण जांच करते हैं कि प्रदान किया गया तर्क पुनरावर्तनीय है। इसे उपभोग होने से रोकने के लिए, प्राप्त मूल्यों का कोई सत्यापन उत्सुकता से नहीं किया जाता है।
हालाँकि प्राप्त मूल्यों को उत्सुकता से मान्य नहीं किया जाता है, फिर भी उन्हें प्राप्त होने पर मान्य किया जाता है, और उचित होने पर उपज समय पर एक ValidationError
बढ़ाएगा:
from typing import Iterable
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
int_iterator: Iterable[int]
def my_iterator():
yield 13
yield '27'
yield 'a'
m = Model(int_iterator=my_iterator())
print(next(m.int_iterator))
#> 13
print(next(m.int_iterator))
#> 27
try:
next(m.int_iterator)
except ValidationError as e:
print(e)
"""
1 validation error for ValidatorIterator
2
Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='a', input_type=str]
"""
मानचित्रण के प्रकार¶
dict
¶
dict(v)
का उपयोग किसी शब्दकोश को परिवर्तित करने के प्रयास के लिए किया जाता है। उप-प्रकार की बाधाओं के लिए नीचे typing.Dict
देखें।
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: dict
m = Model(x={'foo': 1})
print(m.model_dump())
#> {'x': {'foo': 1}}
try:
Model(x='test')
except ValidationError as e:
print(e)
"""
1 validation error for Model
x
Input should be a valid dictionary [type=dict_type, input_value='test', input_type=str]
"""
typing.Dict
¶
from typing import Dict
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
x: Dict[str, int]
m = Model(x={'foo': 1})
print(m.model_dump())
#> {'x': {'foo': 1}}
try:
Model(x={'foo': '1'})
except ValidationError as e:
print(e)
"""
1 validation error for Model
x
Input should be a valid dictionary [type=dict_type, input_value='test', input_type=str]
"""
टाइप किया हुआ डिक्ट¶
!!! नोट यह Python 3.8 की तरह Python मानक लाइब्रेरी की एक नई सुविधा है। 3.12 से पहले typing.TypedDict में सीमाओं के कारण, Python <3.12 के लिए टाइपिंग-एक्सटेंशन पैकेज आवश्यक है। आपको typing
के बजाय typing_extensions
से TypedDict
आयात करने की आवश्यकता होगी और यदि आप ऐसा नहीं करते हैं तो बिल्ड टाइम त्रुटि प्राप्त होगी।
[TypedDict
][टाइपिंग.टाइप्डडिक्ट] एक शब्दकोश प्रकार की घोषणा करता है जो अपेक्षा करता है कि उसके सभी उदाहरणों में कुंजियों का एक निश्चित सेट हो, जहां प्रत्येक कुंजी एक सुसंगत प्रकार के मान से जुड़ी हो।
यह dict
के समान है लेकिन पाइडेंटिक शब्दकोश को मान्य करेगा क्योंकि कुंजियाँ एनोटेट की गई हैं।
from typing_extensions import TypedDict
from pydantic import TypeAdapter, ValidationError
class User(TypedDict):
name: str
id: int
ta = TypeAdapter(User)
print(ta.validate_python({'name': 'foo', 'id': 1}))
#> {'name': 'foo', 'id': 1}
try:
ta.validate_python({'name': 'foo'})
except ValidationError as e:
print(e)
"""
1 validation error for typed-dict
id
Field required [type=missing, input_value={'name': 'foo'}, input_type=dict]
"""
TypedDict
से प्राप्त मॉडल को बदलने के लिए आप __pydantic_config__
परिभाषित कर सकते हैं। अधिक विवरण के लिए ConfigDict
API संदर्भ देखें।
from typing import Optional
from typing_extensions import TypedDict
from pydantic import ConfigDict, TypeAdapter, ValidationError
# `total=False` means keys are non-required
class UserIdentity(TypedDict, total=False):
name: Optional[str]
surname: str
class User(TypedDict):
__pydantic_config__ = ConfigDict(extra='forbid')
identity: UserIdentity
age: int
ta = TypeAdapter(User)
print(
ta.validate_python(
{'identity': {'name': 'Smith', 'surname': 'John'}, 'age': 37}
)
)
#> {'identity': {'name': 'Smith', 'surname': 'John'}, 'age': 37}
print(
ta.validate_python(
{'identity': {'name': None, 'surname': 'John'}, 'age': 37}
)
)
#> {'identity': {'name': None, 'surname': 'John'}, 'age': 37}
print(ta.validate_python({'identity': {}, 'age': 37}))
#> {'identity': {}, 'age': 37}
try:
ta.validate_python(
{'identity': {'name': ['Smith'], 'surname': 'John'}, 'age': 24}
)
except ValidationError as e:
print(e)
"""
1 validation error for typed-dict
identity.name
Input should be a valid string [type=string_type, input_value=['Smith'], input_type=list]
"""
try:
ta.validate_python(
{
'identity': {'name': 'Smith', 'surname': 'John'},
'age': '37',
'email': 'john.smith@me.com',
}
)
except ValidationError as e:
print(e)
"""
1 validation error for typed-dict
email
Extra inputs are not permitted [type=extra_forbidden, input_value='john.smith@me.com', input_type=str]
"""
प्रतिदेय¶
पार्सिंग और सत्यापन पर अधिक विवरण के लिए नीचे देखें
फ़ील्ड इस प्रकार के भी हो सकते हैं [Callable
][टाइपिंग। कॉल करने योग्य]:
from typing import Callable
from pydantic import BaseModel
class Foo(BaseModel):
callback: Callable[[int], int]
m = Foo(callback=lambda x: x)
print(m)
#> callback=<function <lambda> at 0x0123456789ab>
!!! चेतावनी कॉल करने योग्य फ़ील्ड केवल एक साधारण जांच करते हैं कि तर्क कॉल करने योग्य है; तर्कों, उनके प्रकारों या रिटर्न प्रकार का कोई सत्यापन नहीं किया जाता है।
आईपी एड्रेस प्रकार¶
ipaddress.IPv4Address
: मान कोIPv4Address(v)
पर पास करके सत्यापन के लिए प्रकार का ही उपयोग करता है।ipaddress.IPv4Interface
: मान कोIPv4Address(v)
पर पास करके सत्यापन के लिए प्रकार का ही उपयोग करता है।ipaddress.IPv4Network
: मान कोIPv4Network(v)
पर पास करके सत्यापन के लिए प्रकार का ही उपयोग करता है।ipaddress.IPv6Address
: मान कोIPv6Address(v)
पर पास करके सत्यापन के लिए प्रकार का ही उपयोग करता है।ipaddress.IPv6Interface
: मान कोIPv6Interface(v)
पर पास करके सत्यापन के लिए प्रकार का ही उपयोग करता है।ipaddress.IPv6Network
: मान कोIPv6Network(v)
पर पास करके सत्यापन के लिए प्रकार का ही उपयोग करता है।
अन्य कस्टम आईपी एड्रेस प्रकारों के लिए नेटवर्क प्रकार देखें।
यूयूआईडी¶
UUID के लिए, Pydantic मान को UUID(v)
पर पास करके सत्यापन के लिए स्वयं प्रकार का उपयोग करने का प्रयास करता है। bytes
और bytearray
के लिए UUID(bytes=v)
का फ़ॉलबैक है।
यदि आप यूयूआईडी संस्करण को प्रतिबंधित करना चाहते हैं, तो आप निम्न प्रकारों की जांच कर सकते हैं:
UUID1
: UUID संस्करण 1 की आवश्यकता है।UUID3
: UUID संस्करण 3 की आवश्यकता है।UUID4
: UUID संस्करण 4 की आवश्यकता है।UUID5
: UUID संस्करण 5 की आवश्यकता है।
मिलन¶
पाइडेंटिक के पास यूनियन सत्यापन के लिए व्यापक समर्थन है, दोनों typing.Union
और पायथन 3.10 के पाइप सिंटैक्स ( A | B
) समर्थित हैं। कॉन्सेप्ट डॉक्स के Unions
अनुभाग में और पढ़ें।
[Type
][टाइपिंग.टाइप] और [TypeVar
][टाइपिंग.टाइपवार]¶
type
¶
पाइडेंटिक यह निर्दिष्ट करने के लिए type[T]
के उपयोग का समर्थन करता है कि एक फ़ील्ड केवल उन वर्गों को स्वीकार कर सकता है (उदाहरण नहीं) जो T
के उपवर्ग हैं।
typing.Type
¶
उपरोक्त type
के समान ही संभाला गया।
from typing import Type
from pydantic import BaseModel, ValidationError
class Foo:
pass
class Bar(Foo):
pass
class Other:
pass
class SimpleModel(BaseModel):
just_subclasses: Type[Foo]
SimpleModel(just_subclasses=Foo)
SimpleModel(just_subclasses=Bar)
try:
SimpleModel(just_subclasses=Other)
except ValidationError as e:
print(e)
"""
1 validation error for SimpleModel
just_subclasses
Input should be a subclass of Foo [type=is_subclass_of, input_value=<class '__main__.Other'>, input_type=type]
"""
आप यह निर्दिष्ट करने के लिए भी Type
उपयोग कर सकते हैं कि किसी वर्ग को अनुमति है।
from typing import Type
from pydantic import BaseModel, ValidationError
class Foo:
pass
class LenientSimpleModel(BaseModel):
any_class_goes: Type
LenientSimpleModel(any_class_goes=int)
LenientSimpleModel(any_class_goes=Foo)
try:
LenientSimpleModel(any_class_goes=Foo())
except ValidationError as e:
print(e)
"""
1 validation error for LenientSimpleModel
any_class_goes
Input should be a type [type=is_type, input_value=<__main__.Foo object at 0x0123456789ab>, input_type=Foo]
"""
typing.TypeVar
¶
[TypeVar
][टाइपिंग.टाइपवार] या तो अप्रतिबंधित, प्रतिबंधित या बाध्य के साथ समर्थित है।
from typing import TypeVar
from pydantic import BaseModel
Foobar = TypeVar('Foobar')
BoundFloat = TypeVar('BoundFloat', bound=float)
IntStr = TypeVar('IntStr', int, str)
class Model(BaseModel):
a: Foobar # equivalent of ": Any"
b: BoundFloat # equivalent of ": float"
c: IntStr # equivalent of ": Union[int, str]"
print(Model(a=[1], b=4.2, c='x'))
#> a=[1] b=4.2 c='x'
# a may be None
print(Model(a=None, b=1, c=1))
#> a=None b=1.0 c=1
कोई भी प्रकार नहीं¶
None
, type(None)
, या Literal[None]
सभी टाइपिंग विनिर्देश के अनुसार समकक्ष हैं। केवल None
मान की अनुमति देता है।
स्ट्रिंग्स¶
str
: स्ट्रिंग्स को वैसे ही स्वीकार किया जाता है जैसे कि है। bytes
और bytearray
v.decode()
उपयोग करके परिवर्तित किया जाता है। str s inheriting from
v.value` का are converted using
। अन्य सभी प्रकार त्रुटि उत्पन्न करते हैं।
!!! चेतावनी "स्ट्रिंग्स अनुक्रम नहीं हैं"
While instances of `str` are technically valid instances of the `Sequence[str]` protocol from a type-checker's point of
view, this is frequently not intended as is a common source of bugs.
As a result, Pydantic raises a `ValidationError` if you attempt to pass a `str` or `bytes` instance into a field of type
`Sequence[str]` or `Sequence[bytes]`:
from typing import Optional, Sequence
from pydantic import BaseModel, ValidationError
class Model(BaseModel):
sequence_of_strs: Optional[Sequence[str]] = None
sequence_of_bytes: Optional[Sequence[bytes]] = None
print(Model(sequence_of_strs=['a', 'bc']).sequence_of_strs)
#> ['a', 'bc']
print(Model(sequence_of_strs=('a', 'bc')).sequence_of_strs)
#> ('a', 'bc')
print(Model(sequence_of_bytes=[b'a', b'bc']).sequence_of_bytes)
#> [b'a', b'bc']
print(Model(sequence_of_bytes=(b'a', b'bc')).sequence_of_bytes)
#> (b'a', b'bc')
try:
Model(sequence_of_strs='abc')
except ValidationError as e:
print(e)
"""
1 validation error for Model
sequence_of_strs
'str' instances are not allowed as a Sequence value [type=sequence_str, input_value='abc', input_type=str]
"""
try:
Model(sequence_of_bytes=b'abc')
except ValidationError as e:
print(e)
"""
1 validation error for Model
sequence_of_bytes
'bytes' instances are not allowed as a Sequence value [type=sequence_str, input_value=b'abc', input_type=bytes]
"""
बाइट्स¶
bytes
को वैसे ही स्वीकार किया जाता है। bytearray
bytes(v)
का उपयोग करके परिवर्तित किया जाता है। str
v.encode()
उपयोग करके परिवर्तित किया जाता है। int
, float
और Decimal
str(v).encode()
उपयोग करके मजबूर किया जाता है। अधिक विवरण के लिए बाइटसाइज़ देखें।
typing.Literal
¶
पाइडेंटिक यह निर्दिष्ट करने के हल्के तरीके के रूप में typing.Literal
के उपयोग का समर्थन करता है कि कोई फ़ील्ड केवल विशिष्ट शाब्दिक मान स्वीकार कर सकता है:
from typing import Literal
from pydantic import BaseModel, ValidationError
class Pie(BaseModel):
flavor: Literal['apple', 'pumpkin']
Pie(flavor='apple')
Pie(flavor='pumpkin')
try:
Pie(flavor='cherry')
except ValidationError as e:
print(str(e))
"""
1 validation error for Pie
flavor
Input should be 'apple' or 'pumpkin' [type=literal_error, input_value='cherry', input_type=str]
"""
इस फ़ील्ड प्रकार का एक लाभ यह है कि इसका उपयोग कस्टम सत्यापनकर्ता घोषित किए बिना एक या अधिक विशिष्ट मानों के साथ समानता की जांच करने के लिए किया जा सकता है:
from typing import ClassVar, List, Literal, Union
from pydantic import BaseModel, ValidationError
class Cake(BaseModel):
kind: Literal['cake']
required_utensils: ClassVar[List[str]] = ['fork', 'knife']
class IceCream(BaseModel):
kind: Literal['icecream']
required_utensils: ClassVar[List[str]] = ['spoon']
class Meal(BaseModel):
dessert: Union[Cake, IceCream]
print(type(Meal(dessert={'kind': 'cake'}).dessert).__name__)
#> Cake
print(type(Meal(dessert={'kind': 'icecream'}).dessert).__name__)
#> IceCream
try:
Meal(dessert={'kind': 'pie'})
except ValidationError as e:
print(str(e))
"""
2 validation errors for Meal
dessert.Cake.kind
Input should be 'cake' [type=literal_error, input_value='pie', input_type=str]
dessert.IceCream.kind
Input should be 'icecream' [type=literal_error, input_value='pie', input_type=str]
"""
एनोटेटेड Union
में उचित क्रम के साथ, आप इसका उपयोग घटती विशिष्टता के प्रकारों को पार्स करने के लिए कर सकते हैं:
from typing import Literal, Optional, Union
from pydantic import BaseModel
class Dessert(BaseModel):
kind: str
class Pie(Dessert):
kind: Literal['pie']
flavor: Optional[str]
class ApplePie(Pie):
flavor: Literal['apple']
class PumpkinPie(Pie):
flavor: Literal['pumpkin']
class Meal(BaseModel):
dessert: Union[ApplePie, PumpkinPie, Pie, Dessert]
print(type(Meal(dessert={'kind': 'pie', 'flavor': 'apple'}).dessert).__name__)
#> ApplePie
print(type(Meal(dessert={'kind': 'pie', 'flavor': 'pumpkin'}).dessert).__name__)
#> PumpkinPie
print(type(Meal(dessert={'kind': 'pie'}).dessert).__name__)
#> Dessert
print(type(Meal(dessert={'kind': 'cake'}).dessert).__name__)
#> Dessert
[typing.Any
भी][]¶
None
सहित किसी भी मान की अनुमति देता है।
typing.Annotated
¶
PEP-593 के अनुसार, किसी अन्य प्रकार को मनमाने मेटाडेटा के साथ लपेटने की अनुमति देता है। Annotated
संकेत में Field
फ़ंक्शन के लिए एक एकल कॉल हो सकती है, लेकिन अन्यथा अतिरिक्त मेटाडेटा को अनदेखा कर दिया जाता है और रूट प्रकार का उपयोग किया जाता है।
typing.Pattern
¶
नियमित अभिव्यक्ति पैटर्न बनाने के लिए इनपुट मान को re.compile(v)
में पास करने का कारण बनेगा।
pathlib.Path
¶
मान को Path(v)
पर पास करके सत्यापन के लिए बस प्रकार का ही उपयोग करता है।
本文总阅读量次