Я использую пидантическую модель для представления тела запроса в fastapi
.
from pydantic import BaseModel, Schema
class Files(BaseModel):
'''Class for file URLs'''
urls: Set[str] = Schema(..., title='Urls to files')
Это ограничит тело запроса набором URL, определенных как str
.
Мне было интересно, если есть способ еще больше ограничить "типы" URL-адресов, отправляемых в теле, например, используя. регулярные выражения. Я знаю, что Schema
имеет флаги regex
, но я думаю, что он будет работать только с одним входом (или, по крайней мере, он не работал с моими списками).
1 ответ
Вы можете использовать тип 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 add:
f = MyForm(urls={"a", "b"})
>>> <MyForm urls={'b', 'a'}>
f.urls.add("c")
f.urls.add("yolo")
f.urls
>>> {'b', 'a', 'yolo', 'c'}
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.