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 details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

Details for the file yaml2object-1.0.13.zip.

File metadata

  • Download URL: yaml2object-1.0.13.zip
  • Upload date:
  • Size: 14.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.7

File hashes

Hashes for yaml2object-1.0.13.zip
Algorithm Hash digest
SHA256 663ec364cc953caef9b9634131e7a0b53ff097a6bfe77f88da19cc767e6d19da
MD5 d7b1af0b70a00d4b28475b846dbd9bf9
BLAKE2b-256 cf651012c6d466f726c30f8783f4cf5659827ba462cf0a42d906b7fedd07e6dc

See more details on using hashes here.

File details

Details for the file yaml2object-1.0.13-py3-none-any.whl.

File metadata

  • Download URL: yaml2object-1.0.13-py3-none-any.whl
  • Upload date:
  • Size: 9.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.7

File hashes

Hashes for yaml2object-1.0.13-py3-none-any.whl
Algorithm Hash digest
SHA256 c5d7c8dc8ee3b27cfd598b68bac8a63801ddb7d9970b46893abbf4f273cb8832
MD5 ddfc8f8d9fcee627258c7255fc4c95da
BLAKE2b-256 c1a8f7005721dc079cde1f527ad665c6a57b41157a4272739af3a00bac5d95ed

See more details on using hashes here.

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