
    yf:                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZddlm	Z	m
Z
mZ ddlmZmZmZ ddlmZ e
 ed      e ed       ed ej(                  j+                  d	      D              Zed
k  r ed      e
j.                  dk  r ed      d dlZ
d dlZ
d dlZd dlZddlmZmZmZm Z m!Z!m"Z"m#Z# ddl$m%Z%m&Z&m'Z'm(Z(m)Z) ddl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 ddl2m.Z3 ddgZ4e	e4jk                  d       	  G d d      Z6d dl7Z e8ejr                  jt                  d      r@ e6ejr                  jt                  jv                        ejr                  jt                  _;        nw e8ejr                  jt                  d      r@ e6ejr                  jt                  jx                        ejr                  jt                  _<        n ejz                  d e       z          	 edk  rG e j|                  e?      5  dxejr                  _@        ejr                  j                  _@        ddd       e#e
j                  _#         G d de'      ZC G d d e
j                  j                        ZE G d! d"e
j                  j                        ZH G d# d$ej                        ZJ G d% d&ej                        ZLe) G d' d(e&e             ZM e(eM      d)        ZN G d* d+ej                  j                        ZQ G d, d-eQej                  j                        ZS G d. d/ej                        ZU G d0 d1ej                        ZW G d2 d3ej                        ZYeYe
j                  _Z        y# 1 sw Y   =xY w)4    N   )brotlirequestsurllib3)bug_reports_messageint_or_nonevariadic)normalize_urlz requests module is not installedzurllib3 module is not installedc              #   6   K   | ]  }t        |d         yw)r   )defaultN)r   ).0xs     =/usr/lib/python3/dist-packages/yt_dlp/networking/_requests.py	<genexpr>r      s     ZaAq11Zs   .)         z$Only urllib3 >= 1.26.17 is supportedi 1 z$Only requests >= 2.31.0 is supportedr   )InstanceStoreMixinadd_accept_encoding_headercreate_connectioncreate_socks_proxy_socketget_redirect_methodmake_socks_proxy_optsselect_proxy)FeaturesRequestHandlerResponseregister_preferenceregister_rh)CertificateVerifyError	HTTPErrorIncompleteRead
ProxyErrorRequestErrorSSLErrorTransportError)r$   gzipdeflatebrc                   8    e Zd Zdej                  fdZd Zd Zy)Urllib3PercentREOverriderc                     || _         y N)re)selfr-   s     r   __init__z!Urllib3PercentREOverride.__init__U   s	        c                 8    | j                   j                  |      S r/   )r0   __getattribute__)r1   items     r   __getattr__z$Urllib3PercentREOverride.__getattr__Y   s    ww''--r3   c                 N    | | j                   j                  ||g|i |d   fS )Nr   )r0   subn)r1   replstringargskwargss        r   r9   zUrllib3PercentREOverride.subn\   s-    |tww||D&B4B6B1EEEr3   N)__name__
__module____qualname__r0   Patternr2   r7   r9    r3   r   r,   r,   T   s    "** .Fr3   r,   
PERCENT_RE_PERCENT_REzAFailed to patch PERCENT_RE in urllib3 (does the attribute exist?))r   r   r   Tc                   Z     e Zd Zdej                  j
                  f fdZddefdZ xZ	S )RequestsResponseAdapterresc                     t         |   |j                  |j                  |j                  |j
                  |j                         || _        y )N)fpheadersurlstatusreason)superr2   rawrJ   rK   status_coderM   _requests_response)r1   rG   	__class__s     r   r2   z RequestsResponseAdapter.__init__   s?    ww??3:: 	 	7 #&r3   amtc                 ~   	 | j                   j                  |d      S # t        j                  j                  $ r}t	        |      |d }~wt        j                  j
                  $ r}t        d |j                  |j                  gt        |j                        D        d       }|St        |j                  t              r|j                  nt        |j                        }t        ||j                         |t#        |      |d }~wt        j                  j$                  $ r}t#        |      |d }~ww xY w)NT)decode_contentcausec              3   h   K   | ]*  }t        |t        j                  j                        r| , y wr/   )
