Skip to main content

A Settings Configuration Module.

https://travis-ci.org/KyleJamesWalker/yamlsettings.svg?branch=master https://codecov.io/gh/KyleJamesWalker/yamlsettings/branch/master/graph/badge.svg

A library to help manage project settings, without having to worry about accidentally checking non-public information, like api keys. Along with environment variable support.

Example setup

Python Code - Base Functions

import yamlsettings


app_settings = yamlsettings.load('defaults.yaml')
app_settings.update(yamlsettings.load('settings.yaml'))
yamlsettings.update_from_env(app_settings)
user = app_settings.myproj.databases.primary_sql.user

defaults.yml - Default Settings for Project (tracked)

---
# Program Defaults, do not edit this file!!!
# All values should be overridden in the following ways:
# 1. In the 'settings.yaml' file.
# 2. With environment variables. Example myproj.databases.primary_sql.user can
#    be overridden with MYPROJ_DATABASES_PRIMARY_SQL_USER.
myproj:
  databases:
    primary_sql:
      user: my_user
      passwd: password_here
      host: db-bouncer-01.postgres.com:5432
      db: postgres
      compress: true
      engine: postgresql
    splunk:
      user: splunk_user_here
      passwd: password here
      host: splunk.com
      port: 8089
    redis:
      redis_host: 127.0.0.1
      redis_port: 6379
  flask_config:
    DEBUG: False
    SECRET_KEY: hard key to guess and keep values secret
  debug_sql: false
  debug_profiler: false
  cache_routes: true
  logging_config:
    version: 1
    disable_existing_loggers: False
    formatters:
      light:
        format: '%(asctime)s [%(levelname).1s] %(name)s: %(message)s'
        datefmt: '%Y-%m-%d %H:%M:%S'
      verbose:
        format: '%(asctime)s %(levelname) 8s(%(name)s): %(message)s'
        datefmt: ''
    handlers:
      console:
        class: logging.StreamHandler
        level: DEBUG
        formatter: light
        stream: ext://sys.stdout
      slack:
        class: api.slackLogHandler.BufferingSlackWebHookHandler
        level: INFO
        formatter: light
        capacity: 100
        organization: KyleJamesWalker
        token: need_this
        channel: '#services'
        username: my-proj-logger
        icon_emoji: ':happy_panda:'
      noid:
        class: logging.NullHandler
    loggers:
      requests:
        level: NOTSET
        handlers: [noid]
        propagate: no
    root:
      level: NOTSET
      handlers:
        - console

settings.yml - Custom Settings (untracked)

---
myproj:
  databases:
    primary_sql:
      user: root
      passwd: god
    splunk:
      user: real_user
      passwd: pa$$word
  flask_config:
    SECRET_KEY: sdfasjksdfASFAS23423f@#$%!$#VR@%UQ%
  logging_config:
    handlers:
      slack:
        token: 123243294832104981209
    root:
      handlers:
        - console
        - slack

Example package resource loading

"""Parameters that can be passed are:
 resource: The resource to load from the package (default: settings.yaml)
 env: When set the yamldict will update with env variables (default: true)
 prefix: Prefix for environment loading (default: None)
 persist: When set the yamldict will only be loaded once. (default: true)
"""
yamlsettings.load('package://example')
yamlsettings.load('package://example?resource=diff.yaml')
yamlsettings.load('package://example?prefix=MY_FUN&persist=false')

Plugins

This project also supports plugins. The base project has two plugins:

  • file: Loads from the file system.

  • package: Loads settings from a package resource.

Example Plugin:

setup.py

from setuptools import setup

setup(
    name='yamlsettings-example',
    version='1.0.0',
    author='Kyle Walker',
    author_email='KyleJamesWalker@gmail.com',
    description='Quick Example',
    requirements=['yamlsettings'],
    py_modules=['yamlsettings_example'],
    entry_points={
        'yamlsettings10': [
            'ext = yamlsettings_example:ZxcExtension',
        ],
    },
)

yamlsettings_example.py

from yamlsettings.extensions.base import YamlSettingsExtension


class ZxcExtension(YamlSettingsExtension):
    """Quick Example Plugin

    Standard file opener, but will merge in values passed to kwargs
    """
    protocols = ['zxc']

    @classmethod
    def load_target(cls, scheme, path, fragment, username,
                    password, hostname, port, query,
                    load_method, **kwargs):
        full_path = (hostname or '') + path
        obj = load_method(open(full_path, **query))

        # Load all returns a generator list of configurations
        many = isinstance(obj, types.GeneratorType)
        obj = list(obj) if many else obj

        if many:
            for x in obj:
                x.update(kwargs)
        else:
            obj.update(kwargs)

        return obj

usage

import yamlsettings
yamlsettings.load("zxc://defaults.yaml", foo='bar')

# Note: this is automatically detected when the extension is installed
# alternatively the extension can be manually registered with:
yamlsettings.registry.add(ZxcExtension)

Metadata

Release files for yamlsettings 2.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for yamlsettings 2.1.2
File Size Uploaded
yamlsettings-2.1.2.tar.gz 13.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for yamlsettings 2.1.2
File Interpreter ABI Platform
yamlsettings-2.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 27.2 kB

Release files / yamlsettings-2.1.2.tar.gz

Download URL yamlsettings-2.1.2.tar.gz
Size 13.5 kB
Tags Source
SHA-256 checksum
How to use checksums
c86da6bc70e1a9051e582e47b273b703d8ecb49d0850da04c7774680d85aa22a
BLAKE2b-256 checksum
How to use checksums
00f3b6197c94ae1296855ed8e8ac85004d41a01990a9bf3f7cb32f2c854fc3cf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.1.0 CPython/3.12.4

Release files / yamlsettings-2.1.2-py3-none-any.whl

Download URL yamlsettings-2.1.2-py3-none-any.whl
Size 13.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
848399ff432a4c998f6dde5778d6669ef58a0c7d9aa4187621cec6a3ffa1bfa0
BLAKE2b-256 checksum
How to use checksums
2a6157435f84f3bb3c68c958be0c47cb696cbf2b762df3888b0c9d59fd1c5bb4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.1.0 CPython/3.12.4

Release history Release notifications | RSS feed

This release

2.1.2 This release

2 release files

2.1.1

2 release files

2.1.0

1 release file

2.0.3

1 release file

2.0.2

1 release file

2.0.1

1 release file

2.0.0

1 release file

1.0.3

1 release file

1.0.2

1 release file

1.0.1

1 release file

1.0.0

1 release file

0.2.8

1 release file

0.2.6

1 release file

0.2.5

1 release file

0.2.4

1 release file

0.2.3

1 release file

0.2.2

1 release file

0.2.1

1 release file

0.2.0

1 release file

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page