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第三方库


热门话题
MIME类型多部分/混合的java无对象DCH   Java Swing中单元格和列的间距   java为什么我不能使用For循环从集合中获取元素?   mysql Java餐厅计费系统   java MediaPlayer内存消耗   println Java添加的神秘输出:一些经过评估,一些经过打印   java我应该使用哪个对象?   PHP到Java论坛游戏集成   通过GeoNetwork上的java http post请求获取XML响应   java为什么类名与使用“==”的内部字符串比较冲突?   java反应。js如何定义自定义id,而不是在html中显示reactselect1value   java中的拼字数组   java如何使ScheduledExecutorService在其计划任务取消时自动终止   java查询未正确执行   IBatis+Java:检索HashMap   要读取的加密Java代码。txt文件并转换为二进制表示形式   Java Web Start应用程序自动加载   java Swing重写对象的paintComponent