{ "info": { "author": "Jose Tiago Macara Coutinho", "author_email": "coutinhotiago@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3" ], "description": "tangoctl\n========\n\n\nA CLI built for Tango_ system administrators.\n\ntangoctl aims to be to Tango_ what systemctl is to to systemd.\n\nActions speak louder than words. Here is a video:\n\n\nPurpose\n-------\n\n* on day to day Tango_ maintenance\n* to help automate ansible, puppet or chef scripts\n* to prepare automated test scripts for your own software\n* to help write a custom `bash completion`_ for your tool\n\n\nFeatures\n--------\n\n* server operations:\n\n * server info\n * tree of servers\n * list of servers\n * register/unregister servers\n\n* device operations:\n\n * device info\n * tree of devices\n * list of devices\n * register/unregister devices\n * execute commands\n * command info\n * read and write attributes\n * attribute info\n * read and write properties\n\n\nInstallation\n------------\n\npip install it on your favorite python environment:\n\n.. code-block::\n\n $ pip install tangoctl\n\nThat's it!\n\nExamples\n--------\n\n.. code-block::\n\n # Display tree of servers:\n tangoctl server tree\n\n # Display list of devices:\n tangoctl device list\n\n # Read 'state' attribute from a device\n tangoctl device attribute read -d sys/tg_test/1 -a state\n\n # Execute command Init() on a device\n tangoctl device command exec -d sys/tg_test/1 -c init\n\n # Display 'double_spectrum' attribute information\n tangoctl device attribute info -d sys/tg_test/1 -a double_spectrum\n\n # Display list of device attributes:\n tangoctl device attribute list -d sys/tg_test/1\n\n\nWritting a custom `bash completion` for your server\n###################################################\n\nImagine you have a Tango_ server called `LimaCCDs` and you registered\ntwo instances in the database, maybe using tangoctl:\n\n.. code-block:: bash\n\n tangoctl server add LimaCCDs/basler1 -d id00/limaccds/basler1\n tangoctl server add LimaCCDs/pilatus1 -d id00/limaccds/pilatus1\n\nTo have bash auto-complete every time you type `LimaCCDs [tab]` on the command\nline, place the following lines in a bash script:\n\n.. code-block:: bash\n\n # naive tango server autocomplete using tangoctl server ilist\n _tango_server_complete()\n {\n stype=\"${COMP_WORDS[0]}\"\n sname=\"${COMP_WORDS[COMP_CWORD]}\"\n echo $stype\n COMPREPLY=( $(tangoctl server ilist -t \"${stype}\" --filter=\"${sname}*\") )\n return 0\n }\n\n complete -F _tango_server_complete Demo\n\nand run it. Next time you type `LimaCCDs [tab]` on the bash command line it\nwill offer the existing LimaCCDs instances as completion options:\n\n.. code-block:: bash\n\n LimaCCDs [tab]\n basler1 pilatus1\n\n LimaCCDs pil[tab]\n pilatus1\n\nCheck the bash completion documentation on how to add it permanently to your\nenvironment.\n\n\nSpecial thanks to\n-----------------\n\n* PyTango_: Tango binding to python\n* click_: beautiful command line interfaces\n* gevent_: I/O made simple and efficient\n* tabulate_: ASCII tables\n* treelib_: tree data structures\n\n\nCredits\n-------\n\nThis package was created with Cookiecutter_ and the `audreyr/cookiecutter-pypackage`_ project template.\n\n.. _treelib: https://github.com/caesar0301/treelib\n.. _tabulate: https://bitbucket.org/astanin/python-tabulate\n.. _gevent: https://github.com/gevent/gevent\n.. _PyTango: https://github.com/tango-controls/pytango\n.. _click: https://github.com/pallets/click\n.. _Cookiecutter: https://github.com/audreyr/cookiecutter\n.. _`audreyr/cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage\n.. _Tango: http://tango-controls.org\n.. _bash completion: http://www.caliban.org/bash/#completion\n\n.. |Pypi Version| image:: https://img.shields.io/pypi/v/tangoctl.svg\n :target: https://pypi.python.org/pypi/tangoctl\n\n.. |Python Versions| image:: https://img.shields.io/pypi/pyversions/tangoctl.svg\n\t\t :target: https://pypi.python.org/pypi/tangoctl\n\n.. |Build Status| image:: https://gitlab.com/tiagocoutinho/tangoctl/badges/master/pipeline.svg\n\t :target: https://gitlab.com/tiagocoutinho/tangoctl/commits/master\n\n.. |Coverage Status| image:: https://gitlab.com/tiagocoutinho/tangoctl/badges/master/coverage.svg\n\t :target: https://gitlab.com/tiagocoutinho/tangoctl/commits/master\n\n.. |Asciinema| image:: https://asciinema.org/a/6U4Y6NVqWWDFTQy8ORfmssG4w.svg\n :target: https://asciinema.org/a/6U4Y6NVqWWDFTQy8ORfmssG4w?autoplay=1\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://gitlab.com/tiagocoutinho/tangoctl", "keywords": "tangoctl", "license": "MIT license", "maintainer": "", "maintainer_email": "", "name": "tangoctl", "package_url": "https://pypi.org/project/tangoctl/", "platform": "", "project_url": "https://pypi.org/project/tangoctl/", "project_urls": { "Homepage": "https://gitlab.com/tiagocoutinho/tangoctl" }, "release_url": "https://pypi.org/project/tangoctl/0.2.3/", "requires_dist": [ "pytango", "click", "treelib", "gevent", "tabulate", "six" ], "requires_python": "", "summary": "tango system cli manager", "version": "0.2.3" }, "last_serial": 4526558, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "6fc62cad7c68155e05c5d876f2fca38a", "sha256": "0761e3bcf8aec6e1655c6282a46aeca00ade107d7b247027bfad34408efc1311" }, "downloads": -1, "filename": "tangoctl-0.1.0.tar.gz", "has_sig": false, "md5_digest": "6fc62cad7c68155e05c5d876f2fca38a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14811, "upload_time": "2018-11-18T19:48:27", "url": "https://files.pythonhosted.org/packages/e5/2a/17c68f1a0c3b97eef6a066791f261ef356be09ecc06f1b6a9081a3a90b19/tangoctl-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "f0fdce8d80bb07d8e77d38abbc354898", "sha256": "f6bc961a6701ae506d996c52c1790ec66f94aacbefc21795cc2373ae8c91accb" }, "downloads": -1, "filename": "tangoctl-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f0fdce8d80bb07d8e77d38abbc354898", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9994, "upload_time": "2018-11-25T16:33:45", "url": "https://files.pythonhosted.org/packages/b3/ab/d5d11543d61d581a01d16f422163ef52457990986d8af336eef807c2c52f/tangoctl-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e0ef6c81f24ceca70cfa5c0e3bfd022e", "sha256": "0ae3960d8f75e284fd65f373879e96075e53555e92d49b2b6035046ab2a3f687" }, "downloads": -1, "filename": "tangoctl-0.2.0.tar.gz", "has_sig": false, "md5_digest": "e0ef6c81f24ceca70cfa5c0e3bfd022e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16372, "upload_time": "2018-11-25T16:33:46", "url": "https://files.pythonhosted.org/packages/4f/6c/a737758ab724dad285c23d6ca919d3b2d573ba022e6afb60d83040fd23d8/tangoctl-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "4af60a8d893cc9c6b860f1b6a63f3840", "sha256": "1a9ff4a7ef59504e7d5970ff6a50e1b5edcd8f8bbeb7eb648716c27198dcdd68" }, "downloads": -1, "filename": "tangoctl-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4af60a8d893cc9c6b860f1b6a63f3840", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10023, "upload_time": "2018-11-25T16:42:50", "url": "https://files.pythonhosted.org/packages/82/9f/f3b48292ed8e60773cf45afdfd1b348cd379f455261b8891dc2e75644121/tangoctl-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "442a7980cb4883f51fa870607a926292", "sha256": "733ac1bc98eda6473a619394767ffa5294dc5755d2f785ce0f4b6d13db01f485" }, "downloads": -1, "filename": "tangoctl-0.2.1.tar.gz", "has_sig": false, "md5_digest": "442a7980cb4883f51fa870607a926292", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16522, "upload_time": "2018-11-25T16:42:52", "url": "https://files.pythonhosted.org/packages/52/7b/753b7b98d858ce2c0b12b02295ccab445da6f25e4acb09a26c76b3c93c35/tangoctl-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "e9e7540947a0cd4df1125c13b6d9b09b", "sha256": "fd53c691c25300504df60c8466732ef1d7cdc87977ac1696875aa2d84f067e64" }, "downloads": -1, "filename": "tangoctl-0.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e9e7540947a0cd4df1125c13b6d9b09b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9923, "upload_time": "2018-11-25T16:48:01", "url": "https://files.pythonhosted.org/packages/81/c3/f7034c5630522da4fb4a682b970f84cbf937b37e75294eb15a9314ac2ab6/tangoctl-0.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e4e345ffaa1279bc7c2e544911aff505", "sha256": "8662644c2e37795d849c52bcdd143ff40fe4cce8fc698e493c9cdcf9ad1ed957" }, "downloads": -1, "filename": "tangoctl-0.2.2.tar.gz", "has_sig": false, "md5_digest": "e4e345ffaa1279bc7c2e544911aff505", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16409, "upload_time": "2018-11-25T16:48:03", "url": "https://files.pythonhosted.org/packages/9e/eb/3fed725160195b5f8af6b735c507b474dd973d76aeb2887f082508dfd60b/tangoctl-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "bdde272f4821b1f8deffb7f61b70a639", "sha256": "3cbdd461b01326946a4fe46d33cad2aa8146e87f68b6f0184a10e262bce07bbf" }, "downloads": -1, "filename": "tangoctl-0.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bdde272f4821b1f8deffb7f61b70a639", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9924, "upload_time": "2018-11-25T16:54:18", "url": "https://files.pythonhosted.org/packages/cf/dc/b3625330585c6136a8b68db8f65d22090c5ac3954ce0ee5f73b2c9159da9/tangoctl-0.2.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e274997256408742f93ac6514e3003cf", "sha256": "419b8a565708d39845ed8824abae5bf065552acfb7d2f1d3887307fc9aa50cc2" }, "downloads": -1, "filename": "tangoctl-0.2.3.tar.gz", "has_sig": false, "md5_digest": "e274997256408742f93ac6514e3003cf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13208, "upload_time": "2018-11-25T16:54:19", "url": "https://files.pythonhosted.org/packages/d1/8a/11f475f992352393aa07b05868b3a955f06966387177c682e4b768d5b7e5/tangoctl-0.2.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "bdde272f4821b1f8deffb7f61b70a639", "sha256": "3cbdd461b01326946a4fe46d33cad2aa8146e87f68b6f0184a10e262bce07bbf" }, "downloads": -1, "filename": "tangoctl-0.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bdde272f4821b1f8deffb7f61b70a639", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9924, "upload_time": "2018-11-25T16:54:18", "url": "https://files.pythonhosted.org/packages/cf/dc/b3625330585c6136a8b68db8f65d22090c5ac3954ce0ee5f73b2c9159da9/tangoctl-0.2.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e274997256408742f93ac6514e3003cf", "sha256": "419b8a565708d39845ed8824abae5bf065552acfb7d2f1d3887307fc9aa50cc2" }, "downloads": -1, "filename": "tangoctl-0.2.3.tar.gz", "has_sig": false, "md5_digest": "e274997256408742f93ac6514e3003cf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13208, "upload_time": "2018-11-25T16:54:19", "url": "https://files.pythonhosted.org/packages/d1/8a/11f475f992352393aa07b05868b3a955f06966387177c682e4b768d5b7e5/tangoctl-0.2.3.tar.gz" } ] }