Skip to main content

A simple solution that allows dot notation for YAML file.

Project description

yaml2object is a python library that allows dot notation access for YAML file.

Status

PyPI pyversions PyPI Build Status Coverage Status last commit License PyPI Package monthly downloads PyPI download week

Install

pip install yaml2object

Usage

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

  1. Set yaml2object.YAMLObject as meta-class of your config class.
  2. Provide source, namespace as class fields.
    • scource: YAML file path OR python dictionary
    • namespace: param key in YAML file OR python dictionary
When source is a YAML file
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'})
Source can also be a python dictionary
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

NOTE

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yaml2object-1.0.13.zip (14.5 kB view hashes)

Uploaded Source

Built Distribution

yaml2object-1.0.13-py3-none-any.whl (9.8 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page