在使用字符串集的 pydantic 模型中使用正则表达式
Use regex in pydantic model that works with set of strings
我正在使用 pydantic 模型来表示 fastapi
中的请求主体。
from pydantic import BaseModel, Schema
class Files(BaseModel):
'''Class for file URLs'''
urls: Set[str] = Schema(..., title='Urls to files')
这会将请求正文限制为定义为 str
.
的一组 URL
我想知道是否有办法进一步限制 "types" 在正文中发送的网址,例如使用常用表达。我知道 Schema
有一个 regex
标志,但我认为它只适用于单个输入(或者至少它不适用于我的列表)。
您可以像这样使用 ConstrainedStr 类型:
import pydantic
from typing import Set
MyUrlsType =pydantic.constr(regex="^[a-z]$")
class MyForm(pydantic.BaseModel):
urls : Set[MyUrlsType]
仅在创建对象时起作用:
MyForm(urls={"a", "B"})
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
MyForm(urls={"a", "B"})
File "C:\Users\XXXX\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pydantic\main.py", line 275, in __init__
values, fields_set, _ = validate_model(__pydantic_self__, data)
File "C:\Users\XXXX\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pydantic\main.py", line 785, in validate_model
raise err
pydantic.error_wrappers.ValidationError: 1 validation error for MyForm
urls -> 1
string does not match regex "^[a-z]$" (type=value_error.str.regex; pattern=^[a-z]$)
ConstrainedStr 类型未在 Set 添加方法上强制执行:
f = MyForm(urls={"a", "b"})
>>> <MyForm urls={'b', 'a'}>
f.urls.add("c")
f.urls.add("yolo")
f.urls
>>> {'b', 'a', 'yolo', 'c'}
我正在使用 pydantic 模型来表示 fastapi
中的请求主体。
from pydantic import BaseModel, Schema
class Files(BaseModel):
'''Class for file URLs'''
urls: Set[str] = Schema(..., title='Urls to files')
这会将请求正文限制为定义为 str
.
我想知道是否有办法进一步限制 "types" 在正文中发送的网址,例如使用常用表达。我知道 Schema
有一个 regex
标志,但我认为它只适用于单个输入(或者至少它不适用于我的列表)。
您可以像这样使用 ConstrainedStr 类型:
import pydantic
from typing import Set
MyUrlsType =pydantic.constr(regex="^[a-z]$")
class MyForm(pydantic.BaseModel):
urls : Set[MyUrlsType]
仅在创建对象时起作用:
MyForm(urls={"a", "B"})
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
MyForm(urls={"a", "B"})
File "C:\Users\XXXX\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pydantic\main.py", line 275, in __init__
values, fields_set, _ = validate_model(__pydantic_self__, data)
File "C:\Users\XXXX\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pydantic\main.py", line 785, in validate_model
raise err
pydantic.error_wrappers.ValidationError: 1 validation error for MyForm
urls -> 1
string does not match regex "^[a-z]$" (type=value_error.str.regex; pattern=^[a-z]$)
ConstrainedStr 类型未在 Set 添加方法上强制执行:
f = MyForm(urls={"a", "b"})
>>> <MyForm urls={'b', 'a'}>
f.urls.add("c")
f.urls.add("yolo")
f.urls
>>> {'b', 'a', 'yolo', 'c'}