{ "info": { "author": "Steve Love", "author_email": "steve@arventech.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# Pyning\n## A quick and extensible configuration management library\n\nhttps://pypi.org/project/pyning/\n\nPyning lets you take configuration entries in key/value pairs, \nand query by key. For example, you might just use a dict (or any \nMapping type):\n\n```python\nargs = { 'stop-on-error': True }\nregistry = pyning.config.Registry()\nconfig = registry.add( args ).resolve()\n\nprint( config[ 'stop-on-error' ] )\n# True\n```\n\nKeys are used as attributes on the resolved object, and can be \nused in the usual way:\n\n```python\nargs = { 'stop_on_error': True }\nregistry = pyning.config.Registry()\nconfig = registry.add( args ).resolve()\n\nprint( config.stop_on_error )\n# True\n```\n\nNB: keys with spaces, or other python syntax elements (like '-') \nwill cause this syntax to fail, but such keys can still be found \nwith the dictionary-key lookup. \n\nMultiple levels of handler are possible, with later handlers \noverride same-key settings in earlier handlers. \n\n ```python\n args = { 'stop_on_error': True }\n overrides = { 'stop_on_error': False }\n registry = pyning.config.Registry()\n config = registry.add( args ).add( overrides ).resolve()\n\n print( config.stop_on_error )\n # False\n ```\n\nYou might use this to have some configuration in a file, and\noverride with the argparse.ArgumentParser values.\n\n```python\nargs = { 'stop_on_error': True }\nparser = argparse.ArgumentParser()\nparser.add_argument( '--stop_on_error' ) \n\ncmdline = parser.parse_args()\nregistry = pyning.config.Registry()\nconfig = registry.add( args ).add( vars( cmdline ) ).resolve()\n\nprint( config.stop_on_error )\n# False\n```\n\nValues can use a limited variable substitution to swap in \nvalues from different keys. This is especially useful when\nusing the overrides feature. At present, it only works for strings.\n\n```python\npublic_args = { 'password': '${private_password}' }\noverrides = { 'private_password': 'a good strong password' }\nregistry = pyning.config.Registry()\nconfig = registry.add( public_args ).add( overrides ).resolve()\n\nprint( config.password )\n# a good strong password\n```\n\nThe syntax used to match a variable substitution can be changed by\npassing in a different regular expression pattern to the Registry\nconstructor. The default is '${variable name}', matched against\n`r'(\\$\\{(.*?)\\})'`\n\nValues don't have to be single items: they can be sequences or\neven nested Mapping objects. A convenient short-hand can be used\nto refer to nested keys, and works with variable substitution,\ntoo.\n\n```python\n import json\n\n args = { 'url': '${remotes.endpoint}' }\n overrides = json.loads( '''\n { \"remotes\": {\n \"endpoint\": \"http://nowhere\"\n } } '''\n )\n\n cfg = Registry().add( args ).add( overrides ).resolve()\n print( cfg.url )\n\n```\n\nAlso, nested mapping objects can still use a nested attribute\nlookup, too:\n\n```python\n import json\n\n args = { 'url': '${remotes.endpoint}' }\n overrides = json.loads( '''\n { \"remotes\": {\n \"endpoint\": \"http://nowhere\"\n } } '''\n )\n\n cfg = Registry().add( args ).add( overrides ).resolve()\n print( cfg.remotes.endpoint )\n\n```\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/essennell/pyning", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "pyning", "package_url": "https://pypi.org/project/pyning/", "platform": "", "project_url": "https://pypi.org/project/pyning/", "project_urls": { "Homepage": "https://github.com/essennell/pyning" }, "release_url": "https://pypi.org/project/pyning/0.1a10/", "requires_dist": null, "requires_python": "", "summary": "A quick and extensible configuration management system", "version": "0.1a10" }, "last_serial": 4550469, "releases": { "0.1a10": [ { "comment_text": "", "digests": { "md5": "31ba62bb0eff5209e68699cdbc8a1309", "sha256": "ba4bfa763c0e237891015e150456bb26eef7454cb9632f9a59c605d337a7bc38" }, "downloads": -1, "filename": "pyning-0.1a10-py3-none-any.whl", "has_sig": false, "md5_digest": "31ba62bb0eff5209e68699cdbc8a1309", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5410, "upload_time": "2018-12-01T15:33:56", "url": "https://files.pythonhosted.org/packages/da/0e/1f7097e169fa5f355ca61509645a71ddab983545cd56e67a91d85cf37a52/pyning-0.1a10-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cfa043366139346948071bcc0946f399", "sha256": "9aa0ea6d42ad0916d203cb605e0e4ebbabc019f3d766032f2f759fff22cd0685" }, "downloads": -1, "filename": "pyning-0.1a10.tar.gz", "has_sig": false, "md5_digest": "cfa043366139346948071bcc0946f399", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4080, "upload_time": "2018-12-01T15:33:58", "url": "https://files.pythonhosted.org/packages/a2/57/649757e2ab32241b1afaba511cadcfb9f3537d2f3d03ca759a26a2518103/pyning-0.1a10.tar.gz" } ], "0.1a4": [ { "comment_text": "", "digests": { "md5": "28707753fd4e4a2d4c5585a542046060", "sha256": "99e13f077ddf25a4d066528b13c79ebbf830f6edba3f5e1906c5747d1960d276" }, "downloads": -1, "filename": "pyning-0.1a4-py3-none-any.whl", "has_sig": false, "md5_digest": "28707753fd4e4a2d4c5585a542046060", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5031, "upload_time": "2018-11-06T18:15:51", "url": "https://files.pythonhosted.org/packages/4c/57/e4248034179947afa0722bda05ea56eb842ff1f61c21b00137382763e2ec/pyning-0.1a4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "822f0a35ded22d61da7f244d54f14ec0", "sha256": "835a420ae19a0c20906574b47f922ac4d351809ac93909ebf3fac7faf93b8832" }, "downloads": -1, "filename": "pyning-0.1a4.tar.gz", "has_sig": false, "md5_digest": "822f0a35ded22d61da7f244d54f14ec0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3602, "upload_time": "2018-11-06T18:15:53", "url": "https://files.pythonhosted.org/packages/b1/2d/153f14cd0dc1336fcfb611202b151cbc7f3b62b692c2a9e66408ad8bb834/pyning-0.1a4.tar.gz" } ], "0.1a5": [ { "comment_text": "", "digests": { "md5": "2c3dad2f98d616b6fef1ca3bbf31adae", "sha256": "4c3c6fdf1b2af163f289998eed66d6cbac0ac908df1a50bc9085775fada6c210" }, "downloads": -1, "filename": "pyning-0.1a5-py3-none-any.whl", "has_sig": false, "md5_digest": "2c3dad2f98d616b6fef1ca3bbf31adae", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5027, "upload_time": "2018-11-06T18:17:18", "url": "https://files.pythonhosted.org/packages/40/8c/fb1cf60e162f93a418965bfffa8ee791e59c8ea18c233fc95e8fc660fbaa/pyning-0.1a5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "034964fd4d499f52d1255d4f09f7618d", "sha256": "f2876e5858fb4ce6f46c34e0318d784c40082a6b30b7681cad6f32fed2e768c5" }, "downloads": -1, "filename": "pyning-0.1a5.tar.gz", "has_sig": false, "md5_digest": "034964fd4d499f52d1255d4f09f7618d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3594, "upload_time": "2018-11-06T18:17:19", "url": "https://files.pythonhosted.org/packages/25/b3/f37138d338ca360c891101c43fbf4d01cbbdfce205e35769e58dc890a846/pyning-0.1a5.tar.gz" } ], "0.1a6": [ { "comment_text": "", "digests": { "md5": "dea970e9f59f5fef32d758d7690e0f9a", "sha256": "597bd9f16f29b8d24ee4c7401b9ecd5eacd2f961e496bfe7d0932089ae7c30a6" }, "downloads": -1, "filename": "pyning-0.1a6-py3-none-any.whl", "has_sig": false, "md5_digest": "dea970e9f59f5fef32d758d7690e0f9a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5343, "upload_time": "2018-11-21T14:22:22", "url": "https://files.pythonhosted.org/packages/ce/2b/aebc26d487a3fb80081790bf1625779225de7e9341d5087bdee754a083ab/pyning-0.1a6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "901a7f9d2caa3e9502bd511abb5d5905", "sha256": "c31c10539c208ce3f9d286edf18c1b319dbd6aa661f4502a9fc8fc7497926d50" }, "downloads": -1, "filename": "pyning-0.1a6.tar.gz", "has_sig": false, "md5_digest": "901a7f9d2caa3e9502bd511abb5d5905", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3959, "upload_time": "2018-11-21T14:22:23", "url": "https://files.pythonhosted.org/packages/d2/54/1df18d478462c0cf881ed298adf34bdc7311164923727b34833a96f571dd/pyning-0.1a6.tar.gz" } ], "0.1a7": [ { "comment_text": "", "digests": { "md5": "d73845bea7132cde2b70bd9f998d9b09", "sha256": "dc62e7fe3a7be65c1ee2944d3dd74ec03d386ba889158ebcb27bece51aae0646" }, "downloads": -1, "filename": "pyning-0.1a7-py3-none-any.whl", "has_sig": false, "md5_digest": "d73845bea7132cde2b70bd9f998d9b09", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5368, "upload_time": "2018-11-27T08:59:24", "url": "https://files.pythonhosted.org/packages/5b/bc/c8496b5573820779e06deb17873cdd3be8310c9e5444803b2eebfc57e1c0/pyning-0.1a7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a9dc68776fd2cfe83166bb2aa81da8dc", "sha256": "7763aaa679d9b5f3e1f8a9a3ebdcdc2169877239da29da98c32a8c75ebf04e02" }, "downloads": -1, "filename": "pyning-0.1a7.tar.gz", "has_sig": false, "md5_digest": "a9dc68776fd2cfe83166bb2aa81da8dc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3992, "upload_time": "2018-11-27T08:59:26", "url": "https://files.pythonhosted.org/packages/1b/a1/84493d9ebd4e6d729f99dc01352256a6763bc7ea93fc45ea81aa20c0617e/pyning-0.1a7.tar.gz" } ], "0.1a8": [ { "comment_text": "", "digests": { "md5": "9b0160aaf9cc0d065376b4e8eb2e510c", "sha256": "7b383498637ae2ffa2b6af3c42b15b08bcfeefcc42676541d165f533e0b82c35" }, "downloads": -1, "filename": "pyning-0.1a8-py3-none-any.whl", "has_sig": false, "md5_digest": "9b0160aaf9cc0d065376b4e8eb2e510c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5386, "upload_time": "2018-11-27T10:01:05", "url": "https://files.pythonhosted.org/packages/1a/32/32d1f4320f6e8f9ac1f7a9b886a9008059940c169dd60f530b08353f48d9/pyning-0.1a8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "549d63ee18c586710f97c5dc10a70703", "sha256": "5ac5b119190dd2597a84edf1a6c1f8743b7669d24ae90107c7a5e2dad3da4cc2" }, "downloads": -1, "filename": "pyning-0.1a8.tar.gz", "has_sig": false, "md5_digest": "549d63ee18c586710f97c5dc10a70703", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4007, "upload_time": "2018-11-27T10:01:07", "url": "https://files.pythonhosted.org/packages/27/12/13a506686cd12946fa28a2f06f3880b256c7f55e7cc9245790fc5588de08/pyning-0.1a8.tar.gz" } ], "0.1a9": [ { "comment_text": "", "digests": { "md5": "87038f3a51d950a99549ea5a1d0e5c74", "sha256": "49509c0148f3c98ae16711c78c4539e226f5aeaaa2d9c558387db50b472363fd" }, "downloads": -1, "filename": "pyning-0.1a9-py3-none-any.whl", "has_sig": false, "md5_digest": "87038f3a51d950a99549ea5a1d0e5c74", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5389, "upload_time": "2018-11-27T11:40:08", "url": "https://files.pythonhosted.org/packages/d7/32/2f9b14668c7f98a413664f2bd774b30dfc6a18f6c3f976082e36331a01f5/pyning-0.1a9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c95f14fe17fb344853c04d7a87bae81c", "sha256": "16348a41ef1ee89b3817bcee9301f85d17c21f3a4c1e6e1f9a002dfb1f2fb859" }, "downloads": -1, "filename": "pyning-0.1a9.tar.gz", "has_sig": false, "md5_digest": "c95f14fe17fb344853c04d7a87bae81c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4012, "upload_time": "2018-11-27T11:40:09", "url": "https://files.pythonhosted.org/packages/cd/b1/b6e04a6bb0b152ff294a1dd596fdaca2186a1f1b271f3d815ba181c53475/pyning-0.1a9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "31ba62bb0eff5209e68699cdbc8a1309", "sha256": "ba4bfa763c0e237891015e150456bb26eef7454cb9632f9a59c605d337a7bc38" }, "downloads": -1, "filename": "pyning-0.1a10-py3-none-any.whl", "has_sig": false, "md5_digest": "31ba62bb0eff5209e68699cdbc8a1309", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5410, "upload_time": "2018-12-01T15:33:56", "url": "https://files.pythonhosted.org/packages/da/0e/1f7097e169fa5f355ca61509645a71ddab983545cd56e67a91d85cf37a52/pyning-0.1a10-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cfa043366139346948071bcc0946f399", "sha256": "9aa0ea6d42ad0916d203cb605e0e4ebbabc019f3d766032f2f759fff22cd0685" }, "downloads": -1, "filename": "pyning-0.1a10.tar.gz", "has_sig": false, "md5_digest": "cfa043366139346948071bcc0946f399", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4080, "upload_time": "2018-12-01T15:33:58", "url": "https://files.pythonhosted.org/packages/a2/57/649757e2ab32241b1afaba511cadcfb9f3537d2f3d03ca759a26a2518103/pyning-0.1a10.tar.gz" } ] }