
    Dg                         U d Z ddlZddlZddlmZmZ ddlmZmZ ddlZddl	m
Z
 ddlmZ ddlmZ ddlmZ  e       Zee
j&                     ed	<   d
edefdZd Zd Zd Zd Zdee   defdZy)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                    d}d}| j                   r| j                   t        vr| j                   j                  | j                   j                  z
  }| j                   j                  -| j                   j                  | j                   j                  z
  }t        j                  | j                          | j                  j                  | j                  j                  z
  | j                  j                  | j                  j                  z
  | j                  j                  | j                  j                  z
  ||d}|j                         D ci c]  \  }}||dk7  rt        d|z        nd }}}t        d |j                         D              }t        j                  | j                  j                  t        j                         j#                         }| j                  j$                  rt'        | j                  j$                        nd}	| j                  j(                  rt'        | j                  j(                        nd}
|
|	z
  }||| j                  j*                  | j                  j,                  | j                  j.                  t1        | j                  j2                  j4                        t7        | j                  j8                        t7        | j                  j:                  xs i       t'        t=        | j                  j8                              t'        | j                  j(                        d| j                  j>                  | j                  j@                  | j                  j.                  tC        | j                  j2                  j4                        t7        | j                  j8                        |	|| j                  j8                  jE                  dd      d	| j                  j8                  jE                  d
d      t'        t=        | j                  j8                              |	d	i |d}tG        jH                  | j                  j(                        rLtK        jL                  | j                  j(                        jO                         |d   d   d<   d|d   d   d<   n%| j                  jQ                  d      |d   d   d<   | j                  j*                  dv r| j                  jR                  j                  d      D cg c]
  \  }}||d }}}| j                  j8                  jE                  dd      | j                  jQ                  d      |d|d   d<   | j                   jU                         r%t=        | j                   jV                  d         |d<   |S c c}}w c c}}w )zCreate 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   ,   K   | ]  }|d kD  s	|  yw)r   N ).0vs     P/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/seleniumwire/har.py	<genexpr>z#create_har_entry.<locals>.<genexpr>;   s     :!1r6A: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%   r1   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_binr2   	b64encodedecodeget_texturlencoded_form	connected
ip_address)r   ssl_timeconnect_timetimings_rawkr   r0   	full_timestarted_date_timeresponse_body_sizeresponse_body_decoded_sizeresponse_body_compressionentryabr<   s                   r   create_har_entryrk      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Stq!q17#dQh-2SGS :w~~/::I ..t||/K/KX\\Zddf <@==;T;TT]]667Z[?C}}?T?TT]]%:%:!;Z[ :=O 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/5/?/?@U@U/V/]/]/_j)$V,3;j)$Z0/3}}/E/EU/E/Sj)$V,||666:ll6R6R6X6X_c6X6deda1q)ee,,00DLL)))7(
i$ !!##&t'7'7'B'B1'E#F L Tj fs    V4V:c                 :   g }| D ]  \  }}}||d}dD ]  }||v s||   ||<    dD ]  }t        ||v       ||<    t        j                  |      }|5t        j                  |t
        j                        j                         |d<   |j                  |        |S )Nr9   )pathdomaincomment)httpOnlysecureexpires)	boolr	   get_expiration_tsr   rI   r   rJ   rK   append)cookie_listrvr:   r;   attrs
cookie_harkey	expire_tss           r   _format_cookiesr|   y   s    	B) eU

 1 	-Ce|"'*
3	-
 * 	1C"3%<0JsO	1 --e4	 $,$:$:9hll$S$]$]$_Jy!
		*), I    c                 >    t        t        j                  |             S )N)r|   r	   group_cookiesrP   s    r   rO   rO      s    700899r}   c                 &    t        d | D              S )Nc              3   D   K   | ]  }|d    |d   d    |d   d   f  yw)r      Nr   )r   cs     r   r   z+_format_response_cookies.<locals>.<genexpr>   s+     DAaD!A$q'1Q473Ds    )r|   r   s    r   rV   rV      s    DVDDDr}   c                 Z    | j                         D cg c]
  \  }}||d c}}S c c}}w )z3
    Convert (key, value) pairs to HAR format.
    r9   )rE   )objrb   r   s      r   rQ   rQ      s'     14		<1Q#<<<s   'entriesc                     dddt         j                  dt         j                   d| di}t        j                  |d      S )	zGenerate 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:   versionro   )r   creatorr      )indent)seleniumwire__version__jsondumps)r   hars     r   generate_harr      sP     	0'333L4L4L3MN
 

C ::c!$$r}   )__doc__r2   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__dictrk   r|   rO   rV   rQ   rS   r   r   r}   r   <module>r      s      '   9 ; > < 36%c+../ 7a8 a aH8:E=%$t* % %r}   