
    @OOfq,                     l   d 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	 ddlm
Z
 ddlmZ ddlmZ ddlZddlZddlmZ dd	lmZ dd
lmZ dede	e   deddfdZdedefdZdedefdZ G d de      Z G d d      Z G d de      Z G d d      ZdedededefdZd#d edz  fd!Z d" Z!y)$z1
This module manages and invokes typed commands.
    N)Callable)Iterable)Sequence)Any)
NamedTuple)command_lexer)
exceptions)unquotefargskwargsreturnc                     t        j                  | d      }	  |j                  |i | y # t        $ r*}t	        j
                  d|j                  d   z        d }~ww xY w)NTeval_strzcommand argument mismatch: %sr   )inspect	signaturebind	TypeErrorr	   CommandErrorr   )r   r   r   sigvs        R/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/mitmproxy/command.pyverify_arg_signaturer      s^    


A
-CS$!&! S%%&Eq	&QRRSs   , 	A%AAtc                    | t         j                  k(  rt        j                  d      t        j
                  j                  j                  | d      }|s#t        j                  dt        | d|       z        |j                  S )z5
    Translates a type to an explanatory string.
    zmissing type annotationNzunsupported type: %s__name__)
r   _emptyr	   r   	mitmproxytypesCommandTypesgetgetattrdisplay)r   tos     r   typenamer&   !   sq     	GNN%%&?@@		%	%	)	)!T	2B%%"WQ
A%>>
 	
 ::    xc                 B    | t         j                  j                  k(  ry | S N)r   	Signatureemptyr(   s    r   _empty_as_noner.   /   s    G###Hr'   c                   r    e Zd ZU eed<   eed<   ej                  j                  Z	ej                  ed<   d Zy)CommandParameternametypekindc                     | j                   t        j                  j                  u rd| j                   S | j                  S )N*)r3   r   	ParameterVAR_POSITIONALr1   selfs    r   __str__zCommandParameter.__str__:   s4    99))888tyyk?"99r'   N)r   
__module____qualname__str__annotations__r2   r   r6   POSITIONAL_OR_KEYWORDr3   _ParameterKindr:    r'   r   r0   r0   5   s-    
I
J#*#4#4#J#JD'
 
 Jr'   r0   c                       e Zd ZU eed<   ded<   ej                  ed<   edz  ed<   dddededdfd	Ze	de
dz  fd
       Ze	dee   fd       ZdefdZdee   dej"                  fdZdee   defdZy)Commandr1   CommandManagermanagerr   Nhelpfuncr   c           
         || _         || _        || _        t        j                  | j                  d      | _        |j
                  rD|j
                  j                         }dj                  t        j                  |            | _
        nd | _
        | j                  j                  j                         D ]d  \  }}|j                  }t        j                  j                   j#                  |j                  d       rGt%        j&                  d| d| d| d       | j(                  r[t        j                  j                   j#                  | j(                  d       s&t%        j&                  d| j(                   d	| d      y y )
NTr   
z	Argument z has an unknown type z in .z!Return type has an unknown type (z) in )r1   rE   rG   r   r   __doc__stripjointextwrapwraprF   
parametersitems
annotationr   r    r!   r"   r	   r   return_type)r9   rE   r1   rG   txt	parameterr   s          r   __init__zCommand.__init__G   sK   		 **499tD<<,,$$&C		(--"45DIDI  $~~88>>@ 	OD)$$A??//33I4H4H$O --v%:1#T$qI 	 IOO$@$@$D$Dd%
 ))3D4D4D3EU4&PQR %
r'   c                 @    t        | j                  j                        S r*   )r.   r   return_annotationr8   s    r   rS   zCommand.return_typea   s    dnn>>??r'   c                     g }| j                   j                  j                         D ]5  \  }}|j                  t	        ||j
                  |j                               7 |S )z$Returns a list of CommandParameters.)r   rP   rQ   appendr0   rR   r3   )r9   retr1   params       r   rP   zCommand.parameterse   sV     >>44::< 	MKD%JJ'e.>.>

