Skip to main content
Join the official 2019 Python Developers SurveyStart the survey!

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.

Files for stage, version 0.2.2
Filename, size File type Python version Upload date Hashes
Filename, size stage-0.2.2.tar.bz2 (8.2 kB) File type Source Python version None Upload date Hashes View hashes
Filename, size stage-0.2.2.zip (14.4 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page