将json或yaml文件加载为python dict,文件更改时自动刷新,支持项更改回调

myconf的Python项目详细描述


通用配置文件类

功能

  • 加载json或者yaml文件作为可嵌套的配置文件, 文件名必须以.json,.yaml或者是.yml结尾
  • 支持子文件拆分,需要在json或者yaml中定义include这个key,值为子路径
  • 配置实例的会随着配置文件的改变而变更,如果想禁用这个功能,需要可以传递参数refresh=False
  • 支持在配置文件中注册多个回调函数,监控配置文件中的特定key,当key变化时,调用对应的回调函数进行处理

安装

pip install myconf

使用举例

配置文件

{"foo":{"bar":"abced"},"include":"/tmp/conf/"}

一般情况

frommyconfimportConfimporttimeconfig=Conf('/testconf/test.yml')whileTrue:print(config)time.sleep(1)
  • 更改配置文件以后,config也会随着改变
  • 需要注意mutable和imutable的区别。如果使用索引把config中的某个不可变类型(int, str等)的值赋予一个左值变量,那么这个变量是不会修改的.

使用回调

frommyconfimportConfimportloggingclassMyConf(Conf):defonchange_a(self,old,new,watched_item='foo.bar'):logging.info('foo.bar changes from {} to {}'.format(old,new))defonchange_b(self,old,new,watched_item='a.b'):logging.info('a.b changes from {} to {}'.format(old,new))config=MyConf('/testconf/test.yml')
  1. 继承Conf类
  2. 定义回调函数onchange_xx(self, old, new, watched_item="jmespath-expression")。 函数名称必须以onchange_开头,如果有多个回调函数,按照函数的名称排序依次执行。 函数中的old代表修改前的数据,new代表修改后的数据,这两个参数可以在函数中使用。 watched_item需要有一个jmespath表达式作为默认值,无需在函数中使用。 当配置中这个表达式搜索出的结果发生改变时,执行回调. jmespath表达式的使用可以参考官方文档

注意事项

  • 在处理子文件的时候,如果有重复的key,会依据加载顺序执行覆盖。为了避免不必要的麻烦,不要使用重复的key值
  • 为了简便的实现快速加载,数据实际占用的存储空间会比原来翻倍
  • Conf并没有实现__setitem__方法,相当于frozendict,但是加载进来的子项则是普通的dict。不要直接修改这些值,重新加载配置的时候会被刷新回来。

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

推荐PyPI第三方库


热门话题
无法在Netbeans 8.2 JDK8u231中创建java Maven项目(Web应用程序)   java如何以设定的时间间隔生成随机数?   java从socket和inputStream的慢速读取   spring SCORM:Java中基于Web的SCORM播放器   Java将函数传递给方法   java绑定通用服务及其实现和子类型   java如何在运行时从选择列表框中动态选择选项?爪哇硒   java Selenium WebDriver什么是“Selenium客户端和WebDriver语言绑定”   elasticsearch需要elasticsearch高级Java客户端更新ByQueryRequest API帮助   JAVA哈希表查找最大值   WSDL操作中的java soapAction属性为空   java访问封闭类或父类方法的一般方法   eclipse在java中运行带有SeleneTestCase的ANT。lang.NoClassDefFoundError   java Hazelcast不会在节点启动时填充ReplicatedMap   如何在Java中从excel中读取特定行?   html JAVA将本地时间(GMT+8)转换为UTC时间   java将自定义端点添加到Spring数据REST存储库中,并以大摇大摆的方式显示   java计算未来位置