标签: pydantic

如何使自定义数据类可订阅

考虑从包派生的这个数据类pydantic

from typing import List
from pydantic import BaseModel 
class Bucket(BaseModel):
    setting: List[str]
    fight_1: List[int]
    cause_1: List[str]
Run Code Online (Sandbox Code Playgroud)

my_bucket成为 的一个实例Bucket

my_bucket = Bucket(setting=['some_value'], fight_1=[0], cause_1=['other_value'])
Run Code Online (Sandbox Code Playgroud)

基本上我希望能够做到

my_bucket['setting']                                                                                                         
Run Code Online (Sandbox Code Playgroud)

然后返回['some_value'],但我得到:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-18-cacbdc1698e9> in <module>
----> 1 my_bucket['setting']

TypeError: 'Bucket' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)

python-3.x pydantic

16
推荐指数
1
解决办法
1万
查看次数

pydantic 从模型中排除多个字段

在 pydantic 中,有一种更干净的方法可以从模型中排除多个字段,例如:


class User(UserBase):
    class Config:        
        exclude = ['user_id', 'some_other_field']

Run Code Online (Sandbox Code Playgroud)

我知道以下有效。


class User(UserBase):

    class Config:       
        fields = {'user_id': {'exclude':True}, 
                   'some_other_field': {'exclude':True}
                 }
Run Code Online (Sandbox Code Playgroud)

但我一直在寻找像 django Rest Framework 这样更干净的东西,你可以在其中指定排除或包含的列表。

python model backend pydantic fastapi

16
推荐指数
3
解决办法
5万
查看次数

返回带有字段名称而不是别名的 pydantic 模型作为 fastapi 响应

我试图用定义的字段名称而不是别名返回我的模型。

class FooModel(BaseModel):
    foo: str = Field(..., alias="bar")

@app.get("/") -> FooModel:
    return FooModel(**{"bar": "baz"})
Run Code Online (Sandbox Code Playgroud)

{"bar": "baz"}当我想要的时候就会得到回应{"foo": "baz"}。我知道使用dict模型的方法时这在某种程度上是可能的,但感觉不对并且会扰乱请求处理程序的输入。

@app.get("/") -> FooModel:
    return FooModel(**{"bar": "baz"}).dict(by_alias=False)
Run Code Online (Sandbox Code Playgroud)

我觉得应该可以在配置类中设置它,但我找不到正确的选项。

python pydantic fastapi

15
推荐指数
1
解决办法
1万
查看次数

导入 vaex 错误:PydanticImportError:“BaseSettings”已移至“pydantic-settings”包

我正在使用 Sagemaker 笔记本,在导入 vaex 时,出现以下错误。我使用的vaex版本是4.16.0

PydanticImportError:BaseSettings已移至pydantic-settings包中。有关更多详细信息,请参阅https://docs.pydantic.dev/2.0.2/migration/#basesettings-has-moved-to-pydantic-settings

有关更多信息,请访问https://errors.pydantic.dev/2.0.2/u/import-error

有人知道如何解决这个问题吗?

我尝试在安装 vaex 时降级 pydantic 库,但这没有帮助。

python amazon-sagemaker pydantic vaex

15
推荐指数
2
解决办法
3万
查看次数

PydanticUserError:如果您将 `@root_validator` 与 pre=False (默认)一起使用,则必须指定 `skip_on_failure=True`

我想在 google colab 中执行此代码,但出现以下错误:

from llama_index.prompts.prompts import SimpleInputPrompt

# Create a system prompt 
system_prompt = """[INST] <>
more string here.<>
"""

query_wrapper_prompt = SimpleInputPrompt("{query_str} [/INST]")
Run Code Online (Sandbox Code Playgroud)

错误:

/usr/local/lib/python3.10/dist-packages/pydantic/_internal/_config.py:269: UserWarning: Valid config keys have changed in V2:
* 'allow_population_by_field_name' has been renamed to 'populate_by_name'
  warnings.warn(message, UserWarning)
---------------------------------------------------------------------------
PydanticUserError                         Traceback (most recent call last)
<ipython-input-36-c45796b371fe> in <cell line: 3>()
      1 # Import the prompt wrapper...
      2 # but for llama index
----> 3 from llama_index.prompts.prompts import SimpleInputPrompt
      4 # Create a system prompt …
Run Code Online (Sandbox Code Playgroud)