isinstancehttpclientr#   )r   errs     r   r   z/RequestsResponseAdapter.read.<locals>.<genexpr>   s-      AsDKK$>$>?  As   02)partialexpected)rI   readr   
exceptionsr&   ProtocolErrornext__context__	__cause__r	   r<   rY   r]   intlenr#   r^   r'   r"   )r1   rS   eir_errr]   s        r   r_   zRequestsResponseAdapter.read   s	   	177<<D<99 !!** 	+#*!!// 	1 A Ohqvv>N O ABFHF ! -7v~~s,K&..QTU[UcUcQd$WvOUVV q)q0!!++ 	1 q)q0	1s-    D<A		 D<)B!D

 D<*D77D<r/   )
r>   r?   r@   r   modelsr   r2   re   r_   __classcell__rR   s   @r   rF   rF      s%    &HOO44 &1 1r3   rF   c                   :     e Zd Zd fd	Z fdZ fdZd Z xZS )RequestsHTTPAdapterc                     i | _         |r|| j                   d<   |r|df| j                   d<   |xs || _        t        |   di | y )Nssl_contextr   source_addressrB   )_pm_args_proxy_ssl_contextrN   r2   )r1   ro   proxy_ssl_contextrp   r=   rR   s        r   r2   zRequestsHTTPAdapter.__init__   sO    +6DMM-(/=q.ADMM*+"3"B{"6"r3   c                 :    t        |   |i || j                  S r/   )rN   init_poolmanagerrq   )r1   r<   r=   rR   s      r   ru   z$RequestsHTTPAdapter.init_poolmanager   s!    w'II4==IIr3   c                     i }|j                         j                  d      s| j                  r| j                  |d<   t        |   |fi || j
                  |S )Nsocksrs   )lower
startswithrr   rN   proxy_manager_forrq   )r1   proxyproxy_kwargsextra_kwargsrR   s       r   rz   z%RequestsHTTPAdapter.proxy_manager_for   sY    {{}''0T5L5L040G0GL,-w(`,`$--`S_``r3   c                       y r/   rB   )r<   r=   s     r   cert_verifyzRequestsHTTPAdapter.cert_verify   s    r3   )NNN)r>   r?   r@   r2   ru   rz   r   rj   rk   s   @r   rm   rm      s    #Jar3   rm   c                   (     e Zd ZdZd Z fdZ xZS )RequestsSessionzS
    Ensure unified redirect method handling with our urllib redirect handler.
    c                     t        |j                  |j                        }||j                  k(  r|j                  |_        d|_        ||_        t	        |j
                        |_        y )Ni4  )r   methodrP   _real_status_coder
   rK   )r1   prepared_requestresponse
new_methods       r   rebuild_methodzRequestsSession.rebuild_method   sb    ()9)@)@(BVBVW
 )000)1)=)=H&#&H ",  --=-A-ABr3   c                 b    t        |d      r|j                  |_        |`t        |   ||      S )Nr   )hasattrr   rP   rN   rebuild_auth)r1   r   r   rR   s      r   r   zRequestsSession.rebuild_auth   s7     801#+#=#=H *w#$4h??r3   )r>   r?   r@   __doc__r   r   rj   rk   s   @r   r   r      s    C@ @r3   r   c                       e Zd Zd Zy)Urllib3LoggingFilterc                 $    |j                   dk(  ryy)Nz%s://%s:%s "%s %s %s" %s %sFT)msg)r1   records     r   filterzUrllib3LoggingFilter.filter   s    ::66r3   N)r>   r?   r@   r   rB   r3   r   r   r      s    r3   r   c                   (     e Zd ZdZ fdZd Z xZS )Urllib3LoggingHandlerz#Redirect urllib3 logs to our loggerc                 2    t        |   |i | || _        y r/   )rN   r2   _logger)r1   loggerr<   r=   rR   s       r   r2   zUrllib3LoggingHandler.__init__   s    $)&)r3   c                    	 | j                  |      }|j                  t        j                  k\  r| j                  j                  |       y | j                  j                  |       y # t        $ r | j                  |       Y y w xY wr/   )	formatlevelnologgingERRORr   errorstdout	ExceptionhandleError)r1   r   r   s      r   emitzUrllib3LoggingHandler.emit   sf    	%++f%C~~.""3'##C( 	%V$	%s   A	A( A( (BB)r>   r?   r@   r   r2   r   rj   rk   s   @r   r   r      s    -	%r3   r   c                        e Zd ZdZdZ ee      ZdZe	j                  e	j                  fZdZ fdZd Z fdZd Zd	 Z xZS )

