轻松地建模和转换您关心的环境变量。

e2e.env的Python项目详细描述


e2e.env

基于类的环境变量建模及其类型转换。

特别适用于使用环境变量的自动化测试 丰富,甚至可以在应用程序中受益于这些映射。

要求

为了易于实现,需要使用Python3.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')

…不是很好。

此外,有时您可能需要跟踪名称,并环境中的值,

# This is getting verbose quicklyENVNAME_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))

一下子,我们就可以映射出环境变量 转换为本机类型,并获取值或名称:

classServiceVars(e2e.env.EnvMapper):host:str='COMPANY_APP_HOST'port:int='COMPANY_APP_PORT'# Get the port via instanceprint(ServiceVars().port)# 8080type(ServiceVars().port)# <class 'int'># Get the name of the port environment variable via classprint(ServiceVars.port)# COMPANY_APP_PORTtype(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并返回 合适的类型就行了。

生产使用

代码非常简单,并将遵守这些合同:

    不存在的变量将导致 e2e.env.exceptions.NoSuchVariableError待提高。*
  • 访问未映射的环境变量将引发一个AttributeError,如下所示 这是合理的预期。
  • 访问不带注释的映射将引发 映射名称和模型类。

*开放讨论。返回None可以工作。将None传递给类型 转换器通常不会在类型之间产生一致的行为,因此不能 被确定为特殊情况(例如,str(None)给出"None"int(None) 引发一个TypeError)。见 Issue #1了解更多信息。

未来工作

  • 支持raise_on_dne或类似于更改 找不到环境变量。请竖起大拇指 Issue #1如果你愿意 请参阅此功能。
    classServiceVars(e2e.env.EnvMapper,raise_on_dne=False):...
    classServiceVars(e2e.env.EnvMapper,dne=lambda:None):...
  • 支持将映射合并为一个更大的映射,用于组织 目的。请竖起大拇指 Issue #2如果你愿意 请参阅此功能。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Cassandra复制因子大于节点数   java J2EE JTA事务回滚不适用于OSE Glassfish 4.0(Build 89)   java spring安全预认证用户登录   org的java类文件。反应流。从RxJava编译示例时未找到Publisher?   java在使用dataFormat作为POJO通过Camel调用Web服务时无法设置SOAP标头   Javafx类的java静态实例   java如何防止一个部件在关闭时覆盖另一个部件的位置   sql server无法从我的java代码连接到数据库   java在JList(Swing)中显示带有的ArrayList   从Java中的CXF服务获取WSAddressing数据   使用资产文件夹进行java简单json解析(本地)   java LDAPException未绑定的无效凭据   JavaJSFspring部署到weblogic   JAVA中字符数组中的特定元素排列?   如果脚本位于不同的目录中,则ant不会使用exec标记运行Javashell脚本