
    hg7                         d dl Z d dlmZ d dlmZmZmZ d dlmZm	Z	m
Z
mZmZ d dlmZ d dlmZmZmZ d dlmZ d dlmZmZ d d	lmZ e G d
 dej                              Z G d dej                  ZdS )    N)	dataclass)
formatdate	mktime_tzparsedate_tz)IterableMappingOptionalTupleUnion)	multidict)cookiesstatus_codesmessage)Headers)humanstrutilsalways_bytesc                   $    e Zd ZU eed<   eed<   dS )ResponseDatastatus_codereasonN)__name__
__module____qualname__int__annotations__bytes     l/var/www/fb-scrape/myenv/lib/python3.11/site-packages/seleniumwire/thirdparty/mitmproxy/net/http/response.pyr   r      s%         MMMMMr    r   c                   P   e Zd ZU dZeed<   dedededee	e
e
eef         df         f         dee         d	ed
e	e
e
eef         df         f         dedee         fdZdefdZe	 	 	 ddedeeef         dee	eeeeef         f         ee
eef                  f         dd fd            Zedefd            Zej        dedd
fd            Zedefd            Zej        deeef         dd
fd            Zd Zd Zedej        fd            Zej        d             ZddZd
S )Responsez
    An HTTP response.
    datahttp_versionr   r   headers.contenttrailersNtimestamp_starttimestamp_endc	           
         t          |t                    r|                    dd          }t          |t                    r|                    dd          }t          |t                    r4t          d                    t          |          j                            t          |t                    st          |          }|$t          |t                    st          |          }t          ||||||||          | _	        d S )NasciistrictzContent must be bytes, not {})r%   r   r   r&   r'   r(   r)   r*   )

isinstancestrencode
ValueErrorformattyper   r   r   r$   )	selfr%   r   r   r&   r'   r(   r)   r*   s	            r!   __init__zResponse.__init__   s     lC(( 	B'..wAALfc"" 	6]]7H55Fgs## 	]<CCDMMDZ[[\\\'7++ 	'g&&G
8W(E(Ex((H %#+'	
 	
 	
			r    returnc                     | j         rI| j                            dd          }t          j        t          | j                             }| d| }nd}d| j         d| dS )Nzcontent-typezunknown content typez, z
