
    vKg                         S SK r S SKrS SKrS SKrS SKrS SKrS SKJrJrJ	r	  S SKJ
r
  SSKJr  S rS r\ R                  S 5       r " S	 S
5      rS r " S S5      rg)    N)
controllereventsequence
exceptions)flow   )ctxc                 `    [        U SU R                  R                  R                  5       5      $ )Nname)getattr	__class____name__lower)itms    n/var/www/highfloat_scraper/venv/lib/python3.13/site-packages/seleniumwire/thirdparty/mitmproxy/addonmanager.py	_get_namer      s$    3 6 6 < < >??    c                     U n[         R                  " U 5       H  u    p4nU R                  n XA:X  d  M    O   U =(       d    U$ )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      sB     G#..r21QZZ 3 =r   c               #   R  #     S v   g ! [         R                  [         R                  4 a    e [         am    [        R
                  " 5       u  pn[        US5      n[        R                  R                  SSR                  [        R                  " XU5      5      -  5         g f = f7f)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:  
<<>b2~.(277**5<, 	

s&   B'	 B'BB$!B'#B$$B'c                       \ rS rSrSrS r SS\S\S\R                  S\S	\R                  \R                  \      S
S4S jjrS\S\R                  S
S4S jrSrg)Loader6   zE
A loader object is passed to the load() event when addons start up.
c                     Xl         g Nmasterselfr2   s     r   __init__Loader.__init__:   s    r   Nr
   typespecdefaulthelpchoicesreturnc                    XR                   R                  ;   a  U R                   R                  R                  U   nUR                  U:H  =(       aQ    UR                  U:H  =(       a;    UR
                  U:H  =(       a%    UR                  U:H  =(       a    UR                  U:H  nU(       a  g[        R                  R                  SU-  5        U R                   R                  R                  UUUUU5        g)z
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)r2   options_optionsr
   r7   r8   r9   r:   r   r%   warn
add_option)r4   r
   r7   r8   r9   r:   existingsame_signatures           r   r@   Loader.add_option=   s     ;;&&&{{**33D9H% ,!!X-,  G+, %,   G+  =DE&&	
r   pathfuncc                 N    U R                   R                  R                  X5        g r0   )r2   commandsadd)r4   rD   rE   s      r   add_commandLoader.add_commanda   s      ,r   r1   r0   )r   
__module____qualname____firstlineno____doc__r5   strtypetypingAnyOptionalSequencer@   CallablerI   __static_attributes__ r   r   r-   r-   6   s     :>"
"
 "
 	"

 "
 !56"
 
"
H- -6?? -t -r   r-   c              #      #    U  H7  nUv   [        US5      (       d  M  [        UR                  5       Sh  vN   M9     g N	7f)z&
Recursively traverse an addon chain.
addonsN)hasattrtraverserY   )chainas     r   r[   r[   e   s:      1h)))  *s   AAA
Ac                   b    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rSrg)AddonManagero   c                     0 U l         / U l        Xl        UR                  R                  R                  U R                  5        g r0   )lookupr\   r2   r=   changedconnect_configure_allr3   s     r   r5   AddonManager.__init__p   s3    
&&t':':;r   c                 (    U R                  SU5        g )N	configure)trigger)r4   r=   updateds      r   re   AddonManager._configure_allv   s    ['*r   c                 j    U R                    H  nU R                  US5        M     0 U l        / U l         g)z
Remove all addons.
doneN)r\   r   rb   )r4   r]   s     r   clearAddonManager.cleary   s0     Aa( 
r   c                 :    U R                   R                  US5      $ )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)rb   get)r4   r
   s     r   rq   AddonManager.get   s     {{tT**r   c                    [        U/5       H6  n[        U5      nX0R                  ;   d  M  [        R                  " SU-  5      e   [        U R                  5      nU R                  USU5        [        U/5       H  n[        U5      nX R                  U'   M     [        U/5       H(  nU R                  R                  R                  U5        M*     U R                  R                  R                  5         U$ )a  
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)r[   r   rb   r   AddonManagerErrorr-   r2   r   rG   collect_commandsr=   process_deferred)r4   addonr]   r
   ls        r   registerAddonManager.register   s     5'"AQ<D{{" 22:TA  # 4;;%+5'"AQ<D !KK # 5'"AKK  11!4 #,,.r   c                 j    U H-  nU R                   R                  U R                  U5      5        M/     g)zq
Add addons to the end of the chain, and run their load event.
If any addon has sub-addons, they are registered.
N)r\   appendrz   )r4   rY   is      r   rH   AddonManager.add   s)    
 AJJdmmA./ r   c                 8   [        U/5       Hs  n[        U5      nX0R                  ;  a  [        R                  " SU-  5      eU R
                   Vs/ sH  oDULd  M	  UPM     snU l        U R                  [        U5      	 Mu     U R                  US5        gs  snf )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: %srm   N)r[   r   rb   r   ru   r\   r   )r4   rx   r]   nr~   s        r   removeAddonManager.remove   s     5'"A!A# 223F3JKK%)ZZ>ZA:!Z>DJIaL) # 	%( ?s   BBc                 ,    [        U R                  5      $ r0   )lenr\   )r4   s    r   __len__AddonManager.__len__   s    4::r   c                 ~    [         R                  " U R                   Vs/ sH  n[        U5      PM     sn5      $ s  snf r0   )pprintpformatr\   rO   )r4   r~   s     r   __str__AddonManager.__str__   s+    ~~tzz:z!s1vz:;;:s   :c                 4    [        U5      nX R                  ;   $ r0   )r   rb   )r4   itemr
   s      r   __contains__AddonManager.__contains__   s    {{""r   c                   #    [        US5      (       d  [        R                  " SU-  5      e[        UR                  [
        R                  5      (       a  UR                  R                  5         U R                  X5        UR                  R                  S:X  a  UR                  R                  5         UR                  R                  (       d  UR                  R                  5         UR                  R                  5         [        UR                  [
        R                  5      (       a  UR                  R                  5         [        U[        R                   5      (       a  U R                  SU/5        gg7f)z
Handle a lifecycle event.
replyz!Message %s has no reply attributestartupdateN)rZ   r   ControlException
isinstancer   r   
DummyReplyresetri   statetakehas_messageackcommit
mark_resetr   Flow)r4   r
   messages      r   handle_lifecycleAddonManager.handle_lifecycle   s      w((--3g=  gmmZ%:%:;;MM!T#==')MM ==,,!!#MM  "'--)>)>??((*gtyy))LLG9- *s   E9E;c                 j   U[         R                  ;  a  [        R                  " SU-  5      e[	        U/5       Hv  n[        XRS5      nU(       d  M  [        U5      (       a
  U" U0 UD6  M2  [        U[        R                  5      (       a  MS  [        R                  " SR                  X%5      5      e   g)z3
Invoke an event on an addon and all its children.
zUnknown event: %sNz"Addon handler {} ({}) not callable)r   Eventsr   ru   r[   r   callabler   types
ModuleTypeformat)r4   rx   r
   argskwargsr]   rE   s          r   r   AddonManager.invoke_addon   s     }+++../BT/IJJ5'"A1D)DtD>>$)&)e&6&677
 $66<CCDL  #r   c                     U R                    H-  n [        5          U R                  " XA/UQ70 UD6  SSS5        M/     g! , (       d  f       MA  = f! [        R                   a       gf = f)z%
Trigger an event across all addons.
N)r\   r+   r   r   r    )r4   r
   r   r   r~   s        r   ri   AddonManager.trigger   sX     AZ%%a???  Z Z'' s+   
A?A
A		AAA)(A))r\   rb   r2   N)r   rK   rL   rM   r5   re   rn   rq   rz   rH   r   r   r   r   r   r   ri   rV   rW   r   r   r_   r_   o   sC    <++40) <#.:,	r   r_   )
contextlibr   r#   r   r   rQ   !seleniumwire.thirdparty.mitmproxyr   r   r   r   r   r   r   r   contextmanagerr+   r-   r[   r_   rW   r   r   <module>r      sd      
    S S 2 @( 
 
,- ,-^*S Sr   