
    [,h4
                     z    d Z ddlZddlmZ ddlmZmZ ddlmZ  G d d      Z G d d	e      Z	 G d
 dee	      Z
y)z+Mixin Objects that allow for shared methods    N)MutableMapping)AnyOptional)cached_propertyc                   <    e Zd ZdZdedee   fdZedefd       Zy)
GetHeaderszMixin to get a headernamereturnc                     | j                   d   D ]-  }|d   j                         |j                         k(  s(|d   c S  y)z
        Returns the header value of the header defined in ``name``

        :param name: Name of the header to get the value of
        :type name: str
        :return: Value of the header
        :rtype: Optional[str]
        headersr	   valueN)	raw_entrylower)selfr	   headers      L/var/www/html/trade_iq/venv/lib/python3.12/site-packages/haralyzer/mixins.pyget_header_valuezGetHeaders.get_header_value   sF     nnY/ 	'Ff~##%5g&	'     c                 \    d}| j                   d   D ]  }|d   |d   }}|| d| dz  } |S )z
        Returns a formatted string of the headers in `KEY: VALUE` format

        :return: string of all headers
        :rtype: str
         r   r	   r   z: 
r   )r   formatted_headersr   r	   r   s        r   _formatted_headerszGetHeaders._formatted_headers   sS     nnY/ 	6F .&/%DD6E7"!55	6 ! r   N)	__name__
__module____qualname____doc__strr   r   r   r    r   r   r   r   	   s7    S Xc]  !C ! !r   r   c                   >    e Zd ZdZdedefdZdefdZd Z	d Z
d Zy	)
	MimicDictzDMixin for functions to mimic a dictionary for backward compatibilityitemr
   c                      | j                   |   S Nr   )r   r#   s     r   __getitem__zMimicDict.__getitem__/   s    ~~d##r   c                 ,    t        | j                        S r%   )lenr   r   s    r   __len__zMimicDict.__len__2   s    4>>""r   c                     | j                   |= y r%   r   )r   keys     r   __delitem__zMimicDict.__delitem__5   s    NN3r   c                 ,    t        | j                        S r%   )iterr   r)   s    r   __iter__zMimicDict.__iter__8   s    DNN##r   c                 "    || j                   |<   y r%   r   )r   r,   r   s      r   __setitem__zMimicDict.__setitem__;   s    #sr   N)r   r   r   r   r   r   r&   intr*   r-   r0   r2   r    r   r   r"   r"   ,   s3    N$ $ $# # $$r   r"   c                   ~     e Zd ZdZdef fdZedefd       Zede	fd       Z
ej                  de	fd       Z xZS )HttpTransactionz*Class the represents a request or responseentryc                 0    || _         t        | 	          y r%   )r   super__init__)r   r6   	__class__s     r   r9   zHttpTransaction.__init__B   s    r   r
   c                      | j                   d   S )zv
        Headers from the entry

        :return: Headers from both request and response
        :rtype: list
        r   r   r)   s    r   r   zHttpTransaction.headersG   s     ~~i((r   c                 z    | j                   r| j                   nd}| j                          d| j                   d| S )z{
        Formatted HttpTransaction string for pretty print.

        :return: formatted string
        :rtype: str
        r   r   )text_start_liner   )r   bodys     r   	formattedzHttpTransaction.formattedQ   s=     !IItyy2""$%R(?(?'@4&IIr   c                      y r%   r    r)   s    r   r>   zHttpTransaction._start_line\   s    r   )r   r   r   r   dictr9   r   listr   r   r@   abcabstractmethodr>   __classcell__)r:   s   @r   r5   r5   ?   sl    4d 
 ) ) ) J3 J J 	S  r   r5   )r   rD   collections.abcr   typingr   r   r   r   r"   r5   r    r   r   <module>rI      s9    1 
 *   + !  !F$ $&j) r   