管理应用程序设置的Hipster Orgazmic工具

pydantic-settings的Python项目详细描述


Pydantic设置

Hipster-orgazmic tool to mange application settings

Build StatusPyPI versionDocumentation Status

在应用程序设置范围内扩展pydantic功能的库pydantic已经有设置 实现,例如pydantic.BaseSettings,但从我的观点来看,它缺少一些有用的功能:

  1. 即使对于嵌套字段,也可以通过环境变量覆盖设置值
  2. 提供有关加载的文件或环境变量中的值位置的详细信息,这有助于指出用户错误
  3. 为模型字段编写文档感觉不太舒服,但为应用程序设置编写全面的文档是非常必要的

NOTE: Alpha quality

安装

使用pip:

pip install pydantic-settings

用法示例

通过env变量覆盖值

允许重写嵌套字段的值(如果它们表示为pydantic模型)。

下面是示例:

frompydanticimportBaseModel,ValidationErrorfrompydantic_settingsimportBaseSettingsModelclassNested(BaseModel):foo:intclassSettings(BaseSettingsModel):nested:Nestedtry:Settings.from_env({'APP_nested_FOO':'NOT AN INT'})exceptValidationErrorase:asserte.raw_errors[0].env_loc=='APP_nested_FOO'# shows exact env variable name

文件中的点精确错误位置

frompydanticimportBaseModel,IntegerErrorfrompydantic_settingsimportBaseSettingsModel,LoadingValidationError,load_settings,FileLocationclassNested(BaseModel):foo:intclassSettings(BaseSettingsModel):nested:Nestedconf_text="""nested:    foo: 'NOT AN INT'"""try:load_settings(Settings,conf_text,type_hint='yaml')exceptLoadingValidationErrorase:asserte.raw_errors[0].loc==('nested','foo')asserte.raw_errors[0].text_loc==FileLocation(line=3,col=10,end_line=3,end_col=22)assertisinstance(e.raw_errors[0].exc,IntegerError)

提取字段文档

允许通过处理类定义的ast树来提取sphinx样式属性文档

frompydantic_settingsimportBaseSettingsModelclassFoo(BaseSettingsModel):classConfig:build_attr_docs=Truebar:str"""here is docs"""#: this style is't supported, but probably will be added in futurebaz:intassertFoo.__fields__['bar'].schema.description=='here is docs'assertFoo.__fields__['baz'].schema.descriptionisNone# :(

在线文档

阅读有关项目的详细文档 Read The Docs页。

开发设置

项目需要poetry进行开发设置。

  • 如果你还没有
pip install poetry
  • 安装项目依赖项
poetry install
  • 运行测试
poetry run pytest .
  • 太好了,一切正常!期望有一个可选步骤:

  • 为预提交挂钩安装pre-commit

pip install pre-commit
pre-commit install

这将安装预提交挂钩,它将使用flake8black检查代码。

NOTE project uses black as code formatter, but i'am personally really dislike their "double quoted strings everywhere" style, that's why black -S should be used (anyway it's configured in pyproject.toml file)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
循环在Java TimerTask中无延迟地连续运行任务   java Jenkins无法从selenium脚本启动实际的chrome浏览器   具有5个最高值的java打印键   来自EditText的java输入仅接收提示,而不是输入的文本   使用JavaFX的java显示JTable   方法中的java返回数组   Java正则表达式字符串匹配   Java是一个不可移动的空白字符串   用javac实现java选择方法   java生成JSF2 CRUD我可以为任何实体自动创建bean和xhtml吗?   在屏幕上读取和打印java JSON   java Spring Security JWT登录端点抛出403错误   java旋转列表<Character>并维护字号   java根据图像大小调整图像大小以适应整个JLabel   java需要程序找到空间,从空间的左右两侧提取变量并打印出来。我该怎么做?   java字符串。split()不作用于分号或空格分隔符   java Fire base错误安卓   java将字符串颜色名称转换为颜色值(整数)   selenium我的Java代码抛出Java。lang.NullPointerException