{
"info": {
"author": "Dave Simons",
"author_email": "simonsdave@gmail.com",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Natural Language :: English",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Programming Language :: Python :: 2.7",
"Programming Language :: Python :: Implementation :: CPython",
"Topic :: Software Development :: Libraries :: Python Modules"
],
"description": "tor-async-util\n==============\n\n|Maintained| |license| |PythonVersions| |status| |PyPI| |Requirements\nStatus| |Build Status| |Coverage Status|\n\ntor-async-util is a set of utilities that are useful when implementing\nRESTful APIs using `Tornado's `__\n`Asynchronous and non-Blocking\nI/O `__.\n\nFeatures\n--------\n\n- when async curl httpclient is used, it's useful to know if libcurl\n was compiled with an async dns resolver - see\n ``is_libcurl_compiled_with_async_dns_resolver()``\n\n- instead of CTRL+C generating an unfriendly stack trace install a\n signal handler - see ``install_sigint_handler()``\n\n- a default request handler which generates a RESTful API friendly not\n found response - see ``DefaultRequestHandler()``\n\n- an abstract base class from which all request handler classes can be\n derived to provide\n\n- read and write json requests and responses optionally verifying each\n against a jsonschema - see ``RequestHandler.get_json_request_body()``\n and ``RequestHandler.write_and_verify()``\n\n- accessing decoded BASIC auth credentials - see\n ``RequestHandler.get_basic_auth_creds()``\n\n- augment Tornado's default ``set_status()`` with support for\n additional status codes - see ``RequestHandler.set_status()``\n\n- override Tornado's default ``write_error()`` so a json response body\n is generated rather than the default HTML response body - see\n ``RequestHandler.write_error()``\n\n- thin wrapper around ``ConfigParser.ConfigParser`` to parse ini files\n for things settings such as logging levels, keyczar crypters and\n keyczar signers - see ``Config``\n\n- core implementations of ``/_version``, ``/_noop`` and ``/_health``\n endpoints include async health checkers - see\n ``generate_version_response()``, ``generate_noop_response()``,\n ``generate_health_check_response()`` and ``AsyncHealthCheck``\n\n- `this `__\n explains that the time\\_info attribute of a tornado response object\n contains timing details of the phases of a request which is available\n when using the cURL http client. a description of these timing\n details can be found at\n `here `__.\n these timings are very, very helpful in understanding latencies from\n interactions between microservices - see\n ``write_http_client_response_to_log()``. an example of what the logs\n look like is below\n\n::\n\n 2016-01-23T03:45:53.362+00:00 INFO async_docker_remote_api 'Remote Docker API' took 3.42 ms to\n respond with 200 to 'GET' against >>>http://127.0.0.1:4243/containers/cid/logs?stdout=1<<< - timing\n detail: q=0.13 ms n=0.03 ms c=0.04 ms p=1.65 ms s=1.66 ms t=1.83 ms r=0.00 ms\n\n.. |Maintained| image:: https://img.shields.io/maintenance/yes/2018.svg?style=flat\n.. |license| image:: https://img.shields.io/pypi/l/tor-async-util.svg?style=flat\n.. |PythonVersions| image:: https://img.shields.io/pypi/pyversions/tor-async-util.svg?style=flat\n.. |status| image:: https://img.shields.io/pypi/status/tor-async-util.svg?style=flat\n.. |PyPI| image:: https://img.shields.io/pypi/v/tor-async-util.svg?style=flat\n :target: https://pypi.python.org/pypi/tor-async-util\n.. |Requirements Status| image:: https://requires.io/github/simonsdave/tor-async-util/requirements.svg?branch=release-1.15.0\n :target: https://requires.io/github/simonsdave/tor-async-util/requirements/?branch=release-1.15.0\n.. |Build Status| image:: https://travis-ci.org/simonsdave/tor-async-util.svg?branch=release-1.15.0\n :target: https://travis-ci.org/simonsdave/tor-async-util\n.. |Coverage Status| image:: https://coveralls.io/repos/simonsdave/tor-async-util/badge.svg?branch=release-1.15.0&service=github\n :target: https://coveralls.io/github/simonsdave/tor-async-util?branch=release-1.15.0\n\n\n",
"description_content_type": "",
"docs_url": null,
"download_url": "https://github.com/simonsdave/tor-async-util/tarball/v1.15.0",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "https://github.com/simonsdave/tor-async-util",
"keywords": "tornado",
"license": "MIT",
"maintainer": "Dave Simons",
"maintainer_email": "simonsdave@gmail.com",
"name": "tor_async_util",
"package_url": "https://pypi.org/project/tor_async_util/",
"platform": "",
"project_url": "https://pypi.org/project/tor_async_util/",
"project_urls": {
"Download": "https://github.com/simonsdave/tor-async-util/tarball/v1.15.0",
"Homepage": "https://github.com/simonsdave/tor-async-util"
},
"release_url": "https://pypi.org/project/tor_async_util/1.15.0/",
"requires_dist": [
"jsonschema (>=2.5.0)",
"python-keyczar (==0.716)",
"pycurl (>=7.43)"
],
"requires_python": "",
"summary": "Tornado Async Utilities",
"version": "1.15.0"
},
"last_serial": 4417484,
"releases": {
"1.13.0": [
{
"comment_text": "",
"digests": {
"md5": "201b154921b4e4533d49f7d21d57b28a",
"sha256": "813ef2074151d8b490d441fdf61e7918a14d268ed6cd9e5ce40f09942e5d7b0d"
},
"downloads": -1,
"filename": "tor_async_util-1.13.0.tar.gz",
"has_sig": false,
"md5_digest": "201b154921b4e4533d49f7d21d57b28a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 12670,
"upload_time": "2017-02-04T21:18:41",
"url": "https://files.pythonhosted.org/packages/5a/92/0abd1861ca0769eb6c3180d3862b04b727dce377d55fbb6fafc1404c231c/tor_async_util-1.13.0.tar.gz"
}
],
"1.13.1": [
{
"comment_text": "",
"digests": {
"md5": "3c6fdd43ee8991dec71d80aafa3b2f5d",
"sha256": "2fa6cab5f5a47e6955c7c7eba4901912392062772fc135c607eec926f6288fe4"
},
"downloads": -1,
"filename": "tor_async_util-1.13.1-py2-none-any.whl",
"has_sig": false,
"md5_digest": "3c6fdd43ee8991dec71d80aafa3b2f5d",
"packagetype": "bdist_wheel",
"python_version": "py2",
"requires_python": null,
"size": 17661,
"upload_time": "2018-01-14T00:38:25",
"url": "https://files.pythonhosted.org/packages/91/73/c235f1f44bfbbfc64f29a9ea4d28996a6ba5761930b5d148ce314d2b15d1/tor_async_util-1.13.1-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "c42f465c9491f31fa3ba12af02037494",
"sha256": "afcd43255d2668878056c97c13c6608068f019f09e02fef34b03c71730262df9"
},
"downloads": -1,
"filename": "tor_async_util-1.13.1.tar.gz",
"has_sig": false,
"md5_digest": "c42f465c9491f31fa3ba12af02037494",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 15620,
"upload_time": "2018-01-14T00:38:27",
"url": "https://files.pythonhosted.org/packages/fc/20/2a2f026c50209619ed42116ae7a9989254244c7a08b1dace51bdb9526376/tor_async_util-1.13.1.tar.gz"
}
],
"1.14.0": [
{
"comment_text": "",
"digests": {
"md5": "5000e2e2ca03fffeeac912becbbbcc87",
"sha256": "309ba6970cb5fc2cea5d8b00101bf4bfac0ef01094acd9d2f21b02894a9ac9a8"
},
"downloads": -1,
"filename": "tor_async_util-1.14.0-py2-none-any.whl",
"has_sig": false,
"md5_digest": "5000e2e2ca03fffeeac912becbbbcc87",
"packagetype": "bdist_wheel",
"python_version": "py2",
"requires_python": null,
"size": 18122,
"upload_time": "2018-02-20T00:46:11",
"url": "https://files.pythonhosted.org/packages/f2/04/ace9adf22554fb4d1b4d5397a4f9f0a877742ecdc745dafe3875c8196769/tor_async_util-1.14.0-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "a5627f9d975cb5963f2194f51f80998b",
"sha256": "d225c979b41410c647786bff9c5a509ae6b01a7009653a784e90f31cf9886777"
},
"downloads": -1,
"filename": "tor_async_util-1.14.0.tar.gz",
"has_sig": false,
"md5_digest": "a5627f9d975cb5963f2194f51f80998b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 16131,
"upload_time": "2018-02-20T00:46:13",
"url": "https://files.pythonhosted.org/packages/f9/fc/45b3cd8b31b676d9df6ae3320d746d4018e4dca5ae9c9ae7ac9da7511204/tor_async_util-1.14.0.tar.gz"
}
],
"1.15.0": [
{
"comment_text": "",
"digests": {
"md5": "1ea9305c48009b1b172ff7cac4cc6a71",
"sha256": "0ab16dda01611393e05775b5de89853960d79d5c19eeea7bf92b900c7ea687db"
},
"downloads": -1,
"filename": "tor_async_util-1.15.0-py2-none-any.whl",
"has_sig": false,
"md5_digest": "1ea9305c48009b1b172ff7cac4cc6a71",
"packagetype": "bdist_wheel",
"python_version": "py2",
"requires_python": null,
"size": 14173,
"upload_time": "2018-10-26T01:23:19",
"url": "https://files.pythonhosted.org/packages/21/2a/0f9da9ce4a7879906e67c8e9656ed351344ce19794dcf596964cc38bbce3/tor_async_util-1.15.0-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "3b89781a3224d87d2bd67c265081f002",
"sha256": "8ad6cffc81cf1eb343c6c6c2d3887234e66a53f349565b594d3425684fb09fec"
},
"downloads": -1,
"filename": "tor_async_util-1.15.0.tar.gz",
"has_sig": false,
"md5_digest": "3b89781a3224d87d2bd67c265081f002",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 12628,
"upload_time": "2018-10-26T01:23:21",
"url": "https://files.pythonhosted.org/packages/22/f2/1fdcfb39c5a377b589e395267d698dcdb09a17ad2eb97618bd8ed2dc0d2b/tor_async_util-1.15.0.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "1ea9305c48009b1b172ff7cac4cc6a71",
"sha256": "0ab16dda01611393e05775b5de89853960d79d5c19eeea7bf92b900c7ea687db"
},
"downloads": -1,
"filename": "tor_async_util-1.15.0-py2-none-any.whl",
"has_sig": false,
"md5_digest": "1ea9305c48009b1b172ff7cac4cc6a71",
"packagetype": "bdist_wheel",
"python_version": "py2",
"requires_python": null,
"size": 14173,
"upload_time": "2018-10-26T01:23:19",
"url": "https://files.pythonhosted.org/packages/21/2a/0f9da9ce4a7879906e67c8e9656ed351344ce19794dcf596964cc38bbce3/tor_async_util-1.15.0-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "3b89781a3224d87d2bd67c265081f002",
"sha256": "8ad6cffc81cf1eb343c6c6c2d3887234e66a53f349565b594d3425684fb09fec"
},
"downloads": -1,
"filename": "tor_async_util-1.15.0.tar.gz",
"has_sig": false,
"md5_digest": "3b89781a3224d87d2bd67c265081f002",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 12628,
"upload_time": "2018-10-26T01:23:21",
"url": "https://files.pythonhosted.org/packages/22/f2/1fdcfb39c5a377b589e395267d698dcdb09a17ad2eb97618bd8ed2dc0d2b/tor_async_util-1.15.0.tar.gz"
}
]
}