
    uki3                    8   U d dl m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	 ddl
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mZ dd	lmZmZ dd
lmZmZ ddlm Z  e e!d       e" e#e$ ejJ                  dejL                        dd             Z'e'dk7  r)de'cxk  rdk  sn ejL                   de_(         e!d      d dl)Zd dl*m+Z+m,Z,  G d dejZ                        Z. G d de      Z/ edddd       edddd       edddd       edd dd       edd!dd       edd"dd       edd#dd       ed$ddd       ed$d dd       ed%d&d'd(       ed%d)d'd      d* edd+dd       edd,d'd-       edd.d'd-       edd/d'd-       edd0d'd-       ed%d1d'd-       ed%d2d3d2      d4 ed%d&d'd-       ed%d)d'd-       edd,d'd-       edd.d'd-       edd/d'd-       edd0d'd-       edd5d'd-       edd5dd-       edd6d'd7       ed8d6d'd-       ed%d9d'd7       ed%d9d3d9      d:d; ed8d<d'd-      i ed=d>d'd-       ed%d?d'd7       ed%d?d3d?       edd@d'd7      dA ed%dBd'dC       ed%dBd3dB      dDdEZ0dFe1dG<   dHdIdJdKdLdMdNZ2e G dO dPee	             Z3 ee3      dQ        Z4y)R    )annotationsN   )InstanceStoreMixin   )select_proxy)FeaturesRequestResponseregister_preferenceregister_rh)CertificateVerifyError	HTTPErrorIncompleteRead
ProxyErrorSSLErrorTransportError)ImpersonateRequestHandlerImpersonateTarget)	curl_cfficertifi)int_or_nonezcurl_cffi is not installedz[^\d]+   )r      
   r   r   )r      z (unsupported)zLOnly curl_cffi versions 0.5.10, 0.10.x, 0.11.x, 0.12.x, 0.13.x are supported)	CurlECodeCurlOptc                  4     e Zd ZddZd ZddZ fdZ xZS )CurlCFFIResponseReaderc                X    || _         |j                         | _        d| _        d| _        y )N    r   )	_responseiter_content	_iterator_buffer
bytes_read)selfresponses     V/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/yt_dlp/networking/_curlcffi.py__init__zCurlCFFIResponseReader.__init__-   s'    !!..0r"   c                     y)NT )r(   s    r*   readablezCurlCFFIResponseReader.readable3   s    r"   c                l   d}	 | j                   r|t        | j                        |k  r{t        | j                   d       }|d | _         n[| xj                  |z  c_        | xj                  t        |      z  c_        | j                   r|bt        | j                        |k  r{|t        | j                        }| j                  d | }| j                  |d  | _        | j                   s| j                  s| j                          d}||r| j                          S S # |r| j                          w w xY w)NTF)r%   lenr&   nextr'   close)r(   sizeexception_raisedchunkdatas        r*   readzCurlCFFIResponseReader.read6   s    	..dlc$,,6G$6NT^^T2=%)DN%3u:- ..dlc$,,6G$6N |4<<(<<&D<<.DL >>$,,

$

  

  s   BD D %A%D D3c                |    | j                   s!| j                  j                          d| _        t        | 	          y )Nr"   )closedr#   r2   r&   super)r(   	__class__s    r*   r2   zCurlCFFIResponseReader.closeP   s*    {{NN  "DLr"   r)   zcurl_cffi.requests.ResponseN)__name__
__module____qualname__r+   r.   r7   r2   __classcell__r;   s   @r*   r    r    ,   s    4 r"   r    c                  4     e Zd ZU ded<   d fdZddZ xZS )CurlCFFIResponseAdapterr    fpc                z    t         |   t        |      |j                  |j                  |j
                         y )N)rE   headersurlstatus)r:   r+   r    rG   rH   status_code)r(   r)   r;   s     r*   r+   z CurlCFFIResponseAdapter.__init__Z   s6    %h/$$''	 	 	)r"   c                0   	 | j                   j                  |      }| j                   j                  r| j                          |S # t        j
                  j                  j                  $ r}|j                  t        j                  k(  rz|j                  xr. t        |j                  j                  j                  d            }t        | j                   j                   ||| j                   j                   z
  nd |      |t#        |      |d }~ww xY w)NzContent-Length)partialexpectedcauserN   )rE   r7   r9   r2   r   requestserrorsRequestsErrorcoder   PARTIAL_FILEr)   r   rG   getr   r'   r   )r(   amtresecontent_lengths        r*   r7   zCurlCFFIResponseAdapter.reada   s    	1'',,s#Cww~~

