{ "info": { "author": "Brian Curtin", "author_email": "brian@python.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Multimedia :: Sound/Audio :: Speech", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "Say It To My Face\n=================\n\nHave you ever written a bunch of code and everything is going well for the\nfirst time in computer history, and then some dreaded exception kills your\nhopes and dreams? Did you then make menacing glances at the computer,\nthe source of all of your problems, and mutter \"I bet you wouldn't say\nthat to my face.\"\n\nWell now it can.\n\nAnd it will.\n\nUsage\n=====\n\nTo have the interpreter tell you about your failings,\nthe `say_exceptions_to_my_face` function is available. It uses a logging\nhandler to read exception messages that come in through an exception hook. ::\n\n >>> import say_it_to_my_face\n >>> say_it_to_my_face.say_exceptions_to_my_face()\n >>> raise AttributeError(\"lol that's not an attribute\")\n # A voice will read the message to you\n Traceback (most recent call last):\n File \"\", line 1, in \n AttributeError: lol that's not an attribute\n\nYou can also have all of your logs read to you via that log handler.\nYou can also pass it the name of a voice to use, though by default it\npicks this up from your locale. ::\n\n >>> import logging\n >>> import say_it_to_my_face\n >>> handler = say_it_to_my_face.SayItToMyFace(voice=\"Daniel\")\n >>> logger = logging.getLogger()\n >>> logger.addHandler(handler)\n >>> logger.critical(\"why did you do that?\")\n\n\nRequirements\n============\n\n* Python >= 3.3\n* The `say` program on OS X or apparently the `espeak` on Ubuntu,\n though I haven't tried it, it just looks similar.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://twitter.com/logout", "keywords": "this is dumb", "license": "Apache 2", "maintainer": null, "maintainer_email": null, "name": "say_it_to_my_face", "package_url": "https://pypi.org/project/say_it_to_my_face/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/say_it_to_my_face/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://twitter.com/logout" }, "release_url": "https://pypi.org/project/say_it_to_my_face/1.0/", "requires_dist": null, "requires_python": null, "summary": "Log handler and exception hook to verbalize messages.", "version": "1.0" }, "last_serial": 2557867, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "236a65d3d2669b927eb51d53065e3622", "sha256": "d11a71cbaa1fea86ee01ccb491298325f6a3546cb01b9e222bcd8ad7fc38cb78" }, "downloads": -1, "filename": "say_it_to_my_face-1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "236a65d3d2669b927eb51d53065e3622", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 5076, "upload_time": "2017-01-06T15:03:10", "url": "https://files.pythonhosted.org/packages/43/80/c6ef0ed4fc6cfa6ca3083d860d70348c4305ee25b10e4a46e2dac93b4da7/say_it_to_my_face-1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ef5d979d717bdcfec825f2c9bd8e8162", "sha256": "0a6a3cb02e3ec60a65a99edd6d28cb317ec2415d5c6c3fffe2472e6026765526" }, "downloads": -1, "filename": "say_it_to_my_face-1.0.tar.gz", "has_sig": false, "md5_digest": "ef5d979d717bdcfec825f2c9bd8e8162", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2642, "upload_time": "2017-01-06T15:00:51", "url": "https://files.pythonhosted.org/packages/48/42/b67e40db335158a09e1981312523239899987561ed892b8655335cb0e118/say_it_to_my_face-1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "236a65d3d2669b927eb51d53065e3622", "sha256": "d11a71cbaa1fea86ee01ccb491298325f6a3546cb01b9e222bcd8ad7fc38cb78" }, "downloads": -1, "filename": "say_it_to_my_face-1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "236a65d3d2669b927eb51d53065e3622", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 5076, "upload_time": "2017-01-06T15:03:10", "url": "https://files.pythonhosted.org/packages/43/80/c6ef0ed4fc6cfa6ca3083d860d70348c4305ee25b10e4a46e2dac93b4da7/say_it_to_my_face-1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ef5d979d717bdcfec825f2c9bd8e8162", "sha256": "0a6a3cb02e3ec60a65a99edd6d28cb317ec2415d5c6c3fffe2472e6026765526" }, "downloads": -1, "filename": "say_it_to_my_face-1.0.tar.gz", "has_sig": false, "md5_digest": "ef5d979d717bdcfec825f2c9bd8e8162", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2642, "upload_time": "2017-01-06T15:00:51", "url": "https://files.pythonhosted.org/packages/48/42/b67e40db335158a09e1981312523239899987561ed892b8655335cb0e118/say_it_to_my_face-1.0.tar.gz" } ] }