
    kj(                        d dl 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 d dlm	Z	 d dlm
Z
 d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ  G d d      Z G d d      Z G d d      Zdeej0                     fdZy)    N)Iterable)BufferedReader)Any)BinaryIO)cast)Union)
exceptions)flow)
flowfilter)compat)
tnetstring)request_to_flowc                   6    e Zd Zd Zdej
                  ddfdZy)
FlowWriterc                     || _         y Nfoselfr   s     X/home/ubuntu/.cache/pipx/cdb5059130eadca/lib/python3.12/site-packages/mitmproxy/io/io.py__init__zFlowWriter.__init__   	        freturnNc                 d    |j                         }t        j                  || j                         y r   )	get_stater   dumpr   r   r   ds      r   addzFlowWriter.add   s    KKM477#r   )__name__
__module____qualname__r   r
   Flowr"    r   r   r   r      s    $TYY $4 $r   r   c                   Z    e Zd ZU eed<   defdZdedefdZde	e
j                     fdZy)
FlowReaderr   c                     || _         y r   r   r   s     r   r   zFlowReader.__init__   r   r   nr   c                    	 t        t        | j                        j                  |      S # t        $ rU | j                  j                         }| j                  j                  |      }| j                  j                  |       |cY S w xY wr   )r   r   r   peekAttributeErrortellreadseek)r   r+   posrets       r   r-   zFlowReader.peek!   sg    	055a88 	'',,.C'',,q/CGGLLJ	s   (+ AB	B	c              #     K   | j                  d      j                  d      r| j                  j                  d       | j                  d      j                  d      rX	 t	        j
                  | j                  j                         j                  d            }|d   d   D ]  }t        |        y	 	 t        t        t        t        t        f   t         f   t#        j$                  | j                              }	 t'        |t              st)        d
|      t*        j,                  j/                  t1        j2                  |             # t        $ r t        j                  d	      w xY w# t(        $ r}t        j                  |      |d}~ww xY w# t(        t4        t6        f$ r.}t        |      dk(  rY d}~yt        j                  d      |d}~ww xY ww)z4
        Yields Flow objects from the dump.
           s   ﻿{         {zutf-8logentriesz8Unable to read HAR file. Please provide a valid HAR filezInvalid flow: loaded=Nznot a tnetstring: empty filezInvalid data format.)r-   
startswithr   r0   jsonloadsdecoder   	Exceptionr	   FlowReadExceptionr   dictr   bytesstrr   r   load
isinstance
ValueErrorr
   r&   
from_stater   migrate_flow	TypeError
IndexError)r   har_filerequest_jsonloadedes        r   streamzFlowReader.stream+   s    
 99Q<""
 GGLLO99Q<""4(	::dgglln&;&;G&DE$,UOI$> 8L),778R!U5#:.34"0FE)&$7",/EfY-G"HH"ii2263F3Fv3NOO    22N " & E(::1=1DE	:6 Rq6;; 223IJPQQRso   AG!AE 5G!7AF  AE5 F E22G!5	F>FFF G0G>G!GGG!N)r#   r$   r%   r   __annotations__r   intrB   r-   r   r
   r&   rO   r'   r   r   r)   r)      s=    L8 c e &R+ &Rr   r)   c                   Z    e Zd Zdedej
                  dz  fdZdej                  ddfdZ	y)FilteredFlowWriterr   fltNc                      || _         || _        y r   )r   rT   )r   r   rT   s      r   r   zFilteredFlowWriter.__init__U   s    r   r   r   c                     | j                   r!t        j                  | j                   |      sy |j                         }t	        j
                  || j                         | j                  j                          y r   )rT   r   matchr   r   r   r   flushr    s      r   r"   zFilteredFlowWriter.addY   sI    88J,,TXXq9KKM477#r   )
r#   r$   r%   r   r   TFilterr   r
   r&   r"   r'   r   r   rS   rS   T   s7    8 **<*<t*C TYY 4 r   rS   r   c                 L   	 g }| D ]^  }t         j                  j                  |      }t        |d      5 }|j	                  t        |      j                                ddd       ` 	 |S # 1 sw Y   mxY w# t        $ r$}t        j                  |j                        d}~ww xY w)a+  
    Given a list of filepaths, read all flows and return a list of them.
    From a performance perspective, streaming would be advisable -
    however, if there's an error with one of the files, we want it to be raised immediately.

    Raises:
        FlowReadException, if any error occurs.
    rbN)ospath
expanduseropenextendr)   rO   OSErrorr	   r@   strerror)pathsflowsr]   r   rN   s        r   read_flows_from_pathsre   a   s    7!# 	5D77%%d+DdD! 5QZ]11345 5	5 L	5 5 7**1::667s.   2A6 )A*
A6 *A3	/A6 6	B#?BB#)r<   r\   collections.abcr   ior   typingr   r   r   r   	mitmproxyr	   r
   r   mitmproxy.ior   r   mitmproxy.io.harr   r   r)   rS   listr&   re   r'   r   r   <module>rm      sd     	 $            # ,$ $6R 6Rr
 
DO r   