{ "info": { "author": "Ravi Shekhar Jethani", "author_email": "rsjethani@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Build Tools" ], "description": "|pic1| |pic2| |pic3| |pic4|\n\n\n####################################\nA Simple Ansible Inventory Generator\n####################################\n\n\n=Overview=\n**********\nThis simple library makes it easier to write the **glue code** between infrastructure bringup/orchestration and software provisioning stages of a one-click deployment.\n\nHead over to the `wiki page `_ for more explanation about this project.\n\n\n=Installation=\n**************\n::\n\n pip install ansinv\n\n\n=Working with inventory hosts=\n******************************\n\nCreating a host with optional `host variables `_:\n---------------------------------------------------------------------------------------------------------------------------------------------------\n::\n\n host1 = ansinv.AnsibleHost(\"192.168.10.11\", affinity=12, scan=\"no\")\n\nGet a host's ip/name using ``AnsibleHost.name`` attribute:\n----------------------------------------------------------\n::\n\n print(host1.name)\n\nRead/Update a host's host variables using ``AnsibleHost.hostvars`` attribute:\n-----------------------------------------------------------------------------\n::\n\n print(host1.hostvars[\"scan\"])\n host1.hostvars[\"affinity\"] = 5\n host1.hostvars.update(x=100)\n\n\n=Working with inventory groups=\n*******************************\n\nCreating a group with optional `group variables `_:\n---------------------------------------------------------------------------------------------------------------------------------------------------\n::\n\n group1 = ansinv.AnsibleGroup(\"group1\", ssh_port=8800)\n\nGet a group's name using ``AnsibleGroup.name`` attribute:\n----------------------------------------------------------\n::\n\n print(group1.name)\n\nRead/Update a group's group variables using the ``AnsibleGroup.groupvars`` attribute:\n-------------------------------------------------------------------------------------\n::\n\n print(group1.groupvars[\"ssh_port\"])\n group1.groupvars[\"ssh_port\"] = 22\n group1.groupvars.update(x=100)\n\nAdding hosts to a group using ``AnsibleGroup.add_hosts`` method:\n----------------------------------------------------------------\n::\n\n group1.add_hosts(host1, host2, ...) # host1, host2, etc. must already exist\n group1.add_hosts(ansinv.AnsibleHost(\"192.168.12.12\", hostvar1=\"value\")) # creating and adding hosts at the same time\n\n**Please note:** Adding a host actually creates a **copy** of the host object under the group. So to make modifications to a host object after it has been added, use ``AnsibleGroup.host`` method as described below.\n\nGet access to a member host using ``AnsibleGroup.host('hostname')`` method:\n---------------------------------------------------------------------------\n::\n\n group1.host(\"192.168.1.12\").hostvars[\"hostvar1\"] = \"new value\"\n\n**Please note:** The host() method will always return the first occurrence of the given 'hostname', even if there are multiple hosts with same name in the group. This behavior assumes that even though you are allowed to have multiple hosts with same name but you will never actually require such a case.\n\nGet a list of all host objects in a group using ``AnsibleGroup.hosts`` attribute:\n---------------------------------------------------------------------------------\n::\n\n print(group1.hosts[0].name)\n\nEstablish parent-child relation between groups using ``AnsibleGroup.add_children`` method:\n------------------------------------------------------------------------------------------\n::\n\n child1 = AnsibleGroup(\"master\")\n child2 = AnsibleGroup(\"worker\")\n parent = AnsibleGroup(\"cluster\")\n parent.add_children(child1, child2)\n parent.add_children(parent) # ValueError when trying to add itself as a child\n child1.add_children(parent) # ValueError when trying to add a parent group as a child\n\nCheck whether the group is a parent of given group using ``AnsibleGroup.is_parent_of`` method:\n----------------------------------------------------------------------------------------------\n::\n\n group1.is_parent_of(group2) # Returns a bool value\n\nCheck whether the group is a child of given group using ``AnsibleGroup.is_child_of`` method:\n--------------------------------------------------------------------------------------------\n::\n\n group1.is_child_of(group2) # Returns a bool value\n\nGet a list of all child objects using ``AnsibleGroup.children`` attribute:\n----------------------------------------------------------------------------------\n::\n\n print(group1.children[0].name)\n\n\n=Working with the inventory itself=\n***********************************\n\nCreating an inventory:\n----------------------\n::\n\n inv = AnsibleInventory() # empty inventory\n inv = AnsibleInventory(AnsibleHost(\"h1\"), AnsibleHost(\"h2\")) # inventory initialized with two ungrouped hosts\n\nAdd (ungrouped) hosts to the inventory using ``AnsibleInventory.add_hosts`` method:\n-----------------------------------------------------------------------------------\n::\n\n h1 = AnsibleHost(\"h1\")\n h2 = AnsibleHost(\"h2\")\n inv.add_hosts(h1, h2)\n\n**Please note:** The hosts added directly to the inventory are 'ungrouped' hosts i.e. they will not appear under other groups.\n\nAdd groups to the inventory using ``AnsibleInventory.add_groups`` method:\n-------------------------------------------------------------------------\n::\n\n g1 = AnsibleGroup(\"g1\")\n g2 = AnsibleGroup(\"g2\")\n inv.add_groups(g1, g2)\n\n**Please note:** Adding a host/group actually creates a **copy** of the host/group object under the inventory. So to make modifications to a host/group object after it has been added, use ``AnsibleInventory.host(hostname)``/``AnsibleInventory.group(groupname)`` methods as described below.\n\nGet an *ungrouped* host object from the inventory using ``AnsibleInventory.host`` method:\n-----------------------------------------------------------------------------------------\n::\n\n print(inv.host(\"h1\"))\n inv.host(\"h1\").hostvars[\"somevar\"] = 111 # modify an ungrouped host after it has been added to the inventory\n\nGet a group object from the inventory using ``AnsibleInventory.group('groupname')`` method:\n-------------------------------------------------------------------------------------------\n::\n\n inv.group(\"g1\").groupvars[\"x\"] = 1111\n inv.group(\"g1\").host(\"h1\").hostvars[\"somevar\"] = 333\n\n**Please note:** The group() method will always return the first occurrence of the given 'groupname', even if there are multiple groups with same name in the inventory. This behavior assumes that even though you are allowed to have multiple groups with same name but you will never actually require such a case.\n\nGet a list of all group objects from the inventory using ``AnsibleInventory.groups`` attribute:\n-----------------------------------------------------------------------------------------------\n::\n\n for grp in inv.groups:\n print(grp.name)\n\nGet the whole inventory as a string object:\n-------------------------------------------\nThe string version of the inventory is in the INI format which you can simply write to a file and pass the file to Ansible.\n::\n\n inv = AnsibleInventory()\n ... # add some groups and hosts\n print(str(inv))\n with open(\"inventory\", \"w\") as f:\n f.write(str(inv))\n\nFor more explanation and a full example please visit the `wiki page `_.\n\n\n.. |pic1| image:: https://img.shields.io/badge/License-MIT-yellow.svg\n :target: https://opensource.org/licenses/MIT\n\n.. |pic2| image:: https://badge.fury.io/py/ansinv.svg\n :target: https://pypi.org/project/ansinv\n\n.. |pic3| image:: https://travis-ci.com/rsjethani/ansinv.svg?branch=master\n :target: https://travis-ci.com/rsjethani/ansinv\n\n.. |pic4| image:: https://codecov.io/gh/rsjethani/ansinv/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/rsjethani/ansinv\n\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/rsjethani/ansinv", "keywords": "ansible devops", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "ansinv", "package_url": "https://pypi.org/project/ansinv/", "platform": "", "project_url": "https://pypi.org/project/ansinv/", "project_urls": { "Homepage": "https://github.com/rsjethani/ansinv", "source": "https://github.com/rsjethani/ansinv" }, "release_url": "https://pypi.org/project/ansinv/4.0.0/", "requires_dist": null, "requires_python": "", "summary": "Generate Ansible Inventory", "version": "4.0.0" }, "last_serial": 4747234, "releases": { "1.3.0": [ { "comment_text": "", "digests": { "md5": "3330e5e6759e6d62d9a7d530459f5538", "sha256": "8ae8e0b8dceb85cf1a41e748bf87fcfa05cd0680de52f6b26ab425ecba1e7c63" }, "downloads": -1, "filename": "ansinv-1.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "3330e5e6759e6d62d9a7d530459f5538", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 3426, "upload_time": "2018-10-29T19:52:03", "url": "https://files.pythonhosted.org/packages/c3/55/c71b2a400d7cd8c226cdb7b0ef84e2d69264c7d4148529f36066a700e834/ansinv-1.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "13081a54f4cb82f6170216921d71d833", "sha256": "b2b9326552bcc938c0594f4c7a04a1145e7d4c7a3b0245c786e3b02c15194aa2" }, "downloads": -1, "filename": "ansinv-1.3.0.tar.gz", "has_sig": false, "md5_digest": "13081a54f4cb82f6170216921d71d833", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3014, "upload_time": "2018-10-29T19:52:05", "url": "https://files.pythonhosted.org/packages/37/c3/1d00dd68f19ac5316d7bb3102f0eb577a28d93a6decf0ed07e34ea538fcf/ansinv-1.3.0.tar.gz" } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "24c006ad31078b7836e06411c4d49f83", "sha256": "c69bc2600cfea3046ac07fd84542e3fc4777e55daa8e9c893f4e5f32e682349a" }, "downloads": -1, "filename": "ansinv-1.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "24c006ad31078b7836e06411c4d49f83", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 3802, "upload_time": "2018-10-29T20:03:40", "url": "https://files.pythonhosted.org/packages/cf/f1/ed758f13ac873242778881df78733734677a4addff89b69f14fa317a4f7f/ansinv-1.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f0569fb5609ee81614bc5dfc2e808f49", "sha256": "55834652b046e4fb6c9d10451750d449e77503e694e0196470ab7df4580faf0a" }, "downloads": -1, "filename": "ansinv-1.3.1.tar.gz", "has_sig": false, "md5_digest": "f0569fb5609ee81614bc5dfc2e808f49", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3540, "upload_time": "2018-10-29T20:03:42", "url": "https://files.pythonhosted.org/packages/f7/55/776d502ad6f6bd34d886015e8ddd85b460f91bf986fec66da6ba884be503/ansinv-1.3.1.tar.gz" } ], "1.3.2": [ { "comment_text": "", "digests": { "md5": "a4144584857827d53eb4cd5eafd4d9f6", "sha256": "142f2afc72ff1299e9b6cadbac2d5011f30178d1f8fa45ea100df76c8fe8984e" }, "downloads": -1, "filename": "ansinv-1.3.2.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "a4144584857827d53eb4cd5eafd4d9f6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5045, "upload_time": "2018-11-25T22:04:08", "url": "https://files.pythonhosted.org/packages/b1/d2/d62978996f02218de6fbeb6b4c102529c4b5fdcdef9c7d366f3e1b44c28b/ansinv-1.3.2.linux-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "144da9153642e6420b9d0fb95c43dbd1", "sha256": "af31f320cf518e68072907a22f9bae65d5701f8c759125bc0d9a3727f8b8188a" }, "downloads": -1, "filename": "ansinv-1.3.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "144da9153642e6420b9d0fb95c43dbd1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 3984, "upload_time": "2018-11-25T22:09:23", "url": "https://files.pythonhosted.org/packages/5b/f9/26e697071a76ea95a532339ddb826eae985e64a8934df7da8d55d5db17c4/ansinv-1.3.2-py2.py3-none-any.whl" } ], "1.3.3": [ { "comment_text": "", "digests": { "md5": "9e5371747168d92a2ce7284e3c02926a", "sha256": "1fccba228cec8419acc0c2ebd45c12bb4f47996634b0c1df1d44c746cde15b4c" }, "downloads": -1, "filename": "ansinv-1.3.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9e5371747168d92a2ce7284e3c02926a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 4983, "upload_time": "2018-11-26T16:07:04", "url": "https://files.pythonhosted.org/packages/84/d0/0f2ba2faf2ac58383327200a2ad7267376bf37fb38226ced1c5a31beeb62/ansinv-1.3.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f6af9aec57624d85ce26f69349ae44ed", "sha256": "6d927190e8ed21e1725eadbff42e26997103f03470aa448934683beed6cd5f58" }, "downloads": -1, "filename": "ansinv-1.3.3.tar.gz", "has_sig": false, "md5_digest": "f6af9aec57624d85ce26f69349ae44ed", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4902, "upload_time": "2018-11-26T16:07:42", "url": "https://files.pythonhosted.org/packages/e2/8b/b997af1fb6c61a014dabb801671b801d876469f6436c3192ffa34fcaf665/ansinv-1.3.3.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "811fa57d82bbdc2105edff527565e4d2", "sha256": "523f7c75c618a992b058bd74a1c9b4a726f31add33c68262ea16b834163bb597" }, "downloads": -1, "filename": "ansinv-2.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "811fa57d82bbdc2105edff527565e4d2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 4309, "upload_time": "2019-01-05T15:55:16", "url": "https://files.pythonhosted.org/packages/61/6b/b87aec713e2c45cc00910606cefef58dfbdbe067b744aee47ccb9295f94d/ansinv-2.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7f67b33768a62a0c273737a7e0fb7c95", "sha256": "e4fa202e04634798a065a634d966d3937bad673b5a2083d9ee341b52d667016d" }, "downloads": -1, "filename": "ansinv-2.0.0.tar.gz", "has_sig": false, "md5_digest": "7f67b33768a62a0c273737a7e0fb7c95", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3581, "upload_time": "2019-01-05T15:55:17", "url": "https://files.pythonhosted.org/packages/7f/68/247ed92a6fdb22ef58919bd4e748dac32d28082a2208e1da8ec6d6a24599/ansinv-2.0.0.tar.gz" } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "356dcf85cdd85dd6fb04e99ba70df5f2", "sha256": "24ab3eb1b7038d63d70e7e799af13a5dee7220c09018868a969eef06018154b7" }, "downloads": -1, "filename": "ansinv-2.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "356dcf85cdd85dd6fb04e99ba70df5f2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 4320, "upload_time": "2019-01-05T17:17:07", "url": "https://files.pythonhosted.org/packages/ac/8c/12a08b2be6454b2c0d95f07d4f70e2f14e50b68c9d3bbded1d8b8389e70e/ansinv-2.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e60c01f9a6e92ef65fdda44224c98dea", "sha256": "ef4e144d58f69c2ed0fb14b603bd0849d2eaa5973c584e29315186cae1b0cacf" }, "downloads": -1, "filename": "ansinv-2.0.1.tar.gz", "has_sig": false, "md5_digest": "e60c01f9a6e92ef65fdda44224c98dea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3585, "upload_time": "2019-01-05T17:17:08", "url": "https://files.pythonhosted.org/packages/81/91/b42df9986554367971d3ab68a2e93706d38072ab206eef78907c2d2542e0/ansinv-2.0.1.tar.gz" } ], "2.0.2": [ { "comment_text": "", "digests": { "md5": "f13f73f4fdd42e2c41dbe9f753f05a83", "sha256": "672f98e73a6f08be530f3e90a0856175174647e59e2726762e2448e580a4498c" }, "downloads": -1, "filename": "ansinv-2.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f13f73f4fdd42e2c41dbe9f753f05a83", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 4234, "upload_time": "2019-01-06T13:19:36", "url": "https://files.pythonhosted.org/packages/b6/7f/302218f8d32866a40ced2934cea1c9493285ee41ba90e99686c46a65e151/ansinv-2.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e271185c323da44d5cad977e05e82b9d", "sha256": "e549a10d53f44f192e737ff4fba089868c7a1bbdd2f2388f215293bb1cbdf704" }, "downloads": -1, "filename": "ansinv-2.0.2.tar.gz", "has_sig": false, "md5_digest": "e271185c323da44d5cad977e05e82b9d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3621, "upload_time": "2019-01-06T13:19:37", "url": "https://files.pythonhosted.org/packages/23/1e/9c54fb6bf5a5ba3cdc19e1a70dee284cf848abae5833304537d0cd59d855/ansinv-2.0.2.tar.gz" } ], "2.0.3": [ { "comment_text": "", "digests": { "md5": "8ef09f96437ffd65aaff8e9a15d089b6", "sha256": "340a2a2f3c9ab41eafe441605a1945e2501f0b32b53ab477c3e9c9484a662d62" }, "downloads": -1, "filename": "ansinv-2.0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8ef09f96437ffd65aaff8e9a15d089b6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 4235, "upload_time": "2019-01-06T13:54:24", "url": "https://files.pythonhosted.org/packages/33/7d/d0ddb76145766d7c4faefe8e958f6c997223c4ca5252c370c2835431b313/ansinv-2.0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c96f99da2a741ec5521df77bea2ead92", "sha256": "fc71af737a59dbb7baa4daf2a5a30f93073e1455d97dd09d6b40a7ddc9ba64f4" }, "downloads": -1, "filename": "ansinv-2.0.3.tar.gz", "has_sig": false, "md5_digest": "c96f99da2a741ec5521df77bea2ead92", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3621, "upload_time": "2019-01-06T13:54:26", "url": "https://files.pythonhosted.org/packages/86/f9/d5b06638efe7e556549df98957885cd853d4a65bd0868e568bc97deb7e22/ansinv-2.0.3.tar.gz" } ], "3.0.0": [ { "comment_text": "", "digests": { "md5": "16b0dcfcd5fb621ebf2406b7d8a9cecf", "sha256": "3cadab7d04dd237b3034a940c7a3becdd3d045fb8723214f52934f134e255d5e" }, "downloads": -1, "filename": "ansinv-3.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "16b0dcfcd5fb621ebf2406b7d8a9cecf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 4930, "upload_time": "2019-01-25T14:54:19", "url": "https://files.pythonhosted.org/packages/83/83/6a1bc9110ba571d154633110cd064eb10fe19f669f20a7eaec2b2a0338bb/ansinv-3.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e4e36d3daed87f20c5b7f4797be5f7fc", "sha256": "9c75cefa15317b3d6859f9385ff210364c795468d1063bc95076faf4eba68c4c" }, "downloads": -1, "filename": "ansinv-3.0.0.tar.gz", "has_sig": false, "md5_digest": "e4e36d3daed87f20c5b7f4797be5f7fc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4532, "upload_time": "2019-01-25T14:54:21", "url": "https://files.pythonhosted.org/packages/79/e4/24157f95861dd7e0bc1507e371ef0d7c145a63152404ea9519a7c9e1fbbc/ansinv-3.0.0.tar.gz" } ], "4.0.0": [ { "comment_text": "", "digests": { "md5": "f22376f4625099b7c62e5ae13a59afcd", "sha256": "09b3761ca9827ebe94b5c6c3ddb650f47244ab229489452d129db69034d87b81" }, "downloads": -1, "filename": "ansinv-4.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f22376f4625099b7c62e5ae13a59afcd", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 4938, "upload_time": "2019-01-27T21:26:40", "url": "https://files.pythonhosted.org/packages/3a/1d/2cbd386797f576c6b7d6321a6e500ee212ab4ba4d4dc7b7c0479320c31ce/ansinv-4.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c2879cbab7ebac90b4eb8c748597997a", "sha256": "c753221768c34f60c109e21c94c9010d49e0626af61dfe870582988ec168ec55" }, "downloads": -1, "filename": "ansinv-4.0.0.tar.gz", "has_sig": false, "md5_digest": "c2879cbab7ebac90b4eb8c748597997a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4534, "upload_time": "2019-01-27T21:26:42", "url": "https://files.pythonhosted.org/packages/a2/49/8c77d77835d57bf3ef55bd8c208d3de01af5376d194236144672642d6e2c/ansinv-4.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f22376f4625099b7c62e5ae13a59afcd", "sha256": "09b3761ca9827ebe94b5c6c3ddb650f47244ab229489452d129db69034d87b81" }, "downloads": -1, "filename": "ansinv-4.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f22376f4625099b7c62e5ae13a59afcd", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 4938, "upload_time": "2019-01-27T21:26:40", "url": "https://files.pythonhosted.org/packages/3a/1d/2cbd386797f576c6b7d6321a6e500ee212ab4ba4d4dc7b7c0479320c31ce/ansinv-4.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c2879cbab7ebac90b4eb8c748597997a", "sha256": "c753221768c34f60c109e21c94c9010d49e0626af61dfe870582988ec168ec55" }, "downloads": -1, "filename": "ansinv-4.0.0.tar.gz", "has_sig": false, "md5_digest": "c2879cbab7ebac90b4eb8c748597997a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4534, "upload_time": "2019-01-27T21:26:42", "url": "https://files.pythonhosted.org/packages/a2/49/8c77d77835d57bf3ef55bd8c208d3de01af5376d194236144672642d6e2c/ansinv-4.0.0.tar.gz" } ] }