ó ïRec@@s¦ddlmZddlZddlZddlZddlZddlmZddlm Z m Z ddlm Z ddl m Z mZmZmZddlmZdd lmZdd lmZdd lmZdd lmZd ddgZejeƒZd8Zd9Z ej!d1e ƒZ"d2„Z#iej$e#e"ƒd36ej$e#e"ƒd46Z%ie d36e d46Z&d efd5„ƒYZ'de'fd6„ƒYZ(d7„Z)dS(:i(tabsolute_importNi(tRecentlyUsedContainer(tHTTPConnectionPooltHTTPSConnectionPool(tport_by_scheme(tLocationValueErrort MaxRetryErrortProxySchemeUnknownt InvalidProxyConfigurationWarning(tsix(turljoin(tRequestMethods(t parse_url(tRetryt PoolManagert ProxyManagertproxy_from_urltkey_filet cert_filet cert_reqstca_certst ssl_versiont ca_cert_dirt ssl_contextt key_passwordt key_schemetkey_hosttkey_portt key_timeoutt key_retriest key_strictt key_blocktkey_source_addresst key_key_filetkey_key_passwordt key_cert_filet key_cert_reqst key_ca_certstkey_ssl_versiontkey_ca_cert_dirtkey_ssl_contextt key_maxsizet key_headerst key__proxytkey__proxy_headerstkey_socket_optionstkey__socks_optionstkey_assert_hostnametkey_assert_fingerprinttkey_server_hostnametPoolKeycC@s|jƒ}|djƒ|d<|djƒ|d>> 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 cK@sMtj||ƒ||_t|dd„ƒ|_t|_tjƒ|_dS(Nt dispose_funccS@s |jƒS(N(tclose(tp((sŽ/builddir/build/BUILDROOT/alt-python27-pip-20.2.4-5.el8.x86_64/opt/alt/python27/lib/python2.7/site-packages/pip/_vendor/urllib3/poolmanager.pyt¨t(R t__init__tconnection_pool_kwRtpoolstpool_classes_by_schemetkey_fn_by_schemeR:(tselft num_poolsR5RT((sŽ/builddir/build/BUILDROOT/alt-python27-pip-20.2.4-5.el8.x86_64/opt/alt/python27/lib/python2.7/site-packages/pip/_vendor/urllib3/poolmanager.pyRS¥s   cC@s|S(N((RX((sŽ/builddir/build/BUILDROOT/alt-python27-pip-20.2.4-5.el8.x86_64/opt/alt/python27/lib/python2.7/site-packages/pip/_vendor/urllib3/poolmanager.pyt __enter__¯scC@s|jƒtS(N(tcleartFalse(RXtexc_typetexc_valtexc_tb((sŽ/builddir/build/BUILDROOT/alt-python27-pip-20.2.4-5.el8.x86_64/opt/alt/python27/lib/python2.7/site-packages/pip/_vendor/urllib3/poolmanager.pyt__exit__²s cC@sŒ|j|}|dkr+|jjƒ}nxdD]}|j|dƒq2W|dkr|x!tD]}|j|dƒq_Wn||||S(s· Create a new :class:`ConnectionPool` based on host, port, scheme, and any additional pool keyword arguments. If ``request_context`` is provided, it is provided as keyword arguments to the pool class used. 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. R3R4tportRLN(R3R4Ra(RVR<RTR:RCt SSL_KEYWORDS(RXR3R4RaRFtpool_clsRHtkw((sŽ/builddir/build/BUILDROOT/alt-python27-pip-20.2.4-5.el8.x86_64/opt/alt/python27/lib/python2.7/site-packages/pip/_vendor/urllib3/poolmanager.pyt _new_pool·s     cC@s|jjƒdS(s´ 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(RUR[(RX((sŽ/builddir/build/BUILDROOT/alt-python27-pip-20.2.4-5.el8.x86_64/opt/alt/python27/lib/python2.7/site-packages/pip/_vendor/urllib3/poolmanager.pyR[ÒsRLcC@sz|stdƒ‚n|j|ƒ}|p-d|d<|sYtj|djƒdƒ}n||d<||d<|j|ƒS(s Get a :class:`ConnectionPool` based on the host, port, and scheme. If ``port`` isn't given, it will be derived from the ``scheme`` using ``urllib3.connectionpool.port_by_scheme``. If ``pool_kwargs`` is provided, it is merged with the instance's ``connection_pool_kw`` variable and used to create the new connection pool, if one is needed. sNo host specified.RLR3iPRaR4(Rt_merge_pool_kwargsRR?R;tconnection_from_context(RXR4RaR3t pool_kwargsRF((sŽ/builddir/build/BUILDROOT/alt-python27-pip-20.2.4-5.el8.x86_64/opt/alt/python27/lib/python2.7/site-packages/pip/_vendor/urllib3/poolmanager.pytconnection_from_hostÛs   cC@s<|djƒ}|j|}||ƒ}|j|d|ƒS(sâ Get a :class:`ConnectionPool` based on the request context. ``request_context`` must at least contain the ``scheme`` key and its value must be a key in ``key_fn_by_scheme`` instance variable. R3RF(R;RWtconnection_from_pool_key(RXRFR3tpool_key_constructortpool_key((sŽ/builddir/build/BUILDROOT/alt-python27-pip-20.2.4-5.el8.x86_64/opt/alt/python27/lib/python2.7/site-packages/pip/_vendor/urllib3/poolmanager.pyRgòs  c C@sy|jjg|jj|ƒ}|r)|S|d}|d}|d}|j|||d|ƒ}||j|R<tKeyError(RXtoverridetbase_pool_kwargsRHtvalue((sŽ/builddir/build/BUILDROOT/alt-python27-pip-20.2.4-5.el8.x86_64/opt/alt/python27/lib/python2.7/site-packages/pip/_vendor/urllib3/poolmanager.pyRf's   c K@s3t|ƒ}|j|jd|jd|jƒ}t|d %sN( R RiR4RaR3R\R5R:tproxyR<turlopent request_uritget_redirect_locationR tstatusR?t isinstanceR tfrom_inttremove_headers_on_redirectt is_same_hostRAR titerkeysR;RCt incrementRtraise_on_redirectt drain_conntlogtinfo( RXtmethodRoRwRdRptconnRztredirect_locationRyR5theader((sŽ/builddir/build/BUILDROOT/alt-python27-pip-20.2.4-5.el8.x86_64/opt/alt/python27/lib/python2.7/site-packages/pip/_vendor/urllib3/poolmanager.pyR};sH $      "      N(t__name__t __module__t__doc__R<R|RSRZR`ReR[RiRgRjRqRftTrueR}(((sŽ/builddir/build/BUILDROOT/alt-python27-pip-20.2.4-5.el8.x86_64/opt/alt/python27/lib/python2.7/site-packages/pip/_vendor/urllib3/poolmanager.pyR‡s       cB@sSeZdZdddd„Zdddd„Zdd„Zd„Zed„Z RS( sx 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 containing 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 cK@sàt|tƒr.d|j|j|jf}nt|ƒ}|jsmtj|jdƒ}|jd|ƒ}n|jdkrŽt |jƒ‚n||_ |p i|_ |j |d<|j |dsr    " 5ön