Ë
    š„jfY  ã                  ó¨  — 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Zd dlZ	d dl
Z	d dlZ	d dlmZmZ d dlmZ d dlmZ d dlmZ ddlmZmZ dd	lmZmZmZ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' dZ(d!d„Z) G d„ d«      Z*i Z+d„ Z, G d„ dejZ                  «      Z. G d„ dej^                  «      Z0 G d„ d«      Z1 ejd                  e1d¬«      Z3 ejd                  e1d¬«      Z4 ejd                  e1d¬«      Z5 G d„ dejl                  «      Z7ejp                  r+e9ee9   z  ejt                  z  dz  Z;ejx                  e0e1ge=f   Z> e?«       Z@deAd <   y)"é    )ÚannotationsN)ÚIterableÚMapping)ÚMessage)Ú
HTTPStatus)ÚNoneTypeé   )Úmake_ssl_contextÚwrap_request_errors)ÚNoSupportingHandlersÚRequestErrorÚTransportErrorÚUnsupportedRequesté   )ÚYoutubeDLCookieJar)Úbug_reports_messageÚclasspropertyÚdeprecation_warningÚerror_to_strÚupdate_url_query)ÚHTTPHeaderDictÚnormalize_urlé   c                 ó<   ‡ — t        d„ ‰ D «       «      sJ ‚dˆ fd„}|S )Nc              3  ó<   K  — | ]  }t        |t        «      –— Œ y ­w©N)Ú
issubclassÚRequestHandler)Ú.0Úhandlers     úO/var/www/html/GAP/venv/lib/python3.12/site-packages/yt_dlp/networking/common.pyú	<genexpr>z&register_preference.<locals>.<genexpr>&   s   è ø€ ÒK°wŒz˜'¤>×2ÑKùs   ‚c                óp   •‡ — t        j                  ‰ «      ˆˆ fd„«       }t        j                  |«       |S )Nc                ó:   •— ‰rt        | ‰«      r ‰| g|¢­i |¤ŽS y)Nr   )Ú
isinstance)r    ÚargsÚkwargsÚhandlersÚ
preferences      €€r!   Úinnerz1register_preference.<locals>.outer.<locals>.inner)   s'   ø€ áœz¨'°8Ô<Ù! 'Ð;¨DÒ;°FÑ;Ð;Øó    )Ú	functoolsÚwrapsÚ_RH_PREFERENCESÚadd)r)   r*   r(   s   ` €r!   Úouterz"register_preference.<locals>.outer(   s3   ù€ Ü	�‰˜Ó	$ô	ó 
%ð	ô 	×Ñ˜EÔ"Øˆr+   )r)   Ú
Preference)Úall)r(   r0   s   ` r!   Úregister_preferencer3   %   s#   ø€ ÜÑKÀ(ÔKÔKÐKÐKõð €Lr+   c                  ó<   — e Zd ZdZd	d„Zd„ Zd
d„Zdd„Zd„ Zdd„Z	y)ÚRequestDirectora’  RequestDirector class

    Helper class that, when given a request, forward it to a RequestHandler that supports it.

    Preference functions in the form of func(handler, request) -> int
    can be registered into the `preferences` set. These are used to sort handlers
    in order of preference.

    @param logger: Logger instance.
    @param verbose: Print debug request information to stdout.
    c                óL   — i | _         t        «       | _        || _        || _        y r   )r(   ÚsetÚpreferencesÚloggerÚverbose)Úselfr9   r:   s      r!   Ú__init__zRequestDirector.__init__@   s!   € Ø35ˆŒÜ,/«EˆÔØˆŒØˆ�r+   c                ó–   — | j                   j                  «       D ]  }|j                  «        Œ | j                   j                  «        y r   )r(   ÚvaluesÚcloseÚclear©r;   r    s     r!   r?   zRequestDirector.closeF   s7   € Ø—}‘}×+Ñ+Ó-ò 	ˆGØ�M‰M�Oð	à�‰×ÑÕr+   c                ód   — t        |t        «      sJ d«       ‚|| j                  |j                  <   y)zKAdd a handler. If a handler of the same RH_KEY exists, it will overwrite itz handler must be a RequestHandlerN)r%   r   r(   ÚRH_KEYrA   s     r!   Úadd_handlerzRequestDirector.add_handlerK   s*   € ä˜'¤>Ô2ÐVÐ4VÓVÐ2Ø(/ˆ�‰�g—n‘nÒ%r+   c           	     ó„  ‡‡— | j                   j                  «       D �‡ci c]"  Š‰t        ˆˆfd„| j                  D «       «      “Œ$ }}| j	                  dj                  dj                  d„ |j                  «       D «       «      «      «       t        | j                   j                  «       |j                  d¬«      S c c}w )z-Sorts handlers by preference, given a requestc              3  ó0   •K  — | ]  } |‰‰«      –— Œ y ­wr   © )r   ÚprefÚrequestÚrhs     €€r!   r"   z0RequestDirector._get_handlers.<locals>.<genexpr>S   s   øè ø€ ÒC¨$‘D˜˜W×%ÑCùs   ƒz(Handler preferences for this request: {}ú, c              3  óD   K  — | ]  \  }}|j                   › d |› �–— Œ y­w)ú=N)ÚRH_NAME)r   rJ   rH   s      r!   r"   z0RequestDirector._get_handlers.<locals>.<genexpr>V   s,   è ø€ ò XHÙ'/ r¨4ˆr�z‰zˆl˜!˜D˜6Ô"ñXHùs   ‚ T)ÚkeyÚreverse)
r(   r>   Úsumr8   Ú_print_verboseÚformatÚjoinÚitemsÚsortedÚget)r;   rI   rJ   r8   s    `` r!   Ú_get_handlerszRequestDirector._get_handlersP   s±   ù€ ð —m‘m×*Ñ*Ó,÷
àð ”ÔC°$×2BÑ2BÔCÓCÑCð
ˆð 
ð 	×ÑÐF×MÑMÈdÏiÉiñ XHØ3>×3DÑ3DÓ3FôXHó OHó Iô 	Jä�d—m‘m×*Ñ*Ó,°+·/±/È4ÔPÐPùò
s    'B=c                óZ   — | j                   r| j                  j                  d|› �«       y y )Nz
director: )r:   r9   Ústdout)r;   Úmsgs     r!   rR   zRequestDirector._print_verboseZ   s'   € Ø�<Š<Ø�K‰K×Ñ ¨C¨5Ð1Õ2ð r+   c           
     ó  — | j                   st        d«      ‚t        |t        «      sJ ‚g }g }| j	                  |«      D ]y  }| j                  d|j                  › d�«       	 |j                  |«       | j                  d|j                  › d�«       	 |j                  |«      }t        |t         «      sJ ‚|c S  t#        ||«      ‚# t        $ rF}| j                  d|j                  › dt        |«      › d�«       |j                  |«       Y d}~ŒÒd}~ww xY w# t        $ r ‚ t        $ r\}| j                  j                  d	|j                  › d
t        |«      › t        «       › �d¬«       |j                  |«       Y d}~�ŒCd}~ww xY w)zA
        Passes a request onto a suitable RequestHandler
        zNo request handlers configuredzChecking if "z" supports this request.ú"z&" cannot handle this request (reason: ú)NzSending request via "ú[z] Unexpected error: F)Úis_error)r(   r   r%   ÚRequestrX   rR   rN   Úvalidater   r   ÚappendÚsendÚ	Exceptionr9   Úerrorr   ÚResponser   )r;   rI   Úunexpected_errorsÚunsupported_errorsr    ÚeÚresponses          r!   rd   zRequestDirector.send^   s•  € ð �}Š}ÜÐ?Ó@Ð@ä˜'¤7Ô+Ð+Ð+àÐØÐØ×)Ñ)¨'Ó2ò 	ˆGØ×Ñ -°·±Ð/@Ð@XÐ YÔZðØ× Ñ  Ô)ð ×ÑÐ"7¸¿¹Ð7HÈÐ JÔKð	Ø"Ÿ<™<¨Ó0�ô ˜h¬Ô1Ð1Ð1ØŠOð/	ô2 #Ð#5Ð7HÓIÐIøô+ &ò Ø×#Ñ#Ø˜Ÿ™Ð(Ð(NÌ|Ð\]ËÐN_Ð_`Ðaôcà"×)Ñ)¨!Ô,Üûð	ûô  ò ØÜò Ø—‘×!Ñ!Ø˜Ÿ™Ð(Ð(<¼\È!»_Ð<MÔNaÓNcÐMdÐeØ"ð "ô $ð "×(Ñ(¨Ô+Ýûðús1   Á"CÂDÃ	DÃ<DÄDÄFÄ+AFÆFN)F)r    r   )rI   ra   Úreturnzlist[RequestHandler]©rI   ra   rl   rg   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r<   r?   rD   rX   rR   rd   rG   r+   r!   r5   r5   3   s'   „ ñ
óòó
0ó
Qò3ô$Jr+   r5   c                ó®   — t        | t        «      s
J | › d�«       ‚| j                  t        vsJ d| j                  › d�«       ‚| t        | j                  <   | S )zRegister a RequestHandler classz% must be a subclass of RequestHandlerzRequestHandler z already registered)r   r   rC   Ú_REQUEST_HANDLERS)r    s    r!   Úregister_rhrt   ˆ   sZ   € ä�gœ~Ô.Ða°7°)Ð;`Ð0aÓaÐ.Ø�>‰>Ô!2Ñ2Ði°oÀgÇnÁnÐEUÐUhÐ4iÓiÐ2Ø(/Ô�g—n‘nÑ%Ø€Nr+   c                  óP   — e Zd Z ej                  «       Z ej                  «       Zy)ÚFeaturesN)rn   ro   rp   ÚenumÚautoÚ	ALL_PROXYÚNO_PROXYrG   r+   r!   rv   rv   �   s   „ Ø�—	‘	“€IØˆt�y‰y‹{�Hr+   rv   c                  ó4  ‡ — e Zd ZdZdZdZdZdddddddddddœ
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zdd„Zd	„ Z	dd
„Z
dd„Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zedd„«       Zed d„«       Zej.                  dd„«       Zd„ Zed„ «       Zed„ «       Zd„ Zd„ Zˆ xZS )!r   a÷  Request Handler class

    Request handlers are class that, given a Request,
    process the request from start to finish and return a Response.

    Concrete subclasses need to redefine the _send(request) method,
    which handles the underlying request logic and returns a Response.

    RH_NAME class variable may contain a display name for the RequestHandler.
    By default, this is generated from the class name.

    The concrete request handler MUST have "RH" as the suffix in the class name.

    All exceptions raised by a RequestHandler should be an instance of RequestError.
    Any other exception raised will be treated as a handler issue.

    If a Request is not supported by the handler, an UnsupportedRequest
    should be raised with a reason.

    By default, some checks are done on the request in _validate() based on the following class variables:
    - `_SUPPORTED_URL_SCHEMES`: a tuple of supported url schemes.
        Any Request with an url scheme not in this list will raise an UnsupportedRequest.

    - `_SUPPORTED_PROXY_SCHEMES`: a tuple of support proxy url schemes. Any Request that contains
        a proxy url with an url scheme not in this list will raise an UnsupportedRequest.

    - `_SUPPORTED_FEATURES`: a tuple of supported features, as defined in Features enum.

    The above may be set to None to disable the checks.

    Parameters:
    @param logger: logger instance
    @param headers: HTTP Headers to include when sending requests.
    @param cookiejar: Cookiejar to use for requests.
    @param timeout: Socket timeout to use when sending requests.
    @param proxies: Proxies to use for sending requests.
    @param source_address: Client-side IP address to bind to for requests.
    @param verbose: Print debug request and traffic information to stdout.
    @param prefer_system_certs: Whether to prefer system certificates over other means (e.g. certifi).
    @param client_cert: SSL client certificate configuration.
            dict with {client_certificate, client_certificate_key, client_certificate_password}
    @param verify: Verify SSL certificates
    @param legacy_ssl_support: Enable legacy SSL options such as legacy server connect and older cipher support.

    Some configuration options may be available for individual Requests too. In this case,
    either the Request configuration option takes precedence or they are merged.

    Requests may have additional optional parameters defined as extensions.
     RequestHandler subclasses may choose to support custom extensions.

    If an extension is supported, subclasses should extend _check_extensions(extensions)
    to pop and validate the extension.
    - Extensions left in `extensions` are treated as unsupported and UnsupportedRequest will be raised.

    The following extensions are defined for RequestHandler:
    - `cookiejar`: Cookiejar to use for this request.
    - `timeout`: socket timeout to use for this request.
    - `legacy_ssl`: Enable legacy SSL options for this request. See legacy_ssl_support.
    - `keep_header_casing`: Keep the casing of headers when sending the request.
    To enable these, add extensions.pop('<extension>', None) to _check_extensions

    Apart from the url protocol, proxies dict may contain the following keys:
    - `all`: proxy to use for all protocols. Used as a fallback if no proxy is set for a specific protocol.
    - `no`: comma seperated list of hostnames (optionally with port) to not use a proxy for.
    Note: a RequestHandler may not support these, as defined in `_SUPPORTED_FEATURES`.

    rG   NFT)
ÚheadersÚ	cookiejarÚtimeoutÚproxiesÚsource_addressr:   Úprefer_system_certsÚclient_certÚverifyÚlegacy_ssl_supportc               ó  •— || _         |xs i | _        |�|n	t        «       | _        t	        |xs t
        «      | _        |xs i | _        || _        || _	        || _
        |	xs i | _        |
| _        || _        t        ‰| �=  «        y r   )Ú_loggerr|   r   r}   ÚfloatÚDEFAULT_TIMEOUTr~   r   r€   r:   r�   Ú_client_certrƒ   r„   Úsuperr<   )r;   r9   r|   r}   r~   r   r€   r:   r�   r‚   rƒ   r„   Ú_Ú	__class__s                €r!   r<   zRequestHandler.__init__ß   sƒ   ø€ ð  ˆŒØ’} "ˆŒØ&/Ð&;™ÔASÓAUˆŒÜ˜WÒ7¬Ó8ˆŒØ’} "ˆŒØ,ˆÔØˆŒØ#6ˆÔ Ø'Ò-¨2ˆÔØˆŒØ"4ˆÔÜ‰ÑÕr+   c                óz   — t        d| j                  |�|n| j                  | j                   dœ| j                  ¤ŽS )N)rƒ   Úlegacy_supportÚuse_certifirG   )r
   rƒ   r„   r�   r‰   )r;   r„   s     r!   Ú_make_sslcontextzRequestHandler._make_sslcontextü   sI   € Üð 
Ø—;‘;Ø1CÐ1OÑ-ÐUY×UlÑUlØ ×4Ñ4Ð4ñ
ð ×Ññ	
ð 	
r+   c                ó.   — t        | j                  |«      S r   )r   r|   )r;   Úrequest_headerss     r!   Ú_merge_headerszRequestHandler._merge_headers  s   € Ü˜dŸl™l¨OÓ<Ð<r+   c                 ó   — y)z¹Additional operations to prepare headers before building. To be extended by subclasses.
        @param request: Request object
        @param headers: Merged headers to prepare
        NrG   ©r;   rI   r|   s      r!   Ú_prepare_headerszRequestHandler._prepare_headers  s   � r+   c                óÈ   — | j                  |j                  «      }| j                  ||«       |j                  j	                  d«      r|j                  «       S t        |«      S )zš
        Get headers for external use.
        Subclasses may define a _prepare_headers method to modify headers after merge but before building.
        Úkeep_header_casing)r“   r|   r–   Ú
extensionsrW   Ú	sensitiveÚdictr•   s      r!   Ú_get_headerszRequestHandler._get_headers  sV   € ð
 ×%Ñ% g§o¡oÓ6ˆØ×Ñ˜g wÔ/Ø×Ñ×!Ñ!Ð"6Ô7Ø×$Ñ$Ó&Ð&Ü�G‹}Ðr+   c                óf   — t        |j                  j                  d«      xs | j                  «      S )Nr~   )r‡   r™   rW   r~   ©r;   rI   s     r!   Ú_calculate_timeoutz!RequestHandler._calculate_timeout  s'   € Ü�W×'Ñ'×+Ñ+¨IÓ6ÒF¸$¿,¹,ÓGÐGr+   c                óX   — |j                   j                  d«      }|€| j                  S |S )Nr}   )r™   rW   r}   )r;   rI   r}   s      r!   Ú_get_cookiejarzRequestHandler._get_cookiejar  s,   € Ø×&Ñ&×*Ñ*¨;Ó7ˆ	Ø!*Ð!2ˆt�~‰~ÐA¸	ÐAr+   c                óR   — |j                   xs | j                   j                  «       S r   )r   Úcopyrž   s     r!   Ú_get_proxieszRequestHandler._get_proxies  s   € Ø—‘Ò/ 4§<¡<×5Ñ5Ó7Ð7r+   c                óÚ   — t         j                  j                  |j                  «      j                  j                  «       }| j                  �|| j                  vrt        d|› d�«      ‚|S )NzUnsupported url scheme: "r]   )ÚurllibÚparseÚurlparseÚurlÚschemeÚlowerÚ_SUPPORTED_URL_SCHEMESr   )r;   rI   rª   s      r!   Ú_check_url_schemez RequestHandler._check_url_scheme"  s\   € Ü—‘×&Ñ& w§{¡{Ó3×:Ñ:×@Ñ@ÓBˆØ×&Ñ&Ð2°vÀT×E`ÑE`Ñ7`Ü$Ð'@ÀÀÈÐ%JÓKÐKØˆr+   c                óÌ  — |j                  «       D �].  \  }}|€Œ