RequestsRHz@Requests RequestHandler
    https://github.com/psf/requests
    rZ   https)rZ   r   socks4socks4asocks5socks5hr   c                    t        |   |i | t        j                  d      }t	        | j
                        | _        | j                  j                  t        j                  d             | j                  j                  t                      |j                  | j                         |j                  t        j                         | j                  r>dt        j                   j"                  _        |j                  t        j&                         t        j(                  t        j*                  j,                         y )Nr   )r   zrequests: %(message)sr   )rN   r2   r   	getLoggerr   r   _RequestsRH__logging_handlersetFormatter	Formatter	addFilterr   
addHandlersetLevelr   verboser   
connectionHTTPConnection
debuglevelDEBUGdisable_warningsr`   InsecureRequestWarning)r1   r<   r=   r   rR   s       r   r2   zRequestsRH.__init__   s    $)&) ""9-!6dll!K++G,=,=>U,VW(()=)?@$001&<< <=G--8OOGMM*  !3!3!J!JKr3   c                     | j                          t        j                  d      j                  | j                         y )Nr   )_clear_instancesr   r   removeHandlerr   )r1   s    r   closezRequestsRH.close  s/     	)$2243I3IJr3   c                 l    t         |   |       |j                  dd        |j                  dd        y )N	cookiejartimeout)rN   _check_extensionspop)r1   
extensionsrR   s     r   r   zRequestsRH._check_extensions  s,    !*-{D)y$'r3   c                    t               }t        | j                         | j                  t        j
                  j                  j                  d            }|j                  j                          t        j                  j                  ddi      |_        |j                  d|       |j                  d|       ||_        d|_        |S )NF)ro   rp   max_retries
Connectionz
keep-alivezhttps://zhttp://)r   rm   _make_sslcontextrp   r   utilretryRetryadaptersclearr   ri   CaseInsensitiveDictrJ   mountcookies	trust_env)r1   r   sessionhttp_adapters       r   _create_instancezRequestsRH._create_instance   s    !#*--/..**007

 	 "//==|\>Z[j,/i.#!r3   c           
      F   | j                  |j                        }t        |t               d}| j	                  | j                  |            }	 |j                  |j                  |j                  |j                  || j                  |      | j                  |      dd      }t7        |      }d|j8                  cxk  rdk  sn t1        ||	      |S # t        j                  j                  $ r}d}|j                  }Y d }~ad }~wt        j                  j                   $ r,}dt#        |      v rt%        |      |t!        |      |d }~wt        j                  j&                  $ r}t'        |      |d }~wt        j                  j(                  t        j                  j*                  f$ r}t-        |      |d }~wt.        j                  j0                  $ r}t-        |      |d }~wt        j                  j2                  $ r}t5        |      |d }~ww xY w)
NF)r   T)r   rK   datarJ   r   proxiesallow_redirectsstreamCERTIFICATE_VERIFY_FAILEDrV      i,  )redirect_loop)_merge_headersrJ   r   SUPPORTED_ENCODINGS_get_instance_get_cookiejarrequestr   rK   r   _calculate_timeout_get_proxiesr   r`   TooManyRedirectsr   r&   strr!   r$   ConnectionErrorTimeoutr'   r   r"   RequestExceptionr%   rF   rL   )r1   r   rJ   max_redirects_exceededr   requests_resrg   rG   s           r   _sendzRequestsRH._send/  s   %%goo6"7,?@!&$$t/B/B7/K$L!	/"??~~KK\\//8))'2 $ + 	LD &l3cjj&3&C/EFF
9 ""33 	&%)"::L""++ 	+*c!f4,151<#*""-- 	-1%1,##33X5H5H5P5PQ 	1 q)q0!!++ 	1 q)q0""33 	/Q'Q.	/sU   AC H 3D H &'E H -E:::H 4G H !G.. H HH )r>   r?   r@   r   _SUPPORTED_URL_SCHEMEStupler   _SUPPORTED_ENCODINGS_SUPPORTED_PROXY_SCHEMESr   NO_PROXY	ALL_PROXY_SUPPORTED_FEATURESRH_NAMEr2   r   r   r   r   rj   rk   s   @r   r   r      sY     / !45Z#,,h.@.@AGL*K(
1r3   r   c                      y)Nd   rB   )rhr   s     r   requests_preferencer   c  s    r3   c                   $     e Zd Z fdZd Z xZS )SocksHTTPConnectionc                 2    || _         t        |   |i | y r/   )_proxy_argsrN   r2   )r1   _socks_optionsr<   r=   rR   s       r   r2   zSocksHTTPConnection.__init__j  s    )$)&)r3   c           
      z   	 t        | j                  d   | j                  d   f| j                  | j                  t	        j
                  t        | j                  | j                  f| j                              S # t        j                  t        f$ rA}t        j                  j                  | d| j                   d| j                   d      |d }~wt        $ r/}t        j                  j                  t!        |      |      |d }~wt"        $ r)}t        j                  j%                  | d|       |d }~ww xY w)Naddrport)addressr   rp   _create_socket_funczConnection to z timed out. (connect timeout=)z&Failed to establish a new connection: )r   r   r   rp   	functoolsr]   r   hostr   socketTimeoutErrorr   r`   ConnectTimeoutErrorSocksProxyErrorr$   r   OSErrorNewConnectionError)r1   rg   s     r   	_new_connzSocksHTTPConnection._new_connn  s%   	K$))&143C3CF3KL#22$-$5$5-		499/EtGWGW%Y	Z Z - 	g$$88tyyk1Nt||n\]^`efg 	B$$//A:A 	K$$77>qcBDIJK	Ks0   A7A: :D:<CD:*DD:$D55D:)r>   r?   r@   r2   r	  rj   rk   s   @r   r   r   i  s    *Kr3   r   c                       e Zd Zy)SocksHTTPSConnectionN)r>   r?   r@   rB   r3   r   r  r    s    r3   r  c                       e Zd ZeZy)SocksHTTPConnectionPoolN)r>   r?   r@   r   ConnectionClsrB   r3   r   r  r    s    'Mr3   r  c                       e Zd ZeZy)SocksHTTPSConnectionPoolN)r>   r?   r@   r  r  rB   r3   r   r  r    s    (Mr3   r  c                         e Zd Zd fd	Z xZS )SocksProxyManagerc                 h    t        |      |d<   t        |   ||fi | t        t        d| _        y )Nr   r   )r   rN   r2   r  r  pool_classes_by_scheme)r1   socks_proxyusernamepassword	num_poolsrJ   connection_pool_kwrR   s          r   r2   zSocksProxyManager.__init__  s9    /D[/Q+,GB/AB+-'
