yaml2object is a python library that allows dot notation access for YAML file.
pip install yaml2object
1. Create your YAML settings
# 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. Define your class
- Set yaml2object.YAMLObject as meta-class of your config class.
- Provide source, namespace as class fields.
- scource: YAML file path OR python dictionary
- namespace: param key in YAML file OR python dictionary
from yaml2object import YAMLObject
class Config(metaclass=YAMLObject):
source = 'config.yml'
> WarningLog: Missing namespace attribute. Converting 'config.yml' to object.
from yaml2object import YAMLObject
class Config(metaclass=YAMLObject):
source = 'config.yml'
namespace = 'invalid'
> WarningLog: Missing 'invalid' param in 'config.yml'. Converting 'config.yml' to object.
from yaml2object import YAMLObject
class DevelopmentConfig(metaclass=YAMLObject):
source = 'config.yml'
namespace = 'development'
class TestConfig(metaclass=YAMLObject):
source = 'config.yml'
namespace = 'test'
DefaultConfig = YAMLObject('DefaultConfig', (object,), {'source': 'config.yml', 'namespace': 'defaults'})
from yaml2object import YAMLObject
config = {'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. Access your YAML as python object
>>> 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
An underscore is added before any key matching python keyword lists https://docs.python.org/3/library/keyword.html#keyword.kwlist
Example:
from yaml2object import YAMLObject
config_dict = {'from': 'value1', 'None': 'value2'}
Config = YAMLObject('Config', (object,), {'source': config_dict})
Missing namespace attribute. Converting source to object.
Param from is a python keyword. Adding _ (underscore) before the param and can be accessed as _from
Param None is a python keyword. Adding _ (underscore) before the param and can be accessed as _None
>>> Config._from
value1
>>> Config._None
value2