{ "info": { "author": "Nick Timkovich", "author_email": "npt@uchicago.edu", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: OpenStack", "Intended Audience :: System Administrators", "Topic :: Utilities" ], "description": "=======================\nBag o' Hammers\n=======================\n\n *Percussive maintenance.*\n\nCollection of various tools to keep things ship-shape. Not particularly bright tools, but good for a first-pass.\n\n1. Neutron resource reaper\n\n ``neutron-reaper {info, delete} {ip, port} [ --dbversion ocata ]``\n\n Reclaims idle floating IPs and cleans up stale ports.\n\n2. Conflicting Ironic/Neutron MACs\n\n ``conflict-macs {info, delete} ( --ignore-from-ironic-config | --ignore-subnet )``\n\n The Ironic subnet must be provided---directly via ID or determined from a config---otherwise the script would think that they are in conflict.\n\n3. Undead Instances clinging to nodes\n\n ``undead-instances {info, delete}``\n\n Nova instances that have been put to rest but still cling to Ironic nodes, preventing the next generation from being...ensouled? Checks for the inconsistency and fixed it.\n\n4. Clean up after IPMI errors\n\n ``ironic-error-resetter {info, reset}``\n\n Resets Ironic nodes in error state with a known, common error. Records those resets on the node metadata (``extra`` field) and refuses after a magic number of attempts.\n\n5. Update orphaned resource providers\n\n ``orphan-resource-providers {info, update}``\n\n Detects and updates resource providers whose UUID has not been updated to match a recreated Nova compute node.\n\nCommon options:\n\n* ``--slack `` - if provided, used to post notifications to Slack\n* ``--osrc `` - alternate way to feed in the OS authentication vars\n\nSetup/Config\n============\n\n1. Get code\n\n.. code-block:: bash\n\n mkdir -p /root/scripts/hammers\n cd /root/scripts/hammers\n git clone https://github.com/ChameleonCloud/hammers.git\n\n2. Create environment\n\n.. code-block:: bash\n\n virtualenv /root/scripts/hammers/venv\n /root/scripts/hammers/venv/bin/pip install -r /root/scripts/hammers/hammers/requirements.txt\n /root/scripts/hammers/venv/bin/pip install -e /root/scripts/hammers/hammers\n\n3. Set up credentials for OpenStack and Slack\n\nThe below cronjob assumes the OS var file is at ``/root/adminrc`` and the Slack vars are in ``/root/scripts/slack.json``. The Slack file is a JSON with a root key ``\"webhook\"`` that is a URL to post to (keep secret!) and another root key ``\"hostname_name\"`` that is a mapping of FQDNs to pretty names. Example:\n\n.. code-block:: json\n\n {\n \"webhook\": \"https://hooks.slack.com/services/...super-seekrit...\",\n \"hostname_names\": {\n \"m01-07.chameleon.tacc.utexas.edu\": \"CHI@TACC\",\n \"m01-03.chameleon.tacc.utexas.edu\": \"KVM@TACC\",\n \"admin01.uc.chameleoncloud.org\": \"CHI@UC\"\n }\n }\n\n4. Add cronjob(s) to Puppet:\n\n.. code-block:: puppet\n\n $slack_json_loc = '/root/scripts/slack.json'\n $osrc_loc = '/root/adminrc'\n $venv_bin = '/root/scripts/hammers/venv/bin'\n\n cron { 'hammers-neutronreaper-ip':\n command => \"$venv_bin/neutron-reaper delete ip 14 --dbversion ocata --slack $slack_json_loc --osrc $osrc_loc [--kvm if at KVM site] 2>&1 | /usr/bin/logger -t hammers-neutronreaper-ip\",\n user => 'root',\n hour => 5,\n minute => 20,\n }\n cron { 'hammers-ironicerrorresetter':\n command => \"$venv_bin/ironic-error-resetter info --slack $slack_json_loc --osrc $osrc_loc 2>&1 | /usr/bin/logger -t hammers-ironicerrorresetter\",\n user => 'root',\n hour => 5,\n minute => 25,\n }\n cron { 'hammers-conflictmacs':\n command => \"$venv_bin/conflict-macs info --slack $slack_json_loc --osrc $osrc_loc --ignore-from-ironic-conf /etc/ironic/ironic.conf 2>&1 | /usr/bin/logger -t hammers-conflictmacs\",\n user => 'root',\n hour => 5,\n minute => 30,\n }\n cron { 'hammers-undeadinstances':\n command => \"$venv_bin/undead-instances info --slack $slack_json_loc --osrc $osrc_loc 2>&1 | /usr/bin/logger -t hammers-undeadinstances\",\n user => 'root',\n hour => 5,\n minute => 35,\n }\n cron { 'hammers-orphanresourceproviders':\n command => \"$venv_bin/orphan-resource-providers info --slack $slack_json_loc 2>&1 | /usr/bin/logger -t hammers-orphanresourceproviders\",\n user => 'root',\n hour => 5,\n minute => 40,\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/ChameleonCloud/hammers", "keywords": "chameleon-cloud,chameleon,openstack", "license": "", "maintainer": "", "maintainer_email": "", "name": "hammers", "package_url": "https://pypi.org/project/hammers/", "platform": "", "project_url": "https://pypi.org/project/hammers/", "project_urls": { "Homepage": "https://github.com/ChameleonCloud/hammers" }, "release_url": "https://pypi.org/project/hammers/0.2.0/", "requires_dist": [ "python-dateutil", "requests" ], "requires_python": "", "summary": "Bag of hammers to fix problems", "version": "0.2.0" }, "last_serial": 4222038, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "c6a36eb4dc8c0a21fd040d5c7494b30b", "sha256": "fc1adcd14f3a01c003b1c21944f31f963dc61b42a912cf4ee948e3b453ec7b14" }, "downloads": -1, "filename": "hammers-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c6a36eb4dc8c0a21fd040d5c7494b30b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9367, "upload_time": "2016-11-25T22:36:18", "url": "https://files.pythonhosted.org/packages/c5/42/1ce7faf30a491f2fb70eb5cab0846224d622241baecf865c87187c8d5b9f/hammers-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c843f6cf6e21e41ce4ae8b36030a175c", "sha256": "664cdd3657bc21f0953aedc24741ba8212fbd043db0d8c5f37a5cad4c3cf4f5f" }, "downloads": -1, "filename": "hammers-0.1.0.tar.gz", "has_sig": false, "md5_digest": "c843f6cf6e21e41ce4ae8b36030a175c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6264, "upload_time": "2016-11-25T22:36:20", "url": "https://files.pythonhosted.org/packages/86/08/a999d1157814ce6adf84c821ce89613e5846006da4b9fa9babed2548b3eb/hammers-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "5e2326e9ac6677bf110a73bf39a87b16", "sha256": "33d44914918e6d2b15fb017bc4be4762242cdaf72dada19223d3c6ef48e78ce3" }, "downloads": -1, "filename": "hammers-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5e2326e9ac6677bf110a73bf39a87b16", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11806, "upload_time": "2016-12-01T01:18:56", "url": "https://files.pythonhosted.org/packages/6f/38/3b0c10f1f64e4351812125a0b36110051f87ca30fc05491debdfea4affca/hammers-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "251bddef5ce30bd3c3b50c0b8c7cd3eb", "sha256": "39bedcd0076c2547bb9461d0ef7072de4fea97c1f9b25845c7c840fa1a988622" }, "downloads": -1, "filename": "hammers-0.1.1.tar.gz", "has_sig": false, "md5_digest": "251bddef5ce30bd3c3b50c0b8c7cd3eb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7911, "upload_time": "2016-12-01T01:19:00", "url": "https://files.pythonhosted.org/packages/84/b2/2f6e006b68c3a08f11c7351a1e407a624cbe70287dc4fb1951c7a79e1b66/hammers-0.1.1.tar.gz" } ], "0.1.12": [ { "comment_text": "", "digests": { "md5": "0338d2574f3812488f9049a3e1d23541", "sha256": "3124399a23231361d686355abc6bbb725c919a397fd5c34e02757ca3eea0126a" }, "downloads": -1, "filename": "hammers-0.1.12-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0338d2574f3812488f9049a3e1d23541", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 65785, "upload_time": "2018-05-15T12:03:08", "url": "https://files.pythonhosted.org/packages/05/98/e633c9e873ebb6423bbf39181d89cfaea1d16c14a341c244dc2cb216bfd8/hammers-0.1.12-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c12c50d5f0c19576cb1c7531a020deeb", "sha256": "6e07cf4e61ef2b6b5aa4916e8b85b4f70e01225c5a970992c3856e10e4728229" }, "downloads": -1, "filename": "hammers-0.1.12.tar.gz", "has_sig": false, "md5_digest": "c12c50d5f0c19576cb1c7531a020deeb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 50867, "upload_time": "2018-05-15T12:03:10", "url": "https://files.pythonhosted.org/packages/05/fe/fbec3ceb7fbb9c70ac57c4eb46476c9ffb45570dd0f12db5160c88b133e4/hammers-0.1.12.tar.gz" } ], "0.1.13": [ { "comment_text": "", "digests": { "md5": "7848fdfdb67c079305557b3b92187263", "sha256": "38b2c0a142b84fb762e4dd5c2f8a5f082dbd373ba53987f8b6442c234dd8d496" }, "downloads": -1, "filename": "hammers-0.1.13-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7848fdfdb67c079305557b3b92187263", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 67471, "upload_time": "2018-06-05T10:47:01", "url": "https://files.pythonhosted.org/packages/36/e4/6c37870633f4a838a5cbc2fd052aa986cfe443866b61ac495328f8c6aaac/hammers-0.1.13-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e052b178825fd8866c26547d115df8c8", "sha256": "ccab91a285a10ee7d18f237d174512b23df7ee18395700ce9855de2d4e9d695f" }, "downloads": -1, "filename": "hammers-0.1.13.tar.gz", "has_sig": false, "md5_digest": "e052b178825fd8866c26547d115df8c8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 52050, "upload_time": "2018-06-05T10:47:02", "url": "https://files.pythonhosted.org/packages/2f/7f/bc23ce8cd590fb1799957373799810ce78ddaa141942c0882675a5cd6902/hammers-0.1.13.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "1134a7d39dbd60d56d2dc662de88b325", "sha256": "888db812a865793d92494537b2552ff76286adcc463aff55fce5e2e8b8b2fdc6" }, "downloads": -1, "filename": "hammers-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1134a7d39dbd60d56d2dc662de88b325", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13117, "upload_time": "2016-12-02T18:23:38", "url": "https://files.pythonhosted.org/packages/26/14/774b4256a3196a118091bccf03cf43be0fa60a816b7be245961d2c3e5475/hammers-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9600b959784250e54a6d5ee9e954f230", "sha256": "38e7c21ea000b10546cd5bec1e851e703120261aac877b8c4a3e70cf7c58b846" }, "downloads": -1, "filename": "hammers-0.1.2.tar.gz", "has_sig": false, "md5_digest": "9600b959784250e54a6d5ee9e954f230", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8781, "upload_time": "2016-12-02T18:23:40", "url": "https://files.pythonhosted.org/packages/98/3a/e31371bd7406cb492222f70e9f5269db94801902ddf325bf1268a2013443/hammers-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "d81718ab5d46e2c38f4f78ad185f671b", "sha256": "390e2525a0f1f3d479f776ee08addbe09ac52468032f79d275e38c4cd3b70517" }, "downloads": -1, "filename": "hammers-0.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d81718ab5d46e2c38f4f78ad185f671b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13265, "upload_time": "2016-12-02T22:26:03", "url": "https://files.pythonhosted.org/packages/61/fa/f7780875271f9e0cdacf425c5b78a5cd6a7864f7a1d17df7f16f3cc06337/hammers-0.1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d4c0e57bb0c660908816e5bc134576dc", "sha256": "de957eebde2ff2de3191aeab802fa67b2aec1554f39cc823cfb5c9f65d63bac2" }, "downloads": -1, "filename": "hammers-0.1.3.tar.gz", "has_sig": false, "md5_digest": "d4c0e57bb0c660908816e5bc134576dc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8937, "upload_time": "2016-12-02T22:26:06", "url": "https://files.pythonhosted.org/packages/32/f0/bf4f9d9eb616ac85f7a957d5d0d4abb2dd67a3400f7160f9a2aba4a5052b/hammers-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "8e2013d657fceae5988bf4b09dbba222", "sha256": "28747dbf3de473d1d4b12e5b572e65e60a66514c1aa7732db41759375a1471b4" }, "downloads": -1, "filename": "hammers-0.1.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8e2013d657fceae5988bf4b09dbba222", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18681, "upload_time": "2016-12-06T23:16:26", "url": "https://files.pythonhosted.org/packages/6d/af/81207de24d377ae3a81ba557b9271c09afda26f65de45d1b6b8f9116d309/hammers-0.1.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ac7908c8462c2a56495bfbe799ef59c7", "sha256": "99143348064d70ab8e7e0bf51afd7c3a81ff3889409b8188f51cc8181c2a463a" }, "downloads": -1, "filename": "hammers-0.1.4.tar.gz", "has_sig": false, "md5_digest": "ac7908c8462c2a56495bfbe799ef59c7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11970, "upload_time": "2016-12-06T23:16:28", "url": "https://files.pythonhosted.org/packages/d0/88/567d2380ba2c054206b8bf7f6d40eba26fd3522ebe93f256a52d475cadb4/hammers-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "cf7fa5dd2b5c034c74a62abf4275c70d", "sha256": "cc34c6371b416a932749679922a1937a0967a9ccac487b7f69a3d9b93e477028" }, "downloads": -1, "filename": "hammers-0.1.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "cf7fa5dd2b5c034c74a62abf4275c70d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 29244, "upload_time": "2017-01-03T19:09:07", "url": "https://files.pythonhosted.org/packages/40/2c/1682cddf17fb4f048ee9b90674094704385b4c6de315cbcd1d474b434e81/hammers-0.1.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dd6b5e8a01f5e57c2e7dcafb1f8fd147", "sha256": "801576662327d66dde4dd62e18939282694478eac9b84b7bbe1d069668a6747a" }, "downloads": -1, "filename": "hammers-0.1.5.tar.gz", "has_sig": false, "md5_digest": "dd6b5e8a01f5e57c2e7dcafb1f8fd147", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21831, "upload_time": "2017-01-03T19:09:09", "url": "https://files.pythonhosted.org/packages/45/b1/e20b34b87193f1098841fcd60c678a00a78ebc0fd24d48990dfbfb580abd/hammers-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "8666c056dcbfb78d9eb4775eeec01a62", "sha256": "27d20cd4c15da3ef51987244db83635be99f23ecf722014f9dc5d3ee5e5eadc1" }, "downloads": -1, "filename": "hammers-0.1.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8666c056dcbfb78d9eb4775eeec01a62", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 35538, "upload_time": "2017-02-16T01:45:39", "url": "https://files.pythonhosted.org/packages/e9/c4/f7a44dd43dabc1d2bacfc642e53264314e74b582747165fbf4b24f3e5bc5/hammers-0.1.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "eb24d2d66ebf9d5f87fbdc6a2f3aa941", "sha256": "c14cb03651ab44a984d9d76e7321eb0d13362eb6febc61c91188a6b0ac2172b9" }, "downloads": -1, "filename": "hammers-0.1.6.tar.gz", "has_sig": false, "md5_digest": "eb24d2d66ebf9d5f87fbdc6a2f3aa941", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26017, "upload_time": "2017-02-16T01:45:41", "url": "https://files.pythonhosted.org/packages/4b/d6/90a4cbe68109649308591d349f75c5689deef098f3c3915b0c5d2b10dfa2/hammers-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "ec0848c30a1c428c12551032310e45dc", "sha256": "2490f7fab1a8ef215768529b94ddfc8d153a38e165bdfc63cf701551e528cf58" }, "downloads": -1, "filename": "hammers-0.1.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ec0848c30a1c428c12551032310e45dc", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 35605, "upload_time": "2017-02-16T02:15:09", "url": "https://files.pythonhosted.org/packages/75/1a/a8cc45ece469c1a039c899c1c42a99c68ff4b9f45a84a61e6baa60dcf4cc/hammers-0.1.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0af6a740f035f99c1f070b49eaffba9a", "sha256": "0f9aff7d00056217b2c3be9f691042d933250644ed2262fa018de7101d2decb0" }, "downloads": -1, "filename": "hammers-0.1.7.tar.gz", "has_sig": false, "md5_digest": "0af6a740f035f99c1f070b49eaffba9a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26049, "upload_time": "2017-02-16T02:15:11", "url": "https://files.pythonhosted.org/packages/83/bb/75b8cf51bc2e21da875b599dc9f8f8554bcdcc34c5404995d08b7fb0314b/hammers-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "89feec7e231cdae700bd063e60a5d88f", "sha256": "28255735da319e82cd9c3a9b8023712b85d0f1e4fc7a20ae8c10b4a2f9506917" }, "downloads": -1, "filename": "hammers-0.1.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "89feec7e231cdae700bd063e60a5d88f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 35934, "upload_time": "2017-05-08T16:56:11", "url": "https://files.pythonhosted.org/packages/6c/49/fc232c2506ccf17dcb930fa84231611de863d214f6c4a64ba35cde7ed364/hammers-0.1.8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aa8f2e1480b258a2966db9194120f325", "sha256": "01da2ca8bfffdf0102c75ee866692b776f48daa425fa72ed1707643b6b7f4d2a" }, "downloads": -1, "filename": "hammers-0.1.8.tar.gz", "has_sig": false, "md5_digest": "aa8f2e1480b258a2966db9194120f325", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26203, "upload_time": "2017-05-08T16:56:12", "url": "https://files.pythonhosted.org/packages/77/53/9a044b62556c5b0327eb60ddd6b1a082dd6b9307823f766786f79aed94d9/hammers-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "a42b011b2981238c84519b78eecfd022", "sha256": "45a83553db9b3ff98461c27c6326e3eab002e0b1d5607b2a4f514fa1b11595a4" }, "downloads": -1, "filename": "hammers-0.1.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a42b011b2981238c84519b78eecfd022", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 44924, "upload_time": "2017-06-26T22:13:37", "url": "https://files.pythonhosted.org/packages/d4/5f/87567aa714844052aebd5fc586d1655aa6d4dbecdae053676babc8376a15/hammers-0.1.9-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "61f4a9b7c0d4c82fcbf00f20bbf9a828", "sha256": "d09e3ee6c04835ba38b0cd59920370b74299dca120e7d111ba2e316a6d85d461" }, "downloads": -1, "filename": "hammers-0.1.9.tar.gz", "has_sig": false, "md5_digest": "61f4a9b7c0d4c82fcbf00f20bbf9a828", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32992, "upload_time": "2017-06-26T22:13:39", "url": "https://files.pythonhosted.org/packages/32/8b/1d0d04e6f483d985b1f3b7def0c00ccbfc26295a9c6f1e76847a551bbd73/hammers-0.1.9.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "71981ab7d0667ae07e061a5b57e245db", "sha256": "281708f1a830886eed3de8e538d92ca48a06ab30d34987253af21ac7c87bbfd9" }, "downloads": -1, "filename": "hammers-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "71981ab7d0667ae07e061a5b57e245db", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 68546, "upload_time": "2018-08-30T10:14:34", "url": "https://files.pythonhosted.org/packages/99/13/3e95f17440c3db07bc0bca7c01c82ef71c3cb2063d0dc0a048b43464c151/hammers-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0203adb1220a988a8ec7f18fb34b5152", "sha256": "b9a540abc8ff134fd277ebb8ae34ed24d66672467b4edb55a039e8c3f98975a2" }, "downloads": -1, "filename": "hammers-0.2.0.tar.gz", "has_sig": false, "md5_digest": "0203adb1220a988a8ec7f18fb34b5152", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 53144, "upload_time": "2018-08-30T10:14:35", "url": "https://files.pythonhosted.org/packages/f8/9a/8f3112d3b73a89e07bd69695993eff4bdaaa5d59048550cda452e46b001c/hammers-0.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "71981ab7d0667ae07e061a5b57e245db", "sha256": "281708f1a830886eed3de8e538d92ca48a06ab30d34987253af21ac7c87bbfd9" }, "downloads": -1, "filename": "hammers-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "71981ab7d0667ae07e061a5b57e245db", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 68546, "upload_time": "2018-08-30T10:14:34", "url": "https://files.pythonhosted.org/packages/99/13/3e95f17440c3db07bc0bca7c01c82ef71c3cb2063d0dc0a048b43464c151/hammers-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0203adb1220a988a8ec7f18fb34b5152", "sha256": "b9a540abc8ff134fd277ebb8ae34ed24d66672467b4edb55a039e8c3f98975a2" }, "downloads": -1, "filename": "hammers-0.2.0.tar.gz", "has_sig": false, "md5_digest": "0203adb1220a988a8ec7f18fb34b5152", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 53144, "upload_time": "2018-08-30T10:14:35", "url": "https://files.pythonhosted.org/packages/f8/9a/8f3112d3b73a89e07bd69695993eff4bdaaa5d59048550cda452e46b001c/hammers-0.2.0.tar.gz" } ] }