{ "info": { "author": "David Evans", "author_email": "d@evans.io", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4" ], "description": "Django EnvSettings\n==================\n\n.. image:: https://img.shields.io/travis/evansd/django-envsettings.svg\n :target: https://travis-ci.org/evansd/django-envsettings\n :alt: Build Status\n\n.. image:: https://img.shields.io/pypi/v/django-envsettings.svg\n :target: https://pypi.python.org/pypi/django-envsettings\n :alt: Latest PyPI version\n\n**One-stop shop for configuring 12-factor Django apps**\n\n * Simple API for getting settings from environment variables.\n * Supports wide variety of email, cache and database backends.\n * Easily customisable and extensible.\n * One line auto-config for many Heroku add-ons.\n\n\nBasic Settings\n--------------\n\nIn your Django project's ``settings.py``:\n\n.. code-block:: python\n\n import envsettings\n\n SECRET_KEY = envsettings.get('DJANGO_SECRET_KEY', 'development_key_not_a_secret')\n\n # Accepts the strings \"True\" and \"False\"\n DEBUG = envsettings.get_bool('DJANGO_DEBUG', default=True)\n\n FILE_UPLOAD_MAX_MEMORY_SIZE = envsettings.get_int('MAX_UPLOAD_SIZE', default=2621440)\n\n\nEmail Settings\n--------------\n\nBecause of the way Django's email settings work, this requires a bit of a hack with\n``locals()``:\n\n.. code-block:: python\n\n import envsettings\n\n locals().update(\n envsettings.email.get('MAIL_URL', default='file:///dev/stdout'))\n\n\nThis sets ``EMAIL_BACKEND`` and whatever other values are needed to\nconfigure the selected backend.\n\nExample URLs\n++++++++++++\n\nStandard SMTP backend:\n\n.. code-block:: bash\n\n # SMTP without TLS\n smtp://username:password@host.example.com:25\n # SMTP with TLS\n smtps://username:password@host.example.com:587\n\n\nSpecial Django backends for use in development:\n\n.. code-block:: bash\n\n # Console backend\n file:///dev/stdout\n\n # Dummy packend\n file:///dev/null\n\n # File-based backend\n file:///path/to/output/dir\n\n\nProprietary backends (each requires the appropriate package installed):\n\n.. code-block:: bash\n\n # Requires `django-mailgun`\n mailgun://api:api_key@my-sending-domain.com\n\n # Requires `sendgrid-django`\n sendgrid://username:password@sendgrid.com\n\n # Requires `djrill`\n mandrill://:api_key@mandrillapp.com\n mandrill://subaccount_name:api_key@mandrillapp.com\n\n # Requires `django-ses-backend`\n ses://access_key_id:access_key@us-east-1\n ses://access_key_id:access_key@email.eu-west-1.amazonaws.com\n\n # Requires `django-postmark`\n postmark://api:api_key@postmarkapp.com\n\n\nHeroku Auto-Config\n++++++++++++++++++\n\nPass ``auto_config=True`` like so:\n\n.. code-block:: python\n\n locals().update(\n envsettings.email.get(default='file:///dev/stdout', auto_config=True))\n\nThis will automatically detect and configure any of the following Heroku email add-ons:\n*Mailgun*, *Sendgrid*, *Mandrill*, *Postmark*.\n\nSo, for instance, you can configure your app to send email via Mailgun simply by running:\n\n.. code-block:: bash\n\n heroku addons:add mailgun:starter\n\nBy default it will use each provider's SMTP endpoint, however if it detects that\nthe appropriate backend is installed (see list above) it will configure Django to\nuse the HTTP endpoint which will be faster.\n\n\nCache Settings\n--------------\n\n.. code-block:: python\n\n import envsettings\n\n CACHES = {'default': envsettings.cache.get('CACHE_URL', 'locmem://')}\n\n\nExample URLs\n++++++++++++\n\nDjango backends for use in development:\n\n.. code-block:: bash\n\n # Local memory\n locmem://\n # Local memory with prefix\n locmem://some-prefix\n\n # File based\n file:///path/to/cache/directory\n\n # Dummy cache\n file:///dev/null\n\n\nRedis (requires ``django-redis`` package):\n\n.. code-block:: bash\n\n # Basic Redis configuration\n redis://example.com:6379\n # With password\n redis://:secret@example.com:6379\n # Specifying database number\n redis://example.com:6379/3\n # Using UNIX socket\n redis:///path/to/socket\n # Using UNIX socket with password and database number\n redis://:secret@/path/to/socket:3\n\n\nTo use Memcached you need one of the following packages installed:\n``django_pylibmc``, ``django_bmemcached``, ``pylibmc``, ``mecached``\n\nOnly ``django_pylibmc`` and ``django_bmemcachd`` support authentication and the memcached\nbinary protocol, so if you want to use either of these featues you'll need one of those\npackages.\n\n.. code-block:: bash\n\n # Basic Memcached configuration\n memcached://example.com:11211\n # Multiple servers\n memcached://example.com:11211,another.com:11211,onemore.com:11211\n # With authentication\n memcached://username:password@example.com\n # Using the binary protocol\n memcached-binary://example.com:11211\n\n\nHeroku Auto-Config\n++++++++++++++++++\n\nPass ``auto_config=True`` like so:\n\n.. code-block:: python\n\n CACHES = {'default': envsettings.cache.get(default='locmen://', auto_config=True)}\n\nThis will automatically detect and configure any of the following Heroku cache add-ons:\n*Memcachier*, *MemcachedCloud*, *RedisToGo*, *RedisCloud*, *OpenRedis*, *RedisGreen*.\n\n\nCustomising & Extending\n-----------------------\n\nDjango EnvSettings is designed to be easily extensible by subclassing one of the existing\nsettings providers: ``CacheSettings``, ``EmailSettings``, or ``DatabaseSettings``.\n\n\nChanging default configuration\n++++++++++++++++++++++++++++++\n\nObviously you can modify the configuration dictionary after it's returned from ``envsettings``.\nHowever you can also set default values for each backend, while letting the environment determine\nwhich backend to use. For example:\n\n.. code-block:: python\n\n envsettings.database.CONFIG['postgres']['OPTIONS'] = {\n 'isolation_level': psycopg2.extensions.ISOLATION_LEVEL_SERIALIZABLE}\n\n\nSupporting new backends\n+++++++++++++++++++++++\n\nTo add a new backend, subclass the appropriate settings class.\nYou will then need to add a key to the ``CONFIG`` dictionary which maps\nthe URL scheme you want to use for your backend to the default config\nfor that backend. You will also need to add a method named\n``handle__url`` which will be passed the output from ``urlparse`` and the\ndefault config. The method should use the values from the parsed URL to update the\nconfig appropriately.\n\nFor example:\n\n\n.. code-block:: python\n\n import envsettings\n\n class CacheSettings(envsettings.CacheSettings):\n\n CONFIG = dict(envsettings.CacheSettings.CONFIG, **{\n 'my-proto': {'BACKEND': 'my_cache_backend.MyCacheBackend'}\n })\n\n def handle_my_proto_url(self, parsed_url, config):\n config['HOST'] = parsed_url.hostname or 'localhost'\n config['PORT'] = parsed_url.port or 9000\n config['USERNAME'] = parsed_url.username\n config['PASSWORD'] = parsed_url.password\n return config\n\n cachesettings = CacheSettings()\n\n CACHES = {'default': cachesettings.get('CACHE_URL')}\n\n\nSupporting new auto configuration options\n+++++++++++++++++++++++++++++++++++++++++\n\nTo add a new auto-configuration provider, subclass the appropriate settings class and add a method\nnamed ``auto_config_``. This will be passed a dictionary of environment\nvariables and should return either an appropriate configuration URL, or None.\n\nThe auto config methods are tried in lexical order, so if you want to force a method\nto be tried first you could call it ``auto_config_00_my_provider``, or something like\nthat.\n\nHere's an example:\n\n.. code-block:: python\n\n import envsettings\n\n class CacheSettings(envsettings.CacheSettings):\n\n def auto_config_my_redis(self, env):\n try:\n host = env['MY_REDIS_HOST']\n password = env['MY_REDIS_PASSWORD']\n except KeyError:\n return None\n else:\n return 'redis://:{password}@{host}'.format(\n host=host, password=password)\n\n cachesettings = CacheSettings()\n\n CACHES = {'default': cachesettings.get('CACHE_URL', auto_config=True)}\n\n\nCompatibility\n-------------\n\nTested on Python **2.7**, **3.3**, **3.4** and **PyPy**,\nwith Django versions **1.4** --- **1.7**\n\n\nIssues & Contributing\n---------------------\n\nRaise an issue on the `GitHub project `_ or\nfeel free to nudge `@_EvansD `_ on Twitter.\n\n\nLicense\n-------\n\nMIT Licensed", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/evansd/django-envsettings", "keywords": null, "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "django-envsettings", "package_url": "https://pypi.org/project/django-envsettings/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/django-envsettings/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://github.com/evansd/django-envsettings" }, "release_url": "https://pypi.org/project/django-envsettings/1.1.0/", "requires_dist": null, "requires_python": null, "summary": "One-stop shop for configuring 12-factor Django apps", "version": "1.1.0" }, "last_serial": 1685820, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "71fd62fdb76f02efb4ce8da088b8f139", "sha256": "1b4d16648820368f30ebe2c98889456409994ce4da1f3c52842cacdd1c375eb4" }, "downloads": -1, "filename": "django_envsettings-0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "71fd62fdb76f02efb4ce8da088b8f139", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 13257, "upload_time": "2014-12-17T18:37:12", "url": "https://files.pythonhosted.org/packages/ee/cf/1b46cd656d3e81e206cf25b1892b772cef649c0f59774cf61b6b64b54dba/django_envsettings-0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a3d53b539f9ec97e4fcde493e7d0ae38", "sha256": "62b98106e1c6ff0a7bf8cec4655a8b0d4d7ede15d8b913ec2b123afa7e485272" }, "downloads": -1, "filename": "django-envsettings-0.1.tar.gz", "has_sig": false, "md5_digest": "a3d53b539f9ec97e4fcde493e7d0ae38", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12581, "upload_time": "2014-12-17T18:37:08", "url": "https://files.pythonhosted.org/packages/a3/bf/6e15111daf5c99ea6cf5aed26304fad656006462c4ab657ff7ad40e6c130/django-envsettings-0.1.tar.gz" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "fc7a2e5b0d1736769daca59b213c4025", "sha256": "b9ffa3e7b8f6b233178c5f1fc90fad65842d6db35eaf21a9a3d8fed5cbd596a4" }, "downloads": -1, "filename": "django_envsettings-1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fc7a2e5b0d1736769daca59b213c4025", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 13261, "upload_time": "2015-06-29T12:41:57", "url": "https://files.pythonhosted.org/packages/c7/6d/07afc62fd29b07f713fffc09281786c1cbdef4d841539ed70a8e8de26c6f/django_envsettings-1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "87fa655e82908b1c7558cf865d5eadf4", "sha256": "b8211484cb43e45dc2b6ae6a796e2fd2267447942fca9a59ca73a352bd18fae3" }, "downloads": -1, "filename": "django-envsettings-1.0.tar.gz", "has_sig": false, "md5_digest": "87fa655e82908b1c7558cf865d5eadf4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12586, "upload_time": "2015-06-29T12:41:42", "url": "https://files.pythonhosted.org/packages/bc/06/1c41be4c2f1235cff0a4e3e22ce14700fc9e421a60e894690bff3daf3d52/django-envsettings-1.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "f147d0dc62451d296d8b851109ef534e", "sha256": "eaf2bf4db82d9c8495e860a657a459e0cdaf23faf825bef82ab37fd459843b0e" }, "downloads": -1, "filename": "django_envsettings-1.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f147d0dc62451d296d8b851109ef534e", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 13321, "upload_time": "2015-06-29T13:06:17", "url": "https://files.pythonhosted.org/packages/f6/a1/80ace5ac81382d7ec501ff9ea71bebb903fd548e5bb6d8b38680d60d35b4/django_envsettings-1.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "36cec294998e9dd4445bc5003cedcb07", "sha256": "4015d13fc20fe6cc9675cded2d6ecffc19cafb348c8e571c82392b94b72a750b" }, "downloads": -1, "filename": "django-envsettings-1.0.1.tar.gz", "has_sig": false, "md5_digest": "36cec294998e9dd4445bc5003cedcb07", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12606, "upload_time": "2015-06-29T13:06:05", "url": "https://files.pythonhosted.org/packages/36/ab/d27f3a5640a644cc6bebc621e7f40cb64aacdde5c49ad0e9f54c3b1cb22d/django-envsettings-1.0.1.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "5d26f025d5d987bb89cdc82efdafe394", "sha256": "0cbb5cd65bcb818a930a9f3e7641ac8be44f1cbc2952cbf0ec101f9ee29b1dd6" }, "downloads": -1, "filename": "django_envsettings-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5d26f025d5d987bb89cdc82efdafe394", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 13273, "upload_time": "2015-08-20T15:07:26", "url": "https://files.pythonhosted.org/packages/fb/55/2ad6e0cacf14b188051664f60bc3a23adcf5fffda220c0e5c269b7c97fde/django_envsettings-1.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0ea79eb75b08245e084f13e673fb729f", "sha256": "ea1c1a406f261e9747a872e73771a615ee0c3f53e910346f273e85ed1bfa7c66" }, "downloads": -1, "filename": "django-envsettings-1.1.0.tar.gz", "has_sig": false, "md5_digest": "0ea79eb75b08245e084f13e673fb729f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12571, "upload_time": "2015-08-20T15:07:08", "url": "https://files.pythonhosted.org/packages/fd/0c/f66f09a389b0434f40cb8904596ee2c79c6f2ee14c68283336464f7df0b8/django-envsettings-1.1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5d26f025d5d987bb89cdc82efdafe394", "sha256": "0cbb5cd65bcb818a930a9f3e7641ac8be44f1cbc2952cbf0ec101f9ee29b1dd6" }, "downloads": -1, "filename": "django_envsettings-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5d26f025d5d987bb89cdc82efdafe394", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 13273, "upload_time": "2015-08-20T15:07:26", "url": "https://files.pythonhosted.org/packages/fb/55/2ad6e0cacf14b188051664f60bc3a23adcf5fffda220c0e5c269b7c97fde/django_envsettings-1.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0ea79eb75b08245e084f13e673fb729f", "sha256": "ea1c1a406f261e9747a872e73771a615ee0c3f53e910346f273e85ed1bfa7c66" }, "downloads": -1, "filename": "django-envsettings-1.1.0.tar.gz", "has_sig": false, "md5_digest": "0ea79eb75b08245e084f13e673fb729f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12571, "upload_time": "2015-08-20T15:07:08", "url": "https://files.pythonhosted.org/packages/fd/0c/f66f09a389b0434f40cb8904596ee2c79c6f2ee14c68283336464f7df0b8/django-envsettings-1.1.0.tar.gz" } ] }