
    'h                         d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZm	Z	 d dlm
Z
 ddlmZ d Zd Ze j                  d        Z G d	 d
      Zd Z G d d      Zy)    N)
controllereventsequence
exceptions)flow   )ctxc                 `    t        | d| j                  j                  j                               S )Nname)getattr	__class____name__lower)itms    n/var/www/html/scrapers/gsc/venv/lib/python3.12/site-packages/seleniumwire/thirdparty/mitmproxy/addonmanager.py	_get_namer      s$    3 6 6 < < >??    c                 v    | }t        j                  |       D ]  \  }}}}| j                  } ||k(  s n | xs |S )z
    Cut off a traceback at the function with the given name.
    The func_name's frame is excluded.

    Args:
        tb: traceback object, as returned by sys.exc_info()[2]
        func_name: function name

    Returns:
        Reduced traceback.
    )	traceback
extract_tbtb_next)tb	func_nametb_orig_fnames        r   cut_tracebackr      sK     G#..r2 1eQZZI =r   c               #   N  K   	 d  y # t         j                  t         j                  f$ r  t        $ rm t	        j
                         \  } }}t        |d      }t        j                  j                  ddj                  t        j                  | ||            z         Y y w xY ww)Ninvoke_addonzError handling request
%s )r   	AddonHaltOptionsError	Exceptionsysexc_infor   r   logerrorjoinr   format_exception)etypevaluer   s      r   safecallr+   &   s     
  *"9"9:  
<<>ub2~.(277**5%<, 	

s&   B%	 B%BB"B%!B""B%c                       e Zd ZdZd Z	 ddededej                  dedej                  ej                  e      d	dfd
Zdedej                  d	dfdZy)LoaderzQ
        A loader object is passed to the load() event when addons start up.
    c                     || _         y N)masterselfr0   s     r   __init__zLoader.__init__:   s	    r   Nr
   typespecdefaulthelpchoicesreturnc                    || j                   j                  v r| j                   j                  j                  |   }|j                  |k(  xrB |j                  |k(  xr1 |j
                  |k(  xr  |j                  |k(  xr |j                  |k(  }|ryt        j                  j                  d|z         | j                   j                  j                  |||||       y)a  
            Add an option to mitmproxy.

            Help should be a single paragraph with no linebreaks - it will be
            reflowed by tools. Information on the data type should be omitted -
            it will be generated and added by tools as needed.
        NzOver-riding existing option %s)r0   options_optionsr
   r4   r5   r6   r7   r   r%   warn
add_option)r2   r
   r4   r5   r6   r7   existingsame_signatures           r   r=   zLoader.add_option=   s     4;;&&&{{**33D9H% ,!!X-,  G+, %,   G+  =DE&&	
r   pathfuncc                 P    | j                   j                  j                  ||       y r/   )r0   commandsadd)r2   r@   rA   s      r   add_commandzLoader.add_commanda   s      t,r   r/   )r   
__module____qualname____doc__r3   strtypetypingAnyOptionalSequencer=   CallablerE    r   r   r-   r-   6   s     :>"
"
 "
 	"

 "
 !56"
 
"
H- -6?? -t -r   r-   c              #   z   K   | D ]0  }| t        |d      st        |j                        E d{    2 y7 w)z2
        Recursively traverse an addon chain.
    addonsN)hasattrtraverserR   )chainas     r   rT   rT   e   s=       *1h)))* *s   ;;9;c                   Z    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zy)AddonManagerc                     i | _         g | _        || _        |j                  j                  j                  | j                         y r/   )lookuprU   r0   r:   changedconnect_configure_allr1   s     r   r3   zAddonManager.__init__p   s5    
&&t':':;r   c                 (    | j                  d|       y )N	configure)trigger)r2   r:   updateds      r   r]   zAddonManager._configure_allv   s    ['*r   c                 f    | j                   D ]  }| j                  |d        i | _        g | _         y)z(
            Remove all addons.
        doneN)rU   r   rZ   )r2   rV   s     r   clearzAddonManager.cleary   s5      	)Aa(	)
r   c                 :    | j                   j                  |d      S )z
            Retrieve an addon by name. Addon names are equal to the .name
            attribute on the instance, or the lower case class name if that
            does not exist.
        N)rZ   get)r2   r
   s     r   rf   zAddonManager.get   s     {{tT**r   c                    t        |g      D ]3  }t        |      }|| j                  v st        j                  d|z         t        | j                        }| j                  |d|       t        |g      D ]  }t        |      }|| j                  |<    t        |g      D ]'  }| j                  j                  j                  |       ) | j                  j                  j                          |S )ad  
            Register an addon, call its load event, and then register all its
            sub-addons. This should be used by addons that dynamically manage
            addons.

            If the calling addon is already running, it should follow with
            running and configure events. Must be called within a current
            context.
        z$An addon called '%s' already exists.load)rT   r   rZ   r   AddonManagerErrorr-   r0   r   rC   collect_commandsr:   process_deferred)r2   addonrV   r
   ls        r   registerzAddonManager.register   s     5'" 	AQ<Dt{{" 22:TA 	 4;;%+5'" 	"AQ<D !DKK	" 5'" 	5AKK  11!4	5,,.r   c                 f    |D ],  }| j                   j                  | j                  |             . y)z
            Add addons to the end of the chain, and run their load event.
            If any addon has sub-addons, they are registered.
        N)rU   appendrn   )r2   rR   is      r   rD   zAddonManager.add   s.    
  	0AJJdmmA./	0r   c                 *   t        |g      D ]m  }t        |      }|| j                  vrt        j                  d|z        | j
                  D cg c]	  }||us| c}| _        | j                  t        |      = o | j                  |d       yc c}w )z
            Remove an addon and all its sub-addons.

            If the addon is not in the chain - that is, if it's managed by a
            parent addon - it's the parent's responsibility to remove it from
            its own addons attribute.
        zNo such addon: %src   N)rT   r   rZ   r   ri   rU   r   )r2   rl   rV   nrq   s        r   removezAddonManager.remove   s     5'" 	*A!A# 223F3JKK%)ZZ>1A:!>DJIaL)	* 	%( ?s   	BBc                 ,    t        | j                        S r/   )lenrU   )r2   s    r   __len__zAddonManager.__len__   s    4::r   c                 x    t        j                  | j                  D cg c]  }t        |       c}      S c c}w r/   )pprintpformatrU   rI   )r2   rq   s     r   __str__zAddonManager.__str__   s'    ~~tzz:!s1v:;;:s   7c                 4    t        |      }|| j                  v S r/   )r   rZ   )r2   itemr
   s      r   __contains__zAddonManager.__contains__   s    t{{""r   c                   K   t        |d      st        j                  d|z        t        |j                  t
        j                        r|j                  j                          | j                  ||       |j                  j                  dk(  r|j                  j                          |j                  j                  s|j                  j                          |j                  j                          t        |j                  t
        j                        r|j                  j                          t        |t        j                         r| j                  d|g       yyw)z/
            Handle a lifecycle event.
        replyz!Message %s has no reply attributestartupdateN)rS   r   ControlException
isinstancer   r   
DummyReplyresetr`   statetakehas_messageackcommit
mark_resetr   Flow)r2   r
   messages      r   handle_lifecyclezAddonManager.handle_lifecycle   s      w(--3g=  gmmZ%:%:;MM!T7#==')MM ==,,!!#MM  "'--)>)>?((*gtyy)LLG9- *s   EE!c                 @   |t         j                  vrt        j                  d|z        t	        |g      D ]e  }t        ||d      }|st        |      r	 ||i | 't        |t        j                        rBt        j                  dj                  ||             y)zG
            Invoke an event on an addon and all its children.
        zUnknown event: %sNz"Addon handler {} ({}) not callable)r   Eventsr   ri   rT   r   callabler   types
ModuleTypeformat)r2   rl   r
   argskwargsrV   rA   s          r   r   zAddonManager.invoke_addon   s     }+++../BT/IJJ5'" 	A1dD)DD>$)&)e&6&67
 $66<CCD!L 	r   c                     | j                   D ]-  }	 t               5   | j                  ||g|i | ddd       / y# 1 sw Y   xY w# t        j                  $ r Y  yw xY w)z9
            Trigger an event across all addons.
        N)rU   r+   r   r   r    )r2   r
   r   r   rq   s        r   r`   zAddonManager.trigger   sn      	AZ @%D%%a???@	@ @'' s%   
A
>A
A	A

A! A!N)r   rF   rG   r3   r]   rd   rf   rn   rD   rt   rw   r{   r~   r   r   r`   rP   r   r   rX   rX   o   sC    <++40) <#.:,	r   rX   )
contextlibry   r#   r   r   rK   !seleniumwire.thirdparty.mitmproxyr   r   r   r   r   r   r   r   contextmanagerr+   r-   rT   rX   rP   r   r   <module>r      sd      
    S S 2 @( 
 
,- ,-^*S Sr   