
    '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Zd dlZd dlm	Z	 d dl
mZ 	  e       Z G d d      Z G d d      Zd
dej                   e   fd	Zy)    N)
exceptions)	typecheckc                      e Zd ZdZdedej                  eef   dej                  dedej                  ej                  e      ddfd	Zd
 Zed        Zdej                  fdZdej                  ddfdZddZdefdZdefdZd Zy)_Option)nametypespecvalue_defaultchoiceshelpr   r   defaultr   r   returnNc                     t        j                  |||       || _        || _        || _        t
        | _        t        j                  |      j                         j                  dd      | _        || _        y )N
 )r   check_option_typer   r   r
   unsetr	   textwrapdedentstripreplacer   r   selfr   r   r   r   r   s         l/var/www/html/scrapers/gsc/venv/lib/python3.12/site-packages/seleniumwire/thirdparty/mitmproxy/optmanager.py__init__z_Option.__init__   s_     	##D'8<	 
OOD)//199$D	    c                 X    dj                  | j                         | j                        S )Nz{value} [{type}])r	   type)formatcurrentr   r   s    r   __repr__z_Option.__repr__(   s"    !((t||~DMM(RRr   c                 @    t        j                  | j                        S N)copydeepcopyr
   r!   s    r   r   z_Option.default+   s    }}T]]++r   c                     | j                   t        u r| j                  }n| j                   }t        j                  |      S r$   )r	   r   r   r%   r&   )r   vs     r   r    z_Option.current/   s/    ::A

A}}Qr   r	   c                 h    t        j                  | j                  || j                         || _        y r$   )r   r   r   r   r	   )r   r	   s     r   setz_Option.set6   s#    ##DIIudmmD
r   c                     t         | _        y r$   )r   r	   r!   s    r   resetz_Option.reset:   s	    
r   c                 <    | j                         | j                  k7  S r$   )r    r   r!   s    r   has_changedz_Option.has_changed=   s    ||~--r   c                 \    | j                   D ]  }t        | |      t        ||      k7  s y y)NFT)	__slots__getattr)r   otheris      r   __eq__z_Option.__eq__@   s3     	AtQ75!#44	 r   c                     t        | j                  | j                  | j                  | j                  | j
                        }| j                         r| j                         |_        |S r$   )	r   r   r   r   r   r   r.   r    r	   )r   _os      r   __deepcopy__z_Option.__deepcopy__F   sK    IIt}}dllDIIt||
 llnAGr   )r   N)__name__
__module____qualname__r0   strtypingUnionr   objectAnyOptionalSequencer   r"   propertyr   r    r*   r,   boolr.   r4   r8    r   r   r   r      s    LI ,,tV|, 	
  !56 
 S , ,     .T .t r   r   c                       e Zd ZdZd Z	 d'dedej                  ee	f   dej                  dedej                  ej                  e      d	dfd
Zej                  d(d       Zd Zd Zd'dZeZd Z fdZd Zd Zd Zd Zd Zd Zd Zd Zd Zded	ej                  fdZ d Z!d Z"d Z#dd d!Z$d" Z%d#e&d$ej                  e   d	ej                  fd%Z'd)d&Z( xZ)S )*
OptManagera  
        OptManager is the base class from which Options objects are derived.

        .changed is a blinker Signal that triggers whenever options are
        updated. If any handler in the chain raises an exceptions.OptionsError
        exception, all changes are rolled back, the exception is suppressed,
        and the .errored signal is notified.

        Optmanager always returns a deep copy of options to ensure that
        mutation doesn't change the option state inadvertently.
    c                     i | _         t        j                         | _        t        j                         | _        i | _        y r$   )deferredblinkerSignalchangederrored_optionsr!   s    r   r   zOptManager.__init__[   s.    /1~~'~~' 79r   Nr   r   r   r   r   r   c                 x    t        |||||      | j                  |<   | j                  j                  | |h       y )Nupdated)r   rN   rL   sendr   s         r   
