一个简单的解决方案,允许点符号的yaml文件。
yaml2object的Python项目详细描述
yaml2object是一个python库,它允许对yaml文件进行点符号访问。
状态
安装
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。定义您的类
- 将yaml2object.yamlobject设置为配置类的元类。
- 提供源、命名空间作为类字段。
- 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
在任何与python关键字列表匹配的键之前添加下划线
https://docs.python.org/3/library/keyword.html#keyword.kwlist 示例:>>>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
注
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
推荐PyPI第三方库