{ "info": { "author": "Keith Dart", "author_email": "keith@dartworks.biz", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Operating System :: POSIX", "Programming Language :: Python :: 3 :: Only", "Topic :: Software Development :: Debuggers", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "# Elicit\n\nLibrary for writing console (command oriented) user interfaces. It depends only\non the Python standard library.\n\nThe package makes it easy and quick to create an interactive command oriented\ntool. The style is similar to embedded systems, such as routers, and POSIX\nshells. This is not an alternate Python REPL, such as IPython or bpython. You\ncan use it to implement a custom command interface for your application that\ngets customizable command parsing, custom prompts, help system, and output\npaging.\n\nThe [docopt](http://docopt.org/) module is built-in, so no additional packages\nneed to be installed.\n\nSome notable features:\n\n* Commands are defined as class methods.\n* Command classes group commands, and can be nested, providing\n context-sensitive commands.\n* Implicit paged output (like _more_).\n* Command completion.\n* Concise prompt string specification, similar to a shell (percent [%] expansions).\n* Colored output formatting and input prompts.\n* Built-in options parsing.\n* Built-in *help*, that uses the command-method docstring.\n* Wrap any object to interact with it.\n* Modular design. Any component can be subclassed and enhanced.\n\nAlso includes some bonus modules:\n\n* presentation - helper module for using Python in interactive presentations.\n* debugger - enhanced debugger that uses the framework for the user interface.\n\n\n## Command Lines\n\nJust override the `elicit.ui.BaseCommands` class. Any methods defined with doc\nstrings become a command that can be called. The command gets an _arguments_\nparameter that is a docopt-style pre-parsed dictionary of arguments parsed\naccording to the *Usage:* line in the doc string.\n\nHere's a working example:\n\n```py\nfrom elicit import commands\nfrom elicit import console\nfrom elicit import controller\nfrom elicit import env\nfrom elicit import parser\nfrom elicit import themes\nfrom elicit import ui\n\n\nclass BasicCommands(commands.BaseCommands):\n\n def mycommand(self, arguments):\n \"\"\"Perform some function.\n\n Usage:\n mycommand [-o]\n \"\"\"\n self._ui.print(\"got arguments:\", arguments)\n\n def nestedusage(self, arguments):\n \"\"\"Check nested optional usage.\n\n Usage:\n nestedusage [ []]\n \"\"\"\n self._ui.print(\"got arguments:\", arguments)\n\n # Add as many more commands as you need.\n\n\ndef basic_cli():\n # Create The IO module.\n uio = console.ConsoleIO()\n\n environment = env.Environ.from_system()\n theme = themes.DefaultTheme() # The built-in colored theme.\n\n # Assemble the IO in user interface.\n theui = ui.UserInterface(uio, environment, theme)\n\n # Create the top-level command set, with the user interface.\n cmd = BasicCommands(theui)\n\n # Add it to a controller, and command parser.\n ctl = controller.CommandController(cmd)\n p = parser.CommandParser(ctl)\n\n # Run the CLI using the parser.\n p.interact()\n```\n\nThis defines a new command, _mycommand_, with a singo option *-o*.\n\n## Presentations\n\nThe `elicit.present` subpackage has some functionality useful for interactive\npresentatations using the Python REPL. Exposes some iTerm features on MacOS.\n\nThanks to David Beazley for the inspiration.\n\nTo invoke interactively, for testing, use:\n\n```sh\npython3 -iq -m elicit.present.presentation\n```\n\n## Debugger\n\nAn enhanced debugger that uses this CLI toolkit is also provided. A tool,\n*eldb*, is also provided that you can use instead of *python3* to run a script,\nor module, that will enter the debugger if an uncaught exception occurs.\n\n```sh\neldb path/to/script.py\n```\n\nor, if you have a package with an *if ... \\_\\_main\\_\\_:* section:\n\n```sh\neldb mypackage.mymodule\n```\n\nYou can also import the `elicit.debugger` module in your code and call the\n`post_mortem` function, as with *pdb*.\n\nSome notable features:\n\n* Colorized UI - stacktrace, prompt, etc.\n* More informative reports, prompt shows current position in stack.\n* Invoke your editor at current point.\n* REPL-like evaluator\n* Enter sub-REPL if desired.\n* Display opcodes.\n\n\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/kdart/elicit", "keywords": "", "license": "Apache 2.0", "maintainer": "", "maintainer_email": "", "name": "elicit", "package_url": "https://pypi.org/project/elicit/", "platform": "", "project_url": "https://pypi.org/project/elicit/", "project_urls": { "Homepage": "https://github.com/kdart/elicit" }, "release_url": "https://pypi.org/project/elicit/1.7.0/", "requires_dist": null, "requires_python": "", "summary": "Library for making command-style user interfaces.", "version": "1.7.0" }, "last_serial": 4634360, "releases": { "1.5.1": [ { "comment_text": "", "digests": { "md5": "01589c70f21c149407401a171c7f8a3b", "sha256": "85e66c4c3f33b17db95ebef495d782dc50f36e6fc5d4fce072c6752d2a6b57da" }, "downloads": -1, "filename": "elicit-1.5.1-py3-none-any.whl", "has_sig": false, "md5_digest": "01589c70f21c149407401a171c7f8a3b", "packagetype": "bdist_wheel", "python_version": "3.7", "requires_python": null, "size": 108855, "upload_time": "2018-09-22T04:58:59", "url": "https://files.pythonhosted.org/packages/ad/be/292c32b3de4155d38b56c1a8c851f763f0ec7e327775e9b77260df5a3fc1/elicit-1.5.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d37cb30236f3beabb908448eaf0f2656", "sha256": "c3db43c2d3e09154f1acdf54783246205a281c34f52024f7ff6f1f8c5a7704fa" }, "downloads": -1, "filename": "elicit-1.5.1.tar.gz", "has_sig": false, "md5_digest": "d37cb30236f3beabb908448eaf0f2656", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48816, "upload_time": "2018-09-22T04:58:57", "url": "https://files.pythonhosted.org/packages/a2/6b/bdc8830f1e87cd44240f9c590fb100ea378913748df8a5afad8767f633ad/elicit-1.5.1.tar.gz" } ], "1.5.2": [ { "comment_text": "", "digests": { "md5": "4901f337700e8245f1560e434176c619", "sha256": "07d6d8af7b3b726d19f0df044f805e92304f668cced7e37a274076ec5cb572da" }, "downloads": -1, "filename": "elicit-1.5.2-py3-none-any.whl", "has_sig": true, "md5_digest": "4901f337700e8245f1560e434176c619", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 110622, "upload_time": "2018-09-23T05:23:30", "url": "https://files.pythonhosted.org/packages/8d/74/bf12d75fab0b130650639015ca4e76cf55cf111477a5a5fe3f76ba34284b/elicit-1.5.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "be767545665c71bc5845cb8157027963", "sha256": "2e172464d1ae895bc3131147462c2a695f5d845a7c2667b129e0cd9257ca9313" }, "downloads": -1, "filename": "elicit-1.5.2.tar.gz", "has_sig": true, "md5_digest": "be767545665c71bc5845cb8157027963", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 52082, "upload_time": "2018-09-23T05:23:32", "url": "https://files.pythonhosted.org/packages/b3/fe/41ff63c0a030f5801847ae12cd14101f9e5b3a21f7ccc08a8d26e0d2eda3/elicit-1.5.2.tar.gz" } ], "1.5.3": [ { "comment_text": "", "digests": { "md5": "5e6e489bb8ef0249083ccf73cd4b5552", "sha256": "cfe95690953adff69561d8d15989bfdd2beebe84afb74e3cf5cf37bcfed8c0ff" }, "downloads": -1, "filename": "elicit-1.5.3-py3-none-any.whl", "has_sig": false, "md5_digest": "5e6e489bb8ef0249083ccf73cd4b5552", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 122266, "upload_time": "2018-11-12T03:25:55", "url": "https://files.pythonhosted.org/packages/06/22/12b0820d207956b3a1c9bb7db9efa3d8866e376bd05ad352b631fb0fa94d/elicit-1.5.3-py3-none-any.whl" } ], "1.6.0": [ { "comment_text": "", "digests": { "md5": "343daf4b679a6ae52f3d685110d7914a", "sha256": "1b191ca45051e729b1308cb54924d03730756c81ae56df85f7ab52c69cb921ad" }, "downloads": -1, "filename": "elicit-1.6.0-py3-none-any.whl", "has_sig": true, "md5_digest": "343daf4b679a6ae52f3d685110d7914a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 122552, "upload_time": "2018-12-17T10:44:15", "url": "https://files.pythonhosted.org/packages/97/61/a4b05f2fe2e094ce3f7f4a1598ad6a8709e66334ee178f2ecefa5c6feeb0/elicit-1.6.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "297a5a4bfcc75cdba29735c728e38eb7", "sha256": "4ad981ad4e7489476bb8090792069c8242ddd76e1ffab1be1dd56648eff2fca3" }, "downloads": -1, "filename": "elicit-1.6.0.tar.gz", "has_sig": true, "md5_digest": "297a5a4bfcc75cdba29735c728e38eb7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 52477, "upload_time": "2018-12-17T10:44:16", "url": "https://files.pythonhosted.org/packages/0c/09/f8534258f05557ec5ed3d69a43e1988fea0fd2158c92d1f3938bd09abade/elicit-1.6.0.tar.gz" } ], "1.6.1": [ { "comment_text": "", "digests": { "md5": "8d63440d3efd7abe571906dd02a0a6b2", "sha256": "d823283690f41c56c0bc4f45589060246fcd208598c13117a86c605ce7555715" }, "downloads": -1, "filename": "elicit-1.6.1-py3-none-any.whl", "has_sig": true, "md5_digest": "8d63440d3efd7abe571906dd02a0a6b2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 122544, "upload_time": "2018-12-19T17:38:00", "url": "https://files.pythonhosted.org/packages/ea/68/410e3efad3544fead9ec181d5593ae48688c69af821863ff0dee29439e43/elicit-1.6.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "82a7d431ff27db0ec5d96d14bad8c7a6", "sha256": "23cb48ef5adfa91fe0d7f4c4a602d1d0232d173b3ddc7b77d87c2ca6252158a2" }, "downloads": -1, "filename": "elicit-1.6.1.tar.gz", "has_sig": true, "md5_digest": "82a7d431ff27db0ec5d96d14bad8c7a6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 52484, "upload_time": "2018-12-19T17:38:02", "url": "https://files.pythonhosted.org/packages/00/8a/737badee05c552110edeaa7741b674c657ff659d781f065a06efb8a7d407/elicit-1.6.1.tar.gz" } ], "1.6.2": [ { "comment_text": "", "digests": { "md5": "9bf4115a16e5987f1051652c7a99f26b", "sha256": "c917371e01b37697ee32a08e63e231ffd73bea02b993fcb0b12e9bb6482072e6" }, "downloads": -1, "filename": "elicit-1.6.2-py3-none-any.whl", "has_sig": true, "md5_digest": "9bf4115a16e5987f1051652c7a99f26b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 122240, "upload_time": "2018-12-24T03:13:19", "url": "https://files.pythonhosted.org/packages/0e/70/894e8d6deae52a211ec15d15dd84f08cd5e668ea8538fb45016a1bee703d/elicit-1.6.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b98f86bbe85d372ff65791e95ba62716", "sha256": "2a6f107174ec4e6c06a3a7b0c83fd5a551f30dd306551cfcfbd6b4d466fd0286" }, "downloads": -1, "filename": "elicit-1.6.2.tar.gz", "has_sig": true, "md5_digest": "b98f86bbe85d372ff65791e95ba62716", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 52392, "upload_time": "2018-12-24T03:13:21", "url": "https://files.pythonhosted.org/packages/04/74/357c9b581b8ed1f4182e056203f6c8483f5b48d2bb11530e6e4780303c0f/elicit-1.6.2.tar.gz" } ], "1.7.0": [ { "comment_text": "", "digests": { "md5": "9381c73b1e0c96ae8e5b1d02ab9ad345", "sha256": "5597c0cb569964307af890d34be8f46b2817fae36ca1bca96184219105f8a972" }, "downloads": -1, "filename": "elicit-1.7.0-py3-none-any.whl", "has_sig": true, "md5_digest": "9381c73b1e0c96ae8e5b1d02ab9ad345", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 125403, "upload_time": "2018-12-26T02:34:47", "url": "https://files.pythonhosted.org/packages/78/f3/2c7c8002b375f56133381665f7f993f826aa174001bea5aa82ecc16e953c/elicit-1.7.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1b56488e2a15108fc6dc9a801acd7b52", "sha256": "96acb0a01f6dbe7bf17b5033313072075a06ffba2718e1bcef1a67832593aff3" }, "downloads": -1, "filename": "elicit-1.7.0.tar.gz", "has_sig": true, "md5_digest": "1b56488e2a15108fc6dc9a801acd7b52", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 53759, "upload_time": "2018-12-26T02:34:49", "url": "https://files.pythonhosted.org/packages/0a/55/15589addb3e12abaf48608ce2e303b9753dffb15e446381a430ef4fc28a2/elicit-1.7.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9381c73b1e0c96ae8e5b1d02ab9ad345", "sha256": "5597c0cb569964307af890d34be8f46b2817fae36ca1bca96184219105f8a972" }, "downloads": -1, "filename": "elicit-1.7.0-py3-none-any.whl", "has_sig": true, "md5_digest": "9381c73b1e0c96ae8e5b1d02ab9ad345", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 125403, "upload_time": "2018-12-26T02:34:47", "url": "https://files.pythonhosted.org/packages/78/f3/2c7c8002b375f56133381665f7f993f826aa174001bea5aa82ecc16e953c/elicit-1.7.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1b56488e2a15108fc6dc9a801acd7b52", "sha256": "96acb0a01f6dbe7bf17b5033313072075a06ffba2718e1bcef1a67832593aff3" }, "downloads": -1, "filename": "elicit-1.7.0.tar.gz", "has_sig": true, "md5_digest": "1b56488e2a15108fc6dc9a801acd7b52", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 53759, "upload_time": "2018-12-26T02:34:49", "url": "https://files.pythonhosted.org/packages/0a/55/15589addb3e12abaf48608ce2e303b9753dffb15e446381a430ef4fc28a2/elicit-1.7.0.tar.gz" } ] }