从 Python 中的数据类生成 YAML 架构

问题描述 投票:0回答:1

假设我有以下数据类:

@dataclass
class MyStocksConf:
    File: str = r'buydicnk.cache'
    SrcFile: str = "example_mystock.csv"
    PortofolioName: str = "My Portfolio"
    Use: Union[UseCache, int] = UseCache.USEIFAVALIABLE

我有一个类配置,它是一个数据类并包含它(和其他类)。

我使用 ruamel.yaml 注册自定义类。尽管我最终加载它是不安全的。

我想在 YAML 中拥有 IntelliSense(使用 yaml-ls)。为此,我需要生成一个模式。这个模式应该与此完全匹配:

MyStocks:
 !MyStocksConf
 File: buydicnk.cache
 PortofolioName: My Portfolio
 SrcFile: C:\Users\...\.compare_my_stocks
 Use: !UseCache DONT

UseCache
的定义:

@to_yaml
class UseCache(int,Enum):
    DONT=0
    USEIFAVALIABLE=1
    FORCEUSE=2

我如何从我的类定义生成这样的模式?

我想要模式中的类型。如果它是一个枚举,则还强制枚举该枚举的成员。其他事情对于模式生成器来说是未知的,尽管可以说可以从字段的描述中推断出描述。

python yaml schema intellisense ruamel.yaml
1个回答
0
投票

Pydantic 支持生成模式。您可以使用它来代替普通的数据类。

所以你可以这样做:

from pydantic.dataclasses import dataclass

@dataclass
class MyStocksConf:
    ...
from pydantic import TypeAdapter

adapter = TypeAdapter(MyStocksConf)
print(adapter.json_schema())

参见: https://docs.pydantic.dev/latest/usage/json_schema/

请注意,据我所知,JSON 方案用于验证 YAML。

© www.soinside.com 2019 - 2024. All rights reserved.