{ "info": { "author": "Steven Loria", "author_email": "sloria1@gmail.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "# environs: simplified environment variable parsing\n\n[![Latest version](https://badgen.net/pypi/v/environs)](https://pypi.org/project/environs/)\n[![Build Status](https://dev.azure.com/sloria/sloria/_apis/build/status/sloria.environs?branchName=master)](https://dev.azure.com/sloria/sloria/_build/latest?definitionId=12&branchName=master)\n[![marshmallow 2/3 compatible](https://badgen.net/badge/marshmallow/2,3?list=1)](https://marshmallow.readthedocs.io/en/latest/upgrading.html)\n[![Black code style](https://badgen.net/badge/code%20style/black/000)](https://github.com/ambv/black)\n\n**environs** is a Python library for parsing environment variables.\nIt allows you to store configuration separate from your code, as per\n[The Twelve-Factor App](https://12factor.net/config) methodology.\n\n## Contents\n\n- [Features](#features)\n- [Install](#install)\n- [Basic usage](#basic-usage)\n- [Supported types](#supported-types)\n- [Reading .env files](#reading-env-files)\n - [Reading a specific file](#reading-a-specific-file)\n- [Handling prefixes](#handling-prefixes)\n- [Proxied variables](#proxied-variables)\n- [Validation](#validation)\n- [Serialization](#serialization)\n- [Defining custom parser behavior](#defining-custom-parser-behavior)\n- [Usage with Flask](#usage-with-flask)\n- [Usage with Django](#usage-with-django)\n- [Why...?](#why)\n - [Why envvars?](#why-envvars)\n - [Why not os.environ?](#why-not-osenviron)\n - [Why another library?](#why-another-library)\n- [License](#license)\n\n## Features\n\n- Type-casting\n- Read `.env` files into `os.environ` (useful for local development)\n- Validation\n- Define custom parser behavior\n- Framework-agnostic, but integrates well with [Flask](#usage-with-flask) and [Django](#usage-with-django)\n\n## Install\n\n pip install environs\n\n## Basic usage\n\nWith some environment variables set...\n\n```bash\nexport GITHUB_USER=sloria\nexport MAX_CONNECTIONS=100\nexport SHIP_DATE='1984-06-25'\nexport TTL=42\nexport ENABLE_LOGIN=true\nexport GITHUB_REPOS=webargs,konch,ped\nexport COORDINATES=23.3,50.0\nexport LOG_LEVEL=DEBUG\n```\n\nParse them with environs...\n\n```python\nfrom environs import Env\n\nenv = Env()\nenv.read_env() # read .env file, if it exists\n# required variables\ngh_user = env(\"GITHUB_USER\") # => 'sloria'\nsecret = env(\"SECRET\") # => raises error if not set\n\n# casting\nmax_connections = env.int(\"MAX_CONNECTIONS\") # => 100\nship_date = env.date(\"SHIP_DATE\") # => datetime.date(1984, 6, 25)\nttl = env.timedelta(\"TTL\") # => datetime.timedelta(0, 42)\nlog_level = env.log_level(\"LOG_LEVEL\") # => logging.DEBUG\n\n# providing a default value\nenable_login = env.bool(\"ENABLE_LOGIN\", False) # => True\nenable_feature_x = env.bool(\"ENABLE_FEATURE_X\", False) # => False\n\n# parsing lists\ngh_repos = env.list(\"GITHUB_REPOS\") # => ['webargs', 'konch', 'ped']\ncoords = env.list(\"COORDINATES\", subcast=float) # => [23.3, 50.0]\n```\n\n## Supported types\n\nThe following are all type-casting methods of `Env`:\n\n- `env.str`\n- `env.bool`\n- `env.int`\n- `env.float`\n- `env.decimal`\n- `env.list` (accepts optional `subcast` keyword argument)\n- `env.dict` (accepts optional `subcast` keyword argument)\n- `env.json`\n- `env.datetime`\n- `env.date`\n- `env.timedelta` (assumes value is an integer in seconds)\n- `env.url`\n- `env.uuid`\n- `env.log_level`\n- `env.path` (casts to a [`pathlib.Path`](https://docs.python.org/3/library/pathlib.html))\n\n## Reading `.env` files\n\n```bash\n# .env\nDEBUG=true\nPORT=4567\n```\n\nCall `Env.read_env` before parsing variables.\n\n```python\nfrom environs import Env\n\nenv = Env()\n# Read .env into os.environ\nenv.read_env()\n\nenv.bool(\"DEBUG\") # => True\nenv.int(\"PORT\") # => 4567\n```\n\n### Reading a specific file\n\nBy default, `Env.read_env` will look for a `.env` file in current\ndirectory and (if no .env exists in the CWD) recurse\nupwards until a `.env` file is found.\n\nYou can also read a specific file:\n\n```python\nfrom environs import Env\n\nwith open(\".env.test\", \"w\") as fobj:\n fobj.write(\"A=foo\\n\")\n fobj.write(\"B=123\\n\")\n\nenv = Env()\nenv.read_env(\".env.test\", recurse=False)\n\nassert env(\"A\") == \"foo\"\nassert env.int(\"B\") == 123\n```\n\n## Handling prefixes\n\n```python\n# export MYAPP_HOST=lolcathost\n# export MYAPP_PORT=3000\n\nwith env.prefixed(\"MYAPP_\"):\n host = env(\"HOST\", \"localhost\") # => 'lolcathost'\n port = env.int(\"PORT\", 5000) # => 3000\n\n# nested prefixes are also supported:\n\n# export MYAPP_DB_HOST=lolcathost\n# export MYAPP_DB_PORT=10101\n\nwith env.prefixed(\"MYAPP_\"):\n with env.prefixed(\"DB_\"):\n db_host = env(\"HOST\", \"lolcathost\")\n db_port = env.int(\"PORT\", 10101)\n```\n\n## Proxied variables\n\n```python\n# export MAILGUN_LOGIN=sloria\n# export SMTP_LOGIN={{MAILGUN_LOGIN}}\n\nsmtp_login = env(\"SMTP_LOGIN\") # =>'sloria'\n```\n\n## Validation\n\n```python\n# export TTL=-2\n# export NODE_ENV='invalid'\n# export EMAIL='^_^'\n\n\n# simple validator\nenv.int(\"TTL\", validate=lambda n: n > 0)\n# => Environment variable \"TTL\" invalid: ['Invalid value.']\n\n# using marshmallow validators\nfrom marshmallow.validate import OneOf\n\nenv.str(\n \"NODE_ENV\",\n validate=OneOf(\n [\"production\", \"development\"], error=\"NODE_ENV must be one of: {choices}\"\n ),\n)\n# => Environment variable \"NODE_ENV\" invalid: ['NODE_ENV must be one of: production, development']\n\n# multiple validators\nfrom marshmallow.validate import Length, Email\n\nenv.str(\"EMAIL\", validate=[Length(min=4), Email()])\n# => Environment variable \"EMAIL\" invalid: ['Shorter than minimum length 4.', 'Not a valid email address.']\n```\n\n## Serialization\n\n```python\n# serialize to a dictionary of simple types (numbers and strings)\nenv.dump()\n# {'COORDINATES': [23.3, 50.0],\n# 'ENABLE_FEATURE_X': False,\n# 'ENABLE_LOGIN': True,\n# 'GITHUB_REPOS': ['webargs', 'konch', 'ped'],\n# 'GITHUB_USER': 'sloria',\n# 'MAX_CONNECTIONS': 100,\n# 'MYAPP_HOST': 'lolcathost',\n# 'MYAPP_PORT': 3000,\n# 'SHIP_DATE': '1984-06-25',\n# 'TTL': 42}\n```\n\n## Defining custom parser behavior\n\n```python\n# export DOMAIN='http://myapp.com'\n# export COLOR=invalid\n\nfrom furl import furl\n\n# Register a new parser method for paths\n@env.parser_for(\"furl\")\ndef furl_parser(value):\n return furl(value)\n\n\ndomain = env.furl(\"DOMAIN\") # => furl('https://myapp.com')\n\n\n# Custom parsers can take extra keyword arguments\n@env.parser_for(\"enum\")\ndef enum_parser(value, choices):\n if value not in choices:\n raise environs.EnvError(\"Invalid!\")\n return value\n\n\ncolor = env.enum(\"COLOR\", choices=[\"black\"]) # => raises EnvError\n```\n\n## Usage with Flask\n\n```python\n# myapp/settings.py\n\nfrom environs import Env\n\nenv = Env()\nenv.read_env()\n\n# Override in .env for local development\nDEBUG = env.bool(\"FLASK_DEBUG\", default=False)\n# SECRET_KEY is required\nSECRET_KEY = env.str(\"SECRET_KEY\")\n```\n\nLoad the configuration after you initialize your app.\n\n```python\n# myapp/app.py\n\nfrom flask import Flask\n\napp = Flask(__name__)\napp.config.from_object(\"myapp.settings\")\n```\n\nFor local development, use a `.env` file to override the default\nconfiguration.\n\n```bash\n# .env\nDEBUG=true\nSECRET_KEY=\"not so secret\"\n```\n\nNote: Because environs depends on [python-dotenv](https://github.com/theskumar/python-dotenv),\nthe `flask` CLI will automatically read .env and .flaskenv files.\n\n## Usage with Django\n\nenvirons includes a number of helpers for parsing connection URLs. To\ninstall environs with django support: :\n\n pip install environs[django]\n\nUse `env.dj_db_url` and `env.dj_email_url` to parse the `DATABASE_URL`\nand `EMAIL_URL` environment variables, respectively.\n\n```python\n# myproject/settings.py\nfrom environs import Env\n\nenv = Env()\nenv.read_env()\n\n# Override in .env for local development\nDEBUG = env.bool(\"DEBUG\", default=False)\n# SECRET_KEY is required\nSECRET_KEY = env.str(\"SECRET_KEY\")\n\n# Parse database URLs, e.g. \"postgres://localhost:5432/mydb\"\nDATABASES = {\"default\": env.dj_db_url(\"DATABASE_URL\")}\n\n# Parse email URLs, e.g. \"smtp://\"\nemail = env.dj_email_url(\"EMAIL_URL\", default=\"smtp://\")\nEMAIL_HOST = email[\"EMAIL_HOST\"]\nEMAIL_PORT = email[\"EMAIL_PORT\"]\nEMAIL_HOST_PASSWORD = email[\"EMAIL_HOST_PASSWORD\"]\nEMAIL_HOST_USER = email[\"EMAIL_HOST_USER\"]\nEMAIL_USE_TLS = email[\"EMAIL_USE_TLS\"]\n```\n\nFor local development, use a `.env` file to override the default\nconfiguration.\n\n```bash\n# .env\nDEBUG=true\nSECRET_KEY=\"not so secret\"\n```\n\nFor a more complete example, see\n[django_example.py](https://github.com/sloria/environs/blob/master/examples/django_example.py)\nin the `examples/` directory.\n\n## Why\\...?\n\n### Why envvars?\n\nSee [The 12-factor App](http://12factor.net/config) section on\n[configuration](http://12factor.net/config).\n\n### Why not `os.environ`?\n\nWhile `os.environ` is enough for simple use cases, a typical application\nwill need a way to manipulate and validate raw environment variables.\nenvirons abstracts common tasks for handling environment variables.\n\nenvirons will help you\n\n- cast envvars to the correct type\n- specify required envvars\n- define default values\n- validate envvars\n- parse list and dict values\n- parse dates, datetimes, and timedeltas\n- parse proxied variables\n- serialize your configuration to JSON, YAML, etc.\n\n### Why another library?\n\nThere are many great Python libraries for parsing environment variables.\nIn fact, most of the credit for environs\\' public API goes to the\nauthors of [envparse](https://github.com/rconradharris/envparse) and\n[django-environ](https://github.com/joke2k/django-environ).\n\nenvirons aims to meet three additional goals:\n\n1. Make it easy to extend parsing behavior and develop plugins.\n2. Leverage the deserialization and validation functionality provided\n by a separate library (marshmallow).\n3. Clean up redundant API.\n\nSee [this GitHub\nissue](https://github.com/rconradharris/envparse/issues/12#issue-151036722)\nwhich details specific differences with envparse.\n\n## License\n\nMIT licensed. See the\n[LICENSE](https://github.com/sloria/environs/blob/master/LICENSE) file\nfor more details.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/sloria/environs", "keywords": "environment variables parsing config configuration 12factor envvars", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "environs", "package_url": "https://pypi.org/project/environs/", "platform": "", "project_url": "https://pypi.org/project/environs/", "project_urls": { "Changelog": "https://github.com/sloria/environs/blob/master/CHANGELOG.md", "Homepage": "https://github.com/sloria/environs", "Issues": "https://github.com/sloria/environs/issues" }, "release_url": "https://pypi.org/project/environs/6.0.0/", "requires_dist": [ "marshmallow (>=2.7.0)", "python-dotenv", "pytest ; extra == 'dev'", "dj-database-url ; extra == 'dev'", "dj-email-url ; extra == 'dev'", "flake8 (==3.7.8) ; extra == 'dev'", "flake8-bugbear (==19.8.0) ; extra == 'dev'", "pre-commit (~=1.18) ; extra == 'dev'", "tox ; extra == 'dev'", "dj-database-url ; extra == 'django'", "dj-email-url ; extra == 'django'", "flake8 (==3.7.8) ; extra == 'lint'", "flake8-bugbear (==19.8.0) ; extra == 'lint'", "pre-commit (~=1.18) ; extra == 'lint'", "pytest ; extra == 'tests'", "dj-database-url ; extra == 'tests'", "dj-email-url ; extra == 'tests'" ], "requires_python": ">=3.5", "summary": "simplified environment variable parsing", "version": "6.0.0" }, "last_serial": 5870043, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "4c3c8fe76ffbe37b540f132c0104af8f", "sha256": "2c9c0854d38998f9807789083c8983d8f63f25e1795e6ea4e5110713db0ca293" }, "downloads": -1, "filename": "environs-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4c3c8fe76ffbe37b540f132c0104af8f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8898, "upload_time": "2016-04-26T03:09:54", "url": "https://files.pythonhosted.org/packages/c7/8b/1792bed4bb0c18bdfbb23e226fe79935deb6418dd4c546d7e9f35d892f98/environs-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d46bcc673e7f483613082e410db09eb3", "sha256": "63d7378016a2886790c8460977c28ecdeb32bd6b73b52a0b269ee0477d6ac518" }, "downloads": -1, "filename": "environs-0.1.0.tar.gz", "has_sig": false, "md5_digest": "d46bcc673e7f483613082e410db09eb3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6494, "upload_time": "2016-04-26T03:10:04", "url": "https://files.pythonhosted.org/packages/66/1b/4c7b79b0c83bfa66e2eb87eb074b51bf4cd23fb8685cb6cc68c4114fff9f/environs-0.1.0.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "b519b4a72c3b52d4b175238f557fe8b4", "sha256": "31ef494fefeed80f50855440d61b7d5d3f38affb081ac896b6a32388778865ac" }, "downloads": -1, "filename": "environs-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b519b4a72c3b52d4b175238f557fe8b4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9850, "upload_time": "2016-04-30T18:14:25", "url": "https://files.pythonhosted.org/packages/cd/6b/6bfa4aec4a154191cc4f38b88acc9d0c1618ff637a594cfe301e2da01f0f/environs-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9d6ac4308a9589fcfc89450673fb85c1", "sha256": "d6ab6f8da0dee6957ac0ab7976f067c74a20d27b4355ec5a7d530fdc58c9def0" }, "downloads": -1, "filename": "environs-1.0.0.tar.gz", "has_sig": false, "md5_digest": "9d6ac4308a9589fcfc89450673fb85c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7042, "upload_time": "2016-04-30T18:14:29", "url": "https://files.pythonhosted.org/packages/fb/7a/7a0914689b3c6fc17192dea440e1ce3b0d1cf45da68118e293d6bceae945/environs-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "51be50f4080738b60cc702fa65f363ea", "sha256": "7ed77b03c8c78bb2de51831955a1df14c090fccad994c2dea8815c740aea982e" }, "downloads": -1, "filename": "environs-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "51be50f4080738b60cc702fa65f363ea", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10053, "upload_time": "2016-05-01T16:53:33", "url": "https://files.pythonhosted.org/packages/ec/9c/ba2f8c58e4fb95e4c652995a02d59d0ad11c20617f4f78adce071d57c4ae/environs-1.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "53b9f6a9b595cf8487001de5dcc2a56d", "sha256": "56ce3ecd347173f586049f1d3340944c42c22bedd0187ec6d9368f8df16643e8" }, "downloads": -1, "filename": "environs-1.1.0.tar.gz", "has_sig": false, "md5_digest": "53b9f6a9b595cf8487001de5dcc2a56d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7201, "upload_time": "2016-05-01T16:53:45", "url": "https://files.pythonhosted.org/packages/04/df/54487d01ee4a9822d910b54e26d8acd011b45bc1009127b2d12f53760e01/environs-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "9f61dc0e3274c621deaed971645fa24c", "sha256": "0a84784584f25db5bdd73c95d639c1bc0ee63f56868fa9c7d5d1174ad7311c52" }, "downloads": -1, "filename": "environs-1.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9f61dc0e3274c621deaed971645fa24c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10679, "upload_time": "2017-01-13T03:39:40", "url": "https://files.pythonhosted.org/packages/40/4c/133c5ae4292340dbec82302a1cc83d81d3206b8906a3fc30405302088483/environs-1.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ac2b1f2e44afe8c5ea3193960041c875", "sha256": "83148e19fab8c2ad1a85def17a86b2a88e4c0864335529a60b20916ab9c9d222" }, "downloads": -1, "filename": "environs-1.2.0.tar.gz", "has_sig": false, "md5_digest": "ac2b1f2e44afe8c5ea3193960041c875", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7722, "upload_time": "2017-01-13T03:39:42", "url": "https://files.pythonhosted.org/packages/3f/3b/2fe0ab4e0f9a01f755fe8f120c79d62e6eca547da866a30eafaa1093df31/environs-1.2.0.tar.gz" } ], "2.0.0.post0": [ { "comment_text": "", "digests": { "md5": "b21b7f367d9f9039dab3aefd9395da7b", "sha256": "96bdb52df61e5e9a3579d4744fe7b9a0aa71e03cbaa6817b09044948dbb9456e" }, "downloads": -1, "filename": "environs-2.0.0.post0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b21b7f367d9f9039dab3aefd9395da7b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11101, "upload_time": "2018-01-05T02:11:57", "url": "https://files.pythonhosted.org/packages/af/4a/ac863771a148a378beb6b9bf391f04fb9c1b2f75e094adb29667fa1b94bf/environs-2.0.0.post0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1d5be42b304bcef2a688f1f082e2bdec", "sha256": "09cdc0139bb9dcfc89bbd3b516fa1a743f46a2891c45862eaa7d819c6ad02e04" }, "downloads": -1, "filename": "environs-2.0.0.post0.tar.gz", "has_sig": false, "md5_digest": "1d5be42b304bcef2a688f1f082e2bdec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9195, "upload_time": "2018-01-05T02:11:59", "url": "https://files.pythonhosted.org/packages/57/6a/978d902aa08403de2f89c49fe822953fbe46fd30625eb2ac9d173528794d/environs-2.0.0.post0.tar.gz" } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "16475f9bb60d9a7371852be8841a9571", "sha256": "3c1f5feaa3dec977d60bd0f8430e0995fe30fc3224ac61e37fefcf2a745e89ba" }, "downloads": -1, "filename": "environs-2.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "16475f9bb60d9a7371852be8841a9571", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11169, "upload_time": "2018-01-25T05:04:39", "url": "https://files.pythonhosted.org/packages/81/7b/416b858cf8b201ca67628ae40472c4572ef096615fd0b6c9c903dbabc2bf/environs-2.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f0a7019637b77f54cfacbad09da7e588", "sha256": "eb635ed165a35cf626ac0d88b0fc32b135d6c7e9b4e311d87c216246e9db256f" }, "downloads": -1, "filename": "environs-2.1.0.tar.gz", "has_sig": false, "md5_digest": "f0a7019637b77f54cfacbad09da7e588", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9346, "upload_time": "2018-01-25T05:04:40", "url": "https://files.pythonhosted.org/packages/02/9a/a0dfc5165d4a6b71ad9b3c9b7038c49f3c4f7c6524a4d73f251148ea8083/environs-2.1.0.tar.gz" } ], "2.1.1": [ { "comment_text": "", "digests": { "md5": "a73ae64a57285922762ea2be3359d244", "sha256": "1bc48a432ab646196910e84d883a681799b46f3c66775b378e380c24588cd51b" }, "downloads": -1, "filename": "environs-2.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a73ae64a57285922762ea2be3359d244", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7219, "upload_time": "2018-05-21T12:23:51", "url": "https://files.pythonhosted.org/packages/38/63/d1d535ef317818e96f762242fc7b1471038cca0c66b81bd8984c1892c2be/environs-2.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "11bc0f5e0bef22f5177256adf1479918", "sha256": "e6b624a918a1c0f5d92b8a34e1ca4359bc87238d4e5ce038614864fbf5eb6ee3" }, "downloads": -1, "filename": "environs-2.1.1.tar.gz", "has_sig": false, "md5_digest": "11bc0f5e0bef22f5177256adf1479918", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9566, "upload_time": "2018-05-21T12:23:52", "url": "https://files.pythonhosted.org/packages/48/61/3dca8b78d6c25c6417390e002cc70696b47de4fdc173a50d40510012bbb6/environs-2.1.1.tar.gz" } ], "3.0.0": [ { "comment_text": "", "digests": { "md5": "559a34eee408e0884fde4caf03aca209", "sha256": "a454ad7fb374dfafce4ba3a1b398cfcb1ccd72becc9cf6ab33c3b62b6e7b4fd4" }, "downloads": -1, "filename": "environs-3.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "559a34eee408e0884fde4caf03aca209", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8086, "upload_time": "2018-08-05T22:26:13", "url": "https://files.pythonhosted.org/packages/66/41/2a81156af48797b8a926480c53ce7eeec0e3c41027d43f252be5b483f814/environs-3.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a4ca3e63d8838d88b59c4138b493b629", "sha256": "3cb0f9bad06efc644aab2029590e619878713960390d9b51d291acf27ddf7034" }, "downloads": -1, "filename": "environs-3.0.0.tar.gz", "has_sig": false, "md5_digest": "a4ca3e63d8838d88b59c4138b493b629", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10877, "upload_time": "2018-08-05T22:26:14", "url": "https://files.pythonhosted.org/packages/00/ac/2dd9b6fd7bacd269d47278fbecd6a463951dde9a9937881fdd8eae3a5e25/environs-3.0.0.tar.gz" } ], "4.0.0": [ { "comment_text": "", "digests": { "md5": "d60a5ea9ea504c563fc7baa90240db5a", "sha256": "11bbc9bf031069a6a877ba021080738bf920e913b9142f3507d07aaac392f261" }, "downloads": -1, "filename": "environs-4.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d60a5ea9ea504c563fc7baa90240db5a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7868, "upload_time": "2018-08-07T00:41:00", "url": "https://files.pythonhosted.org/packages/64/19/c1b8df73d2b2e4c704e65e1ec1423714f10cf2bf5489e7dac724eda62218/environs-4.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f00075d02c756e6367b8cf4eb5de0f69", "sha256": "f7a34a7361927dc1457565ccafe2d11b371fba4ea3322a7d015e462da9a9c2d4" }, "downloads": -1, "filename": "environs-4.0.0.tar.gz", "has_sig": false, "md5_digest": "f00075d02c756e6367b8cf4eb5de0f69", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10889, "upload_time": "2018-08-07T00:41:01", "url": "https://files.pythonhosted.org/packages/af/16/d3cb1b24ce42689c40cf06c332e6d9405ab012fdef111d6a1088c5e25bb2/environs-4.0.0.tar.gz" } ], "4.1.0": [ { "comment_text": "", "digests": { "md5": "ac1ae1597130ba2bb11c5bb7c4ff29d5", "sha256": "9b752da76f3d470dea21b7abfe44a836c775bbb3ca50f50bfc4b188c49ac633a" }, "downloads": -1, "filename": "environs-4.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ac1ae1597130ba2bb11c5bb7c4ff29d5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8703, "upload_time": "2018-12-11T00:01:47", "url": "https://files.pythonhosted.org/packages/1a/cf/266e7875e981a8096500bd8b4858816d482715a7579f3e6501504f036635/environs-4.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "eedfab57e8c8011c041378f6f43388d5", "sha256": "a69695630145bf559baedd1ac99312abd27cca55cbc1dca7f7a6a2bae7e1570c" }, "downloads": -1, "filename": "environs-4.1.0.tar.gz", "has_sig": false, "md5_digest": "eedfab57e8c8011c041378f6f43388d5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10372, "upload_time": "2018-12-11T00:01:48", "url": "https://files.pythonhosted.org/packages/cf/eb/395628422bf447fddffabc5208ffd472fea9c0144960f7acd1f894c53d5d/environs-4.1.0.tar.gz" } ], "4.1.1": [ { "comment_text": "", "digests": { "md5": "7361153d94839c84b5d2a8b5f713a387", "sha256": "aff345e40a47f181b9e50683b652ae29f029efcd0f9bbf28b74798de354da323" }, "downloads": -1, "filename": "environs-4.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7361153d94839c84b5d2a8b5f713a387", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8970, "upload_time": "2019-05-04T16:19:33", "url": "https://files.pythonhosted.org/packages/65/47/cd40c6ed1d1a29a70d12c0668780780a455ef122df91a282401787eed4a9/environs-4.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c8be3315dda794420f36207ba847be0b", "sha256": "281f1940ee5979d216379c609853492000c0cbfa47382b9fb2a899d7a33392bd" }, "downloads": -1, "filename": "environs-4.1.1.tar.gz", "has_sig": false, "md5_digest": "c8be3315dda794420f36207ba847be0b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12576, "upload_time": "2019-05-04T16:19:35", "url": "https://files.pythonhosted.org/packages/fd/b7/e8b5bdc6ed46dec9c22b978d58d827aee516c3d939df869315173a28c616/environs-4.1.1.tar.gz" } ], "4.1.2": [ { "comment_text": "", "digests": { "md5": "bf006de2e4e1f2653d4e5241673f29d9", "sha256": "e648294307d48377fe96c87bfc7d62a3a61a17099b646eb557bfa02968628ec1" }, "downloads": -1, "filename": "environs-4.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bf006de2e4e1f2653d4e5241673f29d9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8971, "upload_time": "2019-05-05T22:12:23", "url": "https://files.pythonhosted.org/packages/ed/76/a8677fb10a0b758536415a7318189b09691466bc9627d7b2afcab4cfd882/environs-4.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b9b331a3c63de2405df158a26e8231bd", "sha256": "b33428c8fa68cf8a44ff45baf1934ac9b8882074464a5c033aa8dce9231a7518" }, "downloads": -1, "filename": "environs-4.1.2.tar.gz", "has_sig": false, "md5_digest": "b9b331a3c63de2405df158a26e8231bd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12589, "upload_time": "2019-05-05T22:12:24", "url": "https://files.pythonhosted.org/packages/c5/82/a820064fea89b003812c6c2321199063d13118c0e7de1142fde083df4cd7/environs-4.1.2.tar.gz" } ], "4.1.3": [ { "comment_text": "", "digests": { "md5": "c23062d762175a32dcfbb8be151cf266", "sha256": "1b2c326abd06f47a26686a3cee00ee2266dc065f37cbbba2edb6c31c30cd524f" }, "downloads": -1, "filename": "environs-4.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c23062d762175a32dcfbb8be151cf266", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9203, "upload_time": "2019-05-16T03:26:35", "url": "https://files.pythonhosted.org/packages/34/34/a7afc519df068da609019d13da9df2959c7c9d7930a80f1105c04e995a41/environs-4.1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8be849b4441b45d9e42643198318d7a0", "sha256": "f49132031384d37386d4e229310473c081bbeb389b65fbb118d91b63f1a1ac5f" }, "downloads": -1, "filename": "environs-4.1.3.tar.gz", "has_sig": false, "md5_digest": "8be849b4441b45d9e42643198318d7a0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12997, "upload_time": "2019-05-16T03:26:37", "url": "https://files.pythonhosted.org/packages/ba/4c/17cf6ee508ff6ecb1f7a32990687c214c271884a75545f859860a2a4170e/environs-4.1.3.tar.gz" } ], "4.2.0": [ { "comment_text": "", "digests": { "md5": "298fafbe1e335facf971fb080dcfc4c8", "sha256": "ec8c5ddd044a8ed1190cbef50ba0eef277057946b96eae457afd865c38d9e8c5" }, "downloads": -1, "filename": "environs-4.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "298fafbe1e335facf971fb080dcfc4c8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9267, "upload_time": "2019-06-01T20:42:51", "url": "https://files.pythonhosted.org/packages/8c/37/96b1f8a135706023787310b84d198f77acc1540c90819eb40aa0f046e9bc/environs-4.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6d967c89d9cc7291edebe50c9766d070", "sha256": "9d83321a32e29c963f199bf118d9dae199b42ab22b247b11d909b0d203e068bf" }, "downloads": -1, "filename": "environs-4.2.0.tar.gz", "has_sig": false, "md5_digest": "6d967c89d9cc7291edebe50c9766d070", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13123, "upload_time": "2019-06-01T20:42:53", "url": "https://files.pythonhosted.org/packages/f6/59/6fc37b0c0c919c40da9c985a0d70adab2e803d4fe8f82a9ee022268f476c/environs-4.2.0.tar.gz" } ], "5.0.0": [ { "comment_text": "", "digests": { "md5": "3bc7e5444014a1df50fb1e87ca89230e", "sha256": "db5b30d9d83ad3838064af3efc3079e1f0c0f2ae4c7f76de2825b5086260696e" }, "downloads": -1, "filename": "environs-5.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3bc7e5444014a1df50fb1e87ca89230e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5", "size": 9485, "upload_time": "2019-07-06T20:19:30", "url": "https://files.pythonhosted.org/packages/81/a5/40ccaa6dddd8290e887995470aca234df05f14a51fcc06b6298105ab78d9/environs-5.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f0bae298dcb57b67c2c65dcf3a472b80", "sha256": "bba29e299e0eb674dd2dbc03ab6d268bad7f2772646befa71117ebb1ab04e023" }, "downloads": -1, "filename": "environs-5.0.0.tar.gz", "has_sig": false, "md5_digest": "f0bae298dcb57b67c2c65dcf3a472b80", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 12004, "upload_time": "2019-07-06T20:19:31", "url": "https://files.pythonhosted.org/packages/f6/c5/29b5a1e67527a2390478bf1b3f35e107f6325ec642173380868825fe7aab/environs-5.0.0.tar.gz" } ], "5.1.0": [ { "comment_text": "", "digests": { "md5": "74ec526c97603feb31247402391fcfcf", "sha256": "fd851b5bf85bd40473e8cf86ef26667df2f37e8f05289bca2f0032c3bb400b62" }, "downloads": -1, "filename": "environs-5.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "74ec526c97603feb31247402391fcfcf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5", "size": 9719, "upload_time": "2019-07-13T20:09:24", "url": "https://files.pythonhosted.org/packages/b6/87/71312f3eb393f62745b46ec5fac61f8c3a3f4ca3ec4c3d5a45c68d5c9d57/environs-5.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0f74ef209ed4f8261a22bdb60df9ffb3", "sha256": "38195f6ba08c089d94b3840b9e67aa5be3f3499fa5473d6384c1a2eb26817d8c" }, "downloads": -1, "filename": "environs-5.1.0.tar.gz", "has_sig": false, "md5_digest": "0f74ef209ed4f8261a22bdb60df9ffb3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 12337, "upload_time": "2019-07-13T20:09:25", "url": "https://files.pythonhosted.org/packages/5f/7d/f28735ae9fff0eb46e68254a07347b40c1c1a0e7c2b7d414b293a48de96b/environs-5.1.0.tar.gz" } ], "5.2.0": [ { "comment_text": "", "digests": { "md5": "f6bb82f4ef6b10af7fc034991905cc65", "sha256": "59a24b9619e225c0da784ccfd13ae7763a3889bb53eb7e6fb5689290a731183f" }, "downloads": -1, "filename": "environs-5.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f6bb82f4ef6b10af7fc034991905cc65", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5", "size": 9778, "upload_time": "2019-07-24T03:49:22", "url": "https://files.pythonhosted.org/packages/76/5d/c87984ebf2f652d9f38d800c5a29c36808368576563f5ab41f46c5b4c3da/environs-5.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "85ca9a15ae5bc6446a6277c94be7e971", "sha256": "045eb19ebe73604546d0c6c0c050c73c72be34c51c19994856c7b388d9ac3439" }, "downloads": -1, "filename": "environs-5.2.0.tar.gz", "has_sig": false, "md5_digest": "85ca9a15ae5bc6446a6277c94be7e971", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 12397, "upload_time": "2019-07-24T03:49:23", "url": "https://files.pythonhosted.org/packages/f1/ca/9e3c8ea417d0b022a92f8dcf23243e0c3d00424fa85fcb3edb2497217d5c/environs-5.2.0.tar.gz" } ], "5.2.1": [ { "comment_text": "", "digests": { "md5": "9d6642d3c4dd6c00e97b82ad426141f8", "sha256": "ab4362c638aa67177a832aedf1609a95b46179ea9f5b1af8c90cbfe70ca7e6cf" }, "downloads": -1, "filename": "environs-5.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9d6642d3c4dd6c00e97b82ad426141f8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5", "size": 9829, "upload_time": "2019-08-08T12:50:14", "url": "https://files.pythonhosted.org/packages/5f/c9/6b576b8b374dfe78d9435988e6a53497822f31b9da5bdd446343ad1a4d1b/environs-5.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "988637ed88b45b59c32788e5e2d1f6c9", "sha256": "d92784bdeb6fe038688b19128b5d9a4d9eda4d33f1a38c21be8cad54c769a763" }, "downloads": -1, "filename": "environs-5.2.1.tar.gz", "has_sig": false, "md5_digest": "988637ed88b45b59c32788e5e2d1f6c9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 12504, "upload_time": "2019-08-08T12:50:15", "url": "https://files.pythonhosted.org/packages/a1/af/b0adfa7846ca81af0ea64e8a970f6e056a071e611cc03f8a23e4aa562680/environs-5.2.1.tar.gz" } ], "6.0.0": [ { "comment_text": "", "digests": { "md5": "1dfc13bbaf0b16b82bbdd56984a3a1c8", "sha256": "e0a6c53b05effbb7521374e564eb751ba2311bd36dcde2c7d914246175b8e02d" }, "downloads": -1, "filename": "environs-6.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1dfc13bbaf0b16b82bbdd56984a3a1c8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5", "size": 10011, "upload_time": "2019-09-22T19:06:14", "url": "https://files.pythonhosted.org/packages/fa/0d/dcd8c3c98eb7321f1b1ba68c385177a9b5071fd4ba57a9d893ef8b237572/environs-6.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5b179e8c0e8a5b07e0a36d82c76097e2", "sha256": "59bea3c982fbcc9d0755d160f67e725b70227ecbc14f7507ac81f484c6fd8334" }, "downloads": -1, "filename": "environs-6.0.0.tar.gz", "has_sig": false, "md5_digest": "5b179e8c0e8a5b07e0a36d82c76097e2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 13071, "upload_time": "2019-09-22T19:06:16", "url": "https://files.pythonhosted.org/packages/71/b9/2897b429b0767a2aa0ec28507e6e0882f24ce4e8089e9065eef792dd1393/environs-6.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1dfc13bbaf0b16b82bbdd56984a3a1c8", "sha256": "e0a6c53b05effbb7521374e564eb751ba2311bd36dcde2c7d914246175b8e02d" }, "downloads": -1, "filename": "environs-6.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1dfc13bbaf0b16b82bbdd56984a3a1c8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5", "size": 10011, "upload_time": "2019-09-22T19:06:14", "url": "https://files.pythonhosted.org/packages/fa/0d/dcd8c3c98eb7321f1b1ba68c385177a9b5071fd4ba57a9d893ef8b237572/environs-6.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5b179e8c0e8a5b07e0a36d82c76097e2", "sha256": "59bea3c982fbcc9d0755d160f67e725b70227ecbc14f7507ac81f484c6fd8334" }, "downloads": -1, "filename": "environs-6.0.0.tar.gz", "has_sig": false, "md5_digest": "5b179e8c0e8a5b07e0a36d82c76097e2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 13071, "upload_time": "2019-09-22T19:06:16", "url": "https://files.pythonhosted.org/packages/71/b9/2897b429b0767a2aa0ec28507e6e0882f24ce4e8089e9065eef792dd1393/environs-6.0.0.tar.gz" } ] }