KL	M
r'   c                     dj                  d | j                  D              }| j                  rdt        | j                         }nd}| j                   d| | S )N c              3   2   K   | ]  }t        |        y wr*   )r=   ).0r\   s     r   	<genexpr>z)Command.signature_help.<locals>.<genexpr>n   s     B#e*Bs   z ->  )rM   rP   rS   r&   r1   )r9   paramsr[   s      r   signature_helpzCommand.signature_helpm   sY    B$//BB$"2"2345CC))AfXcU++r'   r   c                 \    	   j                   j                  | }|j                  j                         D ]  \  }} j                   j                  |   }|j                  |j                  |j                  k(  r#t         fd|D              |j                  |<   gt         j                  |      |j                  |<    |j                          |S # t        $ rL dt         j                   j                         }dt        |       }t        j                  d| d|       w xY w)Nz
Expected: z
Received: z Command argument mismatch: 
    z
    c              3   L   K   | ]  }t        j                  |        y wr*   )parseargrE   )r`   r(   
convert_tor9   s     r   ra   z'Command.prepare_args.<locals>.<genexpr>   s#      8>?HT\\1j98s   !$)r   r   r   r=   rP   r	   r   	argumentsrQ   rR   r3   r7   tuplerg   rE   apply_defaults)	r9   r   bound_argumentsexpectedreceivedr1   valuer\   rh   s	   `       @r   prepare_argszCommand.prepare_argsu   s+   	1dnn1148O +44::< 
	KD%NN--d3E))JzzU11127 8CH8 3))$/ 3;LL%3))$/
	 	&&(+  	#C(A(A$B#CDH#CI;/H))3H:VH:N 	s   C AD+c                    | j                  |      } | j                  |j                  i |j                  }|| j                  yt
        j                  j                  j                  | j                        }|sJ |j                  | j                  ||      s.t        j                  | j                   d|j                         |S )zn
        Call the command with a list of arguments. At this point, all
        arguments are strings.
        Nz% returned unexpected data - expected )rp   rG   r   r   rS   r   r    r!   r"   is_validrE   r	   r   r1   r$   )r9   r   
bound_argsr[   typs        r   callzCommand.call   s    
 &&t,
dii>J,=,=>;4++3oo**..t/?/?@
s||DLL#s3))99+B3;;-P  
r'   )r   r;   r<   r=   r>   r   r+   r   rV   propertyr2   rS   listr0   rP   rd   r   BoundArgumentsrp   r   ru   rA   r'   r   rC   rC   A   s    
I   
* 0  8 PT 4 @TD[ @ @ D!12  , ,# 73I3I 4# 3 r'   rC   c                   ,    e Zd ZU eed<   eed<   eed<   y)ParseResultro   r2   validN)r   r;   r<   r=   r>   r2   boolrA   r'   r   rz   rz      s    J
JKr'   rz   c                       e Zd ZU eeef   ed<   d Zd Zdede	fdZ
 ej                  d      d	ed
eee   ee   f   fd       Zdeded
efdZdedee   d
efdZd	ed
efdZej.                  fddZy)rD   commandsc                      || _         i | _        y r*   )masterr~   )r9   r   s     r   rV   zCommandManager.__init__   s    r'   c                    t        |      D ]\  }|j                  d      rt        ||      }	 t        t        |dd       t              }|s@	 | j                  |j                  |       ^ y # t        j                  $ r/}t        j                  d|j                   d|        Y d }~d }~ww xY w# t        $ r Y w xY w)N__command_namezCould not load command z: )dir
startswithr#   
isinstancer=   addr   r	   r   loggingwarning	Exception)r9   addonio
is_commandes         r   collect_commandszCommandManager.collect_commands   s    U 	A<<%E1%!+GA~t,Lc!RJ " HHQ^^Q7	  *66 #OO"9!..9IA3 O  ! s)   B1A,,B.?%B))B.1	B=<B=pathrG   c                 8    t        | ||      | j                  |<   y r*   )rC   r~   )r9   r   rG   s      r   r   zCommandManager.add   s    %dD$7dr'      )maxsizecmdstrr   c                    t         j                  j                  |d      }g }t        dt        j
                  j                        t        dt        j
                  j                        g}d}|D ]   }|j                         r6|j                  t        |t        j
                  j                  d             J|r*|j                  t        j                  j                  u r|r:J |r|j!                  d      }n$t        dt        j
                  j"                        }|j$                  t        j
                  j                  k(  xr || j&                  v }|j$                  t        j
                  j                  k(  xr || j&                  v}|xr* |d   j$                  t        j
                  j                  k(  }	|r!|	r| j&                  |   j(                  |dd z   }|r|	r|j!                  d       t        j
                  j*                  j-                  |j$                  d      }
d}|
r 	 |
j/                  | |j$                  |       d}|j                  t        ||j$                  |              ||fS # t0        $ r d}Y ;w xY w)	z
        Parse a possibly partial command. Return a sequence of ParseResults and a sequence of remainder type help items.
        T)parseAllrb   N)ro   r2   r{   r      F)r   exprparseStringr0   r   r    CmdCmdArgsisspacerZ   rz   Spacer3   r   r6   r7   popUnknownr2   r~   rP   r!   r"   parse
