
    hg):                         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dS )    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dS )_Option)nametypespecvalue_defaultchoiceshelpr   r   defaultr   r   returnNc                     t          j        |||           || _        || _        || _        t
          | _        t          j        |          	                                
                    dd          | _        || _        d S )N
 )r   check_option_typer   r   r
   unsetr	   textwrapdedentstripreplacer   r   selfr   r   r   r   r   s         e/var/www/fb-scrape/myenv/lib/python3.11/site-packages/seleniumwire/thirdparty/mitmproxy/optmanager.py__init__z_Option.__init__   sm     	#D'8<<<	 
OD))//1199$DD	    c                 ^    d                     |                                 | j                  S )Nz{value} [{type}])r	   type)formatcurrentr   r   s    r   __repr__z_Option.__repr__(   s%    !((t||~~DM(RRRr   c                 4    t          j        | j                  S N)copydeepcopyr
   r!   s    r   r   z_Option.default+   s    }T]+++r   c                 d    | j         t          u r| j        }n| j         }t          j        |          S r$   )r	   r   r   r%   r&   )r   vs     r   r    z_Option.current/   s/    :AA
A}Qr   r	   c                 T    t          j        | j        || j                   || _        d S r$   )r   r   r   r   r	   )r   r	   s     r   setz_Option.set6   s&    #DIudmDDD


r   c                     t           | _        d S r$   )r   r	   r!   s    r   resetz_Option.reset:   s    


r   c                 <    |                                  | j        k    S r$   )r    r   r!   s    r   has_changedz_Option.has_changed=   s    ||~~--r   c                 d    | j         D ]'}t          | |          t          ||          k    r dS (dS )NFT)	__slots__getattr)r   otheris      r   __eq__z_Option.__eq__@   sC     	 	AtQ75!#4#444uu 5tr   c                     t          | j        | j        | j        | j        | j                  }|                                 r|                                 |_        |S r$   )	r   r   r   r   r   r   r.   r    r	   )r   _os      r   __deepcopy__z_Option.__deepcopy__F   sP    It}dlDIt|
 
  	%llnnAG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      sI       LI ,tV|, 	
  !56 
    S S S , , X,                 .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 | _        d S r$   )deferredblinkerSignalchangederrored_optionsr!   s    r   r   zOptManager.__init__[   s4    /1~''~'' 79r   Nr   r   r   r   r   r   c                 v    t          |||||          | j        |<   | j                            | |h           d S )Nupdated)r   rN   rL   sendr   s         r   
