简单的环境变量解析
项目描述
envparse2 是一个简单的工具,用于解析环境变量。
注意:envparse2 是 envparse 的分支,后者已经不再维护,要检查原作者和代码,请访问 <https://github.com/rconradharris/envparse.git>
如果您使用Heroku以及/或者订阅 12 Factor App 的原则,您将在您的应用程序中使用大量基于环境变量的配置。 os.environ 是一个很好的起点,但随着时间的推移,您会发现自己在处理原始环境变量方面的代码大量重复。
envparse2 旨在消除这种重复的、往往不一致的解析代码,并提供一个单一、易于使用的包装器。
一些想法和代码部分来自 django-environ 项目,但使其框架无关。
安装
通过PyPI
$ pip install envparse2
用法
在您的设置或配置模块中,首先导入标准解析器或具有模式的解析器
# Standard
from envparse2 import env
# Schema
from envparse2 import Env
env = Env(BOOLEAN_VAR=bool, LIST_VAR=dict(cast=list, subcast=int))
env 可以以两种方式调用
显式类型: env('ENV_VAR_NAME', cast=TYPE, ...)
隐式类型(仅适用于Python内置类型): env.TYPE('ENV_VAR_NAME', ...) 如果未指定类型,无论是显式还是隐式,则默认类型为 str。
转换为指定类型
# Environment variable: MAIL_ENABLED=1
mail_enabled = env('MAIL_ENABLED', cast=bool)
# OR mail_enabled = env.bool('MAIL_ENABLED')
assert mail_enabled is True
转换嵌套类型
# Environment variable: FOO=1,2,3
foo = env('FOO'), subcast=int)
# OR: foo = env('FOO', cast=list, subcast=int)
# Note that there is no way to implicitly call subcast.
assert foo == [1, 2, 3]
指定默认值
# Environment variable MAX_ROWS has not been defined
max_rows = env.int('MAX_ROWS', default=100)
assert max_rows == 100
代理值,这在Heroku中很有用,可以将他们提供的环境变量连接到应用程序实际使用的变量上
# Environment variables: MAILGUN_SMTP_LOGIN=foo,
# SMTP_LOGIN='{{MAILGUN_SMTP_LOGIN}}'
smtp_login = env('SMTP_LOGIN')
assert smtp_login == 'foo'
现在,如果您切换到使用Mandrill作为电子邮件提供商,而不是修改应用程序,您只需进行配置更改即可
SMTP_LOGIN='{{MANDRILL_UESRNAME}}'
还有一些方便的方法
env.json:解析JSON并返回字典。
env.url:解析URL并返回urlparse.ParseResult对象。
类型特定说明
列表:期望的环境变量格式为FOO=1,2,3,逗号之间可以包含空格,也可以包含前导或尾随空格。
字典:期望的环境变量格式为FOO='key1=val1, key2=val2。也可以包含空格。
JSON:期望的是标准的JSON字符串,例如FOO='{"foo": "bar"}'。
模式
定义一个模式,这样您只需提供一次类型转换、子类型转换和默认值。
# Environment variables: MAIL_ENABLED=0, LIST_INT='1,2,3'
# Bind schema to Env object to get schema-based lookups
env = Env(MAIL_ENABLED=bool, SMTP_LOGIN=dict(cast=str, default='foo'),
LIST_INT=dict(cast=list, subcast=int))
assert env('MAIL_ENABLED') is False
assert env('SMTP_LOGIN') == 'foo' # Not defined so uses default
assert env('LIST_INT') == [1, 2, 3]
Env构造函数接受以下形式的值:VAR_NAME=type 或 VAR_NAME=dict,其中dict是一个字典,包含以下键之一或多个:cast、subcast、default。
预处理和后处理
预处理是可调用的,在执行任何类型转换之前运行在环境变量字符串上。
# Environment variables: FOO=bar
# Preprocessor to change variable to uppercase
to_upper = lambda v: v.upper()
foo = env('FOO', preprocessor=to_upper)
assert foo == 'BAR'
后处理是可调用的,在类型转换之后运行。一个例子可能是返回框架预期的数据结构。
# Environment variable: REDIS_URL='redis://:redispass@127.0.0.1:6379/0'
def django_redis(url):
return {'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': '{}:{}:{}'.format(url.hostname, url.port, url.path.strip('/')),
'OPTIONS': {'PASSWORD': url.password}}
redis_config = env('REDIS_URL', postprocessor=django_redis)
assert redis_config == {'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': '127.0.0.1:6379:0', 'OPTIONS': {'PASSWORD': 'redispass'}}
环境文件
从.env文件中读取(行分隔的KEY=VALUE)。
# This recurses up the directory tree until a file called '.env' is found.
env.read_envfile()
# Manually specifying a path
env.read_envfile('/config/.myenv')
# Values can be read as normal
env.int('FOO')
项目详情
envparse2-0.3.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 119ea05995f6a137a02ccf1deff5b34e6dacaba79b594c5837a7879cfa3c61ce |
|
MD5 | b2c7567c7d4bb4b773f9b0f84a33499e |
|
BLAKE2b-256 | 40376c8dbac240ddd65b6bb9c8519ba203afb51b67646b1630df710460cdd8d1 |
envparse2-0.3.0-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 99a123f8ccaedf762d8f475ae802aeaa9f9699e0f4ecc3de2ec7dbe1aca1cc72 |
|
MD5 | ee825dbbd6fd6855f47ebd21c4df51e9 |
|
BLAKE2b-256 | 09a7b084d7824a8ecc3d51cdf357dfe7263f75d1475c48fee6f0fa45e3f9881a |