{ "info": { "author": "Josh Yudaken", "author_email": "josh@yud.co.za", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: POSIX", "Programming Language :: Python :: 3", "Topic :: Internet", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: System :: Networking" ], "description": "Tooler: Easier, better, faster python devops scripts\n====================================================\n\nFeatures:\n\n * Simple access to local or remote (via asyncssh) shells\n * Neat legible output from multiple hosts\n\n\nSimple access to bash:\n----------------------\n\n.. code:: python\n import shlex\n from tooler import Tooler\n\n tooler = Tooler()\n\n @tooler.command\n def free(mount='/'):\n for result in tooler.bash('df -mah | grep %s' % shell_quote(mount + '$')):\n fs, blocks, use, available, use_pct, mnt = shlex.split(result.stdout)\n result.host.print('Used %s (%s) of %s [%s]' % (use, use_pct, mnt, fs))\n\n if __name__ == '__main__':\n tooler.main()\n\n\n..\n $ ./disk.py free --mount=/\n local$ df -mah | grep '/$'\n local> /dev/mapper/ubuntu--vg-root 102G 69G 28G 72% /\n local: [\u2714]\n local: Used 69G (72%) of / [/dev/mapper/ubuntu--vg-root]\n\nSubcommands made easy:\n----------------------\n\n.. code:: python\n from tooler import Tooler\n from tooler.library import (named, SshConfig)\n\n import disk\n\n tooler = Tooler()\n\n tooler.add_submodule('disk', disk.tooler)\n tooler.add_submodule('named', named.tooler)\n\n if __name__ == '__main__':\n named.add_hosts(SshConfig().get_hosts())\n tooler.main(hosts=[])\n\nLibrary of awesome sauce:\n-------------------------\n\n..\n $ ./tool.py named:nginx* disk.free\n $ s named:nginx* free\n nginx1$ df -mah | grep '/$'\n nginx2$ df -mah | grep '/$'\n nginx3$ df -mah | grep '/$'\n nginx3> /dev/sda1 59G 37G 22G 64% /\n nginx3: [\u2714]\n nginx1> /dev/sda1 59G 37G 22G 64% /\n nginx1: [\u2714]\n nginx2> /dev/sda1 59G 37G 22G 64% /\n nginx2: [\u2714]\n nginx1: Used 37G (64%) of / [/dev/sda1]\n nginx2: Used 37G (64%) of / [/dev/sda1]\n nginx3: Used 37G (64%) of / [/dev/sda1]\n\nThanks required:\n----------------\n\n * asyncssh_ for an easy to use ssh client\n * fabric_ & baker_ as inspiration\n\n.. _asyncssh: https://github.com/ronf/asyncssh\n.. _baker: https://bitbucket.org/mchaput/baker\n.. _fabric: https://github.com/fabric/fabric", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://qix.github.io/tooler", "keywords": null, "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "tooler", "package_url": "https://pypi.org/project/tooler/", "platform": "Any", "project_url": "https://pypi.org/project/tooler/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://qix.github.io/tooler" }, "release_url": "https://pypi.org/project/tooler/0.1.3/", "requires_dist": null, "requires_python": null, "summary": "Tooler: Create friendly devops tools in minutes", "version": "0.1.3" }, "last_serial": 1941879, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "173748d5e84b4d37b7dac5de4987575b", "sha256": "0afb2fb424594b21cc6b49466c907a21f955704bbbb13b219121901d7d4f04c3" }, "downloads": -1, "filename": "tooler-0.1.0.tar.gz", "has_sig": false, "md5_digest": "173748d5e84b4d37b7dac5de4987575b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11065, "upload_time": "2016-02-04T21:06:51", "url": "https://files.pythonhosted.org/packages/f2/de/931802f51a135c0f971a6170eba830431d86d0d5726374e9c0b62032fdc3/tooler-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "32ee8ba3139c3a38a81391b66eb6d2a7", "sha256": "aafb76333b41639aec8db0e06201d336d91a66823d90fcb644690620ef46981b" }, "downloads": -1, "filename": "tooler-0.1.1.tar.gz", "has_sig": false, "md5_digest": "32ee8ba3139c3a38a81391b66eb6d2a7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12772, "upload_time": "2016-02-04T23:23:28", "url": "https://files.pythonhosted.org/packages/8b/f8/891cc4451663c8827fc2b355beb13d99b66f6030eb9f709f5b933409a76d/tooler-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "0a2987960fd21ed947520516131a3197", "sha256": "8d9a7e32eebe58dc5dd57f7fc49ff50ecda365586bb3030c2797662eea8c558d" }, "downloads": -1, "filename": "tooler-0.1.2.tar.gz", "has_sig": false, "md5_digest": "0a2987960fd21ed947520516131a3197", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13939, "upload_time": "2016-02-04T23:50:50", "url": "https://files.pythonhosted.org/packages/1d/a2/683fbaa1fbab801bdda3c2cd3d77a1c3ae06d1f6d3e27ff10fef054c104a/tooler-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "a921ed4d8e8061e68ed52b8aab036479", "sha256": "27d860a6f627c7807e2a19d16b7042b670bc14aab35be0190f37ce55decc626d" }, "downloads": -1, "filename": "tooler-0.1.3.tar.gz", "has_sig": false, "md5_digest": "a921ed4d8e8061e68ed52b8aab036479", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13792, "upload_time": "2016-02-05T17:24:34", "url": "https://files.pythonhosted.org/packages/93/e2/dc10fc778ccc2da3fcf051d6321fff25b24fd8dcb2c92d1c0ca058591763/tooler-0.1.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a921ed4d8e8061e68ed52b8aab036479", "sha256": "27d860a6f627c7807e2a19d16b7042b670bc14aab35be0190f37ce55decc626d" }, "downloads": -1, "filename": "tooler-0.1.3.tar.gz", "has_sig": false, "md5_digest": "a921ed4d8e8061e68ed52b8aab036479", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13792, "upload_time": "2016-02-05T17:24:34", "url": "https://files.pythonhosted.org/packages/93/e2/dc10fc778ccc2da3fcf051d6321fff25b24fd8dcb2c92d1c0ca058591763/tooler-0.1.3.tar.gz" } ] }