
    +h!                       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Zej                  r ej                  d      ZddlmZmZmZ ddlmZ d Z G d d	e      Z e e       d
ddd      ZddZddZd Zd Zd Zd Zy)    )annotationsNT   )
NO_DEFAULTremove_startformat_field)traverse_objc                 R    d} d}| j                  t        j                  |  d      S )NzhMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/{} Safari/537.36)      z.0.0.0)formatrandomrandint)USER_AGENT_TMPLCHROME_MAJOR_VERSION_RANGEs     `/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/utils/networking.pyrandom_user_agentr      s4     AO!+!!V^^5O%P$QQW"XYY    c                      e Zd ZdZddZ fdZddZd fdZd fdZd fdZ	d Z
dd	Zdd
Zd fdZd fdZddZej"                  d d       Zej"                  d!d       Zef fd	Zej"                  d"d       Zej"                  d!d       Zef fd	Zd# fdZej"                  d"d       Zej"                  d"d       Zd$d fdZddZ xZS )%HTTPHeaderDictz
    Store and access keys case-insensitively.
    The constructor can take multiple dicts, in which keys in the latter are prioritised.

    Retains a case sensitive mapping of the headers, which can be accessed via `.sensitive()`.
    c                F    t        j                  | g|i |}i |_        |S N)dict__new___HTTPHeaderDict__sensitive_map)clsargskwargsobjs       r   r   zHTTPHeaderDict.__new__   s'    ll3000 
r   c                   t         |           i | _        t        d |      D ]  }| j	                  |        |r| j	                  |       y y r   )super__init__r   filterupdate)selfr   r   dct	__class__s       r   r"   zHTTPHeaderDict.__init__$   sL    !$% 	CKK	KK r   c               p    | j                         D ci c]  \  }}| j                  |   | c}}S c c}}w r   )itemsr   )r%   keyvalues      r   	sensitivezHTTPHeaderDict.sensitive-   s>     #jjl
U   %u,
 	
 
s   2c               j    t         |   t        |t              r|j	                               S |      S r   )r!   __contains__
isinstancestrtitler%   r*   r'   s     r   r.   zHTTPHeaderDict.__contains__3   s*    w#:c33GCIIKQQSQQr   c               ^    |j                         }| j                  |= t        |   |       y r   )r1   r   r!   __delitem__r2   s     r   r4   zHTTPHeaderDict.__delitem__6   s)    iik  %C r   c               >    t         |   |j                               S r   )r!   __getitem__r1   r2   s     r   r6   zHTTPHeaderDict.__getitem__;   s    w"399;//r   c                   t        |t        |             r|j                         }t        |t              r| j	                  |       y t
        S r   )r/   typer,   r   r$   NotImplementedr%   others     r   __ior__zHTTPHeaderDict.__ior__>   s;    eT$Z(OO%EeT"KKr   c                   t        |t        |             r|j                         }t        |t              r  t        |       | j                         |      S t        S r   r/   r8   r,   r   r9   r:   s     r   __or__zHTTPHeaderDict.__or__F   sF    eT$Z(OO%EeT"4:dnn.66r   c                   t        |t        |             r|j                         }t        |t              r  t        |       || j                               S t        S r   r>   r:   s     r   __ror__zHTTPHeaderDict.__ror__M   sF    eT$Z(OO%EeT"4:eT^^%566r   c                   t        |t              r|j                  d      }|j                         }|| j                  |<   t
        |   |t        |      j                                y )Nzlatin-1)	r/   bytesdecoder1   r   r!   __setitem__r0   strip)r%   r*   r+   	key_titler'   s       r   rE   zHTTPHeaderDict.__setitem__T   sR    eU#LL+EIIK	*-Y'Is5z'7'7'9:r   c               V    | j                   j                          t        |           y r   )r   clearr!   r%   r'   s    r   rI   zHTTPHeaderDict.clear[   s    ""$r   c               @     t        |       | j                               S r   )r8   r,   )r%   s    r   copyzHTTPHeaderDict.copy_   s    tDz$..*++r   c                    y r    r%   r*   s     r   getzHTTPHeaderDict.getb       .1r   c                    y r   rN   r%   r*   defaults      r   rP   zHTTPHeaderDict.gete       7:r   c               r    |j                         }|t        u rt        |   |      S t        |   ||      S r   )r1   r   r!   rP   r%   r*   rT   r'   s      r   rP   zHTTPHeaderDict.geth   s6    iikj 7;s##w{3((r   c                    y r   rN   rO   s     r   popzHTTPHeaderDict.popn   s    '*r   c                    y r   rN   rS   s      r   rY   zHTTPHeaderDict.popq   rU   r   c                   |j                         }|t        u r*| j                  j                  |       t        |   |      S | j                  j                  ||       t        |   ||      S r   )r1   r   r   rY   r!   rW   s      r   rY   zHTTPHeaderDict.popt   s`    iikj   $$S)7;s##  g.w{3((r   c                T    | j                   j                          t        |          S r   )r   popitemr!   rJ   s    r   r]   zHTTPHeaderDict.popitem|   s"    $$&w  r   c                    y r   rN   rO   s     r   
