Skip to main content

A utility library for mocking out the `urllib3` Python library.

Project description

A utility library for mocking out the urllib3 Python library.

This is an adaptation of the responses library.

https://travis-ci.org/florentx/urllib3-mock.png?branch=master

Response body as string

from urllib3_mock import Responses
import requests

responses = Responses('requests.packages.urllib3')

@responses.activate
def test_my_api():
    responses.add('GET', '/api/1/foobar',
                  body='{"error": "not found"}', status=404,
                  content_type='application/json')

    resp = requests.get('http://twitter.com/api/1/foobar')

    assert resp.json() == {"error": "not found"}

    assert len(responses.calls) == 1
    assert responses.calls[0].request.url == '/api/1/foobar'
    assert responses.calls[0].request.host == 'twitter.com'
    assert responses.calls[0].request.scheme == 'http'

Request callback

import json

from urllib3_mock import Responses
import requests

responses = Responses('requests.packages.urllib3')

@responses.activate
def test_calc_api():

    def request_callback(request):
        payload = json.loads(request.body)
        resp_body = {'value': sum(payload['numbers'])}
        headers = {'request-id': '728d329e-0e86-11e4-a748-0c84dc037c13'}
        return (200, headers, json.dumps(resp_body))

    responses.add_callback('POST', '/sum',
                           callback=request_callback,
                           content_type='application/json')

    resp = requests.post(
        'http://calc.com/sum',
        json.dumps({'numbers': [1, 2, 3]}),
        headers={'content-type': 'application/json'},
    )

    assert resp.json() == {'value': 6}

    assert len(responses.calls) == 1
    assert responses.calls[0].request.url == '/sum'
    assert responses.calls[0].request.host == 'calc.com'
    assert (
        responses.calls[0].response.headers['request-id'] ==
        '728d329e-0e86-11e4-a748-0c84dc037c13'
    )

Instead of passing a string URL into responses.add or responses.add_callback you can also supply a compiled regular expression.

import re
from urllib3_mock import Responses
import requests

responses = Responses('requests.packages.urllib3')

# Instead of
responses.add('GET', '/api/1/foobar',
              body='{"error": "not found"}', status=404,
              content_type='application/json')

# You can do the following
url_re = re.compile(r'/api/\d+/foobar')
responses.add('GET', url_re,
              body='{"error": "not found"}', status=404,
              content_type='application/json')

A response can also throw an exception as follows.

from urllib3_mock import Responses
from requests.packages.urllib3.exceptions import HTTPError

exception = HTTPError('Something went wrong')

responses = Responses('requests.packages.urllib3')
responses.add('GET', '/api/1/foobar',
              body=exception)
# All calls to 'http://twitter.com/api/1/foobar' will throw exception.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

urllib3-mock-0.3.3.tar.gz (10.4 kB view details)

Uploaded Source

Built Distribution

urllib3_mock-0.3.3-py2.py3-none-any.whl (6.3 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file urllib3-mock-0.3.3.tar.gz.

File metadata

File hashes

Hashes for urllib3-mock-0.3.3.tar.gz
Algorithm Hash digest
SHA256 b210037029ac96beac4f3e7b54f466c394b060525ea5a824803d5f5ed14558f1
MD5 1eba839a0469cf029e7acd629cca21e2
BLAKE2b-256 b0236a338cfb7c922e455725c3a4cd2df59f05294f0406f9670e20e115b331e2

See more details on using hashes here.

File details

Details for the file urllib3_mock-0.3.3-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for urllib3_mock-0.3.3-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 702c90042920d771c9902b7b5b542551cc57f259078f4eada47ab4e8cdd11f1a
MD5 2aed73bd3b24204f1ce09c467d397402
BLAKE2b-256 64ec4c723737b2c7733b6b7257d6990aa813144e2bb96e75ceaf2791ee815277

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page