类型安全的环境变量解析。
项目描述
MyENV:使用类型注解进行环境变量解析
MyENV使用类型注解解析您的环境变量。这允许您根据12factor.net/config配置您的应用程序/服务,同时保持代码类型安全。
项目/仓库
代码质量/CI
名称 | 角色 | 开始时间 | 结束时间 |
---|---|---|---|
Manuel Barkhau (mbarkhau@gmail.com) | 作者/维护者 | 2018-09 | - |
环境变量和配置
按照优先级顺序,配置从以下内容解析:
- 环境变量
- 配置文件
- 在源代码中定义的默认值
声明
myenv
模块提供了一种方便的解析方法。就您的应用程序代码而言,只需要声明一个myenv.BaseEnv
的子类。此类子类的实例从配置文件和环境填充。
import myenv
class Database(myenv.BaseEnv):
_environ_prefix = "DATABASE_"
vendor : str = "postgres"
host : str = "127.0.0.1"
port : int = 5432
user : str = "myuser"
password : str
name : str = "app_db_v1"
@property
def url(self) -> str:
db = self
return f"{db.vendor}://{db.user}:{db.password}@{db.host}:{db.port}/{db.name}"
对于DBEnv
的每个注解成员,声明1.名称,2.类型和3.一个可选的默认变量。没有默认值的成员必须由环境变量或配置文件设置,否则将引发KeyError
。
解析
要使用上述配置类,只需实例化它。
# my_service/cfg.py
import sqlalchemay as sqla
db_cfg = Database() # populated from os.environ
db_cfg.port # 12345 (parsed from DATABASE_PORT)
db_cfg.password # "supersecret" (parsed from DATABASE_PASSWORD)
db_cfg.url # "mysql://myuser:supersecret@127.0.0.1:12345/mydb"
engine = sqla.create_engine(db_cfg.url)
如果您担心Database()
的实例化,它会返回一个单例实例,因此os.environ
和配置文件只会被解析一次。
配置文件
在解析配置时,如果存在以下路径,则会解析。默认情况下,配置从${PWD}/config/
加载,但您可以通过设置环境变量ENV_CONFIG_DIR
来覆盖配置文件的路径。
${ENV_CONFIG_DIR}/${ENV}.env
${ENV_CONFIG_DIR}/prod.env
除非这些文件中已经设置了变量,否则这些文件中定义的任何变量都会被设置。
这种方法可以满足服务托管中的典型用例。
- 开发机器
- 测试/生产环境
您可以将特定于用例的配置文件放在项目源树中,例如
project/config/dev.env
project/config/stage.env
project/config/prod.env
要解析适当的配置文件,您只需设置一个环境变量ENV=<envname>
即可。如果未设置ENV
,则默认为ENV=prod
。
配置文件*.env
是平文本文件,每行一个KEY=value映射。只有以全部大写字母开头的行,后面跟一个=
字符的行才会被解析
# config/prod.env
DATABASE_PORT=12345
DATABASE_USER=prod_user
DATABASE_NAME=prod_db
DATABASE_PASSWORD=supersecret
对于敏感的配置参数,例如密码和身份验证令牌,您可能更喜欢将配置文件写在源树之外,或者始终且仅通过环境变量提供它们。
https://gitlab.com/mbarkhau/myenv的变更日志
v201902.0007
- 打包更新
- 更好的测试和mypy覆盖率
v201812.0005-beta
- 添加配置解析
- 简化实例化(无需导入myenv即可使用子类)
- 切换到https://gitlab.com/mbarkhau/myenv
- 使用https://gitlab.com/mbarkhau/bootstrapit
v201809.0001-beta
- 初始版本
项目详情
关闭
myenv-201902.7.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 739c0ed411fc8a9c24b07f7834edcaaeeac994fff0e6da9d711d10e327225fef |
|
MD5 | 12cb17e7b8d4c01e21f5ed916d3c5e24 |
|
BLAKE2b-256 | 5a86daccc488c93c0a187da3dd929896c375b156ee8f25adb3c015d800e18a22 |