{ "info": { "author": "Lars Hupfeldt Nielsen", "author_email": "lhn@hupfeldtit.dk", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Testing", "Topic :: System :: Installation/Setup" ], "description": "|Build Status| |Coverage| |Documentation Status| |PyPi Package|\n\nWhat\n====\n\nMulticonf is a framework for describing a complex configuration for\nmultiple environments using Python.\n\nWhy?\n====\n\nIt started from a simple need of deployment automation for Java EE projects,\nApache and more. Having worked on different projects with nested levels of\nplain text property files or XML configuration files,I thought something\nbetter was needed.\nWith plain text property files, the number of property files increases as\nenvironments and technologies are added to a project. It becomes hard to get\nan overview of properties describing similar configurations. Has a property\nvalue been defined for every environment? And it is getting even harder to\ndescribe *proper* settings: what depends on what and what can be used and what\ncan't.\nWith XML on the other hand, you can create a strict validated model, but you\nkeep having to extend the schema and the tools processing it. And maybe you\ndon't like the verbosity.\nSo why use XML or property files when you can have your configuration directly\nin python? So, out of this Multiconf was born.\n\nWhat are proper settings?\n-------------------------\n\nE.g:\n\n- All configured ports follow one convention\n- All servers names follow one convention\n- Some configuration objects must have mandatory parameters (for\n example: Database name or URL required for Datasource object)\n- Some configuration objects must have mandatory children (for example:\n WebLogic Cluster doesn't make sense w/o Managed Servers)\n- Default settings are propagated through all environments and can be\n overridden for specific environments\n- No duplicated settings\n\nHow\n===\n\nMulticonf provides a set of classes, where attributes may have different\nvalues for different environments, while enforcing that a value is\ndefined for all defined environments. Multiconf allows you to implement\nyour own DOM like object model and get early warning that something\nwithin your definition is wrong. Other tools use YAML or JSON to define\nsettings of the components, but then you need something to validate\nthose settings. Multiconf is both - definition and validation. Multiconf\nallows you to define environment groups, so that you can easily create\nnew environments by adding them to a group and only override the values\nthat differ from the group values.\n\nYou have to define your configuration data model as classes derived from\nMulticonf base classes, one of which is ``ConfigItem``.\n\nE.g, in your config data model (your framework) you define:\n\n.. code:: python\n\n class Host(ConfigItem):\n def __init__(name=MC_REQUIRED, mem=MC_REQUIRED):\n self.name = name\n self.mem = mem\n\n @property\n def fqd(self):\n return \"{name}.{env}.my.organisation\".format(\n self.name, self.env.name)\n\nIn you project configuration file you can then declare a configuration object\nwith different attribute values for different environments:\n\n.. code:: python\n\n ...\n with Host(\"web1\") as host:\n host.setattr('mem', dev=\"1G\", tst=\"2G\", preprod=\"4G\", prod=\"4G\")\n\nAbove uses the Multiconf ``setattr`` method to assign different values to different\nenvs. Note that the envs *dev*, *tst*, *preprod* and *prod* must have been declared\nbeforehand and Multiconf will ensure that all of them get a value.\n\nAfter instantiating your config for the *prod* env you can then access\nproperties on the host object::\n\n cfg.host.name -> web1\n cfg.host.mem -> 4G\n cfg.host.fqd -> web1.prod.my.organisation\n\nNote that classes derived from the Multiconf classes (e.g: ``ConfigItem``) do not\nallow on the fly creation of attributes. Configuration items are not meant for\ngeneral programming, but for strictly validated configurations.\n\nSee the documentation and the *demo* project for details about nested objects,\nrepeatable objects, instantiation, environment definitions, environment groups,\ndefault values and other details.\n\n\nWhat Multiconf is not\n=====================\n\n- Multiconf is not tied to configuration of any particular product or\n technology.\n- Multiconf doesn't know how to create any of the environment's\n components, i.e. Multiconf has no 'playbooks' or 'recipes' to execute.\n\n\nRunning the demo:\n=================\n\nExecute ./demo/demo.py --env (or 'python demo/demo.py ...'), e.g:\n\n./demo/demo.py --env prod\n\nIf run without any arguments it will print a usage message The valid\nenvironments are those specified at the top of demo/config.py\n\nRunning the test suite:\n=======================\n\nExecute: make, py.test or tox Running 'make' will execute the test\nsuite, the demo and build the documentation.\n\nRequirements\n============\n\nMulticonf: Python 3.6.1+ Test Suite: pytest, pytest-cov (for older Python versions use multiconf 8.x)\ndemjson (optional) - pip install -U pytest pytest-cov demjson\n\n.. |Build Status| image:: https://api.travis-ci.org/lhupfeldt/multiconf.svg?branch=master\n :target: https://travis-ci.org/lhupfeldt/multiconf\n.. |Documentation Status| image:: https://readthedocs.org/projects/multiconf/badge/?version=stable\n :target: https://multiconf.readthedocs.org/en/stable/\n.. |PyPi Package| image:: https://badge.fury.io/py/multiconf.svg\n :target: https://badge.fury.io/py/multiconf\n.. |Coverage| image:: https://coveralls.io/repos/github/lhupfeldt/multiconf/badge.svg?branch=master\n :target: https://coveralls.io/github/lhupfeldt/multiconf?branch=master\n.. |License| image:: https://img.shields.io/github/license/lhupfeldt/multiconf.svg\n :target: https://github.com/lhupfeldt/multiconf/blob/master/LICENSE.TXT\n\n\n", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/lhupfeldt/multiconf", "keywords": "", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "multiconf", "package_url": "https://pypi.org/project/multiconf/", "platform": "", "project_url": "https://pypi.org/project/multiconf/", "project_urls": { "Homepage": "https://github.com/lhupfeldt/multiconf" }, "release_url": "https://pypi.org/project/multiconf/9.0.0/", "requires_dist": [ "typing-inspect (>=0.2.0)" ], "requires_python": ">=3.6.1", "summary": "Python API providing a set of classes as basis for configuration objects with multiple values per attribute.", "version": "9.0.0" }, "last_serial": 5628649, "releases": { "3.3": [ { "comment_text": "", "digests": { "md5": "07695322a9405e7d2118a705cd93156a", "sha256": "481bcc3e90dffb6500219ba05c8b1e13b06ef4ecd110f8e6f21602396b28d688" }, "downloads": -1, "filename": "multiconf-3.3.tar.gz", "has_sig": false, "md5_digest": "07695322a9405e7d2118a705cd93156a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24242, "upload_time": "2015-11-28T22:12:42", "url": "https://files.pythonhosted.org/packages/d5/f2/dbefbdde0d4b621d79a0d66ba9d2fdbe90745b1b7a298282193eaa9a8523/multiconf-3.3.tar.gz" } ], "3.3.1": [ { "comment_text": "", "digests": { "md5": "7ea14a5bdda6763d1818fb7fc05eef77", "sha256": "a922b67a25380f1d16b580f555f3593cdecb4c1c371d14c3f6cf66e08fd60def" }, "downloads": -1, "filename": "multiconf-3.3.1.tar.gz", "has_sig": false, "md5_digest": "7ea14a5bdda6763d1818fb7fc05eef77", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24327, "upload_time": "2015-12-04T01:08:22", "url": "https://files.pythonhosted.org/packages/44/1c/1fb041812a40ecb571d188093f8aadc16e0453cc65979dc1ea845d08f7f2/multiconf-3.3.1.tar.gz" } ], "3.3.2": [ { "comment_text": "", "digests": { "md5": "cb600c90f7a06ebdf37092c497656aef", "sha256": "53f864e0fdf735ae6233c9674153690a7e890facb428f68648a7b2ccffd3d1c3" }, "downloads": -1, "filename": "multiconf-3.3.2.tar.gz", "has_sig": false, "md5_digest": "cb600c90f7a06ebdf37092c497656aef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24339, "upload_time": "2016-02-02T23:02:41", "url": "https://files.pythonhosted.org/packages/b6/fa/3cc62ac344e724b9b007a37f198d7ec4ef0ac61b4f207c8915999de1bf6f/multiconf-3.3.2.tar.gz" } ], "3.3.3": [ { "comment_text": "", "digests": { "md5": "7b97e7c4aa2defd189cd0be848a09561", "sha256": "f64078ced59b9c10611689431cc666b45fea70507d1d098dd56fcc96d5231b6d" }, "downloads": -1, "filename": "multiconf-3.3.3.tar.gz", "has_sig": false, "md5_digest": "7b97e7c4aa2defd189cd0be848a09561", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24333, "upload_time": "2016-02-22T23:24:37", "url": "https://files.pythonhosted.org/packages/35/e8/f7400cc5d657a4c11a754b0fd1599d549cf2f0660c312711587cf3cacf74/multiconf-3.3.3.tar.gz" } ], "3.3.4": [ { "comment_text": "", "digests": { "md5": "ab944f9406a7ae23d11652fdf56f1cf0", "sha256": "19dea092259a7f7542534b8f36e9290d308f99220fc8b56e23dcbb002dc9ec4a" }, "downloads": -1, "filename": "multiconf-3.3.4.tar.gz", "has_sig": false, "md5_digest": "ab944f9406a7ae23d11652fdf56f1cf0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24450, "upload_time": "2016-07-31T13:39:50", "url": "https://files.pythonhosted.org/packages/70/5a/69b53494961bfb71467e481b7c025f8054d1cec14f9c325c3bf6a0fc0458/multiconf-3.3.4.tar.gz" } ], "3.3.5": [ { "comment_text": "", "digests": { "md5": "e1b5c011c34c38ff17a7d2932956eb8b", "sha256": "0da265934b5d270b58f9932aec66bb511af414c15c132da10f4c14c89dc8c6fd" }, "downloads": -1, "filename": "multiconf-3.3.5.tar.gz", "has_sig": false, "md5_digest": "e1b5c011c34c38ff17a7d2932956eb8b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24449, "upload_time": "2016-08-01T17:07:58", "url": "https://files.pythonhosted.org/packages/02/2e/931041c395b4d44c48a21d8208625063a3478f92e4d8d839565b26413014/multiconf-3.3.5.tar.gz" } ], "4.0.0": [ { "comment_text": "", "digests": { "md5": "6214f6f4c329c28f3621cae137c3ac16", "sha256": "ec376387c0aa8373ee08159c965e3bf983ca225cc43bf182ce7e391884515e24" }, "downloads": -1, "filename": "multiconf-4.0.0.tar.gz", "has_sig": false, "md5_digest": "6214f6f4c329c28f3621cae137c3ac16", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23877, "upload_time": "2016-03-28T17:47:24", "url": "https://files.pythonhosted.org/packages/50/de/a74ba4283a6d1362ac5c6578cffb02d6b9948b0414c73f251ac6de7e2e6a/multiconf-4.0.0.tar.gz" } ], "4.0.1": [ { "comment_text": "", "digests": { "md5": "0c109a0c8f3ee8ecd8749028b985e6dd", "sha256": "803c2a8e91946474c2e51cf106f939a3d03e1009dc26949de5edabb877180de2" }, "downloads": -1, "filename": "multiconf-4.0.1.tar.gz", "has_sig": false, "md5_digest": "0c109a0c8f3ee8ecd8749028b985e6dd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24155, "upload_time": "2016-05-29T16:54:23", "url": "https://files.pythonhosted.org/packages/ae/78/89faf44dbdba877f19e70404b92a425162560079ee587953d680a62978e1/multiconf-4.0.1.tar.gz" } ], "4.1.0": [ { "comment_text": "", "digests": { "md5": "031b0a0092d7511297a63ea46a8ed023", "sha256": "0f56be9b0965dc58a9eb6f7ff022ff0867e8aad8960f36d05cb6874b7696eb80" }, "downloads": -1, "filename": "multiconf-4.1.0.tar.gz", "has_sig": false, "md5_digest": "031b0a0092d7511297a63ea46a8ed023", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24361, "upload_time": "2016-06-12T20:34:00", "url": "https://files.pythonhosted.org/packages/1a/23/1ed126c3f4943e9a31e460e3f02f2c536d9813e321dd9f54881d934e6e78/multiconf-4.1.0.tar.gz" } ], "4.2.0": [ { "comment_text": "", "digests": { "md5": "8e929f23038cbeb04f97ab85de41a9c4", "sha256": "596b2923f254954c0ae40e4a9be2382cb2593e39b6a1fc8dc91ecf979bd2299e" }, "downloads": -1, "filename": "multiconf-4.2.0.tar.gz", "has_sig": false, "md5_digest": "8e929f23038cbeb04f97ab85de41a9c4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24415, "upload_time": "2016-06-26T09:36:19", "url": "https://files.pythonhosted.org/packages/df/c6/03419b5406ae505c7a8820f37832adcb5e0023ad19cdb8d35072c32cc366/multiconf-4.2.0.tar.gz" } ], "4.2.1": [ { "comment_text": "", "digests": { "md5": "93a0582f414ef326b3c7f2dfd90fd95a", "sha256": "3069f5d01922f36f0226fe83da600f3026487eb551b9ac5c46a3105d3e76dfbb" }, "downloads": -1, "filename": "multiconf-4.2.1.tar.gz", "has_sig": false, "md5_digest": "93a0582f414ef326b3c7f2dfd90fd95a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24388, "upload_time": "2016-06-26T11:37:10", "url": "https://files.pythonhosted.org/packages/e6/f5/f874ce1bd05a88c68564fcdf86295464fadab7f37e5248385f68a1aedd8c/multiconf-4.2.1.tar.gz" } ], "4.2.2": [ { "comment_text": "", "digests": { "md5": "95b31ee0724fa477bd462f4ac858b92e", "sha256": "f62178f7b0c4508bc96b44967e67b4da73f8b4697b772ac9b21599e2d7407e4b" }, "downloads": -1, "filename": "multiconf-4.2.2.tar.gz", "has_sig": false, "md5_digest": "95b31ee0724fa477bd462f4ac858b92e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24664, "upload_time": "2016-07-31T14:03:58", "url": "https://files.pythonhosted.org/packages/cd/bf/d1b61ddc02d398d92866cb1f5e7dcbefb4176401e96064531904597bb43e/multiconf-4.2.2.tar.gz" } ], "4.4.3": [ { "comment_text": "", "digests": { "md5": "fd7650c6ffde72c3c2c1425acd2bd466", "sha256": "25dfe88c5f4ebded86c8813cd4ed20234d7e5f52ceb92835288e40c5370808b6" }, "downloads": -1, "filename": "multiconf-4.4.3.tar.gz", "has_sig": false, "md5_digest": "fd7650c6ffde72c3c2c1425acd2bd466", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24647, "upload_time": "2016-08-01T17:10:03", "url": "https://files.pythonhosted.org/packages/ad/11/ed2405f0e652c78a07ef2ac233c72a35e000a93f895ae5b19aff96affed6/multiconf-4.4.3.tar.gz" } ], "4.4.4": [ { "comment_text": "", "digests": { "md5": "6000e0d74d510577900fffc9e1f33400", "sha256": "a59d64e9f6f8e18282ca3be1d1e92ee54a36607beeb2b20c8210c45d5cd99239" }, "downloads": -1, "filename": "multiconf-4.4.4.tar.gz", "has_sig": false, "md5_digest": "6000e0d74d510577900fffc9e1f33400", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24917, "upload_time": "2016-08-14T20:32:58", "url": "https://files.pythonhosted.org/packages/19/d5/cfa64b0498c40adcc2a546a4e78340dee3d4b04b9249a2941ff3922faf2e/multiconf-4.4.4.tar.gz" } ], "4.4.5": [ { "comment_text": "", "digests": { "md5": "2fb3b3acd4fef0f9d35e41882e6aa3df", "sha256": "7286bfa36fce6e129fa02dd03c9e1c91f86874a30f6499faa25490f96a139ab5" }, "downloads": -1, "filename": "multiconf-4.4.5.tar.gz", "has_sig": false, "md5_digest": "2fb3b3acd4fef0f9d35e41882e6aa3df", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 79177, "upload_time": "2016-09-11T12:06:36", "url": "https://files.pythonhosted.org/packages/2c/66/37f05ebb667cebf4acd959d74e412df33ae569082acf60a4c6a6d4aeaca2/multiconf-4.4.5.tar.gz" } ], "4.4.6": [ { "comment_text": "", "digests": { "md5": "fcbc1cd2366f37636b827b59b041a152", "sha256": "4624dd715d84e9b83d6d2ba712a99f0fcc17b29338c699323e14277244ddd19f" }, "downloads": -1, "filename": "multiconf-4.4.6.tar.gz", "has_sig": false, "md5_digest": "fcbc1cd2366f37636b827b59b041a152", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 82306, "upload_time": "2016-09-18T10:05:53", "url": "https://files.pythonhosted.org/packages/7d/06/369a13df54a0b1163d900da3ad15b838915160ac03256bcfab470efd5b75/multiconf-4.4.6.tar.gz" } ], "4.5.0": [ { "comment_text": "", "digests": { "md5": "2026d23150074d079388eb17c22b6088", "sha256": "a2ec1c51e68dbbcdd487821f784deab6e0474874e038d024b24cf7c25d79bac8" }, "downloads": -1, "filename": "multiconf-4.5.0.tar.gz", "has_sig": false, "md5_digest": "2026d23150074d079388eb17c22b6088", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 80093, "upload_time": "2017-08-20T22:50:29", "url": "https://files.pythonhosted.org/packages/27/bf/557402050b04e000f683f3f5df4c88fae5eab89004e917b2ea41d743b96d/multiconf-4.5.0.tar.gz" } ], "4.5.1": [ { "comment_text": "", "digests": { "md5": "ac3a8f579caf42a6d5cdab56560ab4da", "sha256": "5c45ae0271149ebf12d8325e293c75db76c37bd6f3814a4316c843c171ed6d94" }, "downloads": -1, "filename": "multiconf-4.5.1.tar.gz", "has_sig": false, "md5_digest": "ac3a8f579caf42a6d5cdab56560ab4da", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 80340, "upload_time": "2017-08-24T21:10:40", "url": "https://files.pythonhosted.org/packages/fa/a2/da726bee1c39a8cf02c8954aa85f30ef25f14348a111db1192ef106f8b1e/multiconf-4.5.1.tar.gz" } ], "4.5.2": [ { "comment_text": "", "digests": { "md5": "2d2ce6b41215dd7bae2eedb108d60af6", "sha256": "ab61849c457a26a5fb719447161cf9de018dcb3d05bc5e46565b88e8b00d6636" }, "downloads": -1, "filename": "multiconf-4.5.2.tar.gz", "has_sig": false, "md5_digest": "2d2ce6b41215dd7bae2eedb108d60af6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 80450, "upload_time": "2017-08-31T21:21:10", "url": "https://files.pythonhosted.org/packages/66/df/08e31384518869a8036150fb37f9807fcb387c12dd840dc8fd4c6c8f65e2/multiconf-4.5.2.tar.gz" } ], "5.0.3": [ { "comment_text": "", "digests": { "md5": "2c9cd8382b19a401d03ce2b2e2d29820", "sha256": "c427d1dc6889a7539b1a5e607d6822924ee62237160b62b0e89423600349c3f1" }, "downloads": -1, "filename": "multiconf-5.0.3.tar.gz", "has_sig": false, "md5_digest": "2c9cd8382b19a401d03ce2b2e2d29820", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 82784, "upload_time": "2016-09-18T09:22:20", "url": "https://files.pythonhosted.org/packages/4b/98/fe1cd828268d2a22fbad8c30ed23ec826da403de4d6f0c57e76f07c3a60b/multiconf-5.0.3.tar.gz" } ], "5.0.4": [ { "comment_text": "", "digests": { "md5": "243f84e4b17d0d031737318fc1a71c36", "sha256": "db0435b5f539423a599c50ce5db452f8a7fea7d2b5d37a15034c7283a220ac7e" }, "downloads": -1, "filename": "multiconf-5.0.4.tar.gz", "has_sig": false, "md5_digest": "243f84e4b17d0d031737318fc1a71c36", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 80870, "upload_time": "2017-08-31T21:28:42", "url": "https://files.pythonhosted.org/packages/91/6e/5363e2431f7674f4f37478fc4f046baf2b9ab4946fa0fec32e4c1a21244f/multiconf-5.0.4.tar.gz" } ], "7.0.0": [ { "comment_text": "", "digests": { "md5": "bdc4eba39785a7049126e31236192fac", "sha256": "b55c25e15c5a9472d7aa09f1d25c8e258254bc38673d79a7b36a91ceb52f5ac8" }, "downloads": -1, "filename": "multiconf-7.0.0.tar.gz", "has_sig": false, "md5_digest": "bdc4eba39785a7049126e31236192fac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 105761, "upload_time": "2018-01-23T17:12:03", "url": "https://files.pythonhosted.org/packages/de/cc/2b2043f5b4e5066db2db0e3639ef451dfe28371ccda2036c4c96a24e4397/multiconf-7.0.0.tar.gz" } ], "7.1.0": [ { "comment_text": "", "digests": { "md5": "74b37b0a41a96b74269c7832ec51c3a1", "sha256": "635eac420920c7025fbb48ca3b9d896550307a75aa53ed6e130313d3d0996850" }, "downloads": -1, "filename": "multiconf-7.1.0.tar.gz", "has_sig": false, "md5_digest": "74b37b0a41a96b74269c7832ec51c3a1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 106807, "upload_time": "2018-01-26T00:55:22", "url": "https://files.pythonhosted.org/packages/70/a4/2023afbc9b5e3202ef99e93d261baaee141da93e3db129ff7c72916c2163/multiconf-7.1.0.tar.gz" } ], "7.2.0": [ { "comment_text": "", "digests": { "md5": "d5fe6a71812f3928ca2c6628927b614b", "sha256": "8ea832d40d94319b39c06f12d79a770ab933fcf0b10a7f2db2e70509e48ee8c9" }, "downloads": -1, "filename": "multiconf-7.2.0.tar.gz", "has_sig": false, "md5_digest": "d5fe6a71812f3928ca2c6628927b614b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 107208, "upload_time": "2018-01-27T19:11:52", "url": "https://files.pythonhosted.org/packages/7f/82/2a3765ce73de590bd305ad5abac0b60009e9e2144fb670c5855324837804/multiconf-7.2.0.tar.gz" } ], "7.2.1": [ { "comment_text": "", "digests": { "md5": "3ec06a3f6d6f4e1ff65eea5bf3876c1f", "sha256": "7371c0d42b6428f328c3b20acfbe7561d4827e379573144c85edb2d3413bd1bd" }, "downloads": -1, "filename": "multiconf-7.2.1.tar.gz", "has_sig": false, "md5_digest": "3ec06a3f6d6f4e1ff65eea5bf3876c1f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 107751, "upload_time": "2018-02-01T20:49:40", "url": "https://files.pythonhosted.org/packages/09/e8/6100f6b87f4bfc80b81d53b1aa523522aa8b6455cd476ca1ed0f89f162d0/multiconf-7.2.1.tar.gz" } ], "7.2.2": [ { "comment_text": "", "digests": { "md5": "c46947c08819bfccfc7ef40226a3e71d", "sha256": "7c11deb7dba1072ce070b8f3f3fd47b4c128e1d4ca85eb3d6ab9760ad7444704" }, "downloads": -1, "filename": "multiconf-7.2.2.tar.gz", "has_sig": false, "md5_digest": "c46947c08819bfccfc7ef40226a3e71d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 110117, "upload_time": "2018-03-15T11:13:46", "url": "https://files.pythonhosted.org/packages/60/a3/e025da416154fa72f8b0a97bb83e3adce367cea0c02574fa9b3db7ac9584/multiconf-7.2.2.tar.gz" } ], "7.2.3": [ { "comment_text": "", "digests": { "md5": "d5751fc0362ab07c80a5ea313887a998", "sha256": "659fd5dbef39bc596bfefac31231e86e7cefc5a539779c2a31c2d9721b1487c0" }, "downloads": -1, "filename": "multiconf-7.2.3.tar.gz", "has_sig": false, "md5_digest": "d5751fc0362ab07c80a5ea313887a998", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 111865, "upload_time": "2018-05-07T12:51:54", "url": "https://files.pythonhosted.org/packages/95/a3/303bc4c2eca86bd0d22277ae9ef70a8c73b3f36be69bdcda50770a93e26a/multiconf-7.2.3.tar.gz" } ], "8.0.0": [ { "comment_text": "", "digests": { "md5": "78263fde4a1f3635347e0433f14b61a6", "sha256": "cf15c3c2f3a462b2617322634ac21a15dbcdeabff05e6b4f42cbeded0d84d0e8" }, "downloads": -1, "filename": "multiconf-8.0.0.tar.gz", "has_sig": false, "md5_digest": "78263fde4a1f3635347e0433f14b61a6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 114965, "upload_time": "2018-06-29T21:28:20", "url": "https://files.pythonhosted.org/packages/08/39/116109b078b66bc05c9494ca74f8075c483d2d493ef0d7e3971c327996be/multiconf-8.0.0.tar.gz" } ], "8.0.1": [ { "comment_text": "", "digests": { "md5": "287f34190350e9d46ce61d900eb41d5b", "sha256": "f165c3ed6f366763120d379d43906df69ee8f201ea6cc40ed3ca1ad1d420a962" }, "downloads": -1, "filename": "multiconf-8.0.1.tar.gz", "has_sig": false, "md5_digest": "287f34190350e9d46ce61d900eb41d5b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 114939, "upload_time": "2018-09-08T13:38:36", "url": "https://files.pythonhosted.org/packages/5f/31/66bd61c2d9f4a06cc4130650092ef021a0761c06c93c8112a92821851a60/multiconf-8.0.1.tar.gz" } ], "8.1.0": [ { "comment_text": "", "digests": { "md5": "784f30bfc07f630a7faf70e1a4b9a1c7", "sha256": "f27cea47848c623a7af05efeecb62ee278b57719d6d96e8f96eb4b8acd989991" }, "downloads": -1, "filename": "multiconf-8.1.0.tar.gz", "has_sig": false, "md5_digest": "784f30bfc07f630a7faf70e1a4b9a1c7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 116336, "upload_time": "2018-09-11T20:24:00", "url": "https://files.pythonhosted.org/packages/7b/1c/da7c7991e70b3ba790754802f9acc060e02688c416d6f8b4c31b567b2487/multiconf-8.1.0.tar.gz" } ], "8.1.1": [ { "comment_text": "", "digests": { "md5": "2183f459ea8eee81fe28c732afa71d4f", "sha256": "acc1b8d746be12c3eb53587e8628e9e61995d2c04eed6af24c702ee8db9fe58f" }, "downloads": -1, "filename": "multiconf-8.1.1.tar.gz", "has_sig": false, "md5_digest": "2183f459ea8eee81fe28c732afa71d4f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 116370, "upload_time": "2018-09-15T22:11:06", "url": "https://files.pythonhosted.org/packages/e4/b8/cc2fcf5d67449833b051f3cba7640a338d4ea44d7b2bb4306d0d8d52b28b/multiconf-8.1.1.tar.gz" } ], "8.2.0": [ { "comment_text": "", "digests": { "md5": "eb62bff0e470232f653770f3f600568c", "sha256": "4352171587c1e99fce7d8d13cc19e95c68c2fc462e36784878aea2ea38c6f0ea" }, "downloads": -1, "filename": "multiconf-8.2.0.tar.gz", "has_sig": false, "md5_digest": "eb62bff0e470232f653770f3f600568c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 116407, "upload_time": "2018-09-16T13:08:26", "url": "https://files.pythonhosted.org/packages/08/dd/51afd3fb47a3f6bab2daf0d3de952cb4ad662c1e1c0b7d47943214c130a9/multiconf-8.2.0.tar.gz" } ], "9.0.0": [ { "comment_text": "", "digests": { "md5": "f6d285e2ac9c47fd3f8db70ce4ca4435", "sha256": "a22aa99e6a5b8f08335afd62594d748df269bbbe9de6ccfbea4beccd74046b93" }, "downloads": -1, "filename": "multiconf-9.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f6d285e2ac9c47fd3f8db70ce4ca4435", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.1", "size": 39085, "upload_time": "2019-08-03T16:45:29", "url": "https://files.pythonhosted.org/packages/b7/78/c5156ba48e536698394001448b6b16836ced6b6e49f1b1fb27102cd7fc44/multiconf-9.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1b2ae7eb1163203a8c65c8fdaa4fb21d", "sha256": "aa2d9396a651fc3698a26046e95e7e102c0fb65e126bd40de78c6c355cead426" }, "downloads": -1, "filename": "multiconf-9.0.0.tar.gz", "has_sig": false, "md5_digest": "1b2ae7eb1163203a8c65c8fdaa4fb21d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.1", "size": 113617, "upload_time": "2019-08-03T16:45:31", "url": "https://files.pythonhosted.org/packages/0b/9c/f253ff74cf3175cf8db1efda3d235e992c79c12c98ce821935e0adc1ff23/multiconf-9.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f6d285e2ac9c47fd3f8db70ce4ca4435", "sha256": "a22aa99e6a5b8f08335afd62594d748df269bbbe9de6ccfbea4beccd74046b93" }, "downloads": -1, "filename": "multiconf-9.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f6d285e2ac9c47fd3f8db70ce4ca4435", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.1", "size": 39085, "upload_time": "2019-08-03T16:45:29", "url": "https://files.pythonhosted.org/packages/b7/78/c5156ba48e536698394001448b6b16836ced6b6e49f1b1fb27102cd7fc44/multiconf-9.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1b2ae7eb1163203a8c65c8fdaa4fb21d", "sha256": "aa2d9396a651fc3698a26046e95e7e102c0fb65e126bd40de78c6c355cead426" }, "downloads": -1, "filename": "multiconf-9.0.0.tar.gz", "has_sig": false, "md5_digest": "1b2ae7eb1163203a8c65c8fdaa4fb21d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.1", "size": 113617, "upload_time": "2019-08-03T16:45:31", "url": "https://files.pythonhosted.org/packages/0b/9c/f253ff74cf3175cf8db1efda3d235e992c79c12c98ce821935e0adc1ff23/multiconf-9.0.0.tar.gz" } ] }