尝试使用动态枚举的Pydantic创建Jsonschem

发布于 2025-02-07 18:52:02 字数 1211 浏览 7 评论 0原文

我正在尝试基于Pydantic类创建JSON模式。此类包含枚举字段,这是一代我从外部API中恢复了枚举选项。

这是我到目前为止所做的:

class Language(BaseModel):
    language_audio: Optional[EnumMeta] = None
    language_booklet: Optional[EnumMeta] = None
    language_live: Optional[EnumMeta] = None

    @root_validator(pre=True)
    @classmethod
    def check_only_one_language_selected(cls, values):
        if len(values) > 1:
            raise ValueError("Select only one language option")
        elif len(values) == 0:
            raise ValueError("Select language option")
        return values


class GetYourGuideCustomerInfo(BaseModel):
    """Class for customer info validation"""

    language: Optional[Language] = None
    hotel: Optional[str] = None
    supplier_requested_question: Optional[str] = None


def get_GetYourGuideCustomerInfo(lang_enum_dict: Dict[str, Any]) -> GetYourGuideCustomerInfo:
    return GetYourGuideCustomerInfo(language=Language(**lang_enum_dict))

我生成类的代码:

schema = json.loads(get_GetYourGuideCustomerInfo(enum_dict).schema_json())

错误的错误:

json模式不可声明的值 type =可选[enummeta]必需= false default = none

高级中的none thanx

I am trying to create json schema based on pydantic class this class contains enums fields which is dynemic i recive the enums options from external api.

this what i did so far:

class Language(BaseModel):
    language_audio: Optional[EnumMeta] = None
    language_booklet: Optional[EnumMeta] = None
    language_live: Optional[EnumMeta] = None

    @root_validator(pre=True)
    @classmethod
    def check_only_one_language_selected(cls, values):
        if len(values) > 1:
            raise ValueError("Select only one language option")
        elif len(values) == 0:
            raise ValueError("Select language option")
        return values


class GetYourGuideCustomerInfo(BaseModel):
    """Class for customer info validation"""

    language: Optional[Language] = None
    hotel: Optional[str] = None
    supplier_requested_question: Optional[str] = None


def get_GetYourGuideCustomerInfo(lang_enum_dict: Dict[str, Any]) -> GetYourGuideCustomerInfo:
    return GetYourGuideCustomerInfo(language=Language(**lang_enum_dict))

the code where i generate the class:

schema = json.loads(get_GetYourGuideCustomerInfo(enum_dict).schema_json())

the error recived:

Value not declarable with JSON Schema, field: name='language_audio'
type=Optional[EnumMeta] required=False default=None

thanx in advanced

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

郁金香雨 2025-02-14 18:52:02

您可以在GitHub上参考此问题:
https://github.com/samuelcolvin/pydantic/issues/issues/4079

建议控制直接的模式:

    class MyClass: 
        x: int
        y: int
    
        @classmethod
        def __modify_schema__(cls, field_schema, field):
            field_schema['title'] = 'foobar'

You can refer to this issue on Github:
https://github.com/samuelcolvin/pydantic/issues/4079

Suggests controlling the schema directly like this:

    class MyClass: 
        x: int
        y: int
    
        @classmethod
        def __modify_schema__(cls, field_schema, field):
            field_schema['title'] = 'foobar'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文