add_optionzOptManager.add_optionc   sC     &dHgtWMMd$/////r   Fc              #     K   t          j        | j                  }	 d V  d S # t          j        $ rQ}| j                            | |           || j        d<   | j                            | |           |r|Y d }~d S d }~ww xY w)N)excrN   rP   )	r%   r&   rN   r   OptionsErrorrM   rR   __dict__rL   )r   rQ   reraiseoldes        r   rollbackzOptManager.rollbackn   s      mDM**		EEEEE& 	 	 	Ld***(+DM*%LdG444      	s   # BAA>>Bc                     D ]"}| j         vrt          j        d|z            #t          j                                      t          j                   fd             j        	                    d           dS )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                     |                     t                              r6             }|r || |           d S j                                       d S d S r$   )intersectionr*   rL   
disconnect)optionsrQ   f_callfuncoptsr   s      r   rc   z#OptManager.subscribe.<locals>._call   sp    ##CII.. 3DFF 3Agw'''''L++E222223 3r   F)weakN)
rN   r   rV   rJ   _saferefsafe_ref	functoolswrapsrL   connect)r   rd   re   r3   rc   s   ``` @r   	subscribezOptManager.subscribe|   s      	H 	HA%% -.BQ.FGGG &
 ((..				3 	3 	3 	3 	3 	3 	3 
		3 	U/////r   c                 P    t          |t                    r| j        |j        k    S dS )NF)
isinstancerG   rN   )r   r2   s     r   r4   zOptManager.__eq__   s(    eZ(( 	3=EN22ur   c                 f    t                      }t          j        | j        |          |j        d<   |S )NrN   )rG   r%   r&   rN   rW   )r   memodictr7   s      r   r8   zOptManager.__deepcopy__   s*    LL!%t}h!G!G
:r   c                 v    || j         v r| j         |                                         S t          d|z            )Nr]   )rN   r    AttributeError)r   attrs     r   __getattr__zOptManager.__getattr__   s<    4=  =&..000 !5!<===r   c                     | j                             d          }|s$t                                          ||           d S  | j        di ||i d S )NrN   rE   )rW   getsuper__setattr__update)r   rs   r	   re   	__class__s       r   rx   zOptManager.__setattr__   sd     }  ,, 	)GGe,,,,,DK((4-(((((r   c                 N    t          | j                                                  S r$   )r*   rN   keysr!   s    r   r|   zOptManager.keys   s    4=%%''(((r   c                 4    | 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    DM!!r   c                     | j                                         D ]}|                                 | j                            | t          | j                                                              dS )z7
            Restore defaults for all options.
        rP   N)rN   valuesr,   rL   rR   r*   r|   )r   r7   s     r   r,   zOptManager.reset   sg     %%'' 	 	AGGIIII$DM,>,>,@,@(A(ABBBBBr   c                    i i }}|                                 D ]\  }}|| j        v r|||<   |||<   t          |                                          }|r|                     |d          5  |                                 D ]%\  }}| j        |                             |           &| j                            | |           ddd           n# 1 swxY w Y   |S )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LLNN 	 	DAqDM!!a

ejjll## 	9w55 9 9!KKMM , ,DAqM!$((++++!!$!8889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 s   -ACCCc                 T     | j         di |}| j                            |           d S )NrE   )r   rI   ry   )r   r   r   s      r   update_deferzOptManager.update_defer   s6    #$#--f--W%%%%%r   c                      | j         di |}|r7t          dd                    |                                          z            d S )NUnknown options: %s, rE   )r   KeyErrorjoinr|   )r   r   us      r   ry   zOptManager.update   sW    D'''' 	H0499QVVXX3F3FFGGG	H 	Hr   c                 L      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          |            d S 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   sJ    
 t}$$/$6777	# 	# 	# 	# 	# 	#r   c                       j         vrt          dz             j                  }|j        t          k    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                  H    t           t                                 d S r$   )r   r1   )rs   r   s   r   togglez"OptManager.toggler.<locals>.toggle   s(    D$GD$$7$7 788888r   )rN   r   r   rD   
ValueError)r   rs   r7   r   s   ``  r   togglerzOptManager.toggler   sr    
 t}$$/$6777M$:LMMM	9 	9 	9 	9 	9 	9r   optionc                 &    | j         |         j        S r$   )rN   r   r   r   s     r   r   zOptManager.default   s    }V$,,r   c                 @    | 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22r   c                     i }|                                 D ]?\  }}|8t          |t          t          f          rt	          | |          |z   ||<   :|||<   @ | j        di | dS )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  s     JJLL 	! 	!DAq}a$// !&tQ//!3E!HH E!Her   c                     t          j        | j        d                              d          }d|v rd|z   dz   }d                    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__  sv    .q999??FF7??(4/G+22T

%T

# 3 
 
 	
r   )deferc                   i }i }|D ]z}|                     dd          }t          |          dk    r|d         d}}n|d         |d         }}|| j        v r%|                     | j        |         |          ||<   u|||<   {|r| j                            |           n>|r<t          j        dd                    |	                                          z             | j        di | dS )	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5zzQ"'(D"'(E!H$-'' $ 1 1$-2H& Q QW#)   	]M  )))) 	])*?$))GLLNNB[B[*[\\\dr   c                     i }| j                                         D ]4\  }}|| j        v r&|                     | j        |         |          }|||<   5 | j        di | |                                D ]
}| j         |= dS )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4 	) 	)OGV$-''**4=+A6JJ"(wf 	! 	!Aa  	! 	!r   r7   optstrc                    |j         t          t          j        t                   fv r|S |j         t          t          j        t                   fv re|r5	 t	          |          S # t
          $ r t          j        d|z            w xY w|j         t          k    rt          j        d|j        z            dS |j         t          k    rA|dk    r|
                                 S |r|dk    rdS |dk    rdS t          j        d	          |j         t          j        t                   k    r|sg S t          | |j                  |gz   S t          d
|j                   )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  sl    :#vs3444MZC!5666 Qv;;&! Q Q Q$12F2OPPPQs"" -.F.OPPPtZ4!!99;;& Vv--t7""u -q   Z6?3/// 8	tQV,,x77!"?LLLs   A "Bc           
      L   || j         vrdS | j         |         }d } |||          }|j        t          k    r|                    d          } ||d          }	 |d|z   d          }
|r#|j        r |d|z   |          }
n |||          }	 |j        |
d|d  |j        |	d||j        d	  |j        di |di dS |j        t          t          j
        t                   fv r |j        |d
t          ||j        |d dS |j        t          t          j
        t                   fv r# |j        |d
t          ||j        ||j        d dS |j        t          j        t                   k    r& |j        |dt          ||j        dz   ||j        d dS 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                 r    |                      dd          } d| z  g}|r|                    d|z              |S )Nr6   -z--%s)r   append)lsrb   s      r   mkfz#OptManager.make_parser.<locals>.mkfs  sC    		#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  sX   
 $-''FM'"	 	 	 GU##:33U3CCA#gt$$C3uw--D .9 .3uw66DD#gu--CAN$   
 AN#V	     F227D/22222ZC!5666FV      ZC!5666FV	      Z6?3///FV>>	      :AJG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   s       
 
9 9 9 :>	0 	0	0 ,tV|,	0 		0
 	0 !56	0 
	0 	0 	0 	0    0 0 0<  
   
 H> > >) ) ) ) )) ) )% % %" " "C C C  && & &H H H

 
 
  -c -fj - - - -3 3 3  
 
 
  %     2! ! ! Mg  Mvs/C  M
  M  M  M  MDGH GH GH GH GH GH GH GHr   rG   r|   c                    i }|r|n|                                  }t          |          D ]V}| j        |         }t          j        |j                  }||j        |                                |j        |j	        d}|||<   W|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(44TYY[[DD\\ 
! 
!M!%aj11yYY[[Fy
 
 !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 8 8 8 8 8 = = = = = = 	7 7 7 7 7 7 7 7taH aH aH aH aH aH aH aHH 6;s+      r   