no contentz	Response())raw_contentr&   getr   pretty_sizelenr   )r4   ctsizedetailss       r!   __repr__zResponse.__repr__<   sr     	#!!.2HIIB$S)9%:%:;;DootooGG"G94+99w9999r       r    r   c                    t          |t                    r|}nt          |t                    r,t          d |                                D                       }nYt          |t                    rt          |          }n4t          d                    t          |          j                             | d|t          j
                            |d                                          |ddt          j                    t          j                              }t          |t                    r||_        nBt          |t                     r||_        n%t          dt          |          j         d          |S )z?
        Simplified API for creating response objects.
        c              3   `   K   | ])\  }}t          |d d          t          |d d          fV  *dS )zutf-8surrogateescapeNr   ).0kvs      r!   	<genexpr>z Response.make.<locals>.<genexpr>R   s^         Aq a*;<<a*;<<>     r    z6Expected headers to be an iterable or dict, but is {}.s   HTTP/1.1 Nz,Expected content to be str or bytes, but is .)r.   r   dictitemsr   	TypeErrorr2   r3   r   r   	RESPONSESr:   r0   timer   r'   r/   text)clsr   r'   r&   resps        r!   makezResponse.makeE   ss    gw'' 	GG&& 	   $MMOO    GG
 ** 	g&&GGT[[W&     s"&&{B77>>@@IKKIKK	
 	
 gu%% 	f"DLL%% 	fDIId4PW==Kadddeeer    c                     | j         j        S )z1
        HTTP Status Code, e.g. ``200``.
        r$   r   r4   s    r!   r   zResponse.status_codes   s    
 y$$r    c                     || j         _        d S NrU   )r4   r   s     r!   r   zResponse.status_codez   s     +	r    c                 @    | j         j                            d          S )z
        HTTP Reason Phrase, e.g. "Not Found".
        HTTP/2 responses do not contain a reason phrase, an empty string will be returned instead.
        
ISO-8859-1)r$   r   decoderV   s    r!   r   zResponse.reason~   s     y&&|444r    c                 D    t          j        |d          | j        _        d S )NrZ   )r   r   r$   r   )r4   r   s     r!   r   zResponse.reason   s    #0FF	r    c                     | j                             d          }t          j        |          }t	          d |D                       S )N
set-cookiec              3   *   K   | ]\  }}}|||ffV  d S rX   r   )rE   namevalueattrss       r!   rH   z(Response._get_cookies.<locals>.<genexpr>   sE       
 
"eU E5>"
 
 
 
 
 
r    )r&   get_allr   parse_set_cookie_headerstuple)r4   hall_cookiess      r!   _get_cookieszResponse._get_cookies   sU    L  ..6q99 
 
&1
 
 
 
 
 	
r    c                     g }|D ]>\  }}t          j        ||d         |d         fg          }|                    |           ?| j                            d|           d S )Nr      r^   )r   format_set_cookie_headerappendr&   set_all)r4   ra   cookie_headersrF   rG   headers         r!   _set_cookieszResponse._set_cookies   sp     	* 	*DAq51Q416GHHF!!&))))\>:::::r    c                 @    t          j        | j        | j                  S )a  
        The response cookies. A possibly empty
        :py:class:`~seleniumwire.thirdparty.mitmproxy.net.multidict.MultiDictView`,
        where the keys are cookie name strings, and values are (value, attr) tuples.
        Value is a string, and attr is an MultiDictView containing cookie attributes.
        Within attrs, unary attributes (e.g. HTTPOnly) are indicated by a Null value.

        Caveats:
            Updating the attr
        )r   MultiDictViewrh   rp   rV   s    r!   r   zResponse.cookies   s%     &
 
 	
r    c                 0    |                      |           d S rX   )rp   )r4   ra   s     r!   r   zResponse.cookies   s    %     r    c                    |st          j                     }|| j        z
  }g d}|D ]R}|| j        v rGt          | j        |                   }|r+t	          |          |z   }t          |d          | j        |<   Sg }| j                            d          D ]@}	 t          j        ||          }	n# t          $ r |}	Y nw xY w|
                    |	           A|r| j                            d|           dS dS )z
        This fairly complex and heuristic function refreshes a server
        response for replay.

            - It adjusts date, expires and last-modified headers.
            - It adjusts cookie expiration.
        )dateexpireszlast-modifiedT)usegmtr^   N)rO   r)   r&   r   r   r   rc   r   refresh_set_cookie_headerr1   rl   rm   )
r4   nowdeltarefresh_headersidnewcset_cookie_header	refresheds
             r!   refreshzResponse.refresh   sC     	)++Cd**
 
 

 ! 	C 	CADL   a11 C#A,,.C&0T&B&B&BDLO!%!5!5l!C!C 	  	 .#=>OQVWW		 . . .-			.HHY 	2L  q11111	2 	2s   B..B=<B=)rA   r    r   rX   )r   r   r   __doc__r   r   r   r   r   r   r
   r	   floatr5   r/   r@   classmethodr   r   rS   propertyr   setterr   rh   rp   r   rr   r   r   r   r    r!   r#   r#      s          !
!
 !
 	!

 7E%u*=s*B$CCD!
 e_!
 D'5ue|1Dc1I+JJK!
 #!
 $E?!
 !
 !
 !
F:# : : : :   #),fh	+ ++ 5#:&+ 7GCsEz1B,B$CXeTY[`T`NaEbbc	+
 
+ + + [+Z %S % % % X% ,s ,t , , , , 5 5 5 5 X5 ]GU3:. G4 G G G ]G
 
 
; ; ; 
0 
 
 
 X
  ^! ! ^!2 2 2 2 2 2r    r#   )rO   dataclassesr   email.utilsr   r   r   typingr   r   r	   r
   r   +seleniumwire.thirdparty.mitmproxy.coretypesr   *seleniumwire.thirdparty.mitmproxy.net.httpr   r   r   2seleniumwire.thirdparty.mitmproxy.net.http.headersr   'seleniumwire.thirdparty.mitmproxy.utilsr   r   0seleniumwire.thirdparty.mitmproxy.utils.strutilsr   MessageDatar   Messager#   r   r    r!   <module>r      sM    ! ! ! ! ! ! ; ; ; ; ; ; ; ; ; ; < < < < < < < < < < < < < < A A A A A A U U U U U U U U U U F F F F F F C C C C C C C C I I I I I I     7&   
z2 z2 z2 z2 z2w z2 z2 z2 z2 z2r    