Skip to main content

Configuration over convention.

Project description

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.

Project details


Download files

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

Source Distributions

stage-0.2.2.zip (14.4 kB view hashes)

Uploaded Source

stage-0.2.2.tar.bz2 (8.2 kB view hashes)

Uploaded Source

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