tclient

HTTP client for parallel http requests


License
ISC
Install
pip install tclient==0.0.4

Documentation

tclient: HTTP client for parallel http requests

TClient is an http client for doing http requests in parallel. This is really just a light wrapper around Tornado and uses Tornado's ioloop and httpclient.

Features

  • Create multiple HTTP requests, have them run in parallel.
  • Convinient API for building requests with query params, forms, or JSON.
  • Integrates with BlueOx for logging and metrics.
  • Testing hooks

Use

tclient.Request is based on tornado.httpclient.HTTPRequest, so you should checkout it's documentation

In summary:

req1 = tclient.Request('http://localhost:8888')
req1.params['search'] = 'turtles in a half-shell'

req2 = tclient.Request('http://localhost:8888')
req2.method = "POST"
req2.body = {'name': 'Raphael'}

req3 = tclient.Request('http://localhost:8888', method="POST")
req3.form['name'] = 'Raphael'
req3.form.add_file("tmnt.jpg", picture_fp)

resp1, resp2, resp3 = tclient.fetch_all([req1, req2, req3], timeout=30)
for r in (resp1, resp2, resp3):
    r.rethrow()

print resp1.json['results']

Dependencies

  • tornado
  • urllib3 (just for form encoding)
  • pycurl (recommended)
  • blueox (optional)

PyCurl

It is recommended that you enable use of PyCURL with the Tornado client. It's just better and faster. To enable, you'd do something like:

from tornado.httpclient import AsyncHTTPClient
AsyncHTTPClient.configure("tornado.curl_httpclient.CurlAsyncHTTPClient")

Testing

We have a nice mock version of tclient you can use for testing your own applications.

from tclient.test import get_test_client

client = get_test_client()

client.handle(r'/test', lambda r: client.build_response(r, body={'ok': True}))

req = tclient.Request('http://localhost/test')
resp = tclient.fetch(req)
assert resp.json['ok']

Developing

Want something more? Bug fix?

Developing on tclient is easy, there is even a nice Makefile to get you setup.

make dev

This will get you a virtualenv with all the dependencies.

make test

Run's testify to execute all the tests.

make flake8

Check pep8 and flake the source code.

Make your change, send me a PR.

The project layout is based on py-bootstrap