ž 7’Re#c @sddlZyddlmZWn"ek rDddlmZYnXddlmZddlmZm Z ddlm Z ddl m Z ddl mZd d d gZied 6e d 6ZejeƒZdZGdd „d e ƒZGdd „d eƒZdd „ZdS(iN(uurljoini(uRecentlyUsedContainer(uHTTPConnectionPooluHTTPSConnectionPool(uport_by_scheme(uRequestMethods(u parse_urlu PoolManageru ProxyManageruproxy_from_urluhttpuhttpsukey_fileu cert_fileu cert_reqsuca_certsu ssl_versioncBsw|EeZdZdZdZdddd„Zdd„Zdd„Zdd d d „Z d d „Z ddd„Z dS(u PoolManageru& Allows for arbitrary requests while transparently keeping track of necessary connection pools for you. :param num_pools: Number of connection pools to cache before discarding the least recently used pool. :param headers: Headers to include with all requests, unless other headers are given explicitly. :param \**connection_pool_kw: Additional parameters are used to create fresh :class:`urllib3.connectionpool.ConnectionPool` instances. Example: :: >>> manager = PoolManager(num_pools=2) >>> r = manager.request('GET', 'http://google.com/') >>> r = manager.request('GET', 'http://google.com/mail') >>> r = manager.request('GET', 'http://yahoo.com/') >>> len(manager.pools) 2 i cKs8tj||ƒ||_t|ddd„ƒ|_dS(Nu dispose_funccSs |jƒS(N(uclose(up((uJ/tmp/pip-zej_zi-build/pip/_vendor/requests/packages/urllib3/poolmanager.pyuEsu&PoolManager.__init__..(uRequestMethodsu__init__uconnection_pool_kwuRecentlyUsedContainerupools(uselfu num_poolsuheadersuconnection_pool_kw((uJ/tmp/pip-zej_zi-build/pip/_vendor/requests/packages/urllib3/poolmanager.pyu__init__As  uPoolManager.__init__cCsbt|}|j}|dkrR|jjƒ}x!tD]}|j|dƒq5Wn||||S(u Create a new :class:`ConnectionPool` based on host, port and scheme. This method is used to actually create the connection pools handed out by :meth:`connection_from_url` and companion methods. It is intended to be overridden for customization. uhttpN(upool_classes_by_schemeuconnection_pool_kwucopyu SSL_KEYWORDSupopuNone(uselfuschemeuhostuportupool_clsukwargsukw((uJ/tmp/pip-zej_zi-build/pip/_vendor/requests/packages/urllib3/poolmanager.pyu _new_poolGs    uPoolManager._new_poolcCs|jjƒdS(u´ Empty our store of pools and direct them all to close. This will not affect in-flight connections, but they will not be re-used after completion. N(upoolsuclear(uself((uJ/tmp/pip-zej_zi-build/pip/_vendor/requests/packages/urllib3/poolmanager.pyuclearXsuPoolManager.clearuhttpc Csˆ|p d}|p!tj|dƒ}|||f}|jjC|jj|ƒ}|r\|S|j|||ƒ}||j| %suretriesiiFN(u parse_urluconnection_from_hostuhostuportuschemeuFalseuheadersuproxyuNoneuurlopenu request_uriuget_redirect_locationuurljoinustatusuloguinfouget( uselfumethoduurluredirectukwuuuconnuresponseuredirect_location((uJ/tmp/pip-zej_zi-build/pip/_vendor/requests/packages/urllib3/poolmanager.pyuurlopen‡s& $     uPoolManager.urlopenNT( u__name__u __module__u __qualname__u__doc__uNoneuproxyu__init__u _new_pooluclearuconnection_from_hostuconnection_from_urluTrueuurlopen(u __locals__((uJ/tmp/pip-zej_zi-build/pip/_vendor/requests/packages/urllib3/poolmanager.pyu PoolManager#s   csq|EeZdZdZdd d ‡fdd†Zd d‡fdd†Zd dd „Zd ‡fd d †Z ‡S(u ProxyManageruw Behaves just like :class:`PoolManager`, but sends all requests through the defined proxy, using the CONNECT method for HTTPS URLs. :param proxy_url: The URL of the proxy to be used. :param proxy_headers: A dictionary contaning headers that will be sent to the proxy. In case of HTTP they are being sent with each request, while in the HTTPS/CONNECT case they are sent only once. Could be used for proxy authentication. Example: >>> proxy = urllib3.ProxyManager('http://localhost:3128/') >>> r1 = proxy.request('GET', 'http://google.com/') >>> r2 = proxy.request('GET', 'http://httpbin.org/') >>> len(proxy.pools) 1 >>> r3 = proxy.request('GET', 'https://httpbin.org/') >>> r4 = proxy.request('GET', 'https://twitter.com/') >>> len(proxy.pools) 3 i c sçt|tƒr.d|j|j|jf}nt|ƒ}|jsmtj|jdƒ}|jd|ƒ}n||_ |pi|_ |j jd ks­t d|j jƒ‚|j |d<|j |ds&   ‹S