共享库的可重写配置。

flexisettings的Python项目详细描述


Latest PyPI versionBuild Status

部分灵感来自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_CONFIGCONFIG_NAMESPACE)。

例如,myapp想要使用test_libmyapp罐 通过定义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

运行测试

圆圈

测试完整版本矩阵的最简单方法是安装 Circleci命令行应用程序:
(需要docker)

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

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

推荐PyPI第三方库


热门话题
java使用Eclipse Helios for Web项目   java指定行。作为编译器设置的分隔符?   osm映射中带有osmdroid的java标记   java Android ClassNotFoundException在路径:DexPathList上未找到类   java从j2me调用GWT方法   更新到java 8后的aspectj问题   如何仅从根元素java,com提取文本内容。滴虫软件。是的。html   安卓公司。谷歌。火基。数据库DatabaseException:未能转换java类型的值。将字符串改为长字符串   从java中的方法返回arraylist变量   java如果将引用重新分配给同步块内的锁对象,会是什么?   java下载。使用spring mvc的资源文件中的xlsx文件   java Eclipse提供了什么工具来运行Eclipse中未包含的程序?   spring boot Java泛型如何读取传递给泛型方法的类型上的字段或调用方法   Javacard中的javaecdsa签名