python api提供一组类作为每个属性具有多个值的配置对象的基础。

multiconf的Python项目详细描述


Build StatusCoverageDocumentation StatusPyPi Package

什么

multiconf是描述 使用python的多个环境。

为什么?

它是从对java ee项目部署自动化的简单需求开始的, 阿帕奇等等。在嵌套级别为 纯文本属性文件或XML配置文件,我想 需要更好的。 对于纯文本属性文件,属性文件的数量随着 将环境和技术添加到项目中。很难得到 描述类似配置的属性概述。有财产 为每个环境定义了价值?而且越来越难 描述proper设置:什么取决于可以使用什么和什么以及什么 不能。 另一方面,使用XML,您可以创建一个经过严格验证的模型,但是 继续扩展模式和处理它的工具。也许你 不喜欢冗长。 所以,当您可以直接拥有配置时,为什么要使用xml或属性文件 用Python?所以,从这个多核因子中诞生了。

什么是正确的设置?

例如:

  • 所有配置的端口都遵循一个约定
  • 所有服务器名称都遵循一个约定
  • 某些配置对象必须具有强制参数(对于 示例:datasource对象所需的数据库名称或url)
  • 某些配置对象必须具有强制子项(例如: 没有托管服务器的WebLogic群集没有意义)
  • 默认设置在所有环境中传播,并且可以 针对特定环境覆盖
  • 无重复设置

如何

multiconf提供了一组类,其中的属性可能具有不同的 不同环境的值,同时强制值为 为所有定义的环境定义。multiconf允许您实现 你自己的类dom对象模型,并得到一些 你的定义是错误的。其他工具使用yaml或json来定义 组件的设置,但是需要验证 那些设置。multiconf既是定义又是验证。多核因子 允许您定义环境组,以便可以轻松创建 通过将新环境添加到组并仅覆盖值 与组值不同的。

您必须将配置数据模型定义为派生自 multiconf基类,其中之一是ConfigItem

例如,在您的配置数据模型(您的框架)中,您定义:

classHost(ConfigItem):def__init__(name=MC_REQUIRED,mem=MC_REQUIRED):self.name=nameself.mem=mem@propertydeffqd(self):return"{name}.{env}.my.organisation".format(self.name,self.env.name)

在项目配置文件中,然后可以声明配置对象 对于不同的环境具有不同的属性值:

...withHost("web1")ashost:host.setattr('mem',dev="1G",tst="2G",preprod="4G",prod="4G")

上面使用multiconfsetattr方法为不同的 环境。注意,必须声明环境devtstprepodprod。 预先和multiconf将确保它们都得到一个值。

在为prod环境实例化配置之后,您可以访问 宿主对象的属性:

cfg.host.name -> web1
cfg.host.mem -> 4G
cfg.host.fqd -> web1.prod.my.organisation

注意,从multiconf类派生的类(例如:ConfigItem)不 允许动态创建属性。配置项不适用于 一般编程,但用于经过严格验证的配置。

有关嵌套对象的详细信息,请参阅文档和demo项目, 可重复对象、实例化、环境定义、环境组, 默认值和其他详细信息。

多核因子不是什么

  • multiconf与任何特定产品或 技术。
  • multiconf不知道如何创建 组件,即multiconf没有要执行的“playbooks”或“recipes”。

运行演示:

执行./demo/demo.py–env(或“python demo/demo.py…”),例如:

/demo/demo.py–环境产品

如果运行时没有任何参数,它将打印一条使用消息 环境是在demo/config.py顶部指定的环境

运行测试套件:

执行:make、py.test或tox运行'make'将执行测试 套件,演示和构建文档。

要求

multiconf:python 3.6.1+测试套件:pytest,pytest cov(对于较旧的python版本,使用multiconf 8.x) DEMJSON(可选)-PIP安装-u pytest pytest cov deMJSON

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

推荐PyPI第三方库


热门话题
带Maven的Eclipse Java存储库:缺少工件:compile   java如何以编程方式停止RMI服务器并通知所有客户端   java Roboguice抛出ClassNotFoundException:AnnotationDatabaseImpl   java为什么lucene 4.0删除IndexWriter类的两个构造函数?   nls如何避免java项目上不需要的日志消息?   测试无法在Selenium Webdriver(java)中定位iframe   使用XML的java servlet   java如何使用jxl用****屏蔽单元格   java使用SQLite从数据库中选择“没有这样的列”   导入扫描程序后出现java编译错误   插入查询的java空指针异常   使用创建PostgreSQL数据库。Java应用中的sql脚本   java使用jsoup将HTML解析为格式化的明文