基于pythonyaml的配置

pypigeonhole-config的Python项目详细描述


Python应用程序配置

这是一个用于应用程序配置的配置工具,类似于 Spring Framework Core。在

应用程序设置

非平凡的应用程序有外部设置,例如属性、ini, xml、yaml或其他(例如,配置服务器)。我们将使用YAML文件 这是当前流行的配置应用程序的方法。优点之一 对于YAML,它支持树结构以避免重复的密钥路径。 对于复杂的设置来说,XML也是一个不错的选择,但是由于 打开/关闭标签。在

所有不同格式的设置最终都会解析为键值对。 键是用于分组的树路径。这些值是简单的数据类型,例如 字符串、布尔值、整型、浮点型、日期时间等

除了这些设置文件,我们还想通过命令覆盖一些设置 线参数或环境变量。协调来自不同 来源,我们修改了以下内容:

  • yaml设置是基线
  • 可以通过${env_var引用环境变量_名称:默认值}在
  • 可能从命令行传入,如-Ekey=value。这可能会覆盖yaml或 环境变量值。在

但是,当前环境变量和命令行覆盖treat 所有值均为字符串。一种方法是使用单独的YAML文件 不同的情况。在

YAML文件示例,测试.yaml公司名称:

db:
    url: 'go://disney'
    user: 'mickey mouse'
    server_port: 8080
    price: 3.1415925
    begin_date: !!timestamp '2010-11-17 13:12:11'
    ext_var: ${my_env}

Python代码示例:

^{pr2}$

应用程序配置

应用程序由组件组成,这些组件可以由其他组件组成。所以 最后我们得到了一个组件树,其中应用程序位于顶部。装配 这些部件,我们可以把它们硬连接在一起。更好的方法是 IoCDIP。在

我们的IoC容器有3层:

  • 用于处理树路径的键值对存储,如上图所示。在
  • 管理对象生命周期和设置依赖关系的对象容器。在
  • 加载YAML配置并将其注入对象的上下文。在

有两种利用lib的方法:

  • 使用上下文作为配置工具。一旦上下文加载了YAML 文件,可以在其他地方引用。在
  • 将上下文用作IoC容器。在容器中注册对象,然后 我们可以检索依赖项和配置完全填充的对象。在

该配置有3个优先顺序,从高到低:

  • 加载配置后,有机会重写它,因为 正在初始化对象。所以我们可以从命令行获取覆盖并覆盖 设置。在
  • 设置环境变量并在YAML文件中检索它们。这是一个 比我们盲目地覆盖 环境。在
  • YAML文件。在

密码有加密功能。在

Python是一种函数式语言,但有些情况下我们需要类。 将所有参数传递给函数会污染函数接口并创建 信息泄露。例如,将数据库连接传递给 如果从数据库切换,则检索所有函数的数据结果更改 存储到其他人,如弹性搜索服务器。所以把联系隐藏在 一个类(通过构造函数)并保持数据检索接口干净 会是一个更好的解决方案。在

由于Python的特性,singleton并不像Java那样糟糕。尤其是 在应用程序启动期间,如果我们可以保证单线程,则有 比Java的游戏空间更大。在

待办事项

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

推荐PyPI第三方库


热门话题
java文件路径中的java UTF8字符   java如何可靠地写入OPC UA服务器?   for-my-if语句中的java循环不能产生我想要的结果   java我如何在1个XSL中加入2个XML   macos无法在“/Library/Java/JavaVirtualMachines/jdk15.0.1.jdk/Contents/Home/bin/apt”中找到可执行文件   Java代码简单数学   java如何避免selenium中的sendKeys方法清除之前填充的文本?   java如何将PlacesAPI自动完成小部件传递到自定义对话框?   带有文本块的java Intellij json片段问题   启动时Spring启动错误:java。木卫一。IOException:jsse。别名\u否\u键\u项   移动文件时发生java异常   http Java Web客户端远程连接