J!!((66 	1vv///!"!eAJJ<N<N<R<RSc<d0e$ GG..DRD^^dgg.@.@@dh #$$ !q)q0	1s   AA 'D,B$DDr<   r=   )r>   r?   r@   __annotations__r+   r7   rA   rB   s   @r*   rD   rD   W   s    )1r"   rD   chrome99windows10android12100101104107110edgesafariz15.3macos11z15.5)chrome99chrome99_android	chrome100	chrome101	chrome104	chrome107	chrome110edge99edge101	safari153	safari15511611914120123124z17.0z17.2ios)	chrome116	chrome119	chrome120	chrome123	chrome124	safari170safari172_ios13113315firefoxz18.0)rs   rt   r}   r~   r   r   	chrome131chrome131_android
chrome133a
firefox133	safari180safari180_ios
firefox135135torz14.5z18.4136)tor145	safari184safari184_ios	chrome136z26.026)	safari260safari260_ios))r   r   )r      r   	   r   r      )r      z3dict[tuple[int, ...], dict[str, ImpersonateTarget]]BROWSER_TARGETS
safari15_3
safari15_5
safari17_0safari17_2_ios
safari18_0safari18_0_ios)rs   rt   r   r   r   r   c                     e Zd ZdZdZej                  ej                  fZdZ	 e
 eej                  j                  d ej!                         D              d d            j!                         D  ci c]a  \  }}|t"        dk\  r|nOt"        d	k\  rt$        j'                  ||      n0t(        j*                  j,                  t$        j'                  ||         c c}}}}}} Zdd
ZfdZdfdZddZxZS c c}}}}}} w )
CurlCFFIRHr   )httphttps)r   r   socks4socks4asocks5socks5hc              #  T   K   | ]   \  }}t         |k\  r|j                          " y wr=   )curl_cffi_versionitems).0versiontargetss      r*   	<genexpr>zCurlCFFIRH.<genexpr>   s,      H
  G+ MMOH
s   &(c                    | d   j                   dvdj                  | d   j                        | d   j                  rt	        | d   j                        nd| d   j                   fS )Nr   )r{   r_   )r   rf   r   rg   r[   r   )osindexclientr   float)xs    r*   <lambda>zCurlCFFIRH.<lambda>   sW    aDGG--:@@1M#$Q4<<E!A$,,QaDGG	
 r"   T)keyreverser   r   c                B    t         j                  j                  |      S )N)cookies)r   rP   Session)r(   	cookiejars     r*   _create_instancezCurlCFFIRH._create_instance   s    !!))))<<r"   c                    t         |   |       |j                  dd        |j                  dd        |j                  dd        |j                  dd        y )Nimpersonater   timeout
legacy_ssl)r:   _check_extensionspop)r(   
extensionsr;   s     r*   r   zCurlCFFIRH._check_extensions   sJ    !*-}d+{D)y$' 	|T*r"   c                    | j                  |      }	 t        | 	  |      }||j
                  d<   |S # t        $ r}||j                  j
                  d<    d }~ww xY w)Nr   )_get_request_targetr:   sendr   r)   r   )r(   requesttargetr)   rX   r;   s        r*   r   zCurlCFFIRH.send   sf    ))'2	w|G,H .4M*	  	39AJJ!!-0	s   4 	AAAc                N
   d}| j                  d|j                  vr| j                  |      nd       }| j                  r*|j                  j                  t        j                  d       | j                  |      }d|v r?|j                  j                  t        j                  |d          |j                  dd        t        |j                  |      }|r6|j                  j                  t        j                  |       t        j                  j!                  |j                        j"                  j%                         }|dk7  r*|j                  j                  t        j&                  d       |j                  j                  t        j(                  t+        j,                                | j.                  sT|j                  j                  t        j0                  d       |j                  j                  t        j2                  d       | j5                  |      }| j6                  r|j                  j                  t        j8                  | j6                  d	          | j6                  j;                  d
      }| j6                  j;                  d      }	|r*|j                  j                  t        j<                  |       |	r*|j                  j                  t        j>                  |	       | jA                  |      }
|j                  j                  t        jB                  d       |j                  j                  t        jD                  tG        jH                  |
             	 |jK                  |jL                  |j                  ||jN                  | j.                  d|
