use config throughout models

This commit is contained in:
Kenneth Reitz
2011-10-22 20:28:06 -04:00
parent 5c81fba1eb
commit 903f96cc6a
+46 -22
View File
@@ -9,22 +9,22 @@ requests.models
import urllib
import urllib2
import socket
import codecs
import zlib
from urllib2 import HTTPError
from urlparse import urlparse, urlunparse, urljoin
from datetime import datetime
from .config import settings
from .monkeys import Request as _Request, HTTPBasicAuthHandler, HTTPForcedBasicAuthHandler, HTTPDigestAuthHandler, HTTPRedirectHandler
from .structures import CaseInsensitiveDict
from .packages.poster.encode import multipart_encode
from .packages.poster.streaminghttp import register_openers, get_handlers
from .utils import dict_from_cookiejar, get_unicode_from_response, stream_decode_response_unicode, decode_gzip, stream_decode_gzip
from .utils import (dict_from_cookiejar, get_unicode_from_response, stream_decode_response_unicode, decode_gzip, stream_decode_gzip)
from .status_codes import codes
from .exceptions import Timeout, URLRequired, TooManyRedirects
from .monkeys import Request as _Request
from .monkeys import (
HTTPBasicAuthHandler, HTTPForcedBasicAuthHandler,
HTTPDigestAuthHandler, HTTPRedirectHandler)
REDIRECT_STATI = (codes.moved, codes.found, codes.other, codes.temporary_moved)
@@ -37,9 +37,20 @@ class Request(object):
"""
def __init__(self,
url=None, headers=dict(), files=None, method=None, data=dict(),
params=dict(), auth=None, cookies=None, timeout=None, redirect=False,
allow_redirects=False, proxies=None, hooks=None):
url=None,
headers=dict(),
files=None,
method=None,
data=dict(),
params=dict(),
auth=None,
cookies=None,
timeout=None,
redirect=False,
allow_redirects=False,
proxies=None,
hooks=None,
config=None):
#: Float describes the timeout of the request.
# (Use socket.setdefaulttimeout() as fallback)
@@ -93,6 +104,9 @@ class Request(object):
#: CookieJar to attach to :class:`Request <Request>`.
self.cookies = cookies
#: Dictionary of configurations for this request.
self.config = config
#: True if Request has been sent.
self.sent = False
@@ -100,16 +114,15 @@ class Request(object):
self.hooks = hooks
# Header manipulation and defaults.
if settings.accept_gzip:
settings.base_headers.update({'Accept-Encoding': 'gzip'})
if self.config.get('accept_gzip'):
self.headers.update({'Accept-Encoding': 'gzip'})
if headers:
headers = CaseInsensitiveDict(self.headers)
else:
headers = CaseInsensitiveDict()
for (k, v) in settings.base_headers.items():
for (k, v) in self.config.get('base_headers', {}).items():
if k not in headers:
headers[k] = v
@@ -185,6 +198,7 @@ class Request(object):
def build(resp):
response = Response()
response.config = self.config
response.status_code = getattr(resp, 'code', None)
try:
@@ -219,7 +233,7 @@ class Request(object):
r.raw.close()
if not len(history) < settings.max_redirects:
if not len(history) < self.config.get('max_redirects'):
raise TooManyRedirects()
history.append(r)
@@ -243,9 +257,16 @@ class Request(object):
method = self.method
request = Request(
url, self.headers, self.files, method,
self.data, self.params, self.auth, self.cookies,
redirect=True
url=url,
headers=self.headers,
files=self.files,
method=method,
# data=self.data,
# params=self.params,
auth=self.auth,
cookies=self.cookies,
redirect=True,
config=self.config
)
request.send()
r = request.response
@@ -313,8 +334,8 @@ class Request(object):
self._checks()
# Logging
if settings.verbose:
settings.verbose.write('%s %s %s\n' % (
if self.config.get('verbose'):
self.config.get('verbose').write('%s %s %s\n' % (
datetime.now().isoformat(), self.method, self.url
))
@@ -353,14 +374,14 @@ class Request(object):
if not 'timeout' in str(err):
raise
if settings.timeout_fallback:
if self.config.get('timeout_fallback'):
# fall-back and use global socket timeout (This is not thread-safe!)
old_timeout = socket.getdefaulttimeout()
socket.setdefaulttimeout(self.timeout)
resp = opener(req)
if settings.timeout_fallback:
if self.config.get('timeout_fallback'):
# restore global timeout
socket.setdefaulttimeout(old_timeout)
@@ -429,6 +450,9 @@ class Response(object):
#: A dictionary of Cookies the server sent back.
self.cookies = None
#: Dictionary of configurations for this request.
self.config = None
def __repr__(self):
return '<Response [%s]>' % (self.status_code)
@@ -460,7 +484,7 @@ class Response(object):
if 'gzip' in self.headers.get('content-encoding', ''):
gen = stream_decode_gzip(gen)
if decode_unicode is None:
decode_unicode = settings.decode_unicode
decode_unicode = self.config.get('decode_unicode')
if decode_unicode:
gen = stream_decode_response_unicode(gen, self)
return gen
@@ -489,7 +513,7 @@ class Response(object):
pass
# Decode unicode content.
if settings.decode_unicode:
if self.config.get('decode_unicode'):
self._content = get_unicode_from_response(self)
self._content_consumed = True