From: Kenneth Reitz Date: Mon, 17 Dec 2012 11:25:03 +0000 (-0500) Subject: urlparse(url) X-Git-Tag: v1.0.0~21 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ca0d08eedaa9d0c79ccd9c69fedae89ed7812c53;p=services%2Fpython-requests.git urlparse(url) --- diff --git a/requests/adapters.py b/requests/adapters.py index 855fdb9..806641f 100644 --- a/requests/adapters.py +++ b/requests/adapters.py @@ -12,8 +12,10 @@ import os import socket from .models import Response +from .auth import HTTPProxyAuth from .packages.urllib3.poolmanager import PoolManager from .hooks import dispatch_hook +from .compat import urlparse from .utils import DEFAULT_CA_BUNDLE_PATH, get_encoding_from_headers from .structures import CaseInsensitiveDict from .packages.urllib3.exceptions import MaxRetryError @@ -119,6 +121,19 @@ class HTTPAdapter(BaseAdapter): response = dispatch_hook('response', req.hooks, response) return response + def get_connection(self, url, proxies=None): + proxies = proxies or {} + proxy = proxies.get(urlparse(url).scheme) + + if proxy: + conn = poolmanager.proxy_from_url(proxy) + else: + conn = self.poolmanager.connection_from_url(url) + + return conn + # no_proxy = filter(lambda x: x.strip(), self.proxies.get('no', '').split(',')) + + def close(self): """Dispose of any internal state. @@ -128,10 +143,11 @@ class HTTPAdapter(BaseAdapter): """ self.poolmanager.clear() - def send(self, request, prefetch=True, timeout=None, verify=True, cert=None): + def send(self, request, prefetch=True, timeout=None, verify=True, cert=None, proxies=None): """Sends PreparedRequest object. Returns Response object.""" - conn = self.poolmanager.connection_from_url(request.url) + conn = self.get_connection(request.url, proxies) + self.cert_verify(conn, request.url, verify, cert) try: diff --git a/requests/models.py b/requests/models.py index d77ade5..dfd04ec 100644 --- a/requests/models.py +++ b/requests/models.py @@ -15,20 +15,13 @@ import logging # from datetime import datetime from io import BytesIO -from types import GeneratorType from .hooks import dispatch_hook, default_hooks from .structures import CaseInsensitiveDict from .status_codes import codes from .auth import HTTPBasicAuth, HTTPProxyAuth from .cookies import cookiejar_from_dict, extract_cookies_to_jar, get_cookie_header -# from .packages.urllib3.exceptions import MaxRetryError, LocationParseError -# from .packages.urllib3.exceptions import TimeoutError -# from .packages.urllib3.exceptions import SSLError as _SSLError -# from .packages.urllib3.exceptions import HTTPError as _HTTPError -# from .packages.urllib3 import connectionpool, poolmanager from .packages.urllib3.filepost import encode_multipart_formdata - from .exceptions import ( ConnectionError, HTTPError, RequestException, Timeout, TooManyRedirects, URLRequired, SSLError, MissingSchema, InvalidSchema, InvalidURL) @@ -43,6 +36,7 @@ from .compat import ( REDIRECT_STATI = (codes.moved, codes.found, codes.other, codes.temporary_moved) CONTENT_CHUNK_SIZE = 10 * 1024 +ITER_CHUNK_SIZE = 10 * 1024 log = logging.getLogger(__name__) @@ -57,12 +51,6 @@ class RequestEncodingMixin(object): p = urlsplit(self.url) - # Proxies use full URLs. - # if p.scheme in self.proxies: - # url_base, frag = urldefrag(self.url) - # return url_base - - path = p.path if not path: path = '/' @@ -308,7 +296,7 @@ class PreparedRequest(RequestEncodingMixin, RequestHooksMixin): """Prepares the given HTTP body data.""" # If a generator is provided, error out. - if isinstance(data, types.GeneratorType) + if isinstance(data, type(_ for _ in [])): raise NotImplementedError('Generator bodies are not supported yet.') # Nottin' on you. @@ -457,7 +445,7 @@ class Response(object): return gen - def iter_lines(self, chunk_size=10 * 1024, decode_unicode=None): + def iter_lines(self, chunk_size=ITER_CHUNK_SIZE, decode_unicode=None): """Iterates over the response data, one line at a time. This avoids reading the content at once into memory for large responses.