
    <g7                         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j4                               Z G d dej8                        Zy)    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<   y)ResponseDatastatus_codereasonN)__name__
__module____qualname__int__annotations__bytes     g/var/www/html/myenv/lib/python3.12/site-packages/seleniumwire/thirdparty/mitmproxy/net/http/response.pyr   r      s    Mr    r   c                      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j6                  fd       Zej,                  d        ZddZy
)Responsez
    An HTTP response.
    datahttp_versionr   r   headers.contenttrailersNtimestamp_starttimestamp_endc	           
         t        |t              r|j                  dd      }t        |t              r|j                  dd      }t        |t              r-t        dj	                  t        |      j                              t        |t              st        |      }|t        |t              st        |      }t        ||||||||      | _	        y )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('..wALfc"]]7H5Fgs#<CCDMDZDZ[\\'7+g&G
8W(Ex(H %#+'	
	r    returnc                     | j                   rL| j                  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__<   sm    !!.2HIB$$S)9)9%:;DBtfoG"G4++,Bwiq99r    c                    t        |t              r|}nzt        |t              r!t        d |j                         D              }nIt        |t              rt        |      }n-t        dj                  t        |      j                               | d|t        j                  j                  |d      j                         |ddt        j                         t        j                               }t        |t              r	||_        |S t        |t               r	||_        |S t        dt        |      j                   d      )z?
        Simplified API for creating response objects.
        c              3   V   K   | ]!  \  }}t        |d d      t        |d d      f # yw)zutf-8surrogateescapeNr   ).0kvs      r!   	<genexpr>z Response.make.<locals>.<genexpr>R   s:       Aq a*;<a*;<>s   ')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   s    gw'G&  $MMO G
 *g&GT[[W&&   ""&&{B7>>@IIKIIK	
 gu%"DL  %DI  J4PW=KaKaJbbcdeer    c                 .    | j                   j                  S )z1
        HTTP Status Code, e.g. ``200``.
        r$   r   r4   s    r!   r   zResponse.status_codes   s    
 yy$$$r    c                 &    || j                   _        y NrT   )r4   r   s     r!   r   zResponse.status_codez   s     +		r    c                 L    | j                   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   decoderU   s    r!   r   zResponse.reason~   s     yy&&|44r    c                 N    t        j                  |d      | j                  _        y )NrY   )r   r   r$   r   )r4   r   s     r!   r   zResponse.reason   s    #00F		r    c                     | j                   j                  d      }t        j                  |      }t	        d |D              S )N
set-cookiec              3   0   K   | ]  \  }}}|||ff  y wrW   r   )rD   namevalueattrss       r!   rG   z(Response._get_cookies.<locals>.<genexpr>   s'      
"eU E5>"
s   )r&   get_allr   parse_set_cookie_headerstuple)r4   hall_cookiess      r!   _get_cookieszResponse._get_cookies   s@    LL  .66q9 
&1
 
 	
r    c                     g }|D ]5  \  }}t        j                  ||d   |d   fg      }|j                  |       7 | j                  j	                  d|       y )Nr      r]   )r   format_set_cookie_headerappendr&   set_all)r4   r`   cookie_headersrE   rF   headers         r!   _set_cookieszResponse._set_cookies   s_     	*DAq551Q416GHF!!&)	* 	\>:r    c                 V    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   MultiDictViewrg   ro   rU   s    r!   r   zResponse.cookies   s)     &&
 	
r    c                 &    | j                  |       y rW   )ro   )r4   r`   s     r!   r   zResponse.cookies   s    % r    c                    |st        j                          }|| j                  z
  }g d}|D ]T  }|| j                  v st        | j                  |         }|s-t	        |      |z   }t        |d      | j                  |<   V g }| j                  j                  d      D ]*  }	 t        j                  ||      }	|j                  |	       , |r| j                  j                  d|       yy# t        $ r |}	Y @w xY w)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)rN   r)   r&   r   r   r   rb   r   refresh_set_cookie_headerr1   rk   rl   )
r4   nowdeltarefresh_headersidnewcset_cookie_header	refresheds
             r!   refreshzResponse.refresh   s     ))+Cd***

 ! 	CADLL  a1#A,.C&0T&BDLLO	C !%!5!5l!C 	 .#==>OQVW	 HHY	  LL  q1   .-	.s   $C--C;:C;)   r    r   rW   )r   r   r   __doc__r   r   r   r   r   r   r
   r	   floatr5   r/   r@   classmethodr   r   rR   propertyr   setterr   rg   ro   r   rq   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 % % ,s ,t , , 5 5 5 ]]GU3:. G4 G G
; 
00 
 
  ^^! !2r    r#   )rN   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      s\     ! ; ; < < A U U F C I 7&&  
z2w z2r    