setdefaultzHTTPHeaderDict.setdefault   rQ   r   c                    y r   rN   rS   s      r   r_   zHTTPHeaderDict.setdefault   rU   r   c               z    |j                         }|| j                  v rt        |   |      S |xs d| |<   | |   S )N )r1   r   r!   r6   rW   s      r   r_   zHTTPHeaderDict.setdefault   sC    iik$&&&7&s++MrS	Cyr   c               ~   t        |t        |             r|j                         }t        |t        j                  j
                        r|j                         D ]
  \  }}|| |<    n9t        |d      r|j                         D ]
  }||   | |<    n|D ]
  \  }}|| |<    |j                         D ]
  \  }}|| |<    y )Nkeys)	r/   r8   r,   collectionsabcMappingr)   hasattrrd   )r%   r;   r   r*   r+   s        r   r$   zHTTPHeaderDict.update   s    eT$Z(OO%Ee[__445#kkm "
U!S	" UF#zz| '!#JS	' $ "
U!S	" !,,. 	JCDI	r   )r   
typing.Anyr   ri   returntyping.Self)rj   zdict[str, str])r*   r0   rj   bool)r*   r0   rj   None)rj   r0   )rj   rk   )rj   rm   )r*   r0   rj   z
str | None)rT   r   r*   r0   rj   zstr | T)r*   r0   rj   r0   )rj   ztuple[str, str]r   )__name__
__module____qualname____doc__r   r"   r,   r.   r4   r6   r<   r?   rA   rE   rI   rL   typingoverloadrP   r   rY   r]   r_   r$   __classcell__)r'   s   @r   r   r      s    
 
R!
0;, __1 1__: :", ) __* *__: :", )! __1 1__: :r   r   z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8zen-us,en;q=0.5navigate)z
User-AgentAcceptzAccept-LanguagezSec-Fetch-Modec                   |j                  dd       }|r| j                          || d<   | j                         D ]  \  }}|dk(  rd | |<   |dk(  r|	 t        j                  j                  |      d   }|dt        |d      z   | |<   dd	d
}||v s[t        j                  j                  t        j                  j                  |      j                  ||               | |<    y # t        $ r Y w xY w)NzYtdl-Request-Proxyall__noproxy__nor   zhttp://z//socks5hsocks4)socks5socks)scheme)rY   rI   r)   urllibrequest_parse_proxy
ValueErrorr   parse
urlunparseurlparse_replace)proxiesheaders	req_proxy	proxy_key	proxy_urlproxy_schemereplace_schemes          r   clean_proxiesr      s   0$7I" ' d	9%!%GI %~~::9EaH #%.i1N%N	" $!N ~-%+\\%<%<LL)))4==^T`Ea=b&d	"/d   	s   "C**	C65C6c                @    d| v r| d= d| d<   | j                  dd        y )NzYoutubedl-No-CompressionidentityzAccept-EncodingzYtdl-socks-proxy)rY   )r   s    r   clean_headersr      s-    !W,./%/!"KK"D)r   c                $   g }| j                  d      }|D ]2  }|dk(  r	|dk(  r|s|j                          "|j                  |       4 |d   s|r|d   r|j                  dd       |d   dv r|j                  d       dj	                  |      S )N/...r   rb   )r   r   )splitrY   appendinsertjoin)pathoutputsegmentsss       r   remove_dot_segmentsr      s     Fzz#H 8$Y

MM! A;&)a|{"b88Fr   c                B    t         j                  j                  | d      S )z4Escape non-ASCII characters as suggested by RFC 3986s   %/;:@&=+$,!~*'()?#[])r   r   quote)r   s    r   escape_rfc3986r      s    <<a!899r   c           	        t         j                  j                  |       }|j                  |j                  j                  d      j                  d      t        t        |j                              t        |j                        t        |j                        t        |j                              j                         S )z&Normalize URL as suggested by RFC 3986idnaascii)netlocr   paramsqueryfragment)r   r   r   r   r   encoderD   r   r   r   r   r   r   geturl)url
url_parseds     r   normalize_urlr      s    &&s+J  ''/66w?/
@Aj//0Z--.
 3 34   fhr   c                R   t         j                  j                  |       }d|v rj|j                  t	        |j
                  dd      z   }t         j                  j                  |d|d   i      ryt         j                  j                  |      ryt        ||j                  xs dd      S )z'Unified proxy selector for all backendsrz   Nz:%shttprx   )r   r   r   hostnamer   portr   proxy_bypass_environmentproxy_bypassr	   r   )r   r   url_componentshostports       r   select_proxyr      s    \\**3/Nw!**\.:M:MtUZ-[[>>228dGDM=RS^^((2!6!6!@&%HHr   )r   r   r   r   )r   r   )
__future__r   re   collections.abcr   rr   urllib.parser   urllib.requestTYPE_CHECKINGTypeVarr   _utilsr   r   r   	traversalr	   r   r   r   std_headersr   r   r   r   r   r   rN   r   r   <module>r      s    "      	sA : : #ZFT FR #%O' 	 d@**:
	
Ir   