|
f| jP                  j;                  | jS                  |            | jT                  d
      }tw        |      }d|jx                  cxk  rdk  sn t{        ||      |S # tV        jX                  jZ                  j\                  $ r}|j^                  t`        jb                  k(  rte        |      ||j^                  t`        jf                  k(  rti        |      ||j^                  t`        jj                  k(  rd}|jl                  }na|j^                  t`        j                  k(  s*|j^                  t`        jn                  k(  rdtq        |      v rts        |      |tu        |      |Y d }~?d }~ww xY w)NFcookie)r   r   no)proxiesr   r   client_certificateclient_certificate_keyclient_certificate_passwordr   T)
methodrH   rG   r6   verifymax_redirectsr   r   	interfacestreamrO   CONNECT   i,  )redirect_loop)>_get_instancerG   _get_cookiejarverbosecurlsetoptr   VERBOSE_get_proxiesNOPROXYr   r   rH   PROXYurllibparseurlparseschemelowerHTTPPROXYTUNNELPROXY_CAINFOr   wherer   PROXY_SSL_VERIFYPEERPROXY_SSL_VERIFYHOST_get_impersonate_headers_client_certSSLCERTrU   SSLKEY	KEYPASSWD_calculate_timeoutLOW_SPEED_LIMITLOW_SPEED_TIMEmathceilr   r   r6   !_SUPPORTED_IMPERSONATE_TARGET_MAPr   source_addressr   rP   rQ   rR   rS   r   PEER_FAILED_VERIFICATIONr   SSL_CONNECT_ERRORr   TOO_MANY_REDIRECTSr)   
RECV_ERRORstrr   r   rD   rI   r   )r(   r   max_redirects_exceededsessionr   proxyr   rG   r   r   r   curl_responserX   r)   s                 r*   _sendzCurlCFFIRH._send   s   !&.2.@.@6>goo6Ud))'2[_ /A /a <<LL3##G,7?LL?KKd# W[[':LLu5\\**7;;7>>DDFF ##G$;$;Q? LL 4 4gmmoF;;##G$@$@!D##G$@$@!D//8LL1B1BCW1XY%)%6%6%:%:;S%T"*.*;*;*?*?@]*^'%##GNN4JK*##G$5$57RS))'2 	G33Q7G22DIIg4FG	5#OO~~KK\\{{ '* BBFF,,W57-- , M@ +=9hoo++H4JKK1 !!((66 	5vv;;;,151<9666Q'Q.9777)-& !

 )//)FFi222yCF7J q)q0$1-14 	5s   )A7P 'T$8C!TT$r=   )r   r	   returnr
   )r   r	   )r>   r?   r@   RH_NAME_SUPPORTED_URL_SCHEMESr   NO_PROXY	ALL_PROXY_SUPPORTED_FEATURES_SUPPORTED_PROXY_SCHEMESdictsorted	itertoolschainfrom_iterabler   r   r   _TARGETS_COMPAT_LOOKUPrU   r   rP   BrowserTyper   r   r   r   r  rA   )r   namer   r   r  r   r;   s   000000@r*   r   r      s    G.#,,h.@.@AZ #6)//*G*G H
$3$9$9$;H
 +
	
 $   %'%) )
 dF	 	%0D;LPV;V'++D$7##//0F0J0J4QU0VW	X)%*=+[W)s   9A&C>r   c                     y)Nir-   )rhr   s     r*   curl_cffi_preferencer  B  s    r"   )5
__future__r   ior  r   reurllib.parser   _helperr   utils.networkingr   commonr   r	   r
   r   r   
exceptionsr   r   r   r   r   r   r   r   r   dependenciesr   r   utilsr   ImportErrortuplemapintsplit__version__r   _yt_dlp__versioncurl_cffi.requestscurl_cffi.constr   r   IOBaser    rD   r   rZ   r  r   r  r-   r"   r*   <module>r,     st   " 	   	  ' +   F - 
2
33 #c8288Iy7L7L#Mbq#QRS 
"76G+Q'+Q$-$9$9#:.!II
d
ee  .(RYY (V1h 1< &hiF-hiN&x	4H&x	4H&x	4H&x	4H&x	4H#FD)TB$VUItD&x$G&x$G 'x	4H&xF&xF&xF&xF&x$G*8VUFK 'x$G&x$G&xF&xF&xF&xF&xF.x	4P'%$G'	5'4H&x$G*8VUFK 	'	5'4H $E67DA&x$G*8VUFK&xF	 'x$G*8VUFK]2HD 2n %%  K*,> K K\ Z  !r"   