共享库的可重写配置。
flexisettings的Python项目详细描述
部分灵感来自django的from django.conf import settingssettings对象。
目标是允许共享库由 导入它们的项目(比如django库如何期望django {Tt2} $对象存在)。
用法
pip install flexisettings
我们希望共享库能够从的应用程序加载配置值。 导入它。
建议的布局可以在这个repo的test_project/test_lib中找到。 例如,创建一个test_lib/conf/__init__.py类似:
fromflexisettingsimportSettingssettings=Settings(initial_namespace='TEST_LIB',defaults='test_lib.conf.defaults')
对于配置值,我们有一个可自定义的“namespace”(前缀)概念。这个 是由ConfigLoader定义的 我们正在利用的库。
initial_namespace是共享的配置值的默认命名空间 解放军。希望使用lib的项目将能够自定义名称空间, 但是当它们用于引导时,有两个配置值 始终使用默认名称(APP_CONFIG和CONFIG_NAMESPACE)。
例如,myapp想要使用test_lib。myapp罐 通过定义TEST_LIB_CONFIG_NAMESPACE = 'CUSTOM'自定义命名空间。
defaults是共享库中python模块或对象的导入路径。 它包含配置的默认值。这些键不应该是 有名字的。
例如,如果希望共享库的配置命名空间为 可通过env var配置,您可以创建test_lib/conf/defaults.py,如:
importos# namespace for config keys loaded from e.g. Django conf or env varsCONFIG_NAMESPACE=os.getenv('TEST_LIB_CONFIG_NAMESPACE','TEST_LIB')APP_CONFIG=os.getenv('TEST_LIB_APP_CONFIG',None)
然后myapp将能够export TEST_LIB_CONFIG_NAMESPACE=CUSTOM。
这就解释了命名空间定制,那么APP_CONFIG呢?
例如,myapp是一个django网站,test_lib具有 上面显示的默认文件。在您的myapp项目中,您可以:
exportTEST_LIB_CONFIG_NAMESPACE=CUSTOM exportTEST_LIB_APP_CONFIG=django.conf.settings
那么在myapp/settings.py中,您可以拥有:
CUSTOM_VAR1='whatever'
现在,回想一下我们在开始时创建的test_lib/conf/__init__.py。在 您的test_lib代码可以有:
fromtest_lib.confimportsettingsassertsettings.VAR1=='whatever'
如您所见,VAR1是在导入项目的django设置中设置的 前缀为CUSTOM_,但在共享库的^{tt2}中可用$ 对象的非前缀名称。
兼容性
此项目的测试依据是:
Python 2.7 | |
Python 3.6 |
运行测试
圆圈
cli目前不支持“工作流”,因此必须运行 两个python版本的作业分别是:
circleci build --job python-2.7
circleci build --job python-3.6
py.test(单一python版本)
也可以在本地运行测试,允许调试 发生的错误。
现在决定要测试哪个python版本并创建一个virtualenv:
pyenv virtualenv 3.6.4 flexisettings
pip install -r requirements-test.txt
test_project中的代码演示了共享 库test_lib和要使用它的应用程序app。将路径设置为 测试项目
make test