
    vKg                         % S r SSKrSSKrSSKJrJr  SSKJrJr  SSKrSSK	J
r
  SSKJr  SSKJr  SSKJr  \" 5       r\\
R&                     \S	'   S
\S\4S jrS rS rS rS rS\\   S\4S jrg)zsHandles generation of HAR archives.

This code has been taken from the har_dump.py addon in the mitmproxy project.
    N)datetimetimezone)ListSet)connections)HTTPFlow)cookies)strutilsSERVERS_SEENflowreturnc                    SnSnU R                   (       a  U R                   [        ;  a  U R                   R                  U R                   R                  -
  nU R                   R                  b-  U R                   R                  U R                   R                  -
  n[        R                  U R                   5        U R                  R                  U R                  R                  -
  U R                  R                  U R                  R                  -
  U R                  R                  U R                  R                  -
  UUS.nUR                  5        VVs0 sH  u  pEXES:w  a  [        SU-  5      OS_M     nnn[        S UR                  5        5       5      n[        R                  " U R                  R                  [        R                   5      R#                  5       nU R                  R$                  (       a  ['        U R                  R$                  5      OSn	U R                  R(                  (       a  ['        U R                  R(                  5      OSn
X-
  nUUU R                  R*                  U R                  R,                  U R                  R.                  [1        U R                  R2                  R4                  5      [7        U R                  R8                  5      [7        U R                  R:                  =(       d    0 5      ['        [=        U R                  R8                  5      5      ['        U R                  R(                  5      S.U R                  R>                  U R                  R@                  U R                  R.                  [C        U R                  R2                  R4                  5      [7        U R                  R8                  5      U	UU R                  R8                  RE                  SS5      S	.U R                  R8                  RE                  S
S5      ['        [=        U R                  R8                  5      5      U	S.	0 US.n[F        RH                  " U R                  R(                  5      (       aM  [J        RL                  " U R                  R(                  5      RO                  5       US   S   S'   SUS   S   S'   O"U R                  RQ                  SS9US   S   S'   U R                  R*                  S;   a  U R                  RR                  R                  SS9 VVs/ sH	  u  pXS.PM     nnnU R                  R8                  RE                  SS5      U R                  RQ                  SS9US.US   S'   U R                   RU                  5       (       a%  [=        U R                   RV                  S   5      US'   U$ s  snnf s  snnf )zvCreate a HAR entry from the supplied flow.

Args:
    flow: The current flow.
Returns: The HAR entry as a dictionary.
)sendreceivewaitconnectssli  c              3   2   #    U H  oS :  d  M
  Uv   M     g7f)r   N ).0vs     P/var/www/highfloat_scraper/venv/lib/python3.13/site-packages/seleniumwire/har.py	<genexpr>#create_har_entry.<locals>.<genexpr>;   s     :/!r6AA/s   	r   )methodurlhttpVersionr	   headersqueryStringheadersSizebodySizezContent-Type )sizecompressionmimeTypeLocation)	status
statusTextr   r	   r   contentredirectURLr!   r"   )startedDateTimetimerequestresponsecachetimingsr/   r*   textbase64encodingF)strict)POSTPUTPATCHT)multinamevalue)r&   r2   paramsr.   postDataserverIPAddress),server_connr   timestamp_tcp_setuptimestamp_starttimestamp_tls_setupaddr.   timestamp_endr/   itemsintsumvaluesr   fromtimestampr   utc	isoformatraw_contentlenr*   r   r   http_version_format_request_cookiesr	   fields_name_valuer   querystrstatus_codereason_format_response_cookiesgetr
   is_mostly_binr3   	b64encodedecodeget_texturlencoded_form	connected
ip_address)r   ssl_timeconnect_timetimings_rawkr   r1   	full_timestarted_date_timeresponse_body_sizeresponse_body_decoded_sizeresponse_body_compressionentryabr=   s                   r   create_har_entryrl      s    HLD,,L@'';;d>N>N>^>^^//;'';;d>N>N>b>bbH))* **T\\-I-II==..1N1NN--0J0JJK @K?P?P?RS?Rtqq7#dQh-2?RGS :w~~/::I ..t||/K/KX\\Zddf <@==;T;TT]]667Z[?C}}?T?TT]]%:%:!;Z[ : O -ll))<<##<<44.t||/C/C/J/JK"4<<#7#78&t||'9'9'?R@s4<<#7#789DLL001	
 mm//--..==55/0E0E0L0LM"4==#8#89*8 MM1155nbI
  ==0044ZDs4==#8#89:*
 ;EB dmm3344/5/?/?@U@U/V/]/]/_j)$V,3;j)$Z0/3}}/E/EU/E/Sj)$V,||666:ll6R6R6X6X_c6X6de6dda1)6de,,00DLL)))7(
i$ !!###&t'7'7'B'B1'E#F L Tj fs   !W2Wc                 H   / nU  H  u  p#nUUS.nS H  nXd;   d  M
  XF   XV'   M     S H  n[        Xd;   5      XV'   M     [        R                  " U5      nUb6  [        R                  " U[
        R                  5      R                  5       US'   UR                  U5        M     U$ )Nr:   )pathdomaincomment)httpOnlysecureexpires)	boolr	   get_expiration_tsr   rJ   r   rK   rL   append)cookie_listrvr;   r<   attrs
cookie_harkey	expire_tss           r   _format_cookiesr}   y   s    	B)U

 1C|"'*
 1
 *C"3<0JO * --e4	 $,$:$:9hll$S$]$]$_Jy!
		*) *, I    c                 @    [        [        R                  " U 5      5      $ )N)r}   r	   group_cookiesrQ   s    r   rP   rP      s    700899r~   c                 &    [        S U  5       5      $ )Nc              3   F   #    U H  oS    US   S    US   S   4v   M     g7f)r      Nr   )r   cs     r   r   +_format_response_cookies.<locals>.<genexpr>   s)     DVaD!A$q'1Q473Vs   !)r}   r   s    r   rW   rW      s    DVDDDr~   c                 Z    U R                  5        VVs/ sH	  u  pXS.PM     snn$ s  snnf )z+
Convert (key, value) pairs to HAR format.
r:   )rF   )objrc   r   s      r   rR   rR      s'     14		<Q#<<<s   'entriesc                     SSS[         R                  S[         R                   3S.U S.0n[        R                  " USS9$ )	zxGenerate a HAR as a JSON formatted string.

Args:
    entries: A list of HAR entries.
Returns: A JSON formatted string.
logz1.2zSelenium Wire HAR dumpzSelenium Wire version )r;   versionrp   )r   creatorr      )indent)seleniumwire__version__jsondumps)r   hars     r   generate_harr      sP     	0'333L4L4L3MN
 

C ::c!$$r~   )__doc__r3   r   r   r   typingr   r   r   !seleniumwire.thirdparty.mitmproxyr   &seleniumwire.thirdparty.mitmproxy.httpr   *seleniumwire.thirdparty.mitmproxy.net.httpr	   'seleniumwire.thirdparty.mitmproxy.utilsr
   setr   ServerConnection__annotations__dictrl   r}   rP   rW   rR   rT   r   r   r~   r   <module>r      s      '   9 ; > < 36%c+../ 7a8 a aH8:E=%$t* % %r~   