{ "info": { "author": "", "author_email": "", "bugtrack_url": null, "classifiers": [ "Programming Language :: Python" ], "description": "# Effortless Config\n\n[![PyPI version](https://badge.fury.io/py/effortless-config.svg)](https://badge.fury.io/py/effortless-config) [![CircleCI](https://circleci.com/gh/andreasjansson/effortless-config/tree/master.svg?style=svg)](https://circleci.com/gh/andreasjansson/effortless-config/tree/master)\n\n_Globally scoped configuration with argparse integration._\n\n## Installation\n\n```\npip install effortless-config\n```\n\n## Rationale\n\n1. When building machine learning models, I often find myself with a file named `config.py` that has a bunch of global variables that I reference throughout the codebase.\n2. As the work progresses, I end up with _groups_ of specific configuration settings that correspond to specific experiments.\n3. I want to be able to select configuration group on the command line when I start an experiment.\n4. And I want to be able to override certain settings within that experiment, from the command line.\n\n## Basic usage\n\nFirst, define a class that extends `effortless_config.Config` and specify your default configuration values inside it:\n\n```python\nfrom effortless_config import Config\n\nclass config(Config): # lowercase \"c\" optional\n\n SOME_INTEGER_SETTING = 10\n FLOAT_SETTING = 0.5\n A_BOOLEAN = False\n MY_STRING_SETTING = 'foo'\n```\n\nThen you can refer to these settings elsewhere in your code base:\n\n```python\ndef main():\n print(f'SOME_INTEGER_SETTING is {config.SOME_INTEGER_SETTING}')\n print(f'FLOAT_SETTING is {config.FLOAT_SETTING}')\n print(f'A_BOOLEAN is {config.A_BOOLEAN}')\n print(f'MY_STRING_SETTING is {config.MY_STRING_SETTING}')\n```\n\nThe function `config.parse_args()` creates an [argparse](https://docs.python.org/3/library/argparse.html) parser from your configuration. If we put the two previous code snippets in a file called `basic_example.py` and finish it off with\n\n```python\nif __name__ == '__main__':\n config.parse_args()\n main()\n```\n\n...we can see the available settings with `-h/--help`:\n\n```console\n$ python basic_example.py --help\nusage: basic_example.py [-h] [--some-integer-setting SOME_INTEGER_SETTING]\n [--float-setting FLOAT_SETTING] [--a-boolean {true,false}]\n [--my-string-setting MY_STRING_SETTING]\n\noptional arguments:\n -h, --help show this help message and exit\n --some-integer-setting SOME_INTEGER_SETTING\n --float-setting FLOAT_SETTING\n --a-boolean {true,false}\n --my-string-setting MY_STRING_SETTING\n```\n\nWe can then override configuration settings from the command line:\n\n```console\n$ python basic_example.py\nSOME_INTEGER_SETTING is 10\nFLOAT_SETTING is 0.5\nA_BOOLEAN is False\nMY_STRING_SETTING is foo\n\n$ python basic_example.py --some-integer-setting 1000\nSOME_INTEGER_SETTING is 1000\nFLOAT_SETTING is 0.5\nA_BOOLEAN is False\nMY_STRING_SETTING is foo\n```\n\nList and dict type settings can be overridden by passing json strings from the command line, e.g.\n\n```console\n$ python lists_and_dicts.py --my-list='[1, 2, 3]' --my-dict='{\"foo\": 10, \"bar\": 20}'\n```\n\n## Using _groups_\n\nConfiguration _groups_ are families of settings that you want to tie together. For example, you might have some machine learning problem for which you have a large model and a small model, and you want to easily switch between the two models without having to specify all parameters on the command line every time.\n\nTo specify groups, use the `settings(...)` function:\n\n```python\nfrom effortless_config import Config, setting\n\nclass config(Config):\n groups = ['large', 'small']\n\n NUM_LAYERS = setting(default=5, large=10, small=3)\n NUM_UNITS = setting(default=128, large=512, small=32)\n USE_SKIP_CONNECTIONS = setting(default=True, small=False)\n LEARNING_RATE = 0.1\n OPTIMIZER = 'adam'\n```\n\n`setting(...)` has the signature:\n\n```python\ndef setting(default: T, **kwargs: T) -> T\n```\n\n...where `T` is `Union[int, float, str, bool, list, dict, NoneType]` and `kwargs` is a map from group names to values. Specifying parameters by value is shorthand for a `setting` with no groups, i.e. `SOME_KEY = 'value'` is equivalent to `SOME_KEY = setting(default='value')`.\n\nWhen using groups you must first define the group names using the `config.groups` list.\n\nThen in your code you can use these settings like in the basic example\n\n```python\ndef main():\n print(f'NUM_LAYERS is {config.NUM_LAYERS}')\n print(f'NUM_UNITS is {config.NUM_UNITS}')\n print(f'USE_SKIP_CONNECTIONS is {config.USE_SKIP_CONNECTIONS}')\n print(f'LEARNING_RATE is {config.LEARNING_RATE}')\n print(f'OPTIMIZER is {config.OPTIMIZER}')\n\n\nif __name__ == '__main__':\n config.parse_args()\n main()\n```\n\nNow we see an additional `--configuration` option when we ask for `--help`:\n\n```console\n$ python group_example.py --help\nusage: group_example.py [-h] [--configuration {default,large,small}]\n [--num-layers NUM_LAYERS] [--num-units NUM_UNITS]\n [--use-skip-connections {true,false}]\n [--learning-rate LEARNING_RATE] [--optimizer OPTIMIZER]\n\noptional arguments:\n -h, --help show this help message and exit\n --configuration {default,large,small}, -c {default,large,small}\n --num-layers NUM_LAYERS\n --num-units NUM_UNITS\n --use-skip-connections {true,false}\n --learning-rate LEARNING_RATE\n --optimizer OPTIMIZER\n```\n\nThe `--configuration` option specifies the configuration group, and defaults to `default` if omitted.\n\nFor example:\n\n```console\n$ python group_example.py\nNUM_LAYERS is 5\nNUM_UNITS is 128\nUSE_SKIP_CONNECTIONS is True\nLEARNING_RATE is 0.1\nOPTIMIZER is adam\n\n$ python group_example.py --configuration large\nNUM_LAYERS is 10\nNUM_UNITS is 512\nUSE_SKIP_CONNECTIONS is True\nLEARNING_RATE is 0.1\nOPTIMIZER is adam\n\n$ python group_example.py --configuration small\nNUM_LAYERS is 3\nNUM_UNITS is 32\nUSE_SKIP_CONNECTIONS is False\nLEARNING_RATE is 0.1\nOPTIMIZER is adam\n```\n\nWe can also override individual settings in conjunction with groups. Individual settings take precedence over the group setting:\n\n```console\n$ python group_example.py --configuration large --num-units 768\nNUM_LAYERS is 10\nNUM_UNITS is 768\nUSE_SKIP_CONNECTIONS is True\nLEARNING_RATE is 0.1\nOPTIMIZER is adam\n```\n\n## Testing\n\nWhen writing tests, you can use the `config.override` context manager to override individual settings:\n\n```python\nimport pytest\nfrom .config import config\n\ndef test_with_context_manager():\n with config.override(FLOAT_SETTING=0.8, A_BOOLEAN=True):\n assert config.FLOAT_SETTING * config.SOME_INTEGER_SETTING == 8\n assert config.A_BOOLEAN is True\n```\n\nThe `config.override` method can also be used without context management in conjunction with `config.reset_to_defaults`:\n\n```python\ndef test_with_manual_reset():\n config.override(FLOAT_SETTING=0.8, A_BOOLEAN=True)\n assert config.FLOAT_SETTING * config.SOME_INTEGER_SETTING == 8\n assert config.A_BOOLEAN is True\n config.reset_to_defaults()\n```\n\n---\n\nBtw, this has nothing to do with Chef's Effortless Config project, I forgot to google the name before I put it on pypi and now I guess I'm stuck with it.\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/andreasjansson/effortless-config", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "effortless-config", "package_url": "https://pypi.org/project/effortless-config/", "platform": "", "project_url": "https://pypi.org/project/effortless-config/", "project_urls": { "Homepage": "https://github.com/andreasjansson/effortless-config" }, "release_url": "https://pypi.org/project/effortless-config/0.6.1/", "requires_dist": null, "requires_python": ">=3.6", "summary": "Globally scoped configuration with argparse integration", "version": "0.6.1" }, "last_serial": 5577235, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "057b19a699927f63b78accee0487d5e2", "sha256": "16708b48ef0917b1fe592d801b694fa3b18fc2ed24bf6afe3e170756bddb0c49" }, "downloads": -1, "filename": "effortless_config-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "057b19a699927f63b78accee0487d5e2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 4994, "upload_time": "2019-07-06T04:21:19", "url": "https://files.pythonhosted.org/packages/4b/00/f2ec24132547d8abefd5f6df72ce43ef48974ff14ff9aedc1944ba0cb8c7/effortless_config-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bae7a24da5e78ba270c0e7cb26a1ed4a", "sha256": "cbb1ddebbe80eba2a68f0f3ded939f7825baf71799c4e3a1edbe7ee448669c4e" }, "downloads": -1, "filename": "effortless-config-0.1.0.tar.gz", "has_sig": false, "md5_digest": "bae7a24da5e78ba270c0e7cb26a1ed4a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4463, "upload_time": "2019-07-06T04:21:21", "url": "https://files.pythonhosted.org/packages/4d/22/49a0f396868cf0fda48c5d965ffbb7ee412420cad6fbfc9af1fbb0964f78/effortless-config-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "8100cffd611360c447b16e5ff7e51044", "sha256": "ffbdb24b3edc0d763c128dcdddecee991c1fe6424760c882172adb895b3b34a7" }, "downloads": -1, "filename": "effortless_config-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8100cffd611360c447b16e5ff7e51044", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 6562, "upload_time": "2019-07-06T04:25:00", "url": "https://files.pythonhosted.org/packages/0e/d0/9f3e23bb45f7644f90b7f156b81e9ac750853a54cae0ff7d7a16f93b2610/effortless_config-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0cf662dbbbc46ce8b0c2540c5f5cf930", "sha256": "bcdb6cbda6608c908f305302feeb922391f4cbc33ac3c8a3012f1b2ca45f78b4" }, "downloads": -1, "filename": "effortless-config-0.1.1.tar.gz", "has_sig": false, "md5_digest": "0cf662dbbbc46ce8b0c2540c5f5cf930", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5057, "upload_time": "2019-07-06T04:25:01", "url": "https://files.pythonhosted.org/packages/23/03/a541dbbbda2d9055760217a44f956e547b920014d852713215b4c3887ca6/effortless-config-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "7bb8f2114968ece37b401641a31b4f55", "sha256": "b825a8771b9401d66be10a0082789023fe1e790250296db3c2a49cf21f59c41f" }, "downloads": -1, "filename": "effortless_config-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "7bb8f2114968ece37b401641a31b4f55", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 6644, "upload_time": "2019-07-06T04:30:34", "url": "https://files.pythonhosted.org/packages/a0/99/3eac748a9470155978c44a2e990fbff6a3cd8a2a78550556b9ef7f4b0294/effortless_config-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "beab8bb05bb0dff669033dddad45ab88", "sha256": "9e959175ff189fe05f474d0889f22effff9a964a06738182a9b78a157f244811" }, "downloads": -1, "filename": "effortless-config-0.1.2.tar.gz", "has_sig": false, "md5_digest": "beab8bb05bb0dff669033dddad45ab88", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5155, "upload_time": "2019-07-06T04:30:36", "url": "https://files.pythonhosted.org/packages/1b/d1/a51e9fb8cab106b2bc7cdd801245d69f3b9ecb071d99ba2992484e6847b4/effortless-config-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "018c4a43403ce0935c7840ac00320929", "sha256": "08f2b71d5212adbb3d8b60988aa803a2f6eb85d29ffa1f7af57dc868f375292f" }, "downloads": -1, "filename": "effortless_config-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "018c4a43403ce0935c7840ac00320929", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 6653, "upload_time": "2019-07-06T04:35:37", "url": "https://files.pythonhosted.org/packages/65/d7/7e8abd823acdc4d3c0eff2c9b9b4d16bfb6a164c1edf25868fe99bae98a3/effortless_config-0.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aef37ce63e9913c95922c0870181efd5", "sha256": "47235633bfb31b98577fc44871e1fa76df77e502c0addb21157eb75733486abc" }, "downloads": -1, "filename": "effortless-config-0.1.3.tar.gz", "has_sig": false, "md5_digest": "aef37ce63e9913c95922c0870181efd5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5169, "upload_time": "2019-07-06T04:35:39", "url": "https://files.pythonhosted.org/packages/f5/7f/2c3e3004cb6a06d02ba607259f7253dc411944d10f6ef2f5cf48e9811c6e/effortless-config-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "fa7fe10b610c87e710142e292a6a07a1", "sha256": "63607cd18007ff8860b439c8d541d6a8d7df9604f7623f9b5e5b85a985bf16f5" }, "downloads": -1, "filename": "effortless_config-0.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "fa7fe10b610c87e710142e292a6a07a1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 6780, "upload_time": "2019-07-06T05:55:53", "url": "https://files.pythonhosted.org/packages/bb/61/4e8d6ece6109a99399d2c821ec7feb8f2f9345a54268ccb2cfae517cbf99/effortless_config-0.1.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8c5e3599b33e6386b0707df28f8c0f29", "sha256": "480d6821be84b52387e09c759f51828c1351a095224893693aa98c1058e7be41" }, "downloads": -1, "filename": "effortless-config-0.1.4.tar.gz", "has_sig": false, "md5_digest": "8c5e3599b33e6386b0707df28f8c0f29", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5295, "upload_time": "2019-07-06T05:55:55", "url": "https://files.pythonhosted.org/packages/3f/c7/bb4a3f4f42e883f2e78d03d022257182d09b5bc04cbfb24fa6bd22b9ae66/effortless-config-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "c7a1aaef714d2609501c89b98bdbb44d", "sha256": "b06a0b4a60fd40845b4bb01d4abf553efe1d943f80f363cb1f15bab73b4bc006" }, "downloads": -1, "filename": "effortless_config-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "c7a1aaef714d2609501c89b98bdbb44d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 6715, "upload_time": "2019-07-06T06:01:56", "url": "https://files.pythonhosted.org/packages/27/c0/e2cdc0d88593b531cd6e70d57c82e19feaad05a079adfe6685699240f74a/effortless_config-0.1.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "67fccadd440594e6b2a294ed048d6ffd", "sha256": "73d9f4086e865918b35dd2f059d139af371a58c8c8ece1b1b4c9ab27c5bdc794" }, "downloads": -1, "filename": "effortless-config-0.1.5.tar.gz", "has_sig": false, "md5_digest": "67fccadd440594e6b2a294ed048d6ffd", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5233, "upload_time": "2019-07-06T06:01:57", "url": "https://files.pythonhosted.org/packages/b0/53/cc0c082e2607d5bc70133ee00066b2fbedc9abba3a556dadba354fbb72e1/effortless-config-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "40d06b29de2704e9bbf7a22c049a4b30", "sha256": "76940a6079719af65f83e4389a1a35835980d45e539c99ff5438dc2736766977" }, "downloads": -1, "filename": "effortless_config-0.1.6-py3-none-any.whl", "has_sig": false, "md5_digest": "40d06b29de2704e9bbf7a22c049a4b30", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 6715, "upload_time": "2019-07-06T18:48:21", "url": "https://files.pythonhosted.org/packages/45/25/2ce775d73b3b693e6c4902dc1f16cfdd10ed78c9cd5d5890c3aab3f0ae7e/effortless_config-0.1.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3d3cfb058696d19e826c0f7e68ac8ba8", "sha256": "4e20d58b98bcab8abcd06d6e87c919bda28281c1796209a2b2e82268b8c6379e" }, "downloads": -1, "filename": "effortless-config-0.1.6.tar.gz", "has_sig": false, "md5_digest": "3d3cfb058696d19e826c0f7e68ac8ba8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5228, "upload_time": "2019-07-06T18:48:23", "url": "https://files.pythonhosted.org/packages/a4/79/dfb223322c6fcaa5a8260cee8fe442f1ace47630197351c6ba08c8463866/effortless-config-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "cbd0f7953f1cd8b212e61af4a05cc5f0", "sha256": "f9f1a4c943b506e6072ecec84b315ca6336611650cecf10ad32ae90880abe424" }, "downloads": -1, "filename": "effortless_config-0.1.7-py3-none-any.whl", "has_sig": false, "md5_digest": "cbd0f7953f1cd8b212e61af4a05cc5f0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 6716, "upload_time": "2019-07-07T03:12:47", "url": "https://files.pythonhosted.org/packages/df/ac/abccd256d8fd788ae5d203745a9a2ee7db5cc8c98c24ea22206936c9a492/effortless_config-0.1.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cd185c51122754105f9169f872576fa2", "sha256": "81fe690f37ea6d7d73cef2a37e7da9f0721ad968328a99b91379771ff26efdf4" }, "downloads": -1, "filename": "effortless-config-0.1.7.tar.gz", "has_sig": false, "md5_digest": "cd185c51122754105f9169f872576fa2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5228, "upload_time": "2019-07-07T03:12:48", "url": "https://files.pythonhosted.org/packages/28/d8/8ad4078883558efcf307830390e9ff55029d4b792aed621347efc12c372f/effortless-config-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "175f97ca68783391ac9e700436e44f44", "sha256": "bb425b928f0aaa83ad37921c5185c2d0a620c5f37ecd6778dd29abbeaf9cd45d" }, "downloads": -1, "filename": "effortless_config-0.1.8-py3-none-any.whl", "has_sig": false, "md5_digest": "175f97ca68783391ac9e700436e44f44", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 7243, "upload_time": "2019-07-07T19:40:13", "url": "https://files.pythonhosted.org/packages/a6/e7/2d8237063a0515fb7b38d7e6850e5735083214ecad9f95a3baa48606b99c/effortless_config-0.1.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2297aaa2ff33496868d760d43056ed98", "sha256": "9b0b1bc146491cb2231f9131b4be3f5ac42ab6cb595b61d7cf58da43712ff21d" }, "downloads": -1, "filename": "effortless-config-0.1.8.tar.gz", "has_sig": false, "md5_digest": "2297aaa2ff33496868d760d43056ed98", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5428, "upload_time": "2019-07-07T19:40:14", "url": "https://files.pythonhosted.org/packages/a8/e4/344c606a0e36176d1ac7fb52ce45744b0b82d086c9d708e8ec94659839ff/effortless-config-0.1.8.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "7e481d8c88ab8e027753451159b7872b", "sha256": "5a2708664c5386ef8ee1516228bd2e59bb6e3c98508dd7570cb96a62821c04a2" }, "downloads": -1, "filename": "effortless_config-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "7e481d8c88ab8e027753451159b7872b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 7388, "upload_time": "2019-07-08T03:31:15", "url": "https://files.pythonhosted.org/packages/d0/ae/0fea4d1a8e8c9630c80724add5625da6f8153fd337e45c4872df155a3c58/effortless_config-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "67ea48da79e1b87cecc0d291b46c95e4", "sha256": "5f186012a5514090ccab02439ed4d6fc92b3150adba946fd3b806a6fcf129d9b" }, "downloads": -1, "filename": "effortless-config-0.2.0.tar.gz", "has_sig": false, "md5_digest": "67ea48da79e1b87cecc0d291b46c95e4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5568, "upload_time": "2019-07-08T03:31:17", "url": "https://files.pythonhosted.org/packages/33/2b/26fc440f599d280ba1611c59ee2f17a7fa2a0c66ab338ee51dc72567a5e6/effortless-config-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "9861d747f274417b4d89351683e792a4", "sha256": "ff4ec23f52f500fc419327a546bf6cd6e3a908efd14292729baca7b83f34b308" }, "downloads": -1, "filename": "effortless_config-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "9861d747f274417b4d89351683e792a4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 6775, "upload_time": "2019-07-08T04:12:00", "url": "https://files.pythonhosted.org/packages/a9/ad/4a0e7287e5a3e7fededec97b645c4813e3a04e1bcd302650c57afdd9039d/effortless_config-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7a84f5778486e91a0b3fbdfbe73b14ba", "sha256": "11fcfecad7ebefc6cb101c503547ff25d0c1af5fc65cedced594c5b13306a867" }, "downloads": -1, "filename": "effortless-config-0.2.1.tar.gz", "has_sig": false, "md5_digest": "7a84f5778486e91a0b3fbdfbe73b14ba", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 6149, "upload_time": "2019-07-08T04:12:01", "url": "https://files.pythonhosted.org/packages/4b/c5/d629c021d8346fc323fce5279350f9d10e1c79944207eacf1768a7556cd7/effortless-config-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "2bef050858af09817d53d60b740dbb5c", "sha256": "79a0670cf6a1ff66d41ef25b4bca99caeda970f5ef4faa6e47f1794db0fa6df7" }, "downloads": -1, "filename": "effortless_config-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "2bef050858af09817d53d60b740dbb5c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 6796, "upload_time": "2019-07-08T19:39:49", "url": "https://files.pythonhosted.org/packages/ec/81/8c7d8284aa8d4473d8e56cb3185730881860282e0217b1e3af90dd24ba29/effortless_config-0.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7cd003c264613ffd1140324effa3b19a", "sha256": "1cf1c5830e07a6b4bfa677d3ac8b125ded01cd7d5886b647701da4b68cd85458" }, "downloads": -1, "filename": "effortless-config-0.2.2.tar.gz", "has_sig": false, "md5_digest": "7cd003c264613ffd1140324effa3b19a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 6175, "upload_time": "2019-07-08T19:39:50", "url": "https://files.pythonhosted.org/packages/db/bf/67d5917a4016e482e07656dfa72fd06c8c4da1b0f91ea36dc466c08bcea2/effortless-config-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "c4c31b7020a9df8593b6e309729c4526", "sha256": "10e906ada779a188edf6409d8451af21df7fd1c481bb6fa65d4e8740e05cdff6" }, "downloads": -1, "filename": "effortless_config-0.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "c4c31b7020a9df8593b6e309729c4526", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 6886, "upload_time": "2019-07-09T04:38:39", "url": "https://files.pythonhosted.org/packages/9a/85/665e2eb0dd9776f69ce8411246316b35204edf658ea237921fb2e7e7728c/effortless_config-0.2.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8dbe35aa269c1d5b00442b29caf5ec7d", "sha256": "7b162156dfe6950df6876d3eb847d6f8aa36ffb889d5f46ebcdbdb6083a55ee4" }, "downloads": -1, "filename": "effortless-config-0.2.3.tar.gz", "has_sig": false, "md5_digest": "8dbe35aa269c1d5b00442b29caf5ec7d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 6272, "upload_time": "2019-07-09T04:38:45", "url": "https://files.pythonhosted.org/packages/fe/b0/58e388d66f7bba01075bfcc23d8f6c6369ed183a50f43469b23f8e6c87ae/effortless-config-0.2.3.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "d2f290aee5eb6d457a72c7e1edc90114", "sha256": "11cfd7a164b41b1da4bf92f01c076e626dace3aaa66a4f0650612a39eea638fd" }, "downloads": -1, "filename": "effortless_config-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "d2f290aee5eb6d457a72c7e1edc90114", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 6901, "upload_time": "2019-07-09T04:44:50", "url": "https://files.pythonhosted.org/packages/2a/e3/8bd6d2da94a5a5bc7ae7fa6c9e1c4410ff1775de027cb78efcec87078dc1/effortless_config-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e174152107efae1268f7ec74030f52c8", "sha256": "7a79714aa97c82b555169425682d01d857e2ac3cc46a78dbb6f3a77f1575b265" }, "downloads": -1, "filename": "effortless-config-0.3.0.tar.gz", "has_sig": false, "md5_digest": "e174152107efae1268f7ec74030f52c8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 6294, "upload_time": "2019-07-09T04:44:51", "url": "https://files.pythonhosted.org/packages/58/82/9a2105a594df7d7feadec0afcefd9d03df728d11d039763e0e08cb97dfe0/effortless-config-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "8b1e959450b76f100ae1a4d638980925", "sha256": "e8d59bd3a61eb95cba28b2e32e77e3d7cfa270291aa1976e4f777041bcd88ad2" }, "downloads": -1, "filename": "effortless_config-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8b1e959450b76f100ae1a4d638980925", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 6999, "upload_time": "2019-07-09T05:05:18", "url": "https://files.pythonhosted.org/packages/42/1d/37e258a6365ea6196b37318417e74b8bd36cd2dbad1fa8befcc394041898/effortless_config-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4af156438fa35e8d17f00ca73fb5af55", "sha256": "28c1785f195d9bb0f56fff0bc5ba1790900ea52917bd2319e67963ff20517ea3" }, "downloads": -1, "filename": "effortless-config-0.3.1.tar.gz", "has_sig": false, "md5_digest": "4af156438fa35e8d17f00ca73fb5af55", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 6386, "upload_time": "2019-07-09T05:05:19", "url": "https://files.pythonhosted.org/packages/57/f7/e22e63856a4683556bde5d236aaf98ad059469d1be6ce7ee58d7113d2065/effortless-config-0.3.1.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "fca939d7d8bceac03f2cb51373678d57", "sha256": "2b5610b1832a09ff960d2577c92f1b70c37f0e897e14d37c15d4144bfa12c9c2" }, "downloads": -1, "filename": "effortless_config-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "fca939d7d8bceac03f2cb51373678d57", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 7752, "upload_time": "2019-07-09T05:24:33", "url": "https://files.pythonhosted.org/packages/f6/61/718b402cf707650d525c0fa9c2e250fee3851a634dab5ef184700e36d1fd/effortless_config-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9900253beeef057e2eee53dcf1b85669", "sha256": "6ab7c59536de94e399201ad4f8a6eb2396e8ffa0767c39f7d1af888b064b1b30" }, "downloads": -1, "filename": "effortless-config-0.4.0.tar.gz", "has_sig": false, "md5_digest": "9900253beeef057e2eee53dcf1b85669", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 6933, "upload_time": "2019-07-09T05:24:34", "url": "https://files.pythonhosted.org/packages/d4/9e/ff44b15483e9374f9530670359c9dfc991b8e8b371ed154708435a161b60/effortless-config-0.4.0.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "81babc2e67ae34e645fdd3305165b618", "sha256": "1df0a84952dc24129315dc3950d4bcf7b4f35e69af68148a2497a89430af3a28" }, "downloads": -1, "filename": "effortless_config-0.4.2-py3-none-any.whl", "has_sig": false, "md5_digest": "81babc2e67ae34e645fdd3305165b618", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 7752, "upload_time": "2019-07-11T21:25:02", "url": "https://files.pythonhosted.org/packages/c9/73/e2263a236047108f66647a984fe1db1c8e9f0784ed2a6bd0adfade622142/effortless_config-0.4.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "79ccb76f40cc05c8d9d456617a39bb8a", "sha256": "2dfe17591dce05f833bfe08e4d51a9cb606eed47a93065d2065b89f8186d30bf" }, "downloads": -1, "filename": "effortless-config-0.4.2.tar.gz", "has_sig": false, "md5_digest": "79ccb76f40cc05c8d9d456617a39bb8a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 6931, "upload_time": "2019-07-11T21:25:04", "url": "https://files.pythonhosted.org/packages/fc/69/9ed3882ad0452248e00fa7243c4fd79f524e9ceb8a8b7f6aab32c04e3414/effortless-config-0.4.2.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "d8d92c9643ae0cd4028dbef7f43590c7", "sha256": "f85c3d77d587b0ed079e9b97d9f7f0b549830029b8a9f499e375a1c3616590ed" }, "downloads": -1, "filename": "effortless_config-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "d8d92c9643ae0cd4028dbef7f43590c7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 7756, "upload_time": "2019-07-15T01:01:56", "url": "https://files.pythonhosted.org/packages/d9/d9/990097e5b9ab176086e96a08bef640cb2c203de8eb5d06f193aec7f90437/effortless_config-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "35718d1e70f3a8f7317264585cbac90f", "sha256": "7d6d6e9ecb5189c604584ffc302e663f3d6b72d2953dc7d3ce65cad9214da4e3" }, "downloads": -1, "filename": "effortless-config-0.5.0.tar.gz", "has_sig": false, "md5_digest": "35718d1e70f3a8f7317264585cbac90f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 6936, "upload_time": "2019-07-15T01:01:58", "url": "https://files.pythonhosted.org/packages/78/7e/96646eea258db75ec1d25f562dde102b95f506a74ecad5101ba15fbf8e0b/effortless-config-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "143729fcbd467efa8613ecae1c9ac9f4", "sha256": "5c41af91455035bb330eecfbf624218e0976e6fe83c79e50b06505b590048173" }, "downloads": -1, "filename": "effortless_config-0.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "143729fcbd467efa8613ecae1c9ac9f4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 7890, "upload_time": "2019-07-24T11:04:46", "url": "https://files.pythonhosted.org/packages/e7/0b/b1869fbfedb435d0c27898e08d45285f0189a840523d970787cd7c4b01ee/effortless_config-0.6.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "567ac0d67b59a90ebcfb4c283d84d630", "sha256": "0c38e98a99ac4c552c88ec1a3f0ec1444f07b63605cf41124e2cc005b7324409" }, "downloads": -1, "filename": "effortless-config-0.6.0.tar.gz", "has_sig": false, "md5_digest": "567ac0d67b59a90ebcfb4c283d84d630", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 7732, "upload_time": "2019-07-24T11:04:47", "url": "https://files.pythonhosted.org/packages/9f/91/b3b3ac678086bb01854bb29f236b2c041d100b1f4868a99d3e8020733e05/effortless-config-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "fc615ceeb7f5ca87cabd38eb629d8623", "sha256": "0cb6b9a057df8251563203e56f20d5fab87993a6585eb0ad74c198f6ee449f70" }, "downloads": -1, "filename": "effortless_config-0.6.1-py3-none-any.whl", "has_sig": false, "md5_digest": "fc615ceeb7f5ca87cabd38eb629d8623", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 7903, "upload_time": "2019-07-24T11:51:09", "url": "https://files.pythonhosted.org/packages/62/7a/ab87dfdb09e5db9dbad6bc935a7934e5a1b5041e43c4fe1a6f29a3522caa/effortless_config-0.6.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "09579d27a074deb1a03ef85ddf537da3", "sha256": "618c92a99b5de2e8e6d99ac27341b2084c1407f906446c3af9c290e3bbe72230" }, "downloads": -1, "filename": "effortless-config-0.6.1.tar.gz", "has_sig": false, "md5_digest": "09579d27a074deb1a03ef85ddf537da3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 7733, "upload_time": "2019-07-24T11:51:10", "url": "https://files.pythonhosted.org/packages/c1/6c/be8bddb175fbc16972edfae1fc35212faa220b89d78911c614923f7faf39/effortless-config-0.6.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "fc615ceeb7f5ca87cabd38eb629d8623", "sha256": "0cb6b9a057df8251563203e56f20d5fab87993a6585eb0ad74c198f6ee449f70" }, "downloads": -1, "filename": "effortless_config-0.6.1-py3-none-any.whl", "has_sig": false, "md5_digest": "fc615ceeb7f5ca87cabd38eb629d8623", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 7903, "upload_time": "2019-07-24T11:51:09", "url": "https://files.pythonhosted.org/packages/62/7a/ab87dfdb09e5db9dbad6bc935a7934e5a1b5041e43c4fe1a6f29a3522caa/effortless_config-0.6.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "09579d27a074deb1a03ef85ddf537da3", "sha256": "618c92a99b5de2e8e6d99ac27341b2084c1407f906446c3af9c290e3bbe72230" }, "downloads": -1, "filename": "effortless-config-0.6.1.tar.gz", "has_sig": false, "md5_digest": "09579d27a074deb1a03ef85ddf537da3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 7733, "upload_time": "2019-07-24T11:51:10", "url": "https://files.pythonhosted.org/packages/c1/6c/be8bddb175fbc16972edfae1fc35212faa220b89d78911c614923f7faf39/effortless-config-0.6.1.tar.gz" } ] }