{ "info": { "author": "Chris Haumesser", "author_email": "chris.haumesser@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "cfitall :: configure it all\n===========================\n\ncfitall (configure it all) is a configuration management library for\npython applications. It's inspired by and loosely modeled on the\nexcellent `viper `__ library for go,\nthough it doesn't have quite as many features (yet).\n\nIt does cover the basics of configuring your application from a combination\nof sources, with a predictable inheritance hierarchy. It does this by\ncreating a configuration registry for your application, merging data from the\nfollowing sources to retrieve a requested value:\n\n- default values provided by the developer\n- YAML or JSON configuration file (values override defaults)\n- environment variables (override configuration file values & defaults)\n- ``set()`` calls made by the developer (override everything)\n\n(Support for command-line and k/v store data sources is intended for the future;\npull requests welcome.)\n\nInstall\n-------\n\n``pip install cfitall`` should do the trick for most users. cfitall\nrequires python3 but otherwise has minimal dependencies.\n\nTo build a package for debian/ubuntu, `stdeb `__\nworks well:\n\n::\n\n apt install python3-all python3-stdeb python3-pbr\n setup.py --command-packages=stdeb.command sdist_dsc --debian-version bionic1 bdist_deb\n\nExample\n-------\n\nThis example is for a contrived application called ``myapp``.\n\nFirst, set up a ``config`` module for myapp. Notice that we name our\nconfig object ``myapp``.\n\n::\n\n # myapp/config.py\n\n from cfitall.config import ConfigManager\n\n # create a configuration registry for myapp\n config = ConfigManager('myapp')\n\n # set some default configuration values\n config.set_default('global.name', 'my fancy application')\n config.values['defaults']['global']['foo'] = 'bar'\n config.set_default('network.listen', '127.0.0.1')\n\n # add a path to search for configuration files\n config.add_config_path('/Users/wryfi/.config/myapp')\n\n # read data from first config file found (myapp.json, myapp.yaml, or myapp.yml)\n config.read_config()\n\nSince we named our config object ``myapp``, environment variables\nbeginning with ``MYAPP__`` are searched for values by cfitall.\nEnvironment variables containing commas are interpreted as\ncomma-delimited lists. Export some environment variables to see this in\naction:\n\n::\n\n export MYAPP__GLOBAL__NAME=\"my app from bash\"\n export MYAPP__GLOBAL__THINGS=\"four,five,six\"\n export MYAPP__NETWORK__PORT=8080\n\nAgain, since we chose ``myapp`` as our config object name, our\nconfiguration file is also named ``myapp.(json|yaml|yml)``. Create a\nconfiguration file in YAML or JSON and put it in one of the paths you\nadded to your config registry:\n\n::\n\n # ~/.config/myapp/myapp.yml\n global:\n bar: foo\n things:\n - one\n - two\n - three\n person:\n name: joe\n hair: brown\n network:\n port: 9000\n listen: '*'\n\nNow you can use your config object to get the configuration data you\nneed. You can access the merged configuration data by its configuration\nkey (dotted path notation), or you can just grab the entire merged\ndictionary via the ``dict`` property.\n\n::\n\n # myapp/logic.py\n\n from config import config\n\n # prints $MYAPP__GLOBAL__THINGS because env var overrides config file\n print(config.get('global.things', list))\n\n # prints $MYAPP__NETWORK__PORT because env var overrides config file\n print(config.get('network.port', int))\n\n # prints '*' from myapp.yml because config file overrides default\n print(config.get('network.listen', str))\n\n # prints 'joe' from myapp.yml because it is only defined there\n print(config.get('global.person.name', str))\n\n # alternate way to print joe through the config dict property\n print(config.dict['global']['person']['name'])\n\n # prints the entire assembled config as dictionary\n print(config.dict)\n\nRunning ``logic.py`` should go something like this:\n\n::\n\n $ python logic.py\n ['four', 'five', 'six']\n 8080\n *\n joe\n joe\n {'global': {'name': 'my app from bash', 'foo': 'bar', 'bar': 'foo', 'things': ['four', 'five', 'six'], 'person': {'name': 'joe', 'hair': 'brown'}}, 'network': {'listen': '*', 'port': '8080'}}\n\nNotes\n-----\n\n- Avoid using ``__`` (double-underscore) in your configuration variable\n keys (names), as cfitall uses ``__`` as a hierarchical delimiter when\n parsing environment variables.\n\n - If you must use ``__`` in variable keys, you can pass an\n ``env_separator`` argument with a different string to the\n ConfigManager constructor, e.g.\n ``config = ConfigManager(env_separator='____')``.\n\n- Environment variables matching the pattern ``MYAPP__.*`` are\n automatically read into the configuration, where ``MYAPP`` refers to\n the uppercase ``name`` given to your ConfigManager at creation.\n\n - You can customize this behavior by passing an ``env_prefix`` value\n and/or ``env_separator`` as kwargs to the ConfigManager constructor.\n\nDevelopment\n-----------\n\ncfitall uses modern python tooling with the pipenv dependency/environment\nmanager and pbr packaging system.\n\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/wryfi/cfitall", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "cfitall", "package_url": "https://pypi.org/project/cfitall/", "platform": "", "project_url": "https://pypi.org/project/cfitall/", "project_urls": { "Homepage": "https://github.com/wryfi/cfitall" }, "release_url": "https://pypi.org/project/cfitall/1.0.2/", "requires_dist": null, "requires_python": "", "summary": "a configuration manager for python apps", "version": "1.0.2" }, "last_serial": 5673807, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "816e1e93d7e70da47c368e0ec0f906bb", "sha256": "9706d2c0ce695d1e43364bd9d83d0bf05b8d821fdc2aa85de759335a94d30fef" }, "downloads": -1, "filename": "cfitall-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "816e1e93d7e70da47c368e0ec0f906bb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10315, "upload_time": "2019-08-12T04:04:10", "url": "https://files.pythonhosted.org/packages/62/26/3ec0513c0567dbab9e7464f7d2207f09b5b5e0680eee923dfd4272dce940/cfitall-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c2a3c78ff46a13b23484eb585a3b504c", "sha256": "b457d99ea3ac7c6ace4463594dd3adaeecfa90353999c344945925844113cc98" }, "downloads": -1, "filename": "cfitall-1.0.0.tar.gz", "has_sig": false, "md5_digest": "c2a3c78ff46a13b23484eb585a3b504c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12538, "upload_time": "2019-08-12T04:04:13", "url": "https://files.pythonhosted.org/packages/e2/e4/e9f31acee09c8a91808a8b9850554f0ee22f386cf1db454a4fc4dd17d4c5/cfitall-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "aeecf9b31790735df8896ae9bd99d8e9", "sha256": "2099e39616b041135854385c6df515a5c3dd107ae241e6a34b2fe7f2e9649846" }, "downloads": -1, "filename": "cfitall-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "aeecf9b31790735df8896ae9bd99d8e9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10714, "upload_time": "2019-08-12T15:02:40", "url": "https://files.pythonhosted.org/packages/d4/65/93cd63b28632ac9dc03f0edd0796eff9f7060377f92d1aa2a05ea2e807fe/cfitall-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a39904aa118495d76f73c92d23d94f40", "sha256": "68de60741fb494e0592de52969c1c8d6467d5d87c82dd725a310c23f38b78f7d" }, "downloads": -1, "filename": "cfitall-1.0.1.tar.gz", "has_sig": false, "md5_digest": "a39904aa118495d76f73c92d23d94f40", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13245, "upload_time": "2019-08-12T15:02:42", "url": "https://files.pythonhosted.org/packages/99/f2/be8410507ff8d9e81874b5e84356e613d50106128b133a2541bca6953521/cfitall-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "a148b6f95127eb927b558c4a34963362", "sha256": "68bc7bb778b93a410d7326af70b66ccf14a2ffbf354ef1cf18e2fe85e6a104ba" }, "downloads": -1, "filename": "cfitall-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "a148b6f95127eb927b558c4a34963362", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10649, "upload_time": "2019-08-13T21:46:10", "url": "https://files.pythonhosted.org/packages/c4/c8/a2c6ac29c7a42ea3423a774b353abba9d6872e504279573aa205cb2aaf77/cfitall-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4e7be0d2cfc3c040e31399f6a20850df", "sha256": "c5ecf936f22820177cc63b8396d97258f63adc4a2e5c4df9112ec54ee094939c" }, "downloads": -1, "filename": "cfitall-1.0.2.tar.gz", "has_sig": false, "md5_digest": "4e7be0d2cfc3c040e31399f6a20850df", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13259, "upload_time": "2019-08-13T21:46:12", "url": "https://files.pythonhosted.org/packages/d3/72/d4eb5458725dc4d4d68a6aebd4b20bc3189eb2de643108204a16bbb56716/cfitall-1.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a148b6f95127eb927b558c4a34963362", "sha256": "68bc7bb778b93a410d7326af70b66ccf14a2ffbf354ef1cf18e2fe85e6a104ba" }, "downloads": -1, "filename": "cfitall-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "a148b6f95127eb927b558c4a34963362", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10649, "upload_time": "2019-08-13T21:46:10", "url": "https://files.pythonhosted.org/packages/c4/c8/a2c6ac29c7a42ea3423a774b353abba9d6872e504279573aa205cb2aaf77/cfitall-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4e7be0d2cfc3c040e31399f6a20850df", "sha256": "c5ecf936f22820177cc63b8396d97258f63adc4a2e5c4df9112ec54ee094939c" }, "downloads": -1, "filename": "cfitall-1.0.2.tar.gz", "has_sig": false, "md5_digest": "4e7be0d2cfc3c040e31399f6a20850df", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13259, "upload_time": "2019-08-13T21:46:12", "url": "https://files.pythonhosted.org/packages/d3/72/d4eb5458725dc4d4d68a6aebd4b20bc3189eb2de643108204a16bbb56716/cfitall-1.0.2.tar.gz" } ] }