Source code for Cauldron.config

#
#  config.py
#  cauldron
#
#  Created by Alexander Rudy on 2015-11-21.
#  Copyright 2015 Alexander Rudy. All rights reserved.
#
"""
Basics for handling Cauldron configuration files.
"""

import os
import sys
import six
import warnings
import pkg_resources

from six.moves import configparser

from .exc import ConfigurationMissing
from . import registry

BASENAME = ".".join(__name__.split(".")[:-1])

__all__ = ['default_configuration', 'read_configuration', 'cauldron_configuration']

[docs]def default_configuration(): """Get the default configuration object.""" config = configparser.ConfigParser() with open(pkg_resources.resource_filename(__name__, 'data/defaults.cfg')) as fp: config.readfp(fp) return config
[docs]def read_configuration(configuration_location = None): """Read a configuration from a filepath or a configuration object.""" if configuration_location is None: return cauldron_configuration elif isinstance(configuration_location, configparser.ConfigParser): return configuration_location else: configuration_location = six.text_type(configuration_location) configuration_location = os.path.abspath(os.path.expanduser(configuration_location)) try: with open(configuration_location, 'r') as fp: cauldron_configuration.readfp(fp) except configparser.ParsingError as e: warnings.warn("Can't parse configuration file '{0:s}'".format(configuration_location), ConfigurationMissing) except IOError: warnings.warn("Can't locate configuration file '{0:s}'.".format(configuration_location), ConfigurationMissing) return cauldron_configuration
def get_configuration(): """Return the active configuration object.""" Cauldron = sys.modules[BASENAME] return Cauldron.configuration _timeouts = {} def get_timeout(timeout): """Get the configured default timeout.""" if timeout is None: config = get_configuration() try: timeout = _timeouts[id(config)] except KeyError: try: timeout = config.getfloat('core', 'timeout') except configparser.NoOptionError: pass _timeouts[id(config)] = timeout return timeout @registry.dispatcher.setup_for('all') @registry.client.setup_for('all') def setup_configuration(): """Set up the configuration when the API starts.""" Cauldron = sys.modules[BASENAME] Cauldron.configuration = cauldron_configuration @registry.dispatcher.teardown_for('all') @registry.client.teardown_for('all') def reset_configuration(): """Reset the global configuration""" global cauldron_configuration cauldron_configuration = default_configuration() Cauldron = sys.modules[BASENAME] if hasattr(Cauldron, 'configuration'): del Cauldron.configuration reset_configuration()