python prompt pydantic llama-index

15
推荐指数
1
解决办法
2万
查看次数

Pydantic 验证器删除空白字符串?

我有以下 Pydantic 模型:

class Report(BaseModel):
    id: int
    name: str
    grade: float = None
    proportion: float = None

    @validator('*', pre=True)
    def blank_strings(cls, v):
        print(v)
        if v == "":
            return None
        return v
Run Code Online (Sandbox Code Playgroud)

我的目标是能够将空字符串视为空值,但它似乎不起作用。

Report(id=5,name="Steve",grade=0.5) 创建一个实例,其中proportion=Nonebut... Report(id=5,name="Steve",grade=0.5,proportion="")抛出 error value is not a valid float (type=type_error.float)。我怎样才能得到与第一种情况相同的结果?

python pydantic fastapi

14
推荐指数
2
解决办法
2万
查看次数

在 pydantic 模型中包含非验证方法是不好的做法吗?

我正在使用 pydantic 1.3 来验证我正在编写的 API 的模型。

在继承自 pydantic.BaseModel 的类中包含任意方法是否常见/好的做法?

我需要一些与对象关联的辅助方法,我正在尝试决定是否需要“处理程序”类。这些模型正在转换为 json 并发送到我也在编写的宁静服务。

我的模型看起来像这样:

class Foo(pydantic.BaseModel):
    name: str
    bar: int
    baz: int
Run Code Online (Sandbox Code Playgroud)

做这样的事情是不是不好的做法:

class Foo(pydantic.BaseModel):
    name: str
    bar: int
    baz: int

    def add_one(self):
        self.bar += 1
Run Code Online (Sandbox Code Playgroud)

这对我来说有些道理,但我找不到任何人这样做的例子。

先感谢您。

python validation design-patterns model pydantic

14
推荐指数
1
解决办法
1402
查看次数

在 pydantic 模型中初始化 Literal enum

pydantic 很好地支持常规枚举,并且可以使用枚举实例和枚举来初始化枚举类型字段:

from enum import Enum
from pydantic import BaseModel

class MyEnum(Enum):
    FOO = 'foo'
    BAR = 'bar'

class MyModel(BaseModel):
    x: MyEnum

MyModel(x=MyEnum.BAR)  # Enum instance, works
MyModel(x='foo')       # Enum value, works
MyModel(x='?')         # Fails, as expected
Run Code Online (Sandbox Code Playgroud)

pydantic 还支持typing.Literal

from typing import Literal
from pydantic import BaseModel

class MyModel(BaseModel):
    x: Literal['foo']

MyModel(x='foo')  # Works
MyModel(x='bar')  # Fails, as expected
Run Code Online (Sandbox Code Playgroud)

现在我想将枚举和文字结合起来,即强制字段值等于一个特定的枚举实例。但是,我仍然希望能够传递正确的枚举(即不仅仅是正确的枚举实例),但这似乎不起作用:

from enum import Enum
from typing import Literal
from pydantic import …
Run Code Online (Sandbox Code Playgroud)

python pydantic

14
推荐指数
1
解决办法
8859
查看次数

是否可以使用 fastapi 强加请求正文的列表属性的长度?

是否可以在请求正文(或响应)的架构中指定列表的长度?支持使用查询函数验证 url 中传递的字符串的长度,但我没有看到任何列表。可能的用例是发送固定大小的浮点数列表以馈送到 ML 模型。

pydantic fastapi

14
推荐指数
1
解决办法
1万
查看次数

如何在 pydantic 模式验证后从蛇形案例转变为骆驼式案例

我可以找到一种方法,通过使用别名生成器将基于驼峰类型的请求正文转换为蛇形案例,但对于我的响应,我再次希望将蛇形案例类型转换为驼峰案例类型发布到模式验证。我有什么办法可以实现这个目标吗?

示例:我有一个 python 字典,如下所示,

{
 "title_name": "search001",
 "status_type": "New" 
}
Run Code Online (Sandbox Code Playgroud)

并发布到 pydantic 模式验证我的字典应该将蛇大小写类型转换为驼峰大小写,如下所示,

{
 "titleName": "search001",
 "statusType": "New" 
}
Run Code Online (Sandbox Code Playgroud)

如何定义 pydantic 模式来解决上述问题?

提前致谢。

python pydantic

14
推荐指数
3
解决办法
2万
查看次数