HTTP Client Mixin for Tornado RequestHandlers
Find a file
Andrew Rabert 5998afd1e0 Add handling of tornado.httpclient.HTTPError
Only handle OSError and httpclient.HTTPError.
- We can assume any instance of httpclient.HTTPError is a failure
  unrelated to the status code of the response. This is due to
  sprockets.mixins.http setting `raise_error=False` when making the
  request.
- ConnectionError and socket.gaierror are both instances of OSError
- CurlError is an instance of tornado.httpclient.HTTPError
- Other instances of tornado.httpclient.HTTPError include
  HTTPTimeoutError and HTTPStreamClosedError

Also needed to fix the instance assertions in the test. It was always
true as it was evaluating the truthyness of a list - not the isinstance
values.
2019-08-29 16:01:55 -04:00
docs Add handling of tornado.httpclient.HTTPError 2019-08-29 16:01:55 -04:00
requires Hard-pin tool requirements to avoid surprises. 2019-08-04 08:29:14 -04:00
sprockets Add handling of tornado.httpclient.HTTPError 2019-08-29 16:01:55 -04:00
.gitignore Base files 2017-04-26 17:49:58 -04:00
.travis.yml Add flake8 test to travis-ci job 2019-04-01 11:19:36 -04:00
LICENSE Update years in LICENSE. 2019-08-04 08:29:51 -04:00
MANIFEST.in Base files 2017-04-26 17:49:58 -04:00
README.rst Update doc links to point at readthedocs.io 2019-08-04 08:28:49 -04:00
setup.cfg Enable flake8 for conf.py 2019-04-01 16:59:28 -04:00
setup.py Release 2.1.0 2019-05-07 11:17:59 -04:00
tests.py Add handling of tornado.httpclient.HTTPError 2019-08-29 16:01:55 -04:00

sprockets.mixins.http
=====================
HTTP Client Mixin for Tornado RequestHandlers. Automatically retries on errors, sleep when rate limited, and handles content encoding and decoding using `MsgPack <https://msgpack.org>`_ and JSON.

|Version| |Travis| |CodeCov| |Docs|

Installation
------------
``sprockets.mixins.http`` is available on the
`Python Package Index <https://pypi.python.org/pypi/sprockets.mixins.http>`_
and can be installed via ``pip`` or ``easy_install``:

.. code-block:: bash

   pip install sprockets.mixins.http

If you would like to use `tornado.curl_httpclient.CurlAsyncHTTPClient`,
you can install `pycurl <https://pycurl.io>`_ with:

.. code-block:: bash

   pip install sprockets.mixins.http[curl]

Documentation
-------------
https://sprocketsmixinshttp.readthedocs.io

Requirements
------------
- `ietfparse <https://ietfparse.readthedocs.io>`_ >=1.5.1
- `tornado <https://www.tornadoweb.org/>`_ >=5
- `sprockets.mixins.mediatype[msgpack] <https://sprocketsmixinsmedia-type.readthedocs.io/>`_ >=3

Example
-------

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

.. code:: python

    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:

.. code:: python

    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()

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 <https://github.com/sprockets/sprockets.mixins.http/blob/master/LICENSE>`_.

.. |Version| image:: https://badge.fury.io/py/sprockets.mixins.http.svg?
   :target: https://badge.fury.io/py/sprockets.mixins.http

.. |Travis| image:: https://travis-ci.org/sprockets/sprockets.mixins.http.svg?branch=master
   :target: https://travis-ci.org/sprockets/sprockets.mixins.http

.. |CodeCov| image:: https://codecov.io/github/sprockets/sprockets.mixins.http/coverage.svg?branch=master
   :target: https://codecov.io/github/sprockets/sprockets.mixins.http?branch=master

.. |Docs| image:: https://img.shields.io/readthedocs/sprocketsmixinshttp
   :target: https://sprocketsmixinshttp.readthedocs.io/