轻松建模和转换您关心的环境变量。
项目描述
e2e.env
基于类的环境变量建模及其类型转换。
特别适用于大量使用环境变量的测试自动化,甚至适用于可以从这些映射中受益的应用程序。
要求
为了便于实施,需要 Python 3.6 才能使用 PEP-526变量注释。
概述
环境变量访问很常见,通常通过基于模块的方法完成。
SERVICE_HOST = os.getenv('COMPANY_APP_HOST')
SERVICE_PORT = int(os.getenv('COMPANY_APP_PORT'))
这工作得很好,但有时他们需要刷新......
# Whoops, forgot the int conversion!
SERVICE_PORT = os.getenv('COMPANY_APP_PORT')
...这不是很DRY。
此外,您有时可能需要跟踪环境中的名称和值,
# This is getting verbose quickly
ENVNAME_SERVICE_HOST = 'COMPANY_APP_HOST'
SERVICE_HOST = os.getenv(ENVNAME_SERVICE_HOST)
ENVNAME_SERVICE_PORT = 'COMPANY_APP_PORT'
SERVICE_PORT = int(os.getenv(ENVNAME_SERVICE_PORT))
一口气,我们可以映射环境变量以及它们到本机类型的转换,并获取值或名称:
class ServiceVars(e2e.env.EnvMapper):
host: str = 'COMPANY_APP_HOST'
port: int = 'COMPANY_APP_PORT'
# Get the port via instance
print(ServiceVars().port) # 8080
type(ServiceVars().port) # <class 'int'>
# Get the name of the port environment variable via class
print(ServiceVars.port) # COMPANY_APP_PORT
type(ServiceVars.port) # <class 'str'>
使用您自己的“转换器”
所做的只是读取类型注释并EnvMapper通过将环境值传递给它来构造返回值。
也就是说,在建模时,
mapped_name: annotated_type = 'ENV_VAR_NAME'
...通过EnvMapper实例访问时,变为...
annotated_type(os.getenv('ENV_VAR_NAME'))
例如,在上面的示例中,我们有port: int = 'COMPANY_APP_PORT'. 这基本上被改组为int(os.getenv('COMPANY_APP_PORT')). 因此,任何可以在其构造函数中使用单个str并返回适当类型的可调用对象都将起作用。
生产用途
代码非常简单,并且将遵守这些合同:
- 不存在的变量将导致 a
e2e.env.exceptions.NoSuchVariableError被引发。* AttributeError正如合理预期的那样,访问未映射的环境变量将引发。- 访问没有注释的映射将引发
TypeError带有映射名称和模型类的 a。
* 开放讨论。回来None可以工作。传递None给类型转换器通常不会产生跨类型的一致行为,因此不能确定为特殊情况(例如str(None)give "None"、int(None)
raises a TypeError)。有关详细信息,请参阅
问题 #1。
未来的工作
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
e2e.env-0.1.0.tar.gz
(4.4 kB
查看哈希)
内置分布
e2e.env-0.1.0-py3-none-any.whl
(4.5 kB
查看哈希)