{ "info": { "author": "Staffan Malmgren", "author_email": "staffan.malmgren@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Natural Language :: English", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5" ], "description": ".. image:: https://badge.fury.io/py/layeredconfig.png\n :target: http://badge.fury.io/py/layeredconfig\n\n.. image:: https://travis-ci.org/staffanm/layeredconfig.png?branch=master\n :target: https://travis-ci.org/staffanm/layeredconfig\n\n.. image:: https://ci.appveyor.com/api/projects/status/nnfqv9jhxh3afgn0/branch/master\n :target: https://ci.appveyor.com/project/staffanm/layeredconfig/branch/master\n\n.. image:: https://coveralls.io/repos/staffanm/layeredconfig/badge.png?branch=master\n :target: https://coveralls.io/r/staffanm/layeredconfig\n\n.. image:: https://landscape.io/github/staffanm/layeredconfig/master/landscape.png\n :target: https://landscape.io/github/staffanm/layeredconfig/master\n :alt: Code Health\n\n.. image:: https://pypip.in/d/layeredconfig/badge.png\n :target: https://pypi.python.org/pypi/layeredconfig\n\nFull documentation: https://layeredconfig.readthedocs.org/\n\n\nLayeredConfig compiles configuration from files, environment\nvariables, command line arguments, hard-coded default values, or other\nbackends, and makes it available to your code in a simple way::\n\n from layeredconfig import (LayeredConfig, Defaults, INIFile,\n Environment, Commandline)\n \n # This represents four different way of specifying the value of the\n # configuration option \"hello\":\n \n # 1. hard-coded defaults\n defaults = {\"hello\": \"is it me you're looking for?\"}\n \n # 2. INI configuration file\n with open(\"myapp.ini\", \"w\") as fp:\n fp.write(\"\"\"\n [__root__]\n hello = kitty\n \"\"\")\n \n # 3. enironment variables\n import os\n os.environ['MYAPP_HELLO'] = 'goodbye'\n \n # 4.command-line arguments\n import sys\n sys.argv = ['./myapp.py', '--hello=world']\n \n # Create a config object that gets settings from these four\n # sources.\n config = LayeredConfig(Defaults(defaults),\n INIFile(\"myapp.ini\"),\n Environment(prefix=\"MYAPP_\"),\n Commandline())\n \n # Prints \"Hello world!\", i.e the value provided by command-line\n # arguments. Latter sources take precedence over earlier sources.\n print(\"Hello %s!\" % config.hello)\n\n* A flexible system makes it possible to specify the sources of\n configuration information, including which source takes\n precedence. Implementations of many common sources are included and\n there is a API for writing new ones.\n* Included configuration sources for INI files, YAML files, JSON file,\n PList files, etcd stores (read-write), Python source files,\n hard-coded defaults, command line options, environment variables\n (read-only).\n* Configuration can include subsections\n (ie. ``config.downloading.refresh``) and if a\n subsection does not contain a requested setting, it can optionally\n be fetched from the main configuration (if ``config.module.retry``\n is missing, ``config.retry`` can be used instead).\n* Configuration settings can be changed by your code (i.e. to update a\n \"lastmodified\" setting or similar), and changes can be persisted\n (saved) to the backend of your choice.\n* Configuration settings are typed (ie. if a setting should contain a\n date, it's made available to your code as a\n ``datetime.date`` object, not a ``str``). If\n settings are fetched from backends that do not themselves provide\n typed data (ie. environment variables, which by themselves are\n strings only), a system for type coercion makes it possible to\n specify how data should be converted.\n\n\n\n\n\nHistory\n=======\n\n0.3.2 (2016-09-26)\n------------------\n\n* Fixed bug #9 (Custom section separators caused values to be\n retrieved as lists, not single values). Thanks to @numbnut for\n reporting this!\n\n0.3.1 (2016-08-31)\n------------------\n\n* Fixed bug #8 (layering a Commandline source over a YAMLFile with\n defined subsection resulted in crash in initialization. Thanks to\n @AnsonT for reporting this!\n* The default URI used for EtcdStore was changed to reflect that port\n 2379 should be used instead of 4001 (which was the default for etcd\n 1.*).\n* Support for Python 3.2 was dropped.\n\n0.3.0 (2016-08-06)\n------------------\n\n* New staticmethod ``dump``, which returns the content of the passed\n config object as a dict. This is also used as a printable\n representation of a config object (through ``__repr__``).\n* The intrinsic type of any typed setting may not be None any longer.\n* If you subclass LayeredConfig, any created subsection will be\n instances of your subclass, not the base LayeredConfig class\n* Layering multiple configuration files now works even when earlier\n files might lack subsections present in latter.\n\nAll of the above was done by @jedipi. Many thanks!\n\nA number of unreported bugs, mostly concerning unicode handling and\ntype conversion in various sources, was also fixed.\n\n0.2.2 (2016-01-24)\n------------------\n\n* Fixed a bug when using a class in a Default configuration for\n automatic coercion, where the type of the class isn't type (as is\n the case with the \"newint\" and other classes from the future\n module).\n\n* Fixed a bug where loading configuration from multiple config files\n would crash if latter configs lacked subsections present in\n earlier. Thanks to @badkapitan!\n\n0.2.1 (2014-11-26)\n------------------\n\n* Made the Commandline source interact better with \"partially\n configured\" ArgumentParser objects (parsers that has been configured\n with some, but not all, possible arguments).\n\n0.2.0 (2014-11-22)\n------------------\n\n* Integration with argparse: The Commandline source now accepts an\n optional parse parameter, which should be a configured\n argparse.ArgumentParser object. Most features of argparse, such as\n specifying the type of arguments, and automatic help text\n* A new source, PyFile, for reading configuration from python source\n files.\n* Another new source, EtcdStore, for reading configuration from etcd\n stores.\n\n0.1.0 (2014-11-03)\n------------------\n\n* First release on PyPI.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/staffanm/layeredconfig", "keywords": "configuration", "license": "BSD", "maintainer": null, "maintainer_email": null, "name": "layeredconfig", "package_url": "https://pypi.org/project/layeredconfig/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/layeredconfig/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/staffanm/layeredconfig" }, "release_url": "https://pypi.org/project/layeredconfig/0.3.2/", "requires_dist": null, "requires_python": null, "summary": "Manages configuration coming from config files, environment variables, command line arguments, code defaults or other sources", "version": "0.3.2" }, "last_serial": 2364630, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "0eb12c34250b6d964c9c98f1610e6034", "sha256": "93a62e80656f5d1d1652a769ba930c3c3eae3c9930bca5c1622bcc6788ceaa85" }, "downloads": -1, "filename": "layeredconfig-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0eb12c34250b6d964c9c98f1610e6034", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19830, "upload_time": "2014-11-03T19:38:24", "url": "https://files.pythonhosted.org/packages/8c/28/1dfab5b3bd95d7af291243c08072078d35c41b8ad01ad2764295935b0222/layeredconfig-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c19b10f505fa39f4656ac64072c5619d", "sha256": "46aa4bec949c3e3e217e04679d2eb1fe6b72ea34410cfd448ed7311d6dac41a2" }, "downloads": -1, "filename": "layeredconfig-0.1.0.tar.gz", "has_sig": false, "md5_digest": "c19b10f505fa39f4656ac64072c5619d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31700, "upload_time": "2014-11-03T19:38:21", "url": "https://files.pythonhosted.org/packages/d8/a3/9818f77bda2e9c1a490f353d6f9bd5a1d301e20c7b7172600b0a69829291/layeredconfig-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "ca90ea475caeb9c8fa412c2ce71e1642", "sha256": "13dbd8eb6f1813109147a20b335af47891aa37b76469df403c1c4e21a779ce3c" }, "downloads": -1, "filename": "layeredconfig-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ca90ea475caeb9c8fa412c2ce71e1642", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 23965, "upload_time": "2014-11-22T21:52:19", "url": "https://files.pythonhosted.org/packages/f7/33/a57d09954a269368c6a5ab833a4c2913de877bd480d9782a8ae6a8af2c7f/layeredconfig-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "750c85b662dde77cc0ab7b586bf4aae6", "sha256": "dd3a7e7097060143aa9d4211d2c76363bf39c14f16aa8c6625ee6cb7367c2aa3" }, "downloads": -1, "filename": "layeredconfig-0.2.0.tar.gz", "has_sig": false, "md5_digest": "750c85b662dde77cc0ab7b586bf4aae6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44707, "upload_time": "2014-11-22T21:52:16", "url": "https://files.pythonhosted.org/packages/28/53/dadde6a6511862c54a77886b1dbb419f529f120238dde2a7cea6e038e582/layeredconfig-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "b0ad483e1edc21e2f1951a9c21471d26", "sha256": "0ab0a253202c796bbf97ae5b213364079593a1c76330f8bfc45394fe55f10bb8" }, "downloads": -1, "filename": "layeredconfig-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b0ad483e1edc21e2f1951a9c21471d26", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 24363, "upload_time": "2014-11-26T12:17:23", "url": "https://files.pythonhosted.org/packages/45/61/5e26c5310ea50cac15af9080ccc4c3587eaaa3d315be1d44457dc4499b0d/layeredconfig-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "67d459aa1b40461284724cc979cdb28c", "sha256": "f4f0562b9253ef15379aa00132f1984bf949ad1fc3b77713a5a9944700879124" }, "downloads": -1, "filename": "layeredconfig-0.2.1.tar.gz", "has_sig": false, "md5_digest": "67d459aa1b40461284724cc979cdb28c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45276, "upload_time": "2014-11-26T12:17:20", "url": "https://files.pythonhosted.org/packages/74/4e/618abcde91d2d193195bdaaed86d3cbceba6b02161966055ab85f4b60a6b/layeredconfig-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "6b79f2846fb141891dd63f0832722f69", "sha256": "28d2aba240301ddabf6258e9a26c8e6136ee302ac54d03da5f578ee817e8e47a" }, "downloads": -1, "filename": "layeredconfig-0.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6b79f2846fb141891dd63f0832722f69", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 25425, "upload_time": "2016-01-24T20:49:16", "url": "https://files.pythonhosted.org/packages/95/e1/5110356c6787af8410f74563634c9c797ed0ede83bf70e45fc69657c4e74/layeredconfig-0.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d5c3a9e7978d2187c31941ce73aa0022", "sha256": "96a1d1054648e4038cf4b3aa02501f9be142cf1526848e02104206c4dd96ae49" }, "downloads": -1, "filename": "layeredconfig-0.2.2.tar.gz", "has_sig": false, "md5_digest": "d5c3a9e7978d2187c31941ce73aa0022", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47573, "upload_time": "2016-01-24T20:49:10", "url": "https://files.pythonhosted.org/packages/2e/43/5812b26a9a3792d654ad0c4c9726fe7136eaead6e4fa3763cedb81140ee3/layeredconfig-0.2.2.tar.gz" } ], "0.2.3.dev1": [], "0.3.0": [ { "comment_text": "", "digests": { "md5": "0a0856e649a2e72bd2ac865000717edf", "sha256": "3d252c45747b30254ea766b7555e7d70dda5424b58fee3e29ab980bde0eed6e0" }, "downloads": -1, "filename": "layeredconfig-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0a0856e649a2e72bd2ac865000717edf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 26589, "upload_time": "2016-08-06T11:08:52", "url": "https://files.pythonhosted.org/packages/d7/3c/75a093550863b887515f2e522722bff054f2fd224d63347f61a3f689c65e/layeredconfig-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c9c43884d082d17a0af10542d4639235", "sha256": "5c81c73b16eddb5b978736dac7e2f31da3b8c271a66bac56a7d042cbbd3758b8" }, "downloads": -1, "filename": "layeredconfig-0.3.0.tar.gz", "has_sig": false, "md5_digest": "c9c43884d082d17a0af10542d4639235", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48896, "upload_time": "2016-08-06T11:08:49", "url": "https://files.pythonhosted.org/packages/d7/49/585fb7e20e64197d0bcb926e5acbfcef847ef3fdcbf1f2ee60667f5e389f/layeredconfig-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "85151e2ad15f27b3e530ec8e58144a34", "sha256": "1eced159dbcaa17b17d21ce8a246fce74fcfd70d01c0e470b614fe0204b2d3c5" }, "downloads": -1, "filename": "layeredconfig-0.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "85151e2ad15f27b3e530ec8e58144a34", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 26912, "upload_time": "2016-08-31T18:29:11", "url": "https://files.pythonhosted.org/packages/ef/60/952456cd77a09db22e279e2eb66f952ecf6ff2260785b1c1fc2057943c65/layeredconfig-0.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8e02336a1685d30368303e9f10ba20cf", "sha256": "69a0ea4ee92ceb0277f436e324b501f6d05357bd8a7ce651748d39bed9785a5c" }, "downloads": -1, "filename": "layeredconfig-0.3.1.tar.gz", "has_sig": false, "md5_digest": "8e02336a1685d30368303e9f10ba20cf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49633, "upload_time": "2016-08-31T18:29:08", "url": "https://files.pythonhosted.org/packages/09/d4/60d494b95637d1ed3738a97368eb4550b8b99bc086e0ded7dc91009a32e9/layeredconfig-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "9a3470694cec9e07e09a494f3b64e5b8", "sha256": "c6253a8faeaf9d07cd762093ace70f274eece1d299d41b24a55adbc50347106a" }, "downloads": -1, "filename": "layeredconfig-0.3.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9a3470694cec9e07e09a494f3b64e5b8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 27057, "upload_time": "2016-09-26T17:44:50", "url": "https://files.pythonhosted.org/packages/16/63/016b07d02246fb9a59160f4e4711d5d30cac2f5da92a1cdba073c1bededf/layeredconfig-0.3.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6c641c015c9810d259e63f6e1a60df74", "sha256": "bddbee70656ecdd50267ac0a86546c2b8b6e967979bebbb5fc31eb1dbdf7c69b" }, "downloads": -1, "filename": "layeredconfig-0.3.2.tar.gz", "has_sig": false, "md5_digest": "6c641c015c9810d259e63f6e1a60df74", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49969, "upload_time": "2016-09-26T17:44:47", "url": "https://files.pythonhosted.org/packages/47/45/6cebc1bfda58e708528cfae7e7a6a24db9460f9274aeb9978ae90fc2bb89/layeredconfig-0.3.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9a3470694cec9e07e09a494f3b64e5b8", "sha256": "c6253a8faeaf9d07cd762093ace70f274eece1d299d41b24a55adbc50347106a" }, "downloads": -1, "filename": "layeredconfig-0.3.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9a3470694cec9e07e09a494f3b64e5b8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 27057, "upload_time": "2016-09-26T17:44:50", "url": "https://files.pythonhosted.org/packages/16/63/016b07d02246fb9a59160f4e4711d5d30cac2f5da92a1cdba073c1bededf/layeredconfig-0.3.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6c641c015c9810d259e63f6e1a60df74", "sha256": "bddbee70656ecdd50267ac0a86546c2b8b6e967979bebbb5fc31eb1dbdf7c69b" }, "downloads": -1, "filename": "layeredconfig-0.3.2.tar.gz", "has_sig": false, "md5_digest": "6c641c015c9810d259e63f6e1a60df74", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49969, "upload_time": "2016-09-26T17:44:47", "url": "https://files.pythonhosted.org/packages/47/45/6cebc1bfda58e708528cfae7e7a6a24db9460f9274aeb9978ae90fc2bb89/layeredconfig-0.3.2.tar.gz" } ] }