一个简单的解决方案,允许点符号的yaml文件。

yaml2object的Python项目详细描述


yaml2object是一个python库,它允许对yaml文件进行点符号访问。

状态

PyPI pyversionsPyPIBuild StatusCoverage Statuslast commitLicensePyPI Package monthly downloadsPyPI download week

安装

pip install yaml2object

用法

1。创建您的yaml设置

# config.yml
defaults: &defaults
  database:
    adapter: postgresql
    database: development
  port: 8000
  nested_param:
    param1:
        sub_param1: 'sub_param1 value'
        sub_param2: 'sub_param2 value'

development:
  <<: *defaults

test:
  <<: *defaults
  port: 8001

2。定义您的类

  1. yaml2object.yamlobject设置为配置类的元类。
  2. 提供源、命名空间作为类字段。
    • scource:yaml文件路径或python字典
    • 名称空间:yaml文件或python字典中的param key
当源是yaml文件时
fromyaml2objectimportYAMLObjectclassConfig(metaclass=YAMLObject):source='config.yml'>WarningLog:Missingnamespaceattribute.Converting'config.yml'toobject.
fromyaml2objectimportYAMLObjectclassConfig(metaclass=YAMLObject):source='config.yml'namespace='invalid'>WarningLog:Missing'invalid'paramin'config.yml'.Converting'config.yml'toobject.
fromyaml2objectimportYAMLObjectclassDevelopmentConfig(metaclass=YAMLObject):source='config.yml'namespace='development'classTestConfig(metaclass=YAMLObject):source='config.yml'namespace='test'DefaultConfig=YAMLObject('DefaultConfig',(object,),{'source':'config.yml','namespace':'defaults'})
源代码也可以是python字典
fromyaml2objectimportYAMLObjectconfig={'defaults':{'database':{'adapter':'postgresql','database':'development'},'port':8000,'nested_param':{'param1':{'sub_param1':'sub_param1 value','sub_param2':'sub_param2 value'}}}}DefaultConfig=YAMLObject('DefaultConfig',(object,),{'source':config,'namespace':'defaults'})

3。以python对象的形式访问yaml

>>>Config.to_dict()>>>Config.development.to_dict()>>>Config.development.database.to_dict()>>>Config.development.database.adapter>>>Config.development.nested_param.param1.sub_param1>>>DevelopmentConfig.to_dict()>>>DevelopmentConfig.database.to_dict()>>>DevelopmentConfig.database.adapter>>>DevelopmentConfig.database.database>>>TestConfig.to_dict()>>>TestConfig.port>>>TestConfig.database.to_dict()>>>TestConfig.database.adapter>>>TestConfig.database.database>>>DefaultConfig.to_dict()>>>DefaultConfig.database.to_dict()>>>DefaultConfig.database.adapter>>>DefaultConfig.nested_param.param1.sub_param1

在任何与python关键字列表匹配的键之前添加下划线 https://docs.python.org/3/library/keyword.html#keyword.kwlist

示例:

fromyaml2objectimportYAMLObjectconfig_dict={'from':'value1','None':'value2'}Config=YAMLObject('Config',(object,),{'source':config_dict})Missingnamespaceattribute.Convertingsourcetoobject.Paramfromisapythonkeyword.Adding_(underscore)beforetheparamandcanbeaccessedas_fromParamNoneisapythonkeyword.Adding_(underscore)beforetheparamandcanbeaccessedas_None>>>Config._fromvalue1>>>Config._Nonevalue2

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

推荐PyPI第三方库


热门话题
java无法在未设置数据源的情况下启动springboot应用程序   返回/泛型的类型?   java通过在navigationView中按id重新加载navigationView内容   java实现安卓的状态更新   java Equals()对于两个相等的字符串不返回true   java如何保存屏幕截图(matlab)   java GWT如何在重新加载页面之前确保函数已完全执行   java在Groovy中实现ObjectJSON映射的标准方法是什么?   java在ApacheTomcat中,是否可以通过连接器过滤多个访问日志文件?   java当JVM达到其Xmx限制时,它会强制垃圾收集吗?   如何在JAVA中生成包含特定数字的不同随机数列表?   rcp中透视图之间的java切换   java理解名为“分区”的Linkedlist算法中的无限循环   RestTemplate的java测微计统计信息   Android中使用自定义服务BLE的java读/写特性   java验证输入以确保负数   关于Java扫描器的io基本查询   java如何使用子字符串或其他函数将字符串拆分为单词?   java Storm群集重复元组