{ "info": { "author": "Te-je Rodgers", "author_email": "tjd.rodgers@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.0", "Programming Language :: Python :: 3.1", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Topic :: Internet :: WWW/HTTP :: WSGI :: Middleware", "Topic :: Internet :: WWW/HTTP :: WSGI :: Server" ], "description": "ohoh\r\n====\r\n\r\n|build-status| |license|\r\n\r\n\r\nOhOh is a debugger for your WSGI applications. Using OhOh, you can inspect\r\nthe stack frames of a wsgi app that's thrown an exception.\r\n\r\nUsage\r\n-----\r\n\r\nUse this command to serve your wsgi app in debug mode::\r\n\r\n > ohoh \"package.module:wsgi_app\" -s localost:5000\r\n\r\nFor a full range of options, see ``ohoh -h``\r\n\r\nOhOh provides a plug-in for the ``httpie`` utility. You can install ``httpie`` \r\nusing ``pip install httpie``. Once you send a request that results in an\r\nexception, you will enter the debugger automatically::\r\n\r\n > http localhost:5000\r\n HTTP/1.0 500 Internal Server Error\r\n Date: Fri, 24 Jul 2015 23:41:20 GMT\r\n Server: WSGIServer/0.2 CPython/3.4.2\r\n Content-Type: text/plain; charset=utf-8\r\n OhOh-Debug-Token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1N [Truncated (5061 chars) ...]\r\n Location: http://localhost:5000/ohoh-debug/\r\n Content-Length: 454\r\n\r\n Traceback (most recent call last):\r\n File \"c:\\dev\\ohoh\\build\\lib\\ohoh\\middleware.py\", line 57, in __call__\r\n return self._app(environ, start_response)\r\n File \"tests\\mock_app.py\", line 6, in simple_err_app\r\n path.join(\"foo bar\", 475564)\r\n File \"C:\\Python34\\lib\\ntpath.py\", line 110, in join\r\n p_drive, p_path = splitdrive(p)\r\n File \"C:\\Python34\\lib\\ntpath.py\", line 159, in splitdrive\r\n if len(p) > 1:\r\n TypeError: object of type 'int' has no len()\r\n OhOh Interactive Debugger v0.1.dev28+n8ec9121\r\n (odb) up\r\n > c:\\python34\\lib\\ntpath.py(110)join()\r\n -> p_drive, p_path = splitdrive(p)\r\n (odb)\r\n\r\n\r\nCommands\r\n--------\r\n\r\nThe following commands are supported by the command interpreter\r\n(you can type ``help`` at the debugger prompt for online help with commands):\r\n\r\n+-------------------+-----------------------------------------------------------+\r\n+ Command | Description +\r\n+===================+===========================================================+\r\n+ **Client commands** +\r\n+-------------------+-----------------------------------------------------------+\r\n+ quit | Exit the debugger. +\r\n+-------------------+-----------------------------------------------------------+\r\n+ token | View the current debug server token. +\r\n+-------------------+-----------------------------------------------------------+\r\n+ url | View or set the url to which debug requests are sent. +\r\n+-------------------+-----------------------------------------------------------+\r\n+ version | View the version number of the debugger. +\r\n+-------------------+-----------------------------------------------------------+\r\n+ **Debug commands** +\r\n+-------------------+-----------------------------------------------------------+\r\n+ ! | Execute a one-line statement in the current context. +\r\n+-------------------+-----------------------------------------------------------+\r\n+ args | Print the argument list to the current function. +\r\n+-------------------+-----------------------------------------------------------+\r\n+ p | Print the value of an expression. +\r\n+-------------------+-----------------------------------------------------------+\r\n+ pp | Pretty print the value of an expression. +\r\n+-------------------+-----------------------------------------------------------+\r\n+ where | Print the stack trace, with the most recent call last. +\r\n+-------------------+-----------------------------------------------------------+\r\n+ up | Move up one frame in the stack. +\r\n+-------------------+-----------------------------------------------------------+\r\n+ down | Move down one frame in the stack. +\r\n+-------------------+-----------------------------------------------------------+\r\n\r\n\r\n.. |build-status| image:: https://travis-ci.org/te-je/ohoh.svg?branch=develop\r\n :target: https://travis-ci.org/te-je/ohoh\r\n :alt: build status\r\n :scale: 100%\r\n \r\n.. |license| image:: https://img.shields.io/badge/license-MIT-blue.svg\r\n :target: https://raw.githubusercontent.com/te-je/ohoh/develop/LICENSE.txt\r\n :alt: License\r\n :scale: 100%\r\n", "description_content_type": null, "docs_url": null, "download_url": null, "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/te-je/ohoh", "keywords": "findig wsgi debug server", "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "ohoh", "package_url": "https://pypi.org/project/ohoh/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/ohoh/", "project_urls": { "Homepage": "https://github.com/te-je/ohoh" }, "release_url": "https://pypi.org/project/ohoh/0.1.0/", "requires_dist": null, "requires_python": null, "summary": "A debug server for WSGI apps.", "version": "0.1.0" }, "last_serial": 1650657, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "aad94140e37db25bd104936b80271289", "sha256": "781779103da3501874977ce575e60d2346c677840f14f77f72d5baf063e205d8" }, "downloads": -1, "filename": "ohoh-0.1.0-py2-none-any.whl", "has_sig": false, "md5_digest": "aad94140e37db25bd104936b80271289", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 14945, "upload_time": "2015-07-26T23:57:37", "url": "https://files.pythonhosted.org/packages/4c/9c/f188a7d88993d2c8635117559db8b874291c63d61fb055efcb7d8ee41046/ohoh-0.1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "146f0fd1c509182d45dd6e2bcab8645a", "sha256": "3c373201003b0acd992d419332508d65da7099cf1c03b45a51448e9aeb2280e5" }, "downloads": -1, "filename": "ohoh-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "146f0fd1c509182d45dd6e2bcab8645a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11748, "upload_time": "2015-07-26T23:57:41", "url": "https://files.pythonhosted.org/packages/9d/33/5f264d42a5d993513ea708e4bd41bf13a49d3ab30ca78e0a6e66a7d089ab/ohoh-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e39c072838530af343638dd8688bc2fc", "sha256": "5662fc24db80a57fd68a43e9670dbd8b5bae62754ca5592fb93f24c781b9e954" }, "downloads": -1, "filename": "ohoh-0.1.0.tar.gz", "has_sig": false, "md5_digest": "e39c072838530af343638dd8688bc2fc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15634, "upload_time": "2015-07-26T23:57:44", "url": "https://files.pythonhosted.org/packages/87/6d/116633ff375b3ff1dc187a8fbb247aff141d48286c24e9d4f128ea528dd8/ohoh-0.1.0.tar.gz" }, { "comment_text": "", "digests": { "md5": "84824889c016a2649db4ced200158e4b", "sha256": "115c7e34d6782388174b2859043746729753c50272b1ac31520cb0dcdf9a8469" }, "downloads": -1, "filename": "ohoh-0.1.0.zip", "has_sig": false, "md5_digest": "84824889c016a2649db4ced200158e4b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23359, "upload_time": "2015-07-26T23:57:48", "url": "https://files.pythonhosted.org/packages/8a/d4/21f94837a8af351e0968bdbcbe62c68a470af42ea826600e069edd9b1a06/ohoh-0.1.0.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "aad94140e37db25bd104936b80271289", "sha256": "781779103da3501874977ce575e60d2346c677840f14f77f72d5baf063e205d8" }, "downloads": -1, "filename": "ohoh-0.1.0-py2-none-any.whl", "has_sig": false, "md5_digest": "aad94140e37db25bd104936b80271289", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 14945, "upload_time": "2015-07-26T23:57:37", "url": "https://files.pythonhosted.org/packages/4c/9c/f188a7d88993d2c8635117559db8b874291c63d61fb055efcb7d8ee41046/ohoh-0.1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "146f0fd1c509182d45dd6e2bcab8645a", "sha256": "3c373201003b0acd992d419332508d65da7099cf1c03b45a51448e9aeb2280e5" }, "downloads": -1, "filename": "ohoh-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "146f0fd1c509182d45dd6e2bcab8645a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11748, "upload_time": "2015-07-26T23:57:41", "url": "https://files.pythonhosted.org/packages/9d/33/5f264d42a5d993513ea708e4bd41bf13a49d3ab30ca78e0a6e66a7d089ab/ohoh-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e39c072838530af343638dd8688bc2fc", "sha256": "5662fc24db80a57fd68a43e9670dbd8b5bae62754ca5592fb93f24c781b9e954" }, "downloads": -1, "filename": "ohoh-0.1.0.tar.gz", "has_sig": false, "md5_digest": "e39c072838530af343638dd8688bc2fc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15634, "upload_time": "2015-07-26T23:57:44", "url": "https://files.pythonhosted.org/packages/87/6d/116633ff375b3ff1dc187a8fbb247aff141d48286c24e9d4f128ea528dd8/ohoh-0.1.0.tar.gz" }, { "comment_text": "", "digests": { "md5": "84824889c016a2649db4ced200158e4b", "sha256": "115c7e34d6782388174b2859043746729753c50272b1ac31520cb0dcdf9a8469" }, "downloads": -1, "filename": "ohoh-0.1.0.zip", "has_sig": false, "md5_digest": "84824889c016a2649db4ced200158e4b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23359, "upload_time": "2015-07-26T23:57:48", "url": "https://files.pythonhosted.org/packages/8a/d4/21f94837a8af351e0968bdbcbe62c68a470af42ea826600e069edd9b1a06/ohoh-0.1.0.zip" } ] }