Skip to main content

HTTP Client Mixin for Tornado RequestHandlers. Automatically retries on errors, sleep when rate limited, and handles content encoding and decoding using MsgPack and JSON.

Version Build Status CodeCov Docs

Installation

sprockets.mixins.http is available on the Python Package Index and can be installed via pip:

pip install sprockets.mixins.http

If you would like to use tornado.curl_httpclient.CurlAsyncHTTPClient, you can install pycurl with:

pip install sprockets.mixins.http[curl]

Documentation

https://sprocketsmixinshttp.readthedocs.io

Requirements

Example

This examples demonstrates the most basic usage of sprockets.mixins.http

from tornado import ioloop, web
from sprockets.mixins import http


class RequestHandler(http.HTTPClientMixin, web.RequestHandler):

   async def get(self, *args, **kwargs):
       response = await self.http_fetch('https://api.github.com')
       if not response.ok:
           self.set_status(response.code)
       self.write(response.body)


if __name__ == "__main__":
   app = web.Application([(r'/', RequestHandler)])
   app.listen(8000)
   ioloop.IOLoop.current().start()

As with Tornado, to use the curl client which has numerous benefits:

from tornado import httpclient, ioloop, web
from sprockets.mixins import http

httpclient.AsyncHTTPClient.configure(
    'tornado.curl_httpclient.CurlAsyncHTTPClient')


class RequestHandler(http.HTTPClientMixin, web.RequestHandler):

   async def get(self, *args, **kwargs):
       response = await self.http_fetch('https://api.github.com')
       if not response.ok:
           self.set_status(response.code)
       self.write(response.body)


if __name__ == "__main__":
   app = web.Application([(r'/', RequestHandler)])
   app.listen(8000)
   ioloop.IOLoop.current().start()

Error Response Body

For errors, i.e. a response with HTTP status code in the 400 range…

The HTTPResponse object’s body is reduced down to just the error message. That is this mixin’s default behavior.

For a JSON response body with Problem Details (RFC 7807), you may want more than just the error message. To gain access to the complete, deserialized response body; a class that uses this mixin can set:

self.simplify_error_response = False

Environment Variables

HTTP_MAX_CLIENTS

An optional setting that specifies the maximum number of simultaneous asynchronous HTTP requests. If not specified, the default Tornado value of 10 will be used.

License

sprockets.mixins.http is released under the 3-Clause BSD license.

Release files for sprockets.mixins.http 2.6.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sprockets.mixins.http 2.6.0
File Size Uploaded
sprockets.mixins.http-2.6.0.tar.gz 11.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sprockets.mixins.http 2.6.0
File Interpreter ABI Platform
sprockets.mixins.http-2.6.0-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 21.0 kB

Release files / sprockets.mixins.http-2.6.0.tar.gz

Download URL sprockets.mixins.http-2.6.0.tar.gz
Size 11.0 kB
Tags Source
SHA-256 checksum
How to use checksums
d06fdf6f627e6daaf7d14e1a37c7d52c440f0fb63a59fb2bb92180963b23bd81
BLAKE2b-256 checksum
How to use checksums
e62f01fd218e4948aa5f7def60e00d423562314cdaf2d4e3bdfbbc0abbde02f0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

Release files / sprockets.mixins.http-2.6.0-py2.py3-none-any.whl

Download URL sprockets.mixins.http-2.6.0-py2.py3-none-any.whl
Size 10.1 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
a0b8550f49e570d25bb9339c788efa3c3f307e23ca0cd35730b654211134351f
BLAKE2b-256 checksum
How to use checksums
5c32b4ea9e1f356146e54b56bf14ff8d9a818b98e0c30b20db9f79747bff1a61
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

Release history Release notifications | RSS feed

This release

2.6.0 This release

2 release files

2.5.0

1 release file

2.4.1

2 release files

2.4.0

2 release files

2.3.3

2 release files

2.3.1

2 release files

2.3.0

2 release files

2.2.1

2 release files

2.2.0

2 release files

2.1.0

2 release files

2.0.1

2 release files

2.0.0

1 release file

1.1.1

2 release files

1.1.0

2 release files

1.0.9

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page