ValueError)r9   r   partsparsednext_paramsrm   partarg_is_known_commandarg_is_unknown_commandcommand_args_followingr%   r{   s               r   parse_partialzCommandManager.parse_partial   s4    )6(:(:(F(FT )G )
 %'R!4!45R!8!89/
 -1 0	D||~"&__22" HMMW->->-M-MM&&&??1-+B	0G0GH !4!44N9N ! !4!44RT]]9R # NA 3 3y7N7N N # $(>"mmD1<<{12N%*@"--11(--FBE!HHT8==$7 !EMM!U0	d {"" " "!E"s   +I88JJr   r   c                     || j                   vrt        j                  d|z         | j                   |   j                  | S )zO
        Call a command with native arguments. May raise CommandError.
        Unknown command: %s)r~   r	   r   rG   r9   r   r   s      r   ru   zCommandManager.call	  sC     t}},))*?,*NOO/t}}\*//66r'   c                     || j                   vrt        j                  d|z        | j                   |   j                  |      S )zZ
        Call a command using a list of string arguments. May raise CommandError.
        r   )r~   r	   r   ru   r   s      r   call_stringszCommandManager.call_strings  sA     t}},))*?,*NOO}}\*//55r'   c                     | j                  |      \  }}|st        j                  d|      d |D        ^}}| j                  ||      S )zC
        Execute a command string. May raise CommandError.
        zInvalid command: c              3      K   | ]A  }|j                   t        j                  j                  k7  s+t	        |j
                         C y wr*   )r2   r   r    r   r
   ro   )r`   r   s     r   ra   z)CommandManager.execute.<locals>.<genexpr>!  s3      
$(TYY)//BWBW5WGDJJ
s
   ,A	A	)r   r	   r   r   )r9   r   r   _r   r   s         r   executezCommandManager.execute  s]     %%f-q)),=fZ*HII
,1
t   t44r'   Nc                 2   t        | j                  j                               }|j                  d        |D ]\  }|j                  xs dj                         D ]  }t        d|z   |        t        |j                         |       t        |       ^ y )Nc                 "    | j                         S r*   )rd   r-   s    r   <lambda>z%CommandManager.dump.<locals>.<lambda>(  s     0 0 2 r'   )keyrb   z# )file)rw   r~   valuessortrF   
splitlinesprintrd   )r9   outcmdschls        r   dumpzCommandManager.dump&  s    DMM((*+		2	3 	Avv|//1 +dRic*+!""$3/sO		r'   )r   N)r   r;   r<   dictr=   rC   r>   rV   r   r   r   	functools	lru_cacherj   r   rz   r0   r   r   ru   r   r   sysstdoutr   rA   r'   r   rD   rD      s    3<  $8 88 8 Y%C#C#	x$h/?&@@	AC# &C#J7 7S 7S 76 6HSM 6c 6
5c 
5c 
5 zz r'   rD   rE   specargtypec                    t         j                  j                  j                  |d      }|st	        j
                  d|       	 |j                  | ||      S # t        $ r$}t	        j
                  t        |            |d}~ww xY w)zA
    Convert a string to a argument to the appropriate type.
    NzUnsupported argument type: )	r   r    r!   r"   r	   r   r   r   r=   )rE   r   r   r   r   s        r   rg   rg   0  s{     	$$(($7A%%(CG9&MNN5www.. 5%%c!f-145s   A 	B"BBr1   c                       fd}|S )Nc                      t        j                          fd       }xs  j                  j                  dd      |j                  d<   |S )Nc                  .    t        | |        | i |S r*   )r   )r   r   functions     r   wrapperz+command.<locals>.decorator.<locals>.wrapper?  s     48T,V,,r'   r   rJ   r   )r   wrapsr   replace__dict__)r   r   r1   s   ` r   	decoratorzcommand.<locals>.decorator>  sN    		"	- 
#	- ,0+V83D3D3L3LSRU3V(r'   rA   )r1   r   s   ` r   commandr   =  s     r'   c                 X     dt         j                  dt         j                  f fd}|S )z
    Set the type of a command argument at runtime. This is useful for more
    specific types such as mitmproxy.types.Choice, which we cannot annotate
    directly as mypy does not like that.
    r   r   c                 F    | j                   v sJ | j                   <   | S r*   )r>   )r   r1   r2   s    r   r   zargument.<locals>.decoratorQ  s,    q((((("&$r'   )r    FunctionType)r1   r2   r   s   `` r   argumentr   J  s*    U'' E,>,> 
 r'   r*   )"rK   r   r   r   r   rN   r    collections.abcr   r   r   typingr   r   	pyparsingmitmproxy.typesr   r   r	   mitmproxy.command_lexerr
   r   r   r2   r=   r&   r.   r0   rC   rz   rD   rg   r   r   rA   r'   r   <module>r      s       
   $ $ $     #   +SH SHSM S4 SD S  c c 	z 	] ]@* F FR
5n 
5C 
5$ 
53 
5
#* 
r'   