#r3   )NN
   N)r>   r?   r@   r2   rj   rk   s   @r   r  r    s    
 
r3   r  )[
contextlibr  http.clientrZ   r   r0   r  warningsdependenciesr   r   r   utilsr   r   r	   utils.networkingr
   ImportErrorr   __version__spliturllib3_version	__build__requests.adaptersrequests.utilsurllib3.connectionurllib3.exceptions_helperr   r   r   r   r   r   r   commonr   r   r   r   r    r`   r!   r"   r#   r$   r%   r&   r'   rw   r  r   appendr,   urllib3.util.urlr   r   rK   rC   rD   warnsuppressr   IS_SECURETRANSPORTssl_r   rF   HTTPAdapterrm   sessionsSessionr   Filterr   Handlerr   r   r   r   r   r   HTTPSConnectionr  HTTPConnectionPoolr  HTTPSConnectionPoolr  PoolManagerr  SOCKSProxyManagerrB   r3   r   <module>r<     s       	   4 4 > > ,
8
99
?
7
88Z7;N;N;T;TUX;YZZ[ 
<
== 
<
==          2 I  
t$$	F 	F 
7<<\*":7<<;K;K;V;V"WGLLW\\}-#;GLL<L<L<X<X#YGLL HMMUXkXmmn	 Y			Y	' VQUU'',,*;*;*NV ".    1h  1F(++77 0@h''// @87>> %GOO %& k!3 k k\ Z  !
K',,;; K.	.0B0B0R0R 	(g88 ()w:: )
++ 
 '8   #A	V Vs   1-MM#