假设我有以下数据类
@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 支持生成方案。您可以使用它(BaseModel)而不是普通的数据类。
from pydantic import TypeAdapter
adapter = TypeAdapter(List[int])
print(adapter.json_schema())
#> {'items': {'type': 'integer'}, 'type': 'array'}
摘自 https://docs.pydantic.dev/latest/usage/json_schema/
请注意,据我所知,JSON 方案是用于验证 YAML 的方案。