add_optionzOptManager.add_optionc   s8     &dHgtWMd$/r   Fc              #   .  K   t        j                  | j                        }	 d  y # t        j                  $ rW}| j
                  j                  | |       || j                  d<   | j                  j                  | |       |r|Y d }~y d }~ww xY ww)N)excrN   rP   )	r%   r&   rN   r   OptionsErrorrM   rR   __dict__rL   )r   rQ   reraiseoldes        r   rollbackzOptManager.rollbackn   s~     mmDMM*		&& 	LLd*(+DMM*%LLdG4 	s+    B( BBABBBBc                     D ](  }| j                   vst        j                  d|z         t        j                  j                        t        j                         fd        j                  j                  d       y)a9  
            Subscribe a callable to the .changed signal, but only for a
            specified list of options. The callable should accept arguments
            (options, updated), and may raise an OptionsError.

            The event will automatically be unsubscribed if the callable goes out of scope.
        No such option: %sc                     |j                  t                    r/        }|r
 || |       y j                  j                         y y r$   )intersectionr*   rL   
disconnect)optionsrQ   f_callfuncoptsr   s      r   rc   z#OptManager.subscribe.<locals>._call   s@    ##CI.Fgw'LL++E2 /r   F)weakN)
rN   r   rV   rJ   _saferefsafe_ref	functoolswrapsrL   connect)r   rd   re   r3   rc   s   ``` @r   	subscribezOptManager.subscribe|   s      	HA% --.BQ.FGG	H ((.			3 
	3 	U/r   c                 V    t        |t              r| j                  |j                  k(  S y)NF)
isinstancerG   rN   )r   r2   s     r   r4   zOptManager.__eq__   s"    eZ(==ENN22r   c                 t    t               }t        j                  | j                  |      |j                  d<   |S )NrN   )rG   r%   r&   rN   rW   )r   memodictr7   s      r   r8   zOptManager.__deepcopy__   s+    L!%t}}h!G

:r   c                 t    || j                   v r| j                   |   j                         S t        d|z        )Nr]   )rN   r    AttributeError)r   attrs     r   __getattr__zOptManager.__getattr__   s7    4== ==&..00 !5!<==r   c                     | j                   j                  d      }|st        |   ||       y  | j                  di ||i y )NrN   rE   )rW   getsuper__setattr__update)r   rs   r	   re   	__class__s       r   rx   zOptManager.__setattr__   s@     }}  ,Ge,DKK(4-(r   c                 H    t        | j                  j                               S r$   )r*   rN   keysr!   s    r   r|   zOptManager.keys   s    4==%%'((r   c                 6    | j                   j                         S r$   )rN   itemsr!   s    r   r~   zOptManager.items   s    }}""$$r   c                     || j                   v S r$   )rN   )r   ks     r   __contains__zOptManager.__contains__   s    DMM!!r   c                     | j                   j                         D ]  }|j                           | j                  j	                  | t        | j                   j                                      y)z7
            Restore defaults for all options.
        rP   N)rN   valuesr,   rL   rR   r*   r|   )r   r7   s     r   r,   zOptManager.reset   sR     %%' 	AGGI	$DMM,>,>,@(ABr   c                    i i }}|j                         D ]  \  }}|| j                  v r|||<   |||<     t        |j                               }|rq| j	                  |d      5  |j                         D ]#  \  }}| j                  |   j                  |       % | j
                  j                  | |       ddd       |S |S # 1 sw Y   |S xY w)zx
            Update and set all known options from kwargs. Returns a dictionary
            of unknown options.
        T)rX   rP   N)r~   rN   r*   r|   r[   rL   rR   )r   kwargsknownunknownr   r(   rQ   s          r   update_knownzOptManager.update_known   s    
 RwLLN 	DAqDMM!a
		
 ejjl#w5 9!KKM ,DAqMM!$((+,!!$!89 w	9 s   $ACCc                 ^     | j                   di |}| j                  j                  |       y )NrE   )r   rI   ry   )r   r   r   s      r   update_deferzOptManager.update_defer   s)    #$##-f-W%r   c                      | j                   di |}|r+t        ddj                  |j                               z        y )NUnknown options: %s, rE   )r   KeyErrorjoinr|   )r   r   us      r   ry   zOptManager.update   s?    D''0499QVVX3FFGG r   c                 N      j                   vrt        dz         fd}|S )z|
            Generate a setter for a given attribute. This returns a callable
            taking a single argument.
        r]   c                      t        |        y r$   )setattr)xrs   r   s    r   setterz!OptManager.setter.<locals>.setter   s    D$"r   )rN   r   )r   rs   r   s   `` r   r   zOptManager.setter   s,    
 t}}$/$677	#r   c                       j                   vrt        dz         j                      }|j                  t        k7  rt	        d       fd}|S )z~
            Generate a toggler for a boolean attribute. This returns a callable
            that takes no arguments.
        r]   z-Toggler can only be used with boolean optionsc                  6    t         t                       y r$   )r   r1   )rs   r   s   r   togglez"OptManager.toggler.<locals>.toggle   s    D$GD$$7 78r   )rN   r   r   rD   
ValueError)r   rs   r7   r   s   ``  r   togglerzOptManager.toggler   sR    
 t}}$/$677MM$::LMM	9r   optionc                 4    | j                   |   j                  S r$   )rN   r   r   r   s     r   r   zOptManager.default   s    }}V$,,,r   c                 <    | j                   |   j                         S )z>
            Has the option changed from the default?
        )rN   r.   r   s     r   r.   zOptManager.has_changed  s     }}V$0022r   c                     i }|j                         D ]6  \  }}|	t        |t        t        f      rt	        | |      |z   ||<   2|||<   8  | j
                  di | y)z
            Merge a dict of options into this object. Options that have None
            value are ignored. Lists and tuples are appended to the current
            option value.
        NrE   )r~   rn   listtupler1   ry   )r   re   tosetr   r(   s        r   mergezOptManager.merge  sf     JJL 	!DAq}a$/&tQ/!3E!H E!H	! 	er   c                     t        j                  | j                  d      j                  d      }d|v rd|z   dz   }dj	                  t        |       j                  t        |       j                  |      S )N   )indentz {}r   z
    z{mod}.{cls}({{{options}}}))modclsra   )pprintpformatrN   r   r   r   r:   r9   )r   ra   s     r   r"   zOptManager.__repr__  sl    ..q9??F7?(4/G+22T
%%T
## 3 
 	
r   )deferc                   i }i }|D ]k  }|j                  dd      }t        |      dk(  r|d   d}}n
|d   |d   }}|| j                  v r#| j                  | j                  |   |      ||<   g|||<   m |r| j                  j                  |       n7|r5t        j                  ddj                  |j                               z         | j
                  di | y)	a  
            Takes a list of set specification in standard form (option=value).
            Options that are known are updated immediately. If defer is true,
            options that are not known are deferred, and will be set once they
            are added.
        =   )maxsplitr   Nr   r   rE   )
splitlenrN   parse_setvalrI   ry   r   rV   r   r|   )	r   r   specvalsr   r3   partsoptnameoptvals	            r   r*   zOptManager.set   s      		*AGGC!G,E5zQ"'(D"'(E!H$--' $ 1 1$--2H& QW#) 		* MM  )))*?$))GLLNB[*[\\dr   c                    i }| j                   j                         D ]8  \  }}|| j                  v s| j                  | j                  |   |      }|||<   :  | j                  di | |j                         D ]  }| j                   |=  y)z{
            Processes options that were deferred in previous calls to set, and
            have since been added.
        NrE   )rI   r~   rN   r   ry   r|   )r   ry   r   r   r   s        r   process_deferredzOptManager.process_deferred9  s    
 #}}224 	)OGV$--'**4==+A6J"(w	) 	f 	!Aa 	!r   r7   optstrc                    |j                   t        t        j                  t           fv r|S |j                   t        t        j                  t           fv rD|r	 t	        |      S |j                   t        k(  r"t        j                  d|j                  z        y|j                   t        k(  r9|dk(  r|j                          S |r|dk(  ry|dk(  ryt        j                  d	      |j                   t        j                  t           k(  r|sg S t        | |j                        |gz   S t        d
|j                         # t
        $ r t        j                  d|z        w xY w)zR
            Convert a string to a value appropriate for the option type.
        zNot an integer: %szOption is required: %sNr   trueTfalseFzRBoolean must be "true", "false", or have the value omitted (a synonym for "true").Unsupported option type: %s)r   r<   r=   rA   intr   r   rV   r   rD   r    rB   r1   NotImplementedError)r   r7   r   s      r   r   zOptManager.parse_setvalG  s?    ::#vs344MZZC!566Qv;& s" --.F.OPPZZ4!99;&Vv-7" --q  ZZ6??3//	tQVV,x77!"?LL- " Q$112F2OPPQs   
D= ="Ec           
         || j                   vry| j                   |   }d } |||      }|j                  t        k(  r|j                  d      } ||d      }	 |d|z   d      }
|r"|j                  r |d|z   |      }
n	 |||      }	 |j
                  |
d|d  |j
                  |	d||j                  d	  |j                  di |di y|j                  t        t        j                  t           fv r% |j
                  |d
t        ||j                  |d y|j                  t        t        j                  t           fv r0 |j
                  |d
t        ||j                  ||j                  d y|j                  t        j                  t           k(  r3 |j
                  |dt        ||j                  dz   ||j                  d yt        d|j                        )z
            Auto-Create a command-line parser entry for a named option. If the
            option does not exist, it is ignored.
        Nc                 b    | j                  dd      } d| z  g}|r|j                  d|z          |S )Nr6   -z--%s)r   append)lsrb   s      r   mkfz#OptManager.make_parser.<locals>.mkfs  s5    		#s#A!Aq!Hr   F)requiredzno-store_false)actiondest
store_true)r   r   r   store)r   r   r   r   metavar)r   r   r   r   r   r   r   z May be passed multiple times.r   rE   )rN   r   rD   add_mutually_exclusive_groupr   add_argumentr   set_defaultsr   r=   rA   r<   r   rB   r   )r   parserr   r   shortr7   r   flagsgonfofffs              r   make_parserzOptManager.make_parseri  s   
 $--'MM'"	 GU#::33U3CAgt$Cuw-D99uw6Dgu-CANN$
 ANN#VV	  F27D/2ZZC!566FVV ZZC!566FVV		 ZZ6??3//FVV>>		 :AJJGGr   r$   )F)NN)*r9   r:   r;   __doc__r   r<   r=   r>   r   r?   r@   rA   rB   rS   
contextlibcontextmanagerr[   rl   r4   r8   __copy__rt   rx   r|   r~   r   r,   r   r   ry   r   r   r   r.   r   r"   r*   r   r   r   r   __classcell__)rz   s   @r   rG   rG   O   sE   
9 :>	0	0 ,,tV|,	0 		0
 	0 !56	0 
	0  0<

 H>))%"C&&H

-c -fjj -3
  % 2! Mg  Mvs/C  M

  MDGHr   rG   r|   c                     i }|r|n| j                         }t        |      D ]i  }| j                  |   }t        j                  |j
                        }||j                  |j                         |j                  |j                  d}|||<   k |S )z
        Dumps the options into a list of dict object.

        Return: A list like: { "anticache": { type: "bool", default: false, value: true, help: "help text"} }
    )r   r   r	   r   r   )
r|   sortedrN   r   typespec_to_strr   r   r    r   r   )re   r|   options_dictr   r7   tr   s          r   
dump_dictsr     s     L4TYY[DD\ 
!MM!%%ajj1yyYY[FFyy
 !Q
! r   r$   )r   r%   ri   r   r   r=   rJ   blinker._saferef!seleniumwire.thirdparty.mitmproxyr   'seleniumwire.thirdparty.mitmproxy.utilsr   r?   r   r   rG   Listr<   r   rE   r   r   <module>r      s`            8 = 	7 7taH aHH6;;s+ r   