容器化应用便捷配置
项目描述
container-app-conf

container-app-conf 是一个库,可以轻松地从多个来源(YAML、env)读取应用程序配置值,同时提供类型验证。
这个库的初始目的是提供一个简单的方法来配置容器中的应用程序(在这个例子中是Docker),同时仍然提供使用更简单的配置形式(如YAML文件)的可能性。
container-app-conf 被以下项目使用
以及希望还有更多的其他项目 :)
如何使用
安装依赖
pip install container-app-conf
扩展 ConfigBase
基础
创建自定义配置类并定义配置条目
from container_app_conf import ConfigBase
from container_app_conf.entry.string import StringConfigEntry
class AppConfig(ConfigBase):
MY_CONFIG = StringConfigEntry(
description="This is just a demo text config entry",
example="example",
key_path=[
"my_app",
"example"
],
required=True)
使用配置值
config = AppConfig()
value = config.MY_CONFIG.value
打印当前配置
通常打印应用程序的当前配置很有用。为此,您可以使用
config = AppConfig()
config.print()
这将生成类似以下输出的结果
test->bool: _REDACTED_
test->this->date->is->nested->deep: 2019-10-22T04:21:02.316907
test->this->is->a->range: [0..100]
test->this->is->a->list: None
test->this->timediff->is->in->this->branch: 0:00:10
test->directory: None
test->file: None
test->float: 1.23
test->int: 100
test->regex: ^[a-zA-Z0-9]$
test->string: default value
secret->list: _REDACTED_
secret->regex: _REDACTED_
如果您不喜欢这种样式,可以指定自定义的 ConfigFormatter
,例如这样
from container_app_conf.formatter.toml import TomlFormatter
config = AppConfig()
config.print(TomlFormatter())
这将输出相同的配置,如下所示
[test]
bool = "_REDACTED_"
float = 1.23
int = 100
regex = "^[a-zA-Z0-9]$"
string = "default value"
[secret]
list = "_REDACTED_"
regex = "_REDACTED_"
[test.this.is.a]
range = "[0..100]"
[test.this.date.is.nested]
deep = "2019-10-22T04:26:10.654541"
[test.this.timediff.is.in.this]
branch = "0:00:10"
生成参考配置
您可以从配置对象生成参考配置。此参考包含所有可用的配置选项。如果为条目指定了默认值,则使用该默认值,否则使用示例值。
from container_app_conf.util import generate_reference_config
config = AppConfig()
reference_config = generate_reference_config(config._config_entries.values())
这将返回一个表示配置条目树的字典。您也可以指定格式化程序,并使用以下命令将参考配置写入文件
from container_app_conf.util import write_reference
from container_app_conf.formatter.yaml import YamlFormatter
config = AppConfig()
write_reference(config, "/home/markus/.config/example.yaml", YamlFormatter())
如果生成的参考包含由于应用程序约束而不合理的数据,请使用各自的配置条目构造函数参数指定您自己的示例或更好的默认值。
配置类型
名称 | 描述 | 类型 |
---|---|---|
BoolConfigEntry |
将 bool 、int (《0》和《1》)和 str (《yes》、《no》等)值解析为布尔值 |
bool |
IntConfigEntry |
将输入解析为整数 | int |
FloatConfigEntry |
将输入解析为浮点数 | float |
RangeConfigEntry |
将输入解析为范围(见py-range-parse) | 范围 |
StringConfigEntry |
接受原始字符串输入 | str |
RegexConfigEntry |
解析和编译正则表达式 | re.pattern |
DateConfigEntry |
解析各种日期时间格式(见python-dateutil) | datetime |
TimeDeltaConfigEntry |
解析各种 timedelta 格式(见pytimeparse) | timedelta |
FileConfigEntry |
解析文件路径 | 路径 |
DirectoryConfigEntry |
解析目录路径 | 路径 |
DictConfigEntry |
解析字典 | dict |
ListConfigEntry |
将逗号分隔的字符串解析为指定在另一个 ConfigEntry (在 yaml 中也可以指定为 yaml 列表)中的项的列表 |
[] |
如果现有的类型都不符合您的需求,您可以轻松地通过扩展 ConfigEntry
基类来创建自己的类型。
默认值
可以使用 default
构造函数参数为每个 ConfigEntry
指定默认值。
必需值
默认情况下,具有与 None
不同的默认值的配置条目是必需的。只有当条目没有默认值(或明确设置为 None
)时,才允许 None
值。
对于必需条目,即使在初始解析后也无法将其值设置为 None
。在所有数据源中省略此条目的值将导致异常。
如果条目需要值且没有默认值,则将 required
构造函数参数设置为 True
。
如果您想允许即使默认值不是 None
也设置 None
值,则必须显式设置 required=False
。
秘密值
如果您的配置包含秘密值,如密码,您可以使用 secret=True
构造函数参数将其标记为秘密值。这样,在打印当前配置时,它们的值将被隐藏。
数据源
container-app-conf 支持同时使用多个数据源来确定配置值。以下是一些可用的实现
名称 | 描述 |
---|---|
EnvSource |
读取环境变量 |
YamlSource |
解析 YAML 文件 |
TomlSource |
解析 TOML 文件 |
JsonSource |
解析 JSON 文件 |
EnvSource
ENV Key
由于您只指定了配置条目的键路径,ENV键将自动生成,通过使用下划线连接所有键路径项,转换为大写,并将任何剩余的连字符也替换为下划线
key_path = ["my_app", "my-example"]
将产生 MY_APP_MY_EXAMPLE
。
文件系统源
提供多个使用文件系统的数据源
- YamlSource
- TomlSource
- JsonSource
文件路径
默认情况下,配置文件将在多个目录中搜索,这些目录通常用于配置文件,包括
./
~/.config/
~/
可以使用path
构造函数参数进行自定义
from container_app_conf.source.yaml_source import YamlSource
yaml_source = YamlSource(file_name="myapp", path=["/my/path", "/my/other/path"])
单例
默认情况下,每个Config
子类实例的行为都像一个单例。这意味着如果您在一个实例中更改配置值,它也会影响相同__class__
的所有其他实例。
为了能够创建彼此独立的配置多个实例,可以使用singleton
构造函数参数禁用此行为
config1 = AppConfig(singleton=False)
config2 = AppConfig(singleton=False)
贡献
GitHub是社交编码的地方:如果您想写代码,我鼓励您通过从本仓库的分支提出pull request来贡献。为错误和新功能创建GitHub票据,并评论您感兴趣的内容。
许可证
container-app-conf
Copyright (c) 2019 Markus Ressel
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
项目详情
container_app_conf-5.3.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 81fa5e7da03834ab6a7b9ad09a93dd767ecb57085751dfb7b4cf6570d51768db |
|
MD5 | fb8eb50e97e7d4e7aa138841c4df1138 |
|
BLAKE2b-256 | c8d7e470804dc34a184ca58e8eda266c03abc7e640202da8c4ff2f0acb585f01 |
container_app_conf-5.3.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fa7d9530da2f62d4fed720a0b29ea854aadf0626104a2c17aace467608711160 |
|
MD5 | 003c395b3356bd84c4c81d5ba61eb4d6 |
|
BLAKE2b-256 | 7f1fc9b924ea60cc52a3c84d68b56581f753e72a723ff63d32eaa00f03816f06 |