|dk(  r4| j                  �'t        j                  | j                  vrt	        d«      ‚ŒC|dk(  r3| j                  �'t        j
                  | j                  vrt	        d«      ‚| j                  �|g | j                  ¢d‘­vrŒ›| j                  €Œ¨	 t        j                  j                  |«      d   €t	        d|› d�«      ‚	 t        j                  j                  |«      j                  j                  «       }|| j                  vs�Œ"t	        d
|› d�«      ‚ y # t        $ r}t	        d|› d	|› �«      ‚d }~ww xY w)NÚnoz"no" proxy is not supportedr2   z"all" proxy is not supportedr   zProxy "z" missing schemezInvalid proxy url "z": zUnsupported proxy type: "r]   )rU   Ú_SUPPORTED_FEATURESrv   rz   r   ry   r¬   Ú_SUPPORTED_PROXY_SCHEMESr¦   rI   Ú_parse_proxyÚ
ValueErrorr§   r¨   rª   r«   )r;   r   Ú	proxy_keyÚ	proxy_urlrj   rª   s         r!   Ú_check_proxieszRequestHandler._check_proxies(  s|  € Ø$+§M¡M£Oó "	PÑ ˆI�yØÐ ØØ˜DÒ Ø×+Ñ+Ð7¼H×<MÑ<MÐUY×UmÑUmÑ<mÜ,Ð-JÓKÐKØà˜UÒ"Ø×,Ñ,Ð8Ü×&Ñ&¨d×.FÑ.FÑFä(Ð)GÓHÐHð
 ×*Ñ*Ð6¸9ÐLqÈd×NiÑNiÐLqÐkpÑLqÑ;qØà×,Ñ,Ð4àðRÜ—>‘>×.Ñ.¨yÓ9¸!Ñ<ÐDä,¨w°y°kÐAQÐ-RÓSÐSð Eô —\‘\×*Ñ*¨9Ó5×<Ñ<×BÑBÓDˆFØ˜T×:Ñ:Ó:Ü(Ð+DÀVÀHÈAÐ)NÓOÐOñE"	Pøô8 ò Rä(Ð+>¸y¸kÈÈQÈCÐ)PÓQÐQûðRús   Â:1EÅ	E#ÅEÅE#c                óF  — t        |j                  d«      t        t        f«      sJ ‚t        |j                  d«      t        t
        t        f«      sJ ‚t        |j                  d«      t        t        f«      sJ ‚t        |j                  d«      t        t        f«      sJ ‚y)zKCheck extensions for unsupported extensions. Subclasses should extend this.r}   r~   Ú
legacy_sslr˜   N)r%   rW   r   r   r‡   ÚintÚbool)r;   r™   s     r!   Ú_check_extensionsz RequestHandler._check_extensionsM  s~   € ä˜*Ÿ.™.¨Ó5Ô8JÌHÐ7UÔVÐVÐVÜ˜*Ÿ.™.¨Ó3´e¼SÄ(Ð5KÔLÐLÐLÜ˜*Ÿ.™.¨Ó6¼¼xÐ8HÔIÐIÐIÜ˜*Ÿ.™.Ð)=Ó>ÄÄxÐ@PÔQÐQÑQr+   c                ó(  — | j                  |«       | j                  |j                  xs | j                  «       |j                  j	                  «       }| j                  |«       |r+t        ddj                  |j                  «       «      › �«      ‚y )NzUnsupported extensions: rK   )	r­   r¶   r   r™   r£   r»   r   rT   Úkeys)r;   rI   r™   s      r!   Ú	_validatezRequestHandler._validateT  sy   € Ø×Ñ˜wÔ'Ø×Ñ˜GŸO™OÒ;¨t¯|©|Ô<Ø×'Ñ'×,Ñ,Ó.ˆ
Ø×Ñ˜zÔ*Ùä$Ð'?ÀÇ	Á	È*Ï/É/ÓJ[Ó@\Ð?]Ð%^Ó_Ð_ð r+   c                ó\   — t        |t        «      st        d«      ‚| j                  |«       y ©NzExpected an instance of Request)r%   ra   Ú	TypeErrorr¾   rž   s     r!   rb   zRequestHandler.validate]  s$   € ä˜'¤7Ô+ÜÐ=Ó>Ð>Ø�‰�wÕr+   c                óZ   — t        |t        «      st        d«      ‚| j                  |«      S rÀ   )r%   ra   rÁ   Ú_sendrž   s     r!   rd   zRequestHandler.sendc  s'   € ä˜'¤7Ô+ÜÐ=Ó>Ð>Ø�z‰z˜'Ó"Ð"r+   c                 ó   — y)z>Handle a request from start to finish. Redefine in subclasses.NrG   rž   s     r!   rÃ   zRequestHandler._sendi  s   € ð 	r+   c                 ó   — y r   rG   ©r;   s    r!   r?   zRequestHandler.closen  s   € Ør+   c                ó    — | j                   d d S )Néþÿÿÿ)rn   ©Úclss    r!   rN   zRequestHandler.RH_NAMEq  s   € à�|‰|˜C˜RÐ Ð r+   c                ód   — | j                   j                  d«      sJ d«       ‚| j                   d d S )NÚRHz-RequestHandler class names must end with "RH"rÈ   )rn   ÚendswithrÉ   s    r!   rC   zRequestHandler.RH_KEYu  s1   € à�|‰|×$Ñ$ TÔ*Ð[Ð,[Ó[Ð*Ø�|‰|˜C˜RÐ Ð r+   c                ó   — | S r   rG   rÆ   s    r!   Ú	__enter__zRequestHandler.__enter__z  s   € Øˆr+   c                ó$   — | j                  «        y r   )r?   )r;   r&   s     r!   Ú__exit__zRequestHandler.__exit__}  s   € Ø�
‰
�r+   )r|   r   r}   r   r~   zfloat | int | Noner   údict | Noner€   ú
str | Noner:   rº   r�   rº   r‚   zdict[str, str | None] | Nonerƒ   rº   r„   rº   r   )rI   ra   r|   r   rl   ÚNone)rI   ra   rl   zdict[str, str])rI   ra   rm   ) rn   ro   rp   rq   r¬   r±   r°   r<   r�   r“   r–   rœ   rŸ   r¡   r¤   r­   r¶   r»   r¾   r   rb   rd   ÚabcÚabstractmethodrÃ   r?   r   rN   rC   rÏ   rÑ   Ú__classcell__©rŒ   s   @r!   r   r   •   s]  ø„ ñBðH  ÐØ!ÐØÐð
 #'Ø(,Ø&*Ø#Ø%)ØØ$)Ø48ØØ#(ñð  ðð &ð	ð
 $ðð ðð #ðð ðð "ðð 2ðð ðð !õó:
ò=óó	òHòBò8óò#PòJRò`ð ò ó ð ð
 ò#ó ð#ð
 	×Ñòó ðòð ñ!ó ð!ð ñ!ó ð!òör+   r   c                  ó$  — e Zd ZdZ	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zed„ «       Zej                  d„ «       Zed„ «       Zej                  d„ «       Zed„ «       Z	e	j                  dd	„«       Z	edd
„«       Z
e
j                  dd„«       Z
dd„Zd„ Zy)ra   aŽ  
    Represents a request to be made.
    Partially backwards-compatible with urllib.request.Request.

    @param url: url to send. Will be sanitized.
    @param data: payload data to send. Must be bytes, iterable of bytes, a file-like object or None
    @param headers: headers to send.
    @param proxies: proxy dict mapping of proto:proxy to use for the request and any redirects.
    @param query: URL query parameters to update the url with.
    @param method: HTTP method to use. If no method specified, will use POST if payload data is present else GET
    @param extensions: Dictionary of Request extensions to add, as supported by handlers.
    Nc                ó´   — t        «       | _        d | _        |rt        ||«      }|| _        || _        |r|| _        || _        |xs i | _        |xs i | _	        y r   )
r   Ú_headersÚ_datar   r©   Úmethodr|   Údatar   r™   )r;   r©   rÞ   r|   r   ÚqueryrÝ   r™   s           r!   r<   zRequest.__init__�  sZ   € ô 'Ó(ˆŒØˆŒ
áÜ" 3¨Ó.ˆCàˆŒØˆŒÙØ"ˆDŒLØˆŒ	Ø’} "ˆŒØ$Ò*¨ˆ�r+   c                ó   — | j                   S r   )Ú_urlrÆ   s    r!   r©   zRequest.url¨  s   € à�y‰yÐr+   c                ó†   — t        |t        «      st        d«      ‚|j                  d«      rd|z   }t	        |«      | _        y )Nzurl must be a stringz//zhttp:)r%   ÚstrrÁ   Ú
startswithr   rá   )r;   r©   s     r!   r©   zRequest.url¬  s9   € ä˜#œsÔ#ÜÐ2Ó3Ð3Ø�^‰^˜DÔ!Ø˜C‘-ˆCÜ! #Ó&ˆ�	r+   c                ó>   — | j                   xs | j                  �dS dS )NÚPOSTÚGET)Ú_methodrÞ   rÆ   s    r!   rÝ   zRequest.method´  s   € à�|‰|ÒK¨$¯)©)Ð*? ÐKÀUÐKr+   c                óx   — |€d | _         y t        |t        «      r|j                  «       | _         y t	        d«      ‚)Nzmethod must be a string)rè   r%   rã   ÚupperrÁ   )r;   rÝ   s     r!   rÝ   zRequest.method¸  s1   € àˆ>ØˆD�LÜ˜¤Ô$Ø!Ÿ<™<›>ˆD�LäÐ5Ó6Ð6r+   c                ó   — | j                   S r   )rÜ   rÆ   s    r!   rÞ   zRequest.dataÁ  s   € à�z‰zÐr+   c                ó$  — |�Ft        |t        t        j                  t        f«      rt        |t
        t        f«      rt        d«      ‚|| j                  k(  r(| j                  €| j                  j                  dd «       || j                  k7  r/| j                  �| j                  j                  dd «       || _        | j                  €| j                  j                  dd «       d| j                  vr| j                  �d| j                  d<   y y y )Nz<data must be bytes, iterable of bytes, or a file-like objectzContent-LengthzContent-Typez!application/x-www-form-urlencoded)r%   ÚbytesÚioÚIOBaser   rã   r   rÁ   rÜ   r|   Úpop)r;   rÞ   s     r!   rÞ   zRequest.dataÅ  sã   € ð ÐÜ˜4¤%¬¯©´HÐ!=Ô>Ä*ÈTÔTWÔY`ÐSaÔBbäÐZÓ[Ð[à�4—:‘:Ò $§*¡*Ð"4Ø�L‰L×ÑÐ-¨tÔ4ð �4—:‘:ÒØ�z‰zÐ%Ø—‘× Ñ Ð!1°4Ô8ØˆDŒJà�:‰:ÐØ�L‰L×Ñ˜^¨TÔ2à §¡Ñ-°$·*±*Ð2HØ+NˆD�L‰L˜Ò(ð 3IÐ-r+   c                ó   — | j                   S r   )rÛ   rÆ   s    r!   r|   zRequest.headersÜ  s   € à�}‰}Ðr+   c                óŠ   — t        |t        «      r|| _        yt        |t        «      rt        |«      | _        yt	        d«      ‚)zVReplaces headers of the request. If not a HTTPHeaderDict, it will be converted to one.zheaders must be a mappingN)r%   r   rÛ   r   rÁ   )r;   Únew_headerss     r!   r|   zRequest.headersà  s7   € ô �k¤>Ô2Ø'ˆD�MÜ˜¤WÔ-Ü*¨;Ó7ˆD�MäÐ7Ó8Ð8r+   c                óð   — |�|n| j                   | _         | j                  j                  |xs i «       | j                  j                  |xs i «       t	        |xs | j
                  |xs i «      | _        y r   )rÞ   r|   Úupdater™   r   r©   )r;   r©   rÞ   r|   rß   r™   s         r!   rõ   zRequest.updateê  s[   € Ø Ð,‘D°$·)±)ˆŒ	Ø�‰×Ñ˜GšM rÔ*Ø�‰×Ñ˜zÒ/¨RÔ0Ü# C¢O¨4¯8©8°U²[¸bÓAˆ�r+   c           	     ó  — | j                  | j                  t        j                  | j                  «      t        j                  | j
                  «      | j                  t        j                  | j                  «      | j                  ¬«      S )N)r©   r|   r   rÞ   r™   rÝ   )	rŒ   r©   r£   Údeepcopyr|   r   rÜ   r™   rè   rÆ   s    r!   r£   zRequest.copyð  s]   € Ø�~‰~Ø—‘Ü—M‘M $§,¡,Ó/Ü—M‘M $§,¡,Ó/Ø—‘Ü—y‘y §¡Ó1Ø—<‘<ð ó 
ð 	
r+   )NNNNNN)r©   rã   rÞ   ÚRequestDatar|   ztyping.Mapping | Noner   rÒ   rß   rÒ   rÝ   rÓ   r™   rÒ   )rÞ   rø   )rl   r   )ró   r   )NNNNN)rn   ro   rp   rq   r<   Úpropertyr©   ÚsetterrÝ   rÞ   r|   rõ   r£   rG   r+   r!   ra   ra   �  s#  „ ñð  !%Ø-1Ø#'Ø!%Ø!%Ø&*ð+àð+ð ð+ð +ð	+ð
 !ð+ð ð+ð ð+ð $ó+ð2 ñó ðð 	‡Z�Zñ'ó ð'ð ñLó ðLð ‡]�]ñ7ó ð7ð ñó ðð 
‡[�[òOó ðOð, òó ðð ‡^�^ò9ó ð9óBó
r+   ra   ÚHEAD)rÝ   ÚPATCHÚPUTc                  óŠ   ‡ — e Zd ZdZ	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„Zd„ Zddd„Zˆ fd„Zdd„Ze	d„ «       Z
d„ Zd	„ Zd
„ Zdd„Zˆ xZS )rg   aR  
    Base class for HTTP response adapters.

    By default, it provides a basic wrapper for a file-like response object.

    Interface partially backwards-compatible with addinfourl and http.client.HTTPResponse.

    @param fp: Original, file-like, response.
    @param url: URL that this is a response of.
    @param headers: response headers.
    @param status: Response HTTP status code. Default is 200 OK.
    @param reason: HTTP status reason. Will use built-in reasons based on status code if not provided.
    @param extensions: Dictionary of handler-specific response extensions.
    c                ó4  — || _         t        «       | _        |j                  «       D ]!  \  }}| j                  j	                  ||«       Œ# || _        || _        	 |xs t        |«      j                  | _	        |xs i | _        y # t        $ r
 d | _	        Y Œw xY wr   )Úfpr   r|   rU   Ú
add_headerÚstatusr©   r   ÚphraseÚreasonr³   r™   )	r;   r   r©   r|   r  r  r™   ÚnameÚvalues	            r!   r<   zResponse.__init__  s‘   € ð ˆŒÜ“yˆŒØ"Ÿ=™=›?ò 	1‰KˆD�%Ø�L‰L×#Ñ# D¨%Õ0ð	1àˆŒØˆŒð	Ø Ò=¤J¨vÓ$6×$=Ñ$=ˆDŒKð %Ò*¨ˆ�øô ò 	ØˆDŽKð	ús   ÁB ÂBÂBc                ó6   — | j                   j                  «       S r   )r   ÚreadablerÆ   s    r!   r  zResponse.readable&  s   € Ø�w‰w×ÑÓ!Ð!r+   c                óÆ   — 	 | j                   j                  |«      }| j                   j                  r| j                  «        |S # t        $ r}t        |¬«      |‚d }~ww xY w)N)Úcause)r   ÚreadÚclosedr?   re   r   )r;   ÚamtÚresrj   s       r!   r  zResponse.read)  sO   € ð	1Ø—'‘'—,‘,˜sÓ#ˆCØ�w‰w�~Š~Ø—
‘
”ØˆJøÜò 	1Ü  qÔ)¨qÐ0ûð	1ús   ‚AA Á	A ÁAÁA c                ó€   •— | j                   j                  s| j                   j                  «        t        ‰| �	  «       S r   )r   r  r?   rŠ   )r;   rŒ   s    €r!   r?   zResponse.close4  s'   ø€ Ø�w‰w�~Š~Ø�G‰G�M‰MŒOÜ‰w‰}‹Ðr+   c                ó’   — | j                   j                  |«      }|s|S |j                  «       dk(  r|d   S dj                  |«      S )zcGet header for name.
        If there are multiple matching headers, return all seperated by comma.z
Set-Cookier   rK   )r|   Úget_allÚtitlerT   )r;   r  Údefaultr|   s       r!   Ú
get_headerzResponse.get_header9  sI   € ð —,‘,×&Ñ& tÓ,ˆÙØˆNØ�:‰:‹<˜<Ò'ð ˜1‘:ÐØ�y‰y˜Ó!Ð!r+   c                ó4   — t        dd¬«       | j                  S )Nz0Response.code is deprecated, use Response.statusr   ©Ú
stacklevel©r   r  rÆ   s    r!   ÚcodezResponse.codeF  s   € äÐNÐ[\Õ]Ø�{‰{Ðr+   c                ó4   — t        dd¬«       | j                  S )Nz5Response.getcode() is deprecated, use Response.statusr   r  r  rÆ   s    r!   ÚgetcodezResponse.getcodeK  s   € ÜÐSÐ`aÕbØ�{‰{Ðr+   c                ó4   — t        dd¬«       | j                  S )Nz1Response.geturl() is deprecated, use Response.urlr   r  )r   r©   rÆ   s    r!   ÚgeturlzResponse.geturlO  s   € ÜÐOÐ\]Õ^Ø�x‰xˆr+   c                ó4   — t        dd¬«       | j                  S )Nz3Response.info() is deprecated, use Response.headersr   r  )r   r|   rÆ   s    r!   ÚinfozResponse.infoS  s   € ÜÐQÐ^_Õ`Ø�|‰|Ðr+   c                ó@   — t        dd¬«       | j                  ||«      S )Nz;Response.getheader() is deprecated, use Response.get_headerr   r  )r   r  )r;   r  r  s      r!   Ú	getheaderzResponse.getheaderW  s   € ÜÐYÐfgÕhØ�‰˜t WÓ-Ð-r+   )éÈ   NN)r   z	io.IOBaser©   rã   r|   zMapping[str, str]r  r¹   r  rÓ   r™   rÒ   r   )r  z
int | Nonerl   rí   )rn   ro   rp   rq   r<   r  r  r?   r  rù   r  r  r  r  r!  r×   rØ   s   @r!   rg   rg      sŽ   ø„ ñð( Ø!%Ø&*ð+àð+ð ð+ð 'ð	+ð
 ð+ð ð+ð $ó+ò,"ô	1ôó

"ð ñó ðòòò÷.r+   rg   zset[Preference]r.   )r(   ztype[RequestHandler])BÚ
__future__r   rÕ   r£   rw   r,   rî   ÚtypingÚurllib.parser¦   Úurllib.requestÚurllib.responseÚcollections.abcr   r   Úemail.messager   Úhttpr   Útypesr   Ú_helperr
   r   Ú
exceptionsr   r   r   r   Úcookiesr   Úutilsr   r   r   r   r   Úutils.networkingr   r   rˆ   r3   r5   rs   rt   ÚEnumrv   ÚABCr   ra   ÚpartialÚHEADRequestÚPATCHRequestÚ
PUTRequestrï   rg   ÚTYPE_CHECKINGrí   ÚIOrø   ÚCallabler¹   r1   r7   r.   Ú__annotations__rG   r+   r!   ú<module>r;     sB  ðÞ "ã 
Û Û Û Û 	Û Û Û Û ß -Ý !Ý Ý ç :÷ó õ )÷õ ÷ =à€ó÷OJñ OJðd Ð òôˆt�y‰yô ô
i�S—W‘Wô i÷Xw
ñ w
ðt  ˆi×Ñ °Ô7€Ø ˆy× Ñ  °Ô9€ØˆY×Ñ˜w¨uÔ5€
ôY.ˆr�y‰yô Y.ðx 
×ÒØ˜( 5™/Ñ)¨F¯I©IÑ5¸Ñ<€KØ—‘ .°'Ð!:¸CÐ!?Ñ@€Já#&£5€�Ô (r+   