{ "info": { "author": "L. C. Rees", "author_email": "lcrees@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.1", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development", "Topic :: Software Development :: Libraries" ], "description": "==============================\r\nConfiguration over convention.\r\n==============================\r\n\r\nClassy configuration:\r\n\r\n >>> from stage import Conf\r\n >>> class defaults:\r\n ... class SMTP:\r\n ... ENABLED = False\r\n ... TO = ''\r\n ... SUBJECT = ''\r\n ... # mail server\r\n ... HOST = ''\r\n ... # from email address\r\n ... FROM = ''\r\n ... AUTH = None\r\n ... TLS = None\r\n ... class HTTP:\r\n ... ENABLED = False\r\n ... # web server host\r\n ... HOST = ''\r\n ... # web url\r\n ... URL = ''\r\n ... # http method\r\n ... METHOD = 'GET'\r\n ... class SYSLOG:\r\n ... ENABLED = False\r\n ... # syslog host\r\n ... HOST = 'localhost'\r\n ... # syslog port\r\n ... PORT = 514\r\n ... # syslog facility\r\n ... FACILITY = 'LOG_USER'\r\n >>> class required:\r\n ... class LOG:\r\n ... NAME = 'root'\r\n ... # log level\r\n ... LEVEL = 30 # warning\r\n ... # default log formats\r\n ... DATE = '%a, %d %b %Y %H:%M:%S'\r\n ... # log entry format\r\n ... ENTRY = (\r\n ... '%(levelname)-4s -- %(asctime)s -- %(name)s: %(message)s'\r\n ... ' (%(module)s.%(funcName)s at %(lineno)s)'\r\n ... )\r\n ... class STREAM:\r\n ... ENABLED = True\r\n ... # redirect STDOUT to the logger?\r\n ... STDOUT = True\r\n ... # sets log level STDOUT is displayed under\r\n ... LEVEL = 30 # warning\r\n ... class ROTATE:\r\n ... ENABLED = False\r\n ... # log file path\r\n ... PATH = ''\r\n ... # number of backups to keep\r\n ... BACKUPS = 1\r\n ... # interval to backup log file\r\n ... INTERVAL = 'h'\r\n ... ENCODING = None\r\n ... MODE = 'a'\r\n ... SIZE = 0\r\n >>> config = Conf(defaults, required).freeze()\r\n >>> config.LOG.NAME\r\n 'root'\r\n >>> config.LOG.LEVEL\r\n 30\r\n >>> config.LOG.DATE\r\n '%a, %d %b %Y %H:%M:%S'\r\n >>> config.STREAM.ENABLED\r\n True\r\n\r\nTelepathic environment configuration:\r\n\r\n >>> from stage import TwoDeep, Env, env\r\n >>> required = TwoDeep()\r\n >>> with required.LOG:\r\n ... required.NAME('root')\r\n ... required.LEVEL(30) # warning\r\n ... required.DATE('%a, %d %b %Y %H:%M:%S')\r\n ... required.ENTRY(\r\n ... '%(levelname)-4s -- %(asctime)s -- %(name)s: %(message)s (%(mo'\r\n ... 'dule)s.%(funcName)s at %(lineno)s)'\r\n ... )\r\n >>> with required.STREAM:\r\n ... required.ENABLED(True)\r\n ... required.STDOUT(True)\r\n ... required.LEVEL(30) # warning\r\n >>> with required.ROTATE:\r\n ... required.ENABLED(False)\r\n ... required.PATH('')\r\n ... required.BACKUPS(1)\r\n ... required.INTERVAL('h')\r\n ... required.ENCODING(None)\r\n ... required.MODE('a')\r\n ... required.SIZE(0)\r\n >>> defaults = TwoDeep()\r\n >>> with defaults.SMTP:\r\n ... defaults.ENABLED(False)\r\n ... defaults.TO('')\r\n ... defaults.SUBJECT('')\r\n ... defaults.HOST('')\r\n ... defaults.FROM('')\r\n ... defaults.AUTH(None)\r\n ... defaults.TLS(None)\r\n >>> with defaults.HTTP:\r\n ... defaults.ENABLED(False)\r\n ... defaults.HOST('')\r\n ... defaults.URL('')\r\n ... defaults.METHOD('GET')\r\n >>> with defaults.SYSLOG:\r\n ... defaults.ENABLED(False)\r\n ... defaults.HOST('localhost')\r\n ... defaults.PORT(514)\r\n ... defaults.FACILITY('LOG_USER') \r\n >>> config = With(defaults, required).freeze()\r\n >>> with config.LOG as LOG:\r\n ... LOG.NAME\r\n ... 'root'\r\n ... LOG.LEVEL\r\n ... 30\r\n >>> with config.STREAM as STREAM:\r\n ... STREAM.LEVEL\r\n ... 30\r\n ... STREAM.STDOUT\r\n ... True\r\n >>> with config.ROTATE as ROTATE:\r\n ... ROTATE.ENABLED\r\n ... False\r\n ... ROTATE.BACKUPS\r\n ... 1\r\n ... ROTATE.INTERVAL\r\n ... 'h'\r\n\r\nMeanwhile, in some other module... \r\n\r\n >>> from stage import env\r\n >>> config = env()\r\n >>> with config.LOG as LOG:\r\n ... LOG.LEVEL\r\n ... 30\r\n ... LOG.DATE\r\n ... '%a, %d %b %Y %H:%M:%S'\r\n >>> with config.STREAM as STREAM:\r\n ... STREAM.ENABLED\r\n ... True\r\n ... STREAM.LEVEL\r\n ... 30\r\n ... STREAM.STDOUT\r\n ... True\r\n >>> with config.ROTATE as ROTATE:\r\n ... ROTATE.ENABLED\r\n ... False\r\n ... ROTATE.BACKUPS\r\n ... 1\r\n ... ROTATE.INTERVAL\r\n ... 'h'\r\n\r\nSpooky.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://bitbucket.org/lcrees/stage", "keywords": "configuration settings management pythonic", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "stage", "package_url": "https://pypi.org/project/stage/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/stage/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://bitbucket.org/lcrees/stage" }, "release_url": "https://pypi.org/project/stage/0.2.2/", "requires_dist": null, "requires_python": null, "summary": "Configuration over convention.", "version": "0.2.2" }, "last_serial": 656115, "releases": { "0.0.1": [], "0.2.1": [ { "comment_text": "", "digests": { "md5": "b9f2b3992bca34a4a6c703da37771fec", "sha256": "342ab6a146aa058f4974178f7948a45e88855ea9c2821da4dc6683b19d3b89ff" }, "downloads": -1, "filename": "stage-0.2.1.tar.gz", "has_sig": false, "md5_digest": "b9f2b3992bca34a4a6c703da37771fec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7875, "upload_time": "2012-10-02T08:11:42", "url": "https://files.pythonhosted.org/packages/44/08/cb28fc711045d5b0af06c2d585a006a7f152686726598ab80c9f2c57ed4a/stage-0.2.1.tar.gz" }, { "comment_text": "", "digests": { "md5": "dc681246e4f07e576d0916d8e8ff8bfd", "sha256": "a687487eb883b698f950576026310d02456e14842ea1273340c543eda1cf5532" }, "downloads": -1, "filename": "stage-0.2.1.zip", "has_sig": false, "md5_digest": "dc681246e4f07e576d0916d8e8ff8bfd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13995, "upload_time": "2012-10-02T08:11:44", "url": "https://files.pythonhosted.org/packages/e2/10/195f67b5dd8e6ab06914430cddcaa59698d3dd2ba3d304d8e5d6fc283334/stage-0.2.1.zip" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "823131056aa66c1884750df9637cfa86", "sha256": "d1261a6585fe318f6baa0e242c0999ac81f22e47967581484be254036b9a140a" }, "downloads": -1, "filename": "stage-0.2.2.tar.bz2", "has_sig": false, "md5_digest": "823131056aa66c1884750df9637cfa86", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8183, "upload_time": "2012-10-03T18:39:59", "url": "https://files.pythonhosted.org/packages/15/89/7d169a5706bf63ff732fa14e18c6d98185c6a5611dcb31264308960f164b/stage-0.2.2.tar.bz2" }, { "comment_text": "", "digests": { "md5": "8066204c1bb35502e5ddb1b0c39fa0c1", "sha256": "ad7d29ff5e52d6fed058e621fdbd67a0e83e92e4af7d62049679b53cebf3459e" }, "downloads": -1, "filename": "stage-0.2.2.zip", "has_sig": false, "md5_digest": "8066204c1bb35502e5ddb1b0c39fa0c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14437, "upload_time": "2012-10-03T18:40:03", "url": "https://files.pythonhosted.org/packages/83/39/0fdb471133d7ea8fbc81a1ebcdc590b5ebe1aea30859a83262247b7d2bf8/stage-0.2.2.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "823131056aa66c1884750df9637cfa86", "sha256": "d1261a6585fe318f6baa0e242c0999ac81f22e47967581484be254036b9a140a" }, "downloads": -1, "filename": "stage-0.2.2.tar.bz2", "has_sig": false, "md5_digest": "823131056aa66c1884750df9637cfa86", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8183, "upload_time": "2012-10-03T18:39:59", "url": "https://files.pythonhosted.org/packages/15/89/7d169a5706bf63ff732fa14e18c6d98185c6a5611dcb31264308960f164b/stage-0.2.2.tar.bz2" }, { "comment_text": "", "digests": { "md5": "8066204c1bb35502e5ddb1b0c39fa0c1", "sha256": "ad7d29ff5e52d6fed058e621fdbd67a0e83e92e4af7d62049679b53cebf3459e" }, "downloads": -1, "filename": "stage-0.2.2.zip", "has_sig": false, "md5_digest": "8066204c1bb35502e5ddb1b0c39fa0c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14437, "upload_time": "2012-10-03T18:40:03", "url": "https://files.pythonhosted.org/packages/83/39/0fdb471133d7ea8fbc81a1ebcdc590b5ebe1aea30859a83262247b7d2bf8/stage-0.2.2.zip" } ] }