pre_request hook
authorKenneth Reitz <me@kennethreitz.com>
Wed, 17 Aug 2011 04:27:53 +0000 (00:27 -0400)
committerKenneth Reitz <me@kennethreitz.com>
Wed, 17 Aug 2011 04:28:03 +0000 (00:28 -0400)
requests/hooks.py
requests/models.py

index 272dc07dc527cd50cc7bbd42f77e4892e3008a59..c5a24c24ec0c22585ee7d0f487057501fed6fbd9 100644 (file)
@@ -11,10 +11,10 @@ Available hooks:
 ``args``:
     A dictionary of the arguments being sent to Request().
 
-``pre-request``:
+``pre_request``:
     The Request object, directly before being sent.
 
-``post-request``:
+``post_request``:
     The Request object, directly after being sent.
 
 ``response``:
index d32193fd8a2ff19e4ef0f59838a840efc0e05866..daf48ea879d296cbb90e41a3954c95738e9ba18d 100644 (file)
@@ -16,6 +16,7 @@ from urlparse import urlparse, urlunparse, urljoin
 from datetime import datetime
 
 from .config import settings
+from .hooks import dispatch_hook
 from .monkeys import Request as _Request, HTTPBasicAuthHandler, HTTPForcedBasicAuthHandler, HTTPDigestAuthHandler, HTTPRedirectHandler
 from .structures import CaseInsensitiveDict
 from .packages.poster.encode import multipart_encode
@@ -36,7 +37,7 @@ class Request(object):
     def __init__(self,
         url=None, headers=dict(), files=None, method=None, data=dict(),
         params=dict(), auth=None, cookiejar=None, timeout=None, redirect=False,
-        allow_redirects=False, proxies=None):
+        allow_redirects=False, proxies=None, hooks=None):
 
         #: Float describ the timeout of the request.
         #  (Use socket.setdefaulttimeout() as fallback)
@@ -93,6 +94,9 @@ class Request(object):
         #: True if Request has been sent.
         self.sent = False
 
+        #: Dictionary of event hook callbacks.
+        self.hooks = hooks
+
 
         # Header manipulation and defaults.
 
@@ -323,10 +327,18 @@ class Request(object):
             try:
                 opener = self._get_opener()
                 try:
+
+                    # pre-request hook.
+                    self.__dict__.update(
+                        dispatch_hook('pre_request',
+                            self.hooks, self.__dict__)
+                    )
+
                     resp = opener(req, timeout=self.timeout)
+
                 except TypeError, err:
                     # timeout argument is new since Python v2.6
-                    if not "timeout" in str(err):
+                    if not 'timeout' in str(err):
                         raise
 
                     if settings.timeout_fallback: