
    hg$                         d dl 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 d dlmZmZmZ d dlmZmZ e G d d	e
j                              Z G d
 de
j                  ZdS )    N)	dataclassfields)CallableOptionalUnioncast)serializable)encoding)Headersassemble_content_typeparse_content_type)	typecheckstrutilsc                       e Zd ZU eed<   eed<   ee         ed<   ee         ed<   eed<   ee         ed<   	 d Zd	 Z	d
 Z
ed             ZdS )MessageDatahttp_versionheaderscontenttrailerstimestamp_starttimestamp_endTc                     t          |           D ]7}t          | |j                  }t          j        |j        ||j                   8d S N)r   getattrnamer   check_option_typetype)selffieldvals      k/var/www/fb-scrape/myenv/lib/python3.11/site-packages/seleniumwire/thirdparty/mitmproxy/net/http/message.py__post_init__zMessageData.__post_init__   sR     I IdEJ//+EJUZHHHHI I    c                     |                                 D ]0\  }}|dv r|t          j        |          }t          | ||           1d S )N)r   r   )itemsr   
from_statesetattr)r   statekvs       r!   	set_statezMessageData.set_state   s\    KKMM 	  	 DAq+++&q))D!Q	  	 r#   c                     t          |                                           }|d                                         |d<   |d         |d                                         |d<   |S )Nr   r   )varscopy	get_stater   r(   s     r!   r/   zMessageData.get_state!   s]    T

!! +5577i( %j 1 ; ; = =E*r#   c                     t          j        |d                   |d<   |d         t          j        |d                   |d<    | di |S )Nr   r    )r   r&   clsr(   s     r!   r&   zMessageData.from_state(   sS    "-eI.>??i( ' 253D E EE*s||U||r#   N)__name__
__module____qualname__bytes__annotations__r   r   floatr"   r+   r/   classmethodr&   r2   r#   r!   r   r      s         e_wE?"""I	I 	I 	I
          [  r#   r   c                      e Zd ZU ed             Zd Zd Zeed<   dZ	e
eef         ed<   edefd            Zej        d	e
eef         dd
fd            Zedefd            Zedefd            Zedefd            Zedefd            Zej        dedd
fd            Zedee         fd            Zej        dee         dd
fd            Zedee         fd            Zej        dee         dd
fd            Zd+dedee         fdZdee         dd
fdZ eee          Zedefd            Zej        dedd
fd            Zedee         fd            Zej        d ee         fd!            Zdee         fd"Z d,dedefd$Z!d+dedee         fd%Z"d&ee         dd
fd'Z# ee"e#          Z$d+dedd
fd(Z%d)edd
fd*Z&d
S )-Messagec                      | di |S )Nr2   r2   r3   s     r!   r&   zMessage.from_state1   s    s||U||r#   c                 4    | j                                         S r   )datar/   r   s    r!   r/   zMessage.get_state5   s    y""$$$r#   c                 :    | j                             |           d S r   )r@   r+   r0   s     r!   r+   zMessage.set_state8   s    	E"""""r#   r@   Fstreamreturnc                 B    | j         j                            dd          S )z1
        Version string, e.g. "HTTP/1.1"
        utf-8surrogateescape)r@   r   decoderA   s    r!   r   zMessage.http_version>   s     
 y%,,W6GHHHr#   r   Nc                 F    t          j        |dd          | j        _        d S )NrF   rG   )r   always_bytesr@   r   )r   r   s     r!   r   zMessage.http_versionE   s"    !)!6|WN_!`!`	r#   c                 "    | j         j        dk    S )Ns   HTTP/1.0r@   r   rA   s    r!   	is_http10zMessage.is_http10I       y%44r#   c                 "    | j         j        dk    S )Ns   HTTP/1.1rL   rA   s    r!   	is_http11zMessage.is_http11M   rN   r#   c                 "    | j         j        dk    S )Ns   HTTP/2.0rL   rA   s    r!   is_http2zMessage.is_http2Q   rN   r#   c                     | j         j        S )z#
        The HTTP headers.
        r@   r   rA   s    r!   r   zMessage.headersU   s    
 y  r#   hc                     || j         _        d S r   rT   r   rU   s     r!   r   zMessage.headers\   s    	r#   c                     | j         j        S )z$
        The HTTP trailers.
        r@   r   rA   s    r!   r   zMessage.trailers`   s    
 y!!r#   c                     || j         _        d S r   rY   rW   s     r!   r   zMessage.trailersg   s    	r#   c                     | j         j        S )z
        The raw (potentially compressed) HTTP message body as bytes.

        See also: :py:attr:`content`, :py:class:`text`
        r@   r   rA   s    r!   raw_contentzMessage.raw_contentk   s     y  r#   r   c                     || j         _        d S r   r\   )r   r   s     r!   r]   zMessage.raw_contentt   s    #	r#   Tstrictc                 6   | j         dS | j                            d          }|rn	 t          j        | j         |          }t          |t                    r"t          d                    |                    |S # t          $ r |r | j         cY S w xY w| j         S )z
        The uncompressed HTTP message body as bytes.

        Raises:
            ValueError, when the HTTP content-encoding is invalid and strict is True.

        See also: :py:class:`raw_content`, :py:attr:`text`
        Ncontent-encodingzInvalid Content-Encoding: {})	r]   r   getr
   rH   
isinstancestr
ValueErrorformat)r   r_   cer   s       r!   get_contentzMessage.get_contentx   s     #4\011 	$	("/$*:B??gs++ P$%C%J%J2%N%NOOO ( ( ( ''''(
 ##s   AA: :BBvaluec                    |	d | _         d S t          |t                    s%t          dt	          |          j         d          | j                            d          }	 t          j	        ||pd          | _         n# t          $ r | j        d= || _         Y nw xY wt          t          | j                             | j        d<   d S )Nz#Message content must be bytes, not z/. Please use .text if you want to assign a str.ra   identityzcontent-length)r]   rc   r8   	TypeErrorr   r5   r   rb   r
   encodere   rd   len)r   ri   rg   s      r!   set_contentzMessage.set_content   s    =#DF%'' 	@d5kk6J @ @ @   \011	%'ub6FJGGD 	% 	% 	% /0$D		%
 *-S1A-B-B)C)C%&&&s   !A> >BBc                     | j         j        S )z&
        First byte timestamp
        r@   r   rA   s    r!   r   zMessage.timestamp_start   s    
 y((r#   r   c                     || j         _        d S r   rq   )r   r   s     r!   r   zMessage.timestamp_start   s    $3	!!!r#   c                     | j         j        S )z%
        Last byte timestamp
        r@   r   rA   s    r!   r   zMessage.timestamp_end   s    
 y&&r#   r   c                     || j         _        d S r   rt   )r   r   s     r!   r   zMessage.timestamp_end   s    "/	r#   c                     t          | j                            dd                    }|r|d                             d          S d S )Ncontent-type    charset)r   r   rb   )r   cts     r!   _get_content_type_charsetz!Message._get_content_type_charset   sD     0 0 D DEE 	(a599Y'''tr#   r#   c                    |                                  }|sd| j                            dd          v rd}|s@t          j        d|          }|r)|                    d                              dd          }|s]d	| j                            dd          v r@t          j        d
|          }|r)|                    d                              dd          }|sd}|                                dv rd}|S )Njsonrw   rx   utf8s    <meta[^>]+charset=['"]?([^'">]+)   asciiignoreztext/csss   @charset "([^"]+)";zlatin-1)gb2312gbkgb18030)	r|   r   rb   researchgrouprH   matchlower)r   r   encmeta_charsetcss_charsets        r!   _guess_encodingzMessage._guess_encoding   s   ,,.. 	))."==== 	F9%MwWWL F"((++227HEE 	IT\--nbAAAA h'BGLL I%++A..55gxHHC 	C99;;+++C
r#   c                    |                      |          }|dS |                     |          }	 t          t          t	          j        ||                    S # t          $ r |r |                    dd          cY S w xY w)z
        The uncompressed and decoded HTTP message body as text.

        Raises:
            ValueError, when either content-encoding or charset is invalid and strict is True.

        See also: :py:attr:`content`, :py:class:`raw_content`
        Nr   rG   )rh   r   r   rd   r
   rH   re   )r   r_   r   r   s       r!   get_textzMessage.get_text   s     ""6**?4""7++	=X_Wc::;;; 	= 	= 	= >>&*;<<<<<	=s   'A #A>=A>textc                 h   |	d | _         d S |                                 }	 t          j        ||          | _         d S # t          $ rj t          | j                            dd                    pddi f}d|d         d<   t          | | j        d<   d}|                    |d	          | _         Y d S w xY w)
Nrw   rx   r   plainrF   ry   rz   r   rG   )	r   r   r
   rm   re   r   r   rb   r   )r   r   r   r{   s       r!   set_textzMessage.set_text   s    <DLF""$$	?#?455DLLL 	? 	? 	?#DL$4$4^R$H$HIIbfV]_aMbB&BqE)+@"+EDL(C;;s,=>>DLLLL	?s   = A0B10B1c                 t    |                      |          }| j                            dd           || _        dS )a  
        Decodes body based on the current Content-Encoding header, then
        removes the header. If there is no Content-Encoding header, no
        action is taken.

        Raises:
            ValueError, when the content-encoding is invalid and strict is True.
        ra   N)rh   r   popr   )r   r_   decodeds      r!   rH   zMessage.decode   s;     ""6**+T222r#   ec                     || j         d<   | j        | _        d| j         vr/t          d                    t          |                              dS )a.  
        Encodes body with the encoding e, where e is "gzip", "deflate", "identity", "br", or "zstd".
        Any existing content-encodings are overwritten,
        the content is not decoded beforehand.

        Raises:
            ValueError, when the specified content-encoding is invalid.
        ra   zInvalid content encoding {}N)r   r]   r   re   rf   repr)r   r   s     r!   rm   zMessage.encode  sS     ,-'('T\11:AA$q''JJKKK 21r#   )T)r#   )'r5   r6   r7   r;   r&   r/   r+   r   r9   rC   r   r   boolpropertyrd   r   setterr8   rM   rP   rR   r   r   r   r   r]   rh   ro   r   r:   r   r   r|   r   r   r   r   rH   rm   r2   r#   r!   r=   r=   0   s          [% % %# # # $)FE(D.!)))Ic I I I XI asEz): at a a a a 54 5 5 5 X5 54 5 5 5 X5 5$ 5 5 5 X5 ! ! ! ! X! ^ T    ^ "(7+ " " " X" _(7+     _ !Xe_ ! ! ! X! $8E? $t $ $ $ $$ $$ $(5/ $ $ $ $4D% DT D D D D& h{K00G) ) ) ) X) 4u 4 4 4 4 4 'x ' ' ' X' 08E? 0 0 0 08C=     u s    .= =t =x} = = = =(?Xc] ?t ? ? ? ?  8Hh''D T T    L L L L L L L Lr#   r=   )r   dataclassesr   r   typingr   r   r   r   +seleniumwire.thirdparty.mitmproxy.coretypesr	   *seleniumwire.thirdparty.mitmproxy.net.httpr
   2seleniumwire.thirdparty.mitmproxy.net.http.headersr   r   r   'seleniumwire.thirdparty.mitmproxy.utilsr   r   Serializabler   r=   r2   r#   r!   <module>r      s)   				 ) ) ) ) ) ) ) ) 2 2 2 2 2 2 2 2 2 2 2 2 D D D D D D ? ? ? ? ? ? q q q q q q q q q q G G G G G G G G ! ! ! ! !,+ ! ! !HiL iL iL iL iLl' iL iL iL iL iLr#   