从环境变量映射Python配置
项目描述
生态
生态 结合了 PEP526 和环境变量,使得配置 12因子应用程序 变得简单。
入门
生态 会根据配置类定义自动获取和转换环境变量。
例如,假设你的应用程序有一个可配置的(整数)端口和一个(布尔)调试标志,以及一个(字符串)日志级别,默认为INFO,你可以简单地声明你的配置为
class Configuration(ecological.Config):
port: int
debug: bool
log_level: str = "INFO"
然后设置环境变量 PORT、DEBUG 和 LOG_LEVEL。 生态 将自动将具有相同(但大写)名称的环境变量设置为类的属性。
默认情况下,值设置为类定义的类型,并分配给类本身(即类不需要实例化)。如果需要,可以更改此行为(请参阅自动加载部分)。
教程
本教程教程可以帮助您交互式地了解库的基本功能。
类型支持
Ecological还支持一些在PEP484中定义的类型,例如
class Configuration(ecological.Config):
list_of_values: List[str]
将自动解析环境变量值作为列表。
带前缀的配置
您还可以选择为您的应用程序配置添加前缀,例如,以避免冲突
class Configuration(ecological.Config, prefix='myapp'):
home: str
在这种情况下,home属性将从MYAPP_HOME环境属性中获取。
嵌套配置
Ecological.Config还支持嵌套配置,例如
class Configuration(ecological.Config):
integer: int
class Nested(ecological.Config, prefix='nested'):
boolean: bool
这样,您可以将相关的配置属性分层分组。
高级
细粒度控制
您可以控制配置属性设置的一些行为。
这可以通过提供作为属性默认值的ecological.Variable实例或通过在类级别指定全局选项来实现
my_source = {"KEY1": "VALUE1"}
class Configuration(ecological.Config, transform=lambda v, wt: v, wanted_type=int, ...):
my_var1: WantedType = ecological.Variable(transform=lambda v, wt: wt(v), source=my_source, ...)
my_var2: str
# ...
所有可能的选项及其含义可以在下表找到
选项 |
类级别 |
变量级别 |
默认值 |
描述 |
---|---|---|---|---|
prefix |
是 |
否 |
None |
当从属性名称派生变量名称时,该前缀被转换为大写并添加到前面。 |
variable_name |
是 |
是 |
从属性名称派生,并在指定前缀(如果指定)的情况下被添加;转换为大写。 |
当在变量级别指定时,它表示将要使用的确切源变量名称。 当在类级别指定时,它被视为一个函数,该函数从属性名称返回变量名称,其签名如下 def func(attribute_name: str, prefix: Optional[str] = None) |
default |
否 |
是 |
(无默认值) |
如果未设置,则属性默认值。 |
transform |
是 |
是 |
将源值转换为期望的类型。在非标量类型(+标量bool)的情况下,首先使用Python解析值。 |
一个将值从source转换为预期值和wanted_type的函数,其签名如下 def func(source_value: str, wanted_type: Union[Type, str]) |
source |
是 |
是 |
os.environ |
将从中加载值的字典。 |
wanted_type |
是 |
是 |
str |
属性的期望Python类型。 在变量级别,通过属性的类型注解指定:my_var_1: my_wanted_type。 然而,它也可以在类级别指定,在这种情况下,它作为当未提供注解时的默认值 class MyConfig(ecological.Config, wanted_type=int, ...) |
以下规则适用于选项解析
当在变量和类级别都指定了选项时,变量级别的选项优先于类级别的选项,
当在变量级别缺少某些选项时,它们的默认值从类级别获取,
无需分配一个ecological.Variable实例即可更改行为;它仍然可以在类级别(全局)进行更改。
自动加载
通过在类定义中指定autoload选项,可以延迟/禁用变量值的自动加载(设置)。
在类创建时(默认)
当未提供选项时,值在类创建时立即加载并分配给类属性
class Configuration(ecological.Config):
port: int
# Values already read and set at this point.
# assert Configuration.port == <value-of-PORT-env-var>
永不
选择此选项时,不会发生自动加载。为了设置变量值,需要显式调用Config.load方法。
class Configuration(ecological.Config, autoload=ecological.Autoload.NEVER):
port: int
# Values not set at this point.
# Accessing Configuration.port would throw AttributeError.
Configuration.load()
# Values read and set at this point.
# assert Configuration.port == <value-of-PORT-env-var>
在对象实例初始化时
如果更倾向于在对象实例上加载和存储属性值,而不是在类本身上,可以使用Autoload.OBJECT策略。
class Configuration(ecological.Config, autoload=ecological.Autoload.OBJECT):
port: int
# Values not set at this point.
config = Configuration()
# Values read and set at this point on ``config``.
# assert config.port == <value-of-PORT-env-var>
# Accessing ``Configuration.port`` would throw AttributeError.
注意事项和已知限制
Ecological不支持(公共)在Config类中的方法。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
构建分布
ecological-2.0.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1b147a1e9f517cc3cd8b5d721fdcc562f371af3d4507711d19ab1d47b89d3c5a |
|
MD5 | d56054e54780c5a8f8d1cf00f097cd11 |
|
BLAKE2b-256 | 1306c6c60ba2b394942276d58fb1c8b20a8c77b06b60d7e9204e486a99298025 |
ecological-2.0.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6c90386d3606911410246aef4b04592bd961c99c2789f52e23fcc66152b5164b |
|
MD5 | 96e10302bd57bcca404b63c75b975a4c |
|
BLAKE2b-256 | 8e423d83e880115dbe5daf42a1cc5326eb674cf627fc199910e069cd3d0c2a03 |