处理环境常数的简单方法。

constants的Python项目详细描述


有问题吗?

大多数应用程序使用常量。许多常数基于不同的值 在执行应用程序的环境中。

考虑数据库凭据而不是开发、测试、登台、生产或 股票市场对开发、测试、纸张、生产的执行力…

解决方案

不知羞耻地受到app_constants宝石的启发,constants旨在解决这个问题。 问题(仅此问题)。

.ini文件

constants使用.ini文件格式指定应用程序常量 每个环境中的值。默认值在每个环境中都可用 除非在节中特别重写。

[DEFAULT]
something = a_default_value
all =  1
a_string = 0350

[a_section]
something = a_section_value
just_for_me = 5.0
flag = False
minutes = 365 * 24 * 60

要了解有关ini文件和节的更多信息,请查看python标准 库configparser文档。

当前工作目录中的默认文件是constants.ini。但是 您可以使用任何想要的文件名cf.Instantiation

环境

定义应用程序将在其中运行的环境。默认环境 存储该值的变量是常数,但您可以使用任何变量 你想要的名字。

大多数平台都有办法做到这一点,在bash中:

export __CONSTANTS__=a_section

实例化

>>> import constants
>>> consts = constants.Constants()

在实例化时,常量查找名为 _常数,其值用于找出 应使用constants.ini文件。

常量的构造函数接受两(2)个可选参数。variable 让我们指定环境变量的名称和filename 包含常量定义的.ini文件的绝对路径。

>>> consts = Constants(variable='AN_ENVIRONMENT_VARIABLE',
...                    filename='constants.cfg') # doctest: +SKIP

要访问这些值,实例可以像字典(getitem)一样使用。

>>> consts['something']
'a_section_value'

相关时,值被转换为整数、浮点或布尔值。

>>> consts['all']
1
>>> consts.a_string
'0350'
>>> consts.flag
False

计算表达式。

>>> consts.minutes
525600

也可以使用访问值。操作员(getattr)

>>> consts.all
1

警告

“我们是负责任的成年人”,然而,受马修·威尔逊的suggestion的启发 尝试更改常量时引发异常$ 问题warnings

>>> import warnings
>>> with warnings.catch_warnings(record=True) as warning:
...     # reassigning the constant all
...     consts.all = 2
>>> warning[0].message
UserWarning('all changed to 2',)

…和无论如何都会更改常量

>>> consts.all
2

它同样适用于类似于dict的作业。

>>> with warnings.catch_warnings(record=True) as warning:
...     consts['something'] = 'a_new_value'
>>> warning[0].message
UserWarning('something changed to a_new_value',)
>>> consts['something']
'a_new_value'

记录

constants的目标是成为一个好的logging公民,在 伐木树。

所有对logger方法的调用都会公开一个名为method的额外logrecord键。

当日志级别设置为info时,它只记录一条有用的消息。

>>> import sys
>>> import logging
>>> logging.basicConfig(level=logging.INFO,
...                     stream=sys.stdout,
...                     format='%(levelname)s %(name)s.%(method)s %(message)s')
>>> consts = constants.Constants() # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS
INFO constants.load
variable: __CONSTANTS__,
filename: constants.ini,
environment: a_section,
constants: {...}

在调试级别,它变得有点噪音。

>>> logging.root.setLevel(logging.DEBUG)
>>> debug_me  = consts.just_for_me # doctest: +ELLIPSIS
DEBUG constants.__getattr__ begin (..., 'just_for_me') {}
DEBUG constants.__getitem__ begin (..., 'just_for_me') {}
DEBUG constants.cast begin ('5.0',) {}
DEBUG constants.cast end 5.0
DEBUG constants.__getitem__ end 5.0
DEBUG constants.__getattr__ end 5.0

安装

constantsPyPI

pip install constants

…可以在GitHub上分叉。

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

推荐PyPI第三方库


热门话题
在JAVA中,将十六进制转换为十进制,将十进制转换为时间戳   无法识别java子类构造函数   java JavaFx将两个“setOnAction”设置为同一个按钮   java重载的StringBuilder insert()以及偏移量和索引之间的差异   java调试异常初始化错误   带有可插拔组件的应用程序的面向对象设计中的java问题   java中mysql的Socket编程   java NetBeans平台和TinyLaF 1.4.0   java Sql server 2005知道插入了新记录   java正则表达式如何匹配2个任意但不同的字符   java如何在两个类之间使用double?   java我可以使用嵌套的rest webservice或在webservice中打开链接吗   java如何将Swagger与Maven+Jersey+jboss EAP 6.2集成   java无法更新视图寻呼机中的中间片段。   安卓中的java For循环会在项目之间创建间隙   具有重复模式的java正则表达式   用于Swagger的java GraphQL扩展   基于Android Fonttype在纯Java中查找精确的Fonttype   Java字符串返回方法不返回