An httplib injection library for recording and playing back HTTP interactions.
Project description
- “I want you to be nice, until it’s time to not be nice.”
– Dalton, Road-House
An httplib injection library for recording and playing back HTTP interactions.
Dalton monkey-patches two methods of httplib’s HTTPConnection class to intercept request/response interactions, and can play them back based on a Dalton recording. To ease testing, the recording is generated Python code to ease in customization of the response and to allow for branches in the playback path.
- Monkey-patched methods of HTTPConnection:
request
getresponse
Using the more verbose method to send/recieve requests with HTTPConnection is not supported at this time.
Note: This is a first and early release, mainly so that I could use it with mechanize to record/playback interactions. As mechanize only uses the request/getresponse API on HTTPConnection, I have no interest in adding intercept to the rest. Please feel free to fork this to add additional features as I don’t plan on adding them myself (though I will happily pull bug fixes and feature additions with unit tests).
Warning: Dalton uses inspect.currentframe magic to derive the caller which may only work on CPython (PyPy and Jython is untested).
Example
Since dalton monkey-patches httplib, no modification is necessary of libraries that utilize the supported methods.
import dalton dalton.inject() # monkey-patch httplib from httplib import HTTPConnection h = HTTPConnection('www.google.com') # when recording, httplib capture is restricted by caller recorder = dalton.Recorder(caller=h) # record httplib calls in this block with recorder.recording(): h.request('GET', '/') resp = h.getresponse() body = resp.read() # save the interaction recorder.save('google')
A folder called google will be created in the current directory for use with dalton’s playback facility.
Playing it back:
import dalton dalton.inject() # monkey-patch httplib from httplib import HTTPConnection h = HTTPConnection('www.google.com') # load the player player = dalton.Player(caller=h, playback_dir='google') # run httplib calls against the player with player.playing(): h.request('GET', '/') resp = h.getresponse() body = resp.read() # body is now the same as it was recorded, no calls to www.google.com # were made
- This generates a directory google with the following layout:
__init__.py
step_0_response.txt
The contents of __init__.py contain the following generated playback information:
import os import dalton from dalton import FileWrapper here = os.path.abspath(os.path.dirname(__file__)) class StepNumber0(object): recorded_request = { 'headers': {}, 'url': '/', 'method': 'GET', 'body': None, } recorded_response = { 'headers': [('x-xss-protection', '1; mode=block'), ('transfer-encoding', 'chunked'), ( 'set-cookie', 'PREF=ID=ff; expires=Thu, 11-Apr-2013 20:19:35 GMT; path=/; domain=.google.com, NID=45=fU; expires=Wed, 12-Oct-2011 20:19:35 GMT; path=/; domain=.google.com; HttpOnly'), ('expires', '-1'), ('server', 'gws'), ('cache-control', 'private, max-age=0'), ('date', 'Tue, 12 Apr 2011 20:19:35 GMT'), ('content-type', 'text/html; charset=ISO-8859-1')], 'body': FileWrapper('step_0_response.txt', here), 'status': 200, 'reason': 'OK', 'version': 11, } next_step = 'None' def handle_request(self, request): assert dalton.request_match(request, self.recorded_request) return (self.next_step, dalton.create_response(self.recorded_response))
This file can be modified after recordings to customize the playback, add additional branches, etc.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file dalton-0.1.tar.gz
.
File metadata
- Download URL: dalton-0.1.tar.gz
- Upload date:
- Size: 18.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 71c8d2248a4a7b50732a1dd90ec41afde0e3d3cbd5e1da7305e9ae2b7adcdc2c |
|
MD5 | 39754c6bfa24690facda8fb8bdd2041e |
|
BLAKE2b-256 | 7ab0857680140795084a0cb570c0d836af286c86d7d7dc0d664b31636b9b61f6 |