{ "info": { "author": "Will Kahn-Greene", "author_email": "willkg@mozilla.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)", "Natural Language :: English", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "=======\nEverett\n=======\n\nEverett is a Python configuration library for your app.\n\n:Code: https://github.com/willkg/everett\n:Issues: https://github.com/willkg/everett/issues\n:License: MPL v2\n:Documentation: https://everett.readthedocs.io/\n\n\nGoals\n=====\n\nGoals of Everett:\n\n1. flexible configuration from multiple configured environments\n2. easy testing with configuration\n3. easy documentation of configuration for users\n\nFrom that, Everett has the following features:\n\n* is composeable and flexible\n* makes it easier to provide helpful error messages for users trying to\n configure your software\n* supports auto-documentation of configuration with a Sphinx\n ``autocomponent`` directive\n* has an API for testing configuration variations in your tests\n* can pull configuration from a variety of specified sources (environment,\n INI files, YAML files, dict, write-your-own)\n* supports parsing values (bool, int, lists of things, classes,\n write-your-own)\n* supports key namespaces\n* supports component architectures\n* works with whatever you're writing--command line tools, web sites, system\n daemons, etc\n\nEverett is inspired by `python-decouple\n`_ and `configman\n`_.\n\n\nQuick start\n===========\n\nFast start example\n------------------\n\nYou have an app and want it to look for configuration first in an ``.env``\nfile in the current working directory, then then in the process environment.\nYou can do this::\n\n from everett.manager import ConfigManager\n\n config = ConfigManager.basic_config()\n\n\nThen you can use it like this::\n\n debug_mode = config('debug', default='False', parser=bool)\n\n\nWhen you outgrow that or need different variations of it, you can change\nthat to creating a ``ConfigManager`` from scratch.\n\n\nMore complex example\n--------------------\n\nWe have an app and want to pull configuration from an INI file stored in\na place specified by ``MYAPP_INI`` in the environment, ``~/.myapp.ini``,\nor ``/etc/myapp.ini`` in that order.\n\nWe want to pull infrastructure values from the environment.\n\nValues from the environment should override values from the INI file.\n\nFirst, we need to install the additional requirements for INI file\nenvironments::\n\n pip install everett[ini]\n\n\nThen we set up our ``ConfigManager``::\n\n import os\n import sys\n\n from everett.ext.inifile import ConfigIniEnv\n from everett.manager import ConfigManager, ConfigOSEnv\n\n\n def get_config():\n return ConfigManager(\n # Specify one or more configuration environments in\n # the order they should be checked\n environments=[\n # Look in OS process environment first\n ConfigOSEnv(),\n\n # Look in INI files in order specified\n ConfigIniEnv([\n os.environ.get('MYAPP_INI'),\n '~/.myapp.ini',\n '/etc/myapp.ini'\n ]),\n ],\n\n # Provide users a link to documentation for when they hit\n # configuration errors\n doc='Check https://example.com/configuration for docs.'\n )\n\n\nThen we use it::\n\n def is_debug(config):\n return config('debug', default='False', parser=bool,\n doc='Switch debug mode on and off.')\n\n\n config = get_config()\n\n if is_debug(config):\n print('DEBUG MODE ON!')\n\n\nLet's write some tests that verify behavior based on the ``debug``\nconfiguration value::\n\n from myapp import get_config, is_debug\n\n from everett.manager import config_override\n\n\n @config_override(DEBUG='true')\n def test_debug_true():\n assert is_debug(get_config()) is True\n\n\n @config_override(DEBUG='false')\n def test_debug_false():\n assert is_debug(get_config()) is False\n\n\nIf the user sets ``DEBUG`` with a bad value, they get a helpful error message\nwith the documentation for the configuration option and the ``ConfigManager``::\n\n $ DEBUG=foo python myprogram.py\n \n namespace=None key=debug requires a value parseable by bool\n Switch debug mode on and off.\n Check https://example.com/configuration for docs.\n\n\nConfiguration classes\n---------------------\n\nEverett supports centralizing your configuration in a class. Instead of having\nconfiguration-related bits defined across your codebase, you can define it in\na class. Let's rewrite the above example using a configuration class.\n\nFirst, create a configuration class::\n\n import os\n import sys\n\n from everett.component import RequiredConfigMixin, ConfigOptions\n from everett.ext.inifile import ConfigIniEnv\n from everett.manager import ConfigManager, ConfigOSEnv\n\n\n class AppConfig(RequiredConfigMixin):\n required_config = ConfigOptions()\n required_config.add_option(\n 'debug',\n parser=bool,\n default='false',\n doc='Switch debug mode on and off.')\n )\n\n\nThen we set up our ``ConfigManager``::\n\n def get_config():\n manager = ConfigManager(\n # Specify one or more configuration environments in\n # the order they should be checked\n environments=[\n # Look in OS process environment first\n ConfigOSEnv(),\n\n # Look in INI files in order specified\n ConfigIniEnv([\n os.environ.get('MYAPP_INI'),\n '~/.myapp.ini',\n '/etc/myapp.ini'\n ]),\n ],\n\n # Provide users a link to documentation for when they hit\n # configuration errors\n doc='Check https://example.com/configuration for docs.'\n )\n\n # Apply the configuration class to the configuration manager\n # so that it handles option properties like defaults, parsers,\n # documentation, and so on.\n return manager.with_options(AppConfig())\n\n\nThen use it::\n\n config = get_config()\n\n if config('debug'):\n print('DEBUG MODE ON!')\n\n\nFurther, you can auto-generate configuration documentation by including the\n``everett.sphinxext`` Sphinx extension and using the ``autocomponent``\ndirective::\n\n .. autocomponent:: path.to.AppConfig\n\n\nThat has some niceties:\n\n1. your application configuration is centralized in one place instead\n of spread out across your code base\n\n2. you can use the ``autocomponent`` Sphinx directive to auto-generate\n configuration documentation for your users\n\n\nEverett components\n------------------\n\nEverett supports components that require configuration. Say your app needs to\nconnect to RabbitMQ. With Everett, you can define the component's configuration\nneeds in the component class::\n\n from everett.component import RequiredConfigMixin, ConfigOptions\n\n\n class RabbitMQComponent(RequiredConfigMixin):\n required_config = ConfigOptions()\n required_config.add_option(\n 'host',\n doc='RabbitMQ host to connect to'\n )\n required_config.add_option(\n 'port',\n default='5672',\n doc='Port to use',\n parser=int\n )\n required_config.add_option(\n 'queue_name',\n doc='Queue to insert things into'\n )\n\n def __init__(self, config):\n # Bind the configuration to just the configuration this\n # component requires such that this component is\n # self-contained\n self.config = config.with_options(self)\n\n self.host = self.config('host')\n self.port = self.config('port')\n self.queue_name = self.config('queue_name')\n\n\nThen instantiate a ``RabbitMQComponent`` that looks for configuration keys\nin the ``rmq`` namespace::\n\n queue = RabbitMQComponent(config.with_namespace('rmq'))\n\n\nThe ``RabbitMQComponent`` has a ``HOST`` key, so your configuration would\nneed to define ``RMQ_HOST``.\n\nYou can auto-generate configuration documentation for this component in your\nSphinx docs by including the ``everett.sphinxext`` Sphinx extension and\nusing the ``autocomponent`` directive::\n\n .. autocomponent:: path.to.RabbitMQComponent\n :namespace: rmq\n\n\nSay your app actually needs to connect to two separate queues--one for regular\nprocessing and one for priority processing::\n\n from everett.manager import ConfigManager\n\n config = ConfigManager.basic_config()\n\n # Apply the \"rmq\" namespace to the configuration so all keys are\n # prepended with RMQ_\n rmq_config = config.with_namespace('rmq')\n\n # Create a RabbitMQComponent with RMQ_REGULAR_ prepended to keys\n regular_queue = RabbitMQComponent(rmq_config.with_namespace('regular'))\n\n # Create a RabbitMQComponent with RMQ_PRIORITY_ prepended to keys\n priority_queue = RabbitMQComponent(rmq_config.with_namespace('priority'))\n\n\nIn your environment, you provide the regular queue configuration with\n``RMQ_REGULAR_HOST``, etc and the priority queue configuration with\n``RMQ_PRIORITY_HOST``, etc.\n\nSame component code. Two different instances pulling configuration from two\ndifferent namespaces.\n\nComponents support subclassing, mixins and all that, too.\n\n\nInstall\n=======\n\nInstall from PyPI\n-----------------\n\nRun::\n\n $ pip install everett\n\nIf you want to use the ``ConfigIniEnv``, you need to install its requirements\nas well::\n\n $ pip install everett[ini]\n\nIf you want to use the ``ConfigYamlEnv``, you need to install its requirements\nas well::\n\n $ pip install everett[yaml]\n\n\nInstall for hacking\n-------------------\n\nRun::\n\n # Clone the repository\n $ git clone https://github.com/willkg/everett\n\n # Create a virtualenvironment\n $ mkvirtualenv --python /usr/bin/python3 everett\n ...\n\n # Install Everett and dev requirements\n $ pip install -r requirements-dev.txt\n\n\nWhy not other libs?\n===================\n\nMost other libraries I looked at had one or more of the following issues:\n\n* were tied to a specific web app framework\n* didn't allow you to specify configuration sources\n* provided poor error messages when users configure things wrong\n* had a global configuration object\n* made it really hard to override specific configuration when writing tests\n* had no facilities for auto-generating configuration documentation\n\n\nHistory\n=======\n\n1.0.2 (February 22nd, 2019)\n---------------------------\n\nFixes:\n\n* Improve documentation.\n\n* Fix problems when there are nested ``BoundConfigs``. Now they work\n correctly. (#90)\n\n* Add \"meta\" to options letting you declare additional data on the option\n when you're adding it.\n\n For example, this lets you do things like mark options as \"secrets\"\n so that you know which ones to ``******`` out when logging your\n configuration. (#88)\n\n\n1.0.1 (January 8th, 2019)\n-------------------------\n\nFixes:\n\n* Fix documentation issues.\n\n* Package missing ``everett.ext``. Thank you, dsblank! (#84)\n\n\n1.0.0 (January 7th, 2019)\n-------------------------\n\nBackwards incompatible changes:\n\n* Dropped support for Python 2.7. Everett no longer supports Python 2. (#73)\n\n* Dropped support for Python 3.3 and added support for Python 3.7. Thank you,\n pjz! (#68)\n\n* Moved ``ConfigIniEnv`` to a different module. Now you need to import it\n like this::\n\n from everett.ext.inifile import ConfigIniEnv\n\n (#79)\n\nFeatures:\n\n* Everett now logs configuration discovery in the ``everett`` logger at the\n ``logging.DEBUG`` level. This is helpful for trouble-shooting some kinds of\n issues. (#74)\n\n* Everett now has a YAML configuration environment. In order to use it, you\n need to install its requirements::\n\n $ pip install everett[yaml]\n\n Then you can import it like this::\n\n from everett.ext.yamlfile import ConfigYamlEnv\n\n (#72)\n\nFixes:\n\n* Everett no longer requires ``configobj``--it's now optional. If you use\n ``ConfigIniEnv``, you can install it with::\n\n $ pip install everett[ini]\n\n (#79)\n\n* Fixed list parsing and file discovery in ConfigIniEnv so they match the\n docs and are more consistent with other envs. Thank you, apollo13! (#71)\n\n* Added a ``.basic_config()`` for fast opinionated setup that uses the\n process environment and a ``.env`` file in the current working directory.\n\n* Switching to semver.\n\n\n0.9 (April 7th, 2017)\n---------------------\n\nChanged:\n\n* Rewrite Sphinx extension. The extension is now in the ``everett.sphinxext``\n module and the directive is now ``.. autocomponent::``. It generates better\n documentation and it now indexes Everett components and options.\n\n This is backwards-incompatible. You will need to update your Sphinx\n configuration and documentation.\n\n* Changed the ``HISTORY.rst`` structure.\n\n* Changed the repr for ``everett.NO_VALUE`` to ``\"NO_VALUE\"``.\n\n* ``InvalidValueError`` and ``ConfigurationMissingError`` now have\n ``namespace``, ``key``, and ``parser`` attributes allowing you to build your\n own messages.\n\nFixed:\n\n* Fix an example in the docs where the final key was backwards. Thank you, pjz!\n\nDocumentation fixes and updates.\n\n\n0.8 (January 24th, 2017)\n------------------------\n\nAdded:\n\n* Add ``:namespace:`` and ``:case:`` arguments to autoconfig directive. These\n make it easier to cater your documentation to your project's needs.\n\n* Add support for Python 3.6.\n\nMinor documentation fixes and updates.\n\n\n0.7 (January 5th, 2017)\n-----------------------\n\nAdded:\n\n* Feature: You can now include documentation hints and urls for\n ``ConfigManager`` objects and config options. This will make it easier for\n your users to debug configuration errors they're having with your software.\n\nFixed:\n\n* Fix ``ListOf`` so it returns empty lists rather than a list with a single\n empty string.\n\nDocumentation fixes and updates.\n\n\n0.6 (November 28th, 2016)\n-------------------------\n\nAdded:\n\n* Add ``RequiredConfigMixin.get_runtime_config()`` which returns the runtime\n configuration for a component or tree of components. This lets you print\n runtime configuration at startup, generate INI files, etc.\n\n* Add ``ConfigObjEnv`` which lets you use an object for configuration. This\n works with argparse's Namespace amongst other things.\n\nChanged:\n\n* Change ``:show-docstring:`` to take an optional value which is the attribute\n to pull docstring content from. This means you don't have to mix programming\n documentation with user documentation--they can be in different attributes.\n\n* Improve configuration-related exceptions. With Python 3, configuration errors\n all derive from ``ConfigurationError`` and have helpful error messages that\n should make it clear what's wrong with the configuration value. With Python 2,\n you can get other kinds of Exceptions thrown depending on the parser used, but\n configuration error messages should still be helpful.\n\nDocumentation fixes and updates.\n\n\n0.5 (November 8th, 2016)\n------------------------\n\nAdded:\n\n* Add ``:show-docstring:`` flag to ``autoconfig`` directive.\n\n* Add ``:hide-classname:`` flag to ``autoconfig`` directive.\n\nChanged:\n\n* Rewrite ``ConfigIniEnv`` to use configobj which allows for nested sections in\n INI files. This also allows you to specify multiple INI files and have later\n ones override earlier ones.\n\nFixed:\n\n* Fix ``autoconfig`` Sphinx directive and add tests--it was all kinds of broken.\n\nDocumentation fixes and updates.\n\n\n0.4 (October 27th, 2016)\n------------------------\n\nAdded:\n\n* Add ``raw_value`` argument to config calls. This makes it easier to write code\n that prints configuration.\n\nFixed:\n\n* Fix ``listify(None)`` to return ``[]``.\n\nDocumentation fixes and updates.\n\n\n0.3.1 (October 12th, 2016)\n--------------------------\n\nFixed:\n\n* Fix ``alternate_keys`` with components. Previously it worked for everything\n but components. Now it works with components, too.\n\nDocumentation fixes and updates.\n\n\n0.3 (October 6th, 2016)\n-----------------------\n\nAdded:\n\n* Add ``ConfigManager.from_dict()`` shorthand for building configuration\n instances.\n\n* Add ``.get_namespace()`` to ``ConfigManager`` and friends for getting\n the complete namespace for a given config instance as a list of strings.\n\n* Add ``alternate_keys`` to config call. This lets you specify a list of keys in\n order to try if the primary key doesn't find a value. This is helpful for\n deprecating keys that you used to use in a backwards-compatible way.\n\n* Add ``root:`` prefix to keys allowing you to look outside of the current\n namespace and at the configuration root for configuration values.\n\nChanged:\n\n* Make ``ConfigDictEnv`` case-insensitive to keys and namespaces.\n\nDocumentation fixes and updates.\n\n\n0.2 (August 16th, 2016)\n-----------------------\n\nAdded:\n\n* Add ``ConfigEnvFileEnv`` for supporting ``.env`` files. Thank you, Paul!\n\n* Add \"on\" and \"off\" as valid boolean values. This makes it easier to use config\n for feature flippers. Thank you, Paul!\n\nChanged:\n\n* Change ``ConfigIniEnv`` to take a single path or list of paths. Thank you,\n Paul!\n\n* Make ``NO_VALUE`` falsy.\n\nFixed:\n\n* Fix ``__call__`` returning None--it should return ``NO_VALUE``.\n\nLots of docs updates: finished the section about making your own parsers, added\na section on using dj-database-url, added a section on django-cache-url and\nexpanded on existing examples.\n\n\n0.1 (August 1st, 2016)\n----------------------\n\nInitial writing.\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/willkg/everett", "keywords": "conf config configuration component", "license": "MPLv2", "maintainer": "", "maintainer_email": "", "name": "everett", "package_url": "https://pypi.org/project/everett/", "platform": "", "project_url": "https://pypi.org/project/everett/", "project_urls": { "Homepage": "https://github.com/willkg/everett" }, "release_url": "https://pypi.org/project/everett/1.0.2/", "requires_dist": [ "configobj ; extra == 'ini'", "PyYAML ; extra == 'yaml'" ], "requires_python": "", "summary": "Configuration library for Python applications", "version": "1.0.2" }, "last_serial": 4855331, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "536d61cc07f4cc3d298d176ab4029ad4", "sha256": "0a1a9d231bb9ef4c168b66f6fdf1e8baac3cd926b3fcf7cb6f6468739d701204" }, "downloads": -1, "filename": "everett-0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "536d61cc07f4cc3d298d176ab4029ad4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13414, "upload_time": "2016-08-01T22:17:10", "url": "https://files.pythonhosted.org/packages/4b/3c/ba5f84c84a30a156c89f720701c96fce3d5917c06755d8d2de2febbbacf3/everett-0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d27a6258347acc7e89f36309b3528907", "sha256": "a950bead5a58f1e9c0a7cc3175ec1a82db2f922c4a44304697d56e229b63a90c" }, "downloads": -1, "filename": "everett-0.1.tar.gz", "has_sig": false, "md5_digest": "d27a6258347acc7e89f36309b3528907", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25702, "upload_time": "2016-08-01T22:17:12", "url": "https://files.pythonhosted.org/packages/53/7a/ec4123e86a60187f3080df834609e11e71a40493efaa6100c9b06995de8a/everett-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "46db9247314e6b807a4ecea5852cd70a", "sha256": "cab7585c0baa1d59d65f446ade2e89a761f70f865681dfdfa0443e817544e222" }, "downloads": -1, "filename": "everett-0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "46db9247314e6b807a4ecea5852cd70a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15160, "upload_time": "2016-08-16T19:23:55", "url": "https://files.pythonhosted.org/packages/58/12/9bebc328cf252248befe7425c1ad2a9eacbc9eca3956b8941c47246a1f61/everett-0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ef83e097f9dac2baf643b835d1424007", "sha256": "fd5a49f6a55315a9558378561244dfdf3b95c0091752ed8232bb2e843fc35784" }, "downloads": -1, "filename": "everett-0.2.tar.gz", "has_sig": false, "md5_digest": "ef83e097f9dac2baf643b835d1424007", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28739, "upload_time": "2016-08-16T19:23:58", "url": "https://files.pythonhosted.org/packages/45/72/46573ed74b965b1564a7d026e594e3ac553d0863d72b595b28ef727d6f00/everett-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "9dba6248fdb19683e275e28930c6e6d0", "sha256": "fb94ec627efacb2fd44a2eacaacc61d1f2fc9d7836479dd64408316cab1d2b2c" }, "downloads": -1, "filename": "everett-0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9dba6248fdb19683e275e28930c6e6d0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16534, "upload_time": "2016-10-06T17:49:58", "url": "https://files.pythonhosted.org/packages/61/27/b92be1603eb6669b7ddb3fb3eb94082c93857982652d3b3ce1efe472b82c/everett-0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6d4a7db33f0906e38dc97c5ba6476c3d", "sha256": "9a30b351d79d575b12d5a1df671eebf60ec77b8f81acaa1d28833001f8f8a1f1" }, "downloads": -1, "filename": "everett-0.3.tar.gz", "has_sig": false, "md5_digest": "6d4a7db33f0906e38dc97c5ba6476c3d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30359, "upload_time": "2016-10-06T17:50:00", "url": "https://files.pythonhosted.org/packages/58/9a/77411cd4d275f1deac85972ea5e8acdbd69d61ef5723fe5723f7558b7be1/everett-0.3.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "051a09291b2ecbddf62b6bf647998c5d", "sha256": "b0481647a79f1b89bce07a87e7dd06c22be4a6e2e3d3b3933ef41485e2c2f880" }, "downloads": -1, "filename": "everett-0.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "051a09291b2ecbddf62b6bf647998c5d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16691, "upload_time": "2016-10-12T17:58:40", "url": "https://files.pythonhosted.org/packages/df/29/8b8095d3611961892f5422de9ab87d4af74621975ef567f65ab2ec52d495/everett-0.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "01dd0fe2bd8a73ceebaf844eecb1cec4", "sha256": "c1bde41af07c985c94776437379f1c246786861135b9a7c7017444aa0657ff4d" }, "downloads": -1, "filename": "everett-0.3.1.tar.gz", "has_sig": false, "md5_digest": "01dd0fe2bd8a73ceebaf844eecb1cec4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30587, "upload_time": "2016-10-12T18:00:17", "url": "https://files.pythonhosted.org/packages/d1/83/69a846e749d6ca9a5c4b4673e3650af910975ad770496a5dc1b40a51896c/everett-0.3.1.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "1b23d6e9f0daae2983461c7d63576e0a", "sha256": "cb09a80fbbba76d17c7297d4fd98ead47d36972f989c37da98130ec7c84402c3" }, "downloads": -1, "filename": "everett-0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1b23d6e9f0daae2983461c7d63576e0a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17033, "upload_time": "2016-10-27T19:08:59", "url": "https://files.pythonhosted.org/packages/1e/64/b5262e7492a2932b520184e3ba63a5fc28f10a6f9843747f0f2b897136cb/everett-0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "57d44c4179b63c768bba1b50eeb02531", "sha256": "09f7249b9a1358c165357562b31e1ed1aff2c6df2dde086fb4ec444723cdc9f1" }, "downloads": -1, "filename": "everett-0.4.tar.gz", "has_sig": false, "md5_digest": "57d44c4179b63c768bba1b50eeb02531", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32810, "upload_time": "2016-10-27T19:09:01", "url": "https://files.pythonhosted.org/packages/f6/e1/433be0f496ed38ffe03a677042d77cc60284553f4c9ddb2dd7cc36fc14d4/everett-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "f94236548b409f4c1e7b1c207f13a8f2", "sha256": "5fe8201ee5c05f3cd8ebc8393a555150da5133b577ed63bb048d9bbc9321b1c5" }, "downloads": -1, "filename": "everett-0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f94236548b409f4c1e7b1c207f13a8f2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18125, "upload_time": "2016-11-08T20:35:19", "url": "https://files.pythonhosted.org/packages/40/32/75c4b56505512d3a8f0c8ae6ce8409c2a54525f541eadbdef01fe142f995/everett-0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5ddd41e642ddfad6aafe256d5ff59282", "sha256": "b427bd9ce32d7de503e896e1195350006a43812ce8eaad26990cd2d93a1b8020" }, "downloads": -1, "filename": "everett-0.5.tar.gz", "has_sig": false, "md5_digest": "5ddd41e642ddfad6aafe256d5ff59282", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35105, "upload_time": "2016-11-08T20:35:22", "url": "https://files.pythonhosted.org/packages/d6/ad/53de75ac270586c9f2d59290f7a6e90eddfbf91be9cf24843fbe249b4171/everett-0.5.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "dfb07d743201b4ca94f48a47fce8caca", "sha256": "52848a30c302cd92fff98f1afb1b2ff4f5d7decf88404240c0009d90ce54867b" }, "downloads": -1, "filename": "everett-0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "dfb07d743201b4ca94f48a47fce8caca", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 20990, "upload_time": "2016-11-28T20:30:09", "url": "https://files.pythonhosted.org/packages/43/46/b2df4a01442a87beae4e189efbf731ad6e95b730564c0822e2bfd2ab256a/everett-0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9e0d5182794ac2386d3f3cbc60846618", "sha256": "9cce5d4d009eea4d32d1a313d1cf2a563ce2eba7ec709ec9faf8e62e108c6bba" }, "downloads": -1, "filename": "everett-0.6.tar.gz", "has_sig": false, "md5_digest": "9e0d5182794ac2386d3f3cbc60846618", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41439, "upload_time": "2016-11-28T20:30:11", "url": "https://files.pythonhosted.org/packages/da/eb/27460d8f23a1f1a47f57919472df6cb37a64642dc83c043834c4342c579e/everett-0.6.tar.gz" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "3fae36f88daacc6e953c14202df00018", "sha256": "980f0b3e2048866f42ae6b3e61261a249c971dbe8bd540b4eeba797b23a2ed50" }, "downloads": -1, "filename": "everett-0.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3fae36f88daacc6e953c14202df00018", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 22060, "upload_time": "2017-01-05T21:02:15", "url": "https://files.pythonhosted.org/packages/17/8e/2a03b6b90febc22b263d7312208ec96c661da54e56ec3508554d5d9b5610/everett-0.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "673becdc77f251e686746f2a9498ba18", "sha256": "94c67f362a4f86ca2f249d17fd82a4dc5c3be534261d63d6b8e07ba63a756421" }, "downloads": -1, "filename": "everett-0.7.tar.gz", "has_sig": false, "md5_digest": "673becdc77f251e686746f2a9498ba18", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43732, "upload_time": "2017-01-05T21:02:17", "url": "https://files.pythonhosted.org/packages/87/3d/b8049db295f835fef608b617c8378c4029f50d375ab7f8f0cfcd1b93e606/everett-0.7.tar.gz" } ], "0.8": [ { "comment_text": "", "digests": { "md5": "96d336b3ca364ab85a10a2ec5304833e", "sha256": "d78ba2e6dcc5e49114e3b17491e5d908534104b47b3633a26aa2d5cc2c91d55d" }, "downloads": -1, "filename": "everett-0.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "96d336b3ca364ab85a10a2ec5304833e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 22752, "upload_time": "2017-01-25T00:25:38", "url": "https://files.pythonhosted.org/packages/c7/e0/9b109e7ccba436ee538e1d2ae787d08b4f9120b704fd9fffa52226aa9b3c/everett-0.8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "69f8146733e7f00e5dfe4129cbc619e7", "sha256": "52d616f2da2db950799756461b53f2576c0660b0511bb571fac0ff58f8cdac01" }, "downloads": -1, "filename": "everett-0.8.tar.gz", "has_sig": false, "md5_digest": "69f8146733e7f00e5dfe4129cbc619e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44703, "upload_time": "2017-01-25T00:25:40", "url": "https://files.pythonhosted.org/packages/66/be/81262baa99f6ebd6d54de149aef18e4fec16e27d7e970df3bbf0a86d9450/everett-0.8.tar.gz" } ], "0.9": [ { "comment_text": "", "digests": { "md5": "1de93e4e85909957865b6c989621e83b", "sha256": "05b0d0bae138a3b1a7c365bdd991c0a5b06f20c2e01d6721896098ac93cf7ee9" }, "downloads": -1, "filename": "everett-0.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1de93e4e85909957865b6c989621e83b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 27782, "upload_time": "2017-04-07T13:45:06", "url": "https://files.pythonhosted.org/packages/8f/9a/6e724c63645d8693551954381db1ee91b694c01088f9eff3b4ed34383f5a/everett-0.9-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1164f8868eeb48bc675a6b6cbe5c0386", "sha256": "02a43a2b4194e6ed40757851b37f5acf3c086f37e7e8109a385a7198cfbbc51b" }, "downloads": -1, "filename": "everett-0.9.tar.gz", "has_sig": false, "md5_digest": "1164f8868eeb48bc675a6b6cbe5c0386", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47570, "upload_time": "2017-04-07T13:45:07", "url": "https://files.pythonhosted.org/packages/fe/06/3aa2ffefade87299aec347952c9bf27770deab541e8a8fa3ad82e6a3b01b/everett-0.9.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "05228e529877d0be34f0f7fc26f961b0", "sha256": "38c34068435a08ed7b991079022662f650ef574b0b260d1c142139112e459ee9" }, "downloads": -1, "filename": "everett-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "05228e529877d0be34f0f7fc26f961b0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 26341, "upload_time": "2019-01-07T18:09:47", "url": "https://files.pythonhosted.org/packages/35/d3/ffe69e300263dc02cf2bb235c617b1e2f6cc146f724f1918bbb852f30a60/everett-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7d7e0318d9f4696529bdf1d07f34a7b4", "sha256": "3add2fe3810112d6a02edb481b197e196f9a1696bdd4b7f3c63a5a8a3746747c" }, "downloads": -1, "filename": "everett-1.0.0.tar.gz", "has_sig": false, "md5_digest": "7d7e0318d9f4696529bdf1d07f34a7b4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49390, "upload_time": "2019-01-07T18:09:49", "url": "https://files.pythonhosted.org/packages/d0/39/d333bfaa7f562a62c779fe3736ff09ba96f63a9302a68b136a22fa441256/everett-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "7f427b01dca67c619c652334bfb2814e", "sha256": "35f69f6d8e45b2250a3d4b06b8e7f537d3cb296dae9a3ec4a4791258fe4de6eb" }, "downloads": -1, "filename": "everett-1.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7f427b01dca67c619c652334bfb2814e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 30531, "upload_time": "2019-01-08T14:28:34", "url": "https://files.pythonhosted.org/packages/84/82/26f71f680658045fbba8daa4c9769660eca3e8c2f95f8b8d4378e57603cf/everett-1.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5043307b545b3fc0498834c142f48fa5", "sha256": "860011cc71520fe27c7b9e2539b72cc6df2e235705489ad47935b8da83c9b855" }, "downloads": -1, "filename": "everett-1.0.1.tar.gz", "has_sig": false, "md5_digest": "5043307b545b3fc0498834c142f48fa5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51550, "upload_time": "2019-01-08T14:28:35", "url": "https://files.pythonhosted.org/packages/19/17/6c6192ac291063ecd511732c9fe0a918023b1cd54de9f9630d7d19cb2bda/everett-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "8821bd86f92e1ca7d4afd07e5d9cd065", "sha256": "8a5ee8cdde0ed6b3bbb63249e0e0703d4ad91921107ff198e0868ffce5f7b6bc" }, "downloads": -1, "filename": "everett-1.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8821bd86f92e1ca7d4afd07e5d9cd065", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 31394, "upload_time": "2019-02-22T17:36:49", "url": "https://files.pythonhosted.org/packages/12/34/de70a3d913411e40ce84966f085b5da0c6df741e28c86721114dd290aaa0/everett-1.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a1897f7787cdd61a35c0030ff1987366", "sha256": "66c7991c056fd9b1de54c29e2b5004a30209530faef698d6ecfbf24bfbbdd1fb" }, "downloads": -1, "filename": "everett-1.0.2.tar.gz", "has_sig": false, "md5_digest": "a1897f7787cdd61a35c0030ff1987366", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 53101, "upload_time": "2019-02-22T17:36:51", "url": "https://files.pythonhosted.org/packages/0a/8d/f468f4bccac8fd5992cdb6c5beccc4a39c66c5ed131fe7891a23ce2be148/everett-1.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8821bd86f92e1ca7d4afd07e5d9cd065", "sha256": "8a5ee8cdde0ed6b3bbb63249e0e0703d4ad91921107ff198e0868ffce5f7b6bc" }, "downloads": -1, "filename": "everett-1.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8821bd86f92e1ca7d4afd07e5d9cd065", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 31394, "upload_time": "2019-02-22T17:36:49", "url": "https://files.pythonhosted.org/packages/12/34/de70a3d913411e40ce84966f085b5da0c6df741e28c86721114dd290aaa0/everett-1.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a1897f7787cdd61a35c0030ff1987366", "sha256": "66c7991c056fd9b1de54c29e2b5004a30209530faef698d6ecfbf24bfbbdd1fb" }, "downloads": -1, "filename": "everett-1.0.2.tar.gz", "has_sig": false, "md5_digest": "a1897f7787cdd61a35c0030ff1987366", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 53101, "upload_time": "2019-02-22T17:36:51", "url": "https://files.pythonhosted.org/packages/0a/8d/f468f4bccac8fd5992cdb6c5beccc4a39c66c5ed131fe7891a23ce2be148/everett-1.0.2.tar.gz" } ] }