生物芯片

biodome的Python项目详细描述


https://img.shields.io/badge/stdlib--only-yes-green.svghttps://travis-ci.org/cjrh/biodome.svg?branch=masterhttps://coveralls.io/repos/github/cjrh/biodome/badge.svg?branch=masterhttps://img.shields.io/pypi/pyversions/biodome.svghttps://img.shields.io/github/tag/cjrh/biodome.svghttps://img.shields.io/badge/install-pip%20install%20biodome-ff69b4.svghttps://img.shields.io/pypi/v/biodome.svghttps://img.shields.io/badge/calver-YYYY.MM.MINOR-22bfda.svg

生物穹顶

受控环境

使用os.environ读取环境变量非常简单,但是在 有一段时间,人们厌倦了把变量转换成正确的类型 以及处理退回到默认值。

这个库提供了一种读取环境变量和回滚的干净方法 以理智的方式违约。

你是如何做到的:

importostry:TIMEOUT=int(os.environ.get('TIMEOUT',10))exceptValueError:TIMEOUT=10

冗长、陈词滥调、干巴巴的违规行为等。

您将如何做:

importbiodomeTIMEOUT=biodome.environ.get('TIMEOUT',10)

是的,它变成了一条线。但这里有一个魔术:如何 biodome知道应该将TIMEOUT设置为int吗?它知道 因为它查看默认参数的类型。这很管用 不同的事物:

# Listsos.environ['IGNORE_KEYS']='[1, 2, 3]'biodome.environ.get('TIMEOUT',[])==[1,2,3]# Dictsos.environ['SETTINGS']='{"a": 1, "b": 2}'biodome.environ.get('SETTINGS',{})==dict(a=1,b=2)

如果您仔细查看上面的内容,您可以看到我们set通过 stdlibos.environ字典;没错,biodome.environ替换为os.environ。你甚至不需要离开 你的整个代码库,你可以一块一块地做。

当我们讨论settingenv vars时,使用biodomeyou 不需要先铸,它会自动在内部铸弦, 不像os.environ

# Dictsbiodome.environ['SETTINGS']=dict(b=2,a=1)# No cast requiredbiodome.environ.get('SETTINGS',{})==dict(a=1,b=2)

加载env文件

biodome还提供了一个函数来加载指定 环境变量的值。这样一个env文件的示例:

# myconfig.env
# This sets the log level for all the loggers in the program
LOGGER_LEVEL=info

# Hourly backups are stored at this path and named with a timestamp.
BACKUP_PATH=/data/backups/

# The number of times to retry outgoing HTTP requests if the status
# code is > 500
RETRY_TIME=5

环境变量的名称必须在左侧,并且 在右边。每个变量必须在自己的行上。以开头的行 #被视为注释并被忽略。

这个env文件可以这样加载:

>>>importbiodome>>>biodome.load_env_file('myconfig.env')>>>print(biodome.environ['RETRY_TIME'])5

对与错

我不知道你的情况,但我经常在环境变量中使用bool设置, 所以妥善处理这件事对我来说很重要。打电话时 biodome.environ.get('SETTING',default=<value>),默认值 也可以是bool,即TrueFalse。在这种情况下,任何 以下值的大小写等价值将是 识别为True

['1','y','yes','on','active','activated','enabled','true','t','ok','yeah']

任何不在此列表中的内容都将被视为False。你有主意吗 更多应该被认为是True的东西?我要减贫战略!

可赎回

为了便于解释,通常可以方便地声明和加载环境 使用它们的模块顶部的变量:

""" My new module """importbiodomeENABLE_SETTING_XYZ=biodome.environ.get('ENABLE_SETTING_XYZ',True)defblah():print(ENABLE_SETTING_XYZ)

可以在函数和方法中调用environ.get()。 使用,但这样就失去了记录所有 模块顶部的可用环境变量。作为解决方案 这个问题,biodome提供了一种为特定的 设置这样做的另一个好处是 动态使用环境变量中的更改。这是 修改示例:

""" My new module """importbiodomeENABLE_SETTING_XYZ=biodome.environ.get_callable(# Same as before'ENABLE_SETTING_XYZ',True)defblah():print(ENABLE_SETTING_XYZ())# Now a callable!

如何在内部工作

这里的关键主题是使用缺省值的type来确定 如何转换输入值。这适用于以下类型:

  • int
  • float
  • str
  • list
  • dict
  • set注意:仅在python 3+中受支持,因为ast.literal_eval()
  • tuple

对于容器,我们使用ast.literal_eval(),这比 使用eval(),因为代码未计算。安全第一!(多亏了 @nickdrienzo代表小费)

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

推荐PyPI第三方库


热门话题
java应用程序不是在Eclipse中运行,而是在命令行中运行   swing Java图形组件问题。似乎找不到错误   我需要键盘。close();让代码正常工作?   Springboot中的java HttpSession   抽象语法树我想添加一个语句。我试图解析它,java解析器异常被抛出。如何克服它?   java Hibernate:清理会话   具有不连续子集的java划分问题   java正则表达式查找最后一个冒号后的字符串   java从SpringShell执行OS命令   Java扫描器字符串输入   java字符串索引越界异常(charAt)   java执行器服务终止被卡住   Springockito没有继承java@ContextConfiguration   java如何为一个servlet映射多个url   java安卓获取命令的stderr   java生成类型。表:数据库中的大数字   安卓 Getter Setter返回NothingJava