Metadata-Version: 1.1
Name: stage
Version: 0.2.2
Summary: Configuration over convention.
Home-page: https://bitbucket.org/lcrees/stage
Author: L. C. Rees
Author-email: lcrees@gmail.com
License: BSD
Description: ==============================
        Configuration over convention.
        ==============================
        
        Classy configuration:
        
            >>> from stage import Conf
            >>> class defaults:
            ... class SMTP:
            ...     ENABLED = False
            ...     TO = ''
            ...     SUBJECT = ''
            ...     # mail server
            ...     HOST = ''
            ...     # from email address
            ...     FROM = ''
            ...     AUTH = None
            ...     TLS = None
            ... class HTTP:
            ...     ENABLED = False
            ...     # web server host
            ...     HOST = ''
            ...     # web url
            ...     URL = ''
            ...     # http method
            ...     METHOD = 'GET'
            ... class SYSLOG:
            ...     ENABLED = False
            ...     # syslog host
            ...     HOST = 'localhost'
            ...     # syslog port
            ...     PORT = 514
            ...     # syslog facility
            ...     FACILITY = 'LOG_USER'
            >>> class required:
            ... class LOG:
            ...     NAME = 'root'
            ...     # log level
            ...     LEVEL = 30  # warning
            ...     # default log formats
            ...     DATE = '%a, %d %b %Y %H:%M:%S'
            ...     # log entry format
            ...     ENTRY = (
            ...         '%(levelname)-4s -- %(asctime)s -- %(name)s: %(message)s'
            ...         ' (%(module)s.%(funcName)s at %(lineno)s)'
            ...     )
            ... class STREAM:
            ...     ENABLED = True
            ...     # redirect STDOUT to the logger?
            ...     STDOUT = True
            ...     # sets log level STDOUT is displayed under
            ...     LEVEL = 30  # warning
            ... class ROTATE:
            ...     ENABLED = False
            ...     # log file path
            ...     PATH = ''
            ...     # number of backups to keep
            ...     BACKUPS = 1
            ...     # interval to backup log file
            ...     INTERVAL = 'h'
            ...     ENCODING = None
            ...     MODE = 'a'
            ...     SIZE = 0
            >>> config = Conf(defaults, required).freeze()
            >>> config.LOG.NAME
            'root'
            >>> config.LOG.LEVEL
            30
            >>> config.LOG.DATE
            '%a, %d %b %Y %H:%M:%S'
            >>> config.STREAM.ENABLED
            True
        
        Telepathic environment configuration:
        
            >>> from stage import TwoDeep, Env, env
            >>> required = TwoDeep()
            >>> with required.LOG:
            ... required.NAME('root')
            ... required.LEVEL(30)  # warning
            ... required.DATE('%a, %d %b %Y %H:%M:%S')
            ... required.ENTRY(
            ...     '%(levelname)-4s -- %(asctime)s -- %(name)s: %(message)s (%(mo'
            ...     'dule)s.%(funcName)s at %(lineno)s)'
            ... )
            >>> with required.STREAM:
            ... required.ENABLED(True)
            ... required.STDOUT(True)
            ... required.LEVEL(30)  # warning
            >>> with required.ROTATE:
            ... required.ENABLED(False)
            ... required.PATH('')
            ... required.BACKUPS(1)
            ... required.INTERVAL('h')
            ... required.ENCODING(None)
            ... required.MODE('a')
            ... required.SIZE(0)
            >>> defaults = TwoDeep()
            >>> with defaults.SMTP:
            ... defaults.ENABLED(False)
            ... defaults.TO('')
            ... defaults.SUBJECT('')
            ... defaults.HOST('')
            ... defaults.FROM('')
            ... defaults.AUTH(None)
            ... defaults.TLS(None)
            >>> with defaults.HTTP:
            ... defaults.ENABLED(False)
            ... defaults.HOST('')
            ... defaults.URL('')
            ... defaults.METHOD('GET')
            >>> with defaults.SYSLOG:
            ... defaults.ENABLED(False)
            ... defaults.HOST('localhost')
            ... defaults.PORT(514)
            ... defaults.FACILITY('LOG_USER')  
            >>> config = With(defaults, required).freeze()
            >>> with config.LOG as LOG:
            ... LOG.NAME
            ... 'root'
            ... LOG.LEVEL
            ... 30
            >>> with config.STREAM as STREAM:
            ... STREAM.LEVEL
            ... 30
            ... STREAM.STDOUT
            ... True
            >>> with config.ROTATE as ROTATE:
            ... ROTATE.ENABLED
            ... False
            ... ROTATE.BACKUPS
            ... 1
            ... ROTATE.INTERVAL
            ... 'h'
        
        Meanwhile, in some other module...    
        
            >>> from stage import env
            >>> config = env()
            >>> with config.LOG as LOG:
            ... LOG.LEVEL
            ... 30
            ... LOG.DATE
            ... '%a, %d %b %Y %H:%M:%S'
            >>> with config.STREAM as STREAM:
            ... STREAM.ENABLED
            ... True
            ... STREAM.LEVEL
            ... 30
            ... STREAM.STDOUT
            ... True
            >>> with config.ROTATE as ROTATE:
            ... ROTATE.ENABLED
            ... False
            ... ROTATE.BACKUPS
            ... 1
            ... ROTATE.INTERVAL
            ... 'h'
        
        Spooky.
        
Keywords: configuration settings management pythonic
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3.1
Classifier: Programming Language :: Python :: 3.2
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Software Development
Classifier: Topic :: Software Development :: Libraries
