假设我有以下数据类:
@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
我如何从我的类定义生成这样的模式?
我想要模式中的类型。如果它是一个枚举,则还强制枚举该枚举的成员。其他事情对于模式生成器来说是未知的,尽管可以说可以从字段的描述中推断出描述。
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。