
    @OOf                        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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  G d
 de      Zh dZg dZ G d d      Z G d d      Zd d d d dZddhZ G d d      Zy)    N)defaultdict)Sequence)cache)command)ctx)
exceptions)commandexecutor)signalsc                       e Zd Zy)KeyBindingErrorN)__name__
__module____qualname__     _/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/mitmproxy/tools/console/keymap.pyr   r      s    r   r   >   helpglobalchooseroptionscommandseventlogflowlistflowview	commonkey
dataviewer
grideditorkeybindings)
m_startm_endm_nextm_selectupdownpage_up	page_downleftrightc                   *    e Zd Zd Zd ZdefdZd Zy)Bindingc                 P    ||t        |      c| _        | _        | _        || _        y N)sortedkeyr   contextsr   )selfr.   r   r/   r   s        r   __init__zBinding.__init__4   s$    03WfX>N-$,	r   c                 :    | j                   j                  dd      S )zo
        Translate the key spec from a convenient user specification to one
        Urwid understands.
        space r.   replacer0   s    r   keyspeczBinding.keyspec8   s    
 xx--r   returnc                 z    | j                   j                  dd      j                  dd      j                  dd      S )Nenteru   ⏎r(   u   →r3   u   ␣r5   r7   s    r   	key_shortzBinding.key_short?   s6    HHWe,44WeDLLWV[\	
r   c                 R    | j                   dj                  | j                        z   S )N,)r.   joinr/   r7   s    r   sortkeyzBinding.sortkeyD   s    xx#((4==111r   N)r   r   r   r1   r8   strr<   r@   r   r   r   r*   r*   3   s    .
3 

2r   r*   c            	           e Zd Zd Zd ZddZddededee   ddfd	Zdedee   ddfd
Z	de
ddfdZde
ddfdZdedede
dz  fdZedede
dz  fd       Zdedee
   fdZdedededz  fdZdedededz  fdZy)Keymapc                 n    t        j                  |      | _        t        t              | _        g | _        y r,   )r	   CommandExecutorexecutorr   dictkeysbindingsr0   masters     r   r1   zKeymap.__init__I   s'    '77?3>t3D	r   c                 X    |st        d      |D ]  }|t        vst        d|z         y )Nz"Must specify at least one context.zUnsupported context: %s)
ValueErrorContexts)r0   r/   cs      r   _check_contextszKeymap._check_contextsN   s;    ABB 	@A  !:Q!>??	@r   r9   Nc                 t    t         j                  j                          | j                  j	                          y r,   )r
   keybindings_changesendbinding_for_helpcache_clearr7   s    r   
_on_changezKeymap._on_changeU   s&    ""'')))+r   r.   r   r/   c           	         | j                  |       | j                  D ]  }|j                  |k(  s|j                  j	                          |j                         k(  s@t        t        t        |j                  |z                     |_        |r||_	        | j                  |        nN | j                  ||       t        ||||      }| j                  j                  |       | j                  |       | j                          y)z+
        Add a key to the key map.
        r.   r   r/   r   N)rP   rI   r.   r   stripr-   listsetr/   r   bindremover*   appendrV   )r0   r.   r   r/   r   bs         r   addz
Keymap.addY   s     	X& 	Auu|		 1]W]]_ D#DQZZ(-B)C$DE
!AF		!	 KKX&C8$OAMM  #IIaLr   c                 f   | j                  |       |D ]  }| j                  ||      }|s| j                  |       |j                  D cg c]
  }||k7  s	| c}|_        |j                  s[| j                  j                  |       | j                  |        | j                          yc c}w )z0
        Remove a key from the key map.
        N)rP   getunbindr/   rI   r^   r\   rV   )r0   r.   r/   rO   r_   xs         r   r]   zKeymap.removem   s     	X& 	!AC AA)*>AqAva>
::MM((+IIaL	! 		 ?s   
B.B.bindingc                 f    |j                   D ]"  }|| j                  |   |j                         <   $ y r,   )r/   rH   r8   )r0   re   rO   s      r   r\   zKeymap.bind|   s0    !! 	6A.5DIIaL*+	6r   c                     |j                   D ]E  }| j                  |   |j                         = | j                  D cg c]
  }||k7  s	| c}| _        G | j	                          yc c}w )z@
        Unbind also removes the binding from the list.
        N)r/   rH   r8   rI   rV   )r0   re   rO   r_   s       r   rc   zKeymap.unbind   s`     !! 	GA		!W__./(,F1gQFDM	G 	 Gs   
A&A&contextc                 ^    || j                   v r| j                   |   j                  |d       S y r,   )rH   rb   )r0   rh   r.   s      r   rb   z
Keymap.get   s-    dii99W%))#t44r   r   c                 L    | j                   D ]  }|j                  |k(  s|c S  y r,   )rI   r   )r0   r   r_   s      r   rT   zKeymap.binding_for_help   s*     	Avv~	 r   c                    | j                   D cg c]  }||j                  v s|dk(  s| }}|D cg c]+  }t        |j                  j	                               dk(  s*|- }}|D cg c]+  }t        |j                  j	                               dk7  s*|- }}|j                  d        |j                  d        ||z   S c c}w c c}w c c}w )Nall   c                 "    | j                         S r,   r@   rd   s    r   <lambda>zKeymap.list.<locals>.<lambda>   s    !))+ r   )r.   c                 "    | j                         S r,   ro   rp   s    r   rq   zKeymap.list.<locals>.<lambda>   s     r   )rI   r/   lenr.   splitsort)r0   rh   rd   r_   singlemultis         r   rZ   zKeymap.list   s    S1AJJ)>'UBRQSS:#aeekkm"4"9!::9qQUU[[]!3q!899-.

,
-~ T:9s!   CC+C
C
(+CCc                     | j                  ||      xs | j                  d|      }|r| j                  |j                         y|S )zF
        Returns the key if it has not been handled, or None.
        r   Nrb   rF   r   r0   rh   r.   r_   s       r   handlezKeymap.handle   s?     HHWc"=dhhx&=MM!))$
r   c                 f    | j                  ||      }|r| j                  |j                         y|S )zx
        Like handle, but ignores global bindings. Returns the key if it has
        not been handled, or None.
        Nry   rz   s       r   handle_onlyzKeymap.handle_only   s/    
 HHWc"MM!))$
r   )r9   N) )r   r   r   r1   rP   rV   rA   r   r`   r]   r*   r\   rc   rb   r   rT   rZ   r{   r}   r   r   r   rC   rC   H   s   
@,s S HSM t (# # 4 6G 6 6g $ 3 S Wt^ 
 S Wt^  C HW$5 c  d
 	3 	S 	S4Z 	r   rC   c                 "    t        | t              S r,   
isinstancerA   rp   s    r   rq   rq          Z3' r   c                 "    t        | t              S r,   r   rp   s    r   rq   rq      r   r   c                 l    t        | t              xr | D cg c]  }t        |t               c}S c c}w r,   )r   rZ   rA   )rd   vs     r   rq   rq      s'    Z4(L!-LQjC.@-L -Ls   1c                 "    t        | t              S r,   r   rp   s    r   rq   rq      s    jC( r   )r.   cmdr   r   r.   r   c                       e Zd ZdZd Z ej
                  d      dej                  j                  ddfd       Z	d Z
d	 Zd
 Zy)KeymapConfigz	keys.yamlc                     || _         y r,   )rK   rJ   s     r   r1   zKeymapConfig.__init__   s	    r   zconsole.keymap.loadpathr9   Nc                     	 | j                  | j                  j                  |       y # t        t        f$ r}t        j                  d|z        |d }~ww xY w)Nz Could not load key bindings - %s)	load_pathrK   keymapOSErrorr   r   CommandError)r0   r   es      r   keymap_load_pathzKeymapConfig.keymap_load_path   sQ    	YNN4;;--t4) 	Y))*Lq*PQWXX	Ys   &) AAAc                    t         j                  j                  t         j                  j                  t        j
                  j                        | j                        }t         j                  j                  |      r(	 | j                  | j                  j                  |       y y # t        $ r}t        j                  |       Y d }~y d }~ww xY wr,   )osr   r?   
expanduserr   r   confdirdefaultFileexistsr   rK   r   r   loggingerror)r0   pr   s      r   runningzKeymapConfig.running   s    GGLL++CKK,?,?@$BRBRS77>>!!t{{1115  # !a  !s    &B( (	C1CCc           
         t         j                  j                  |      rt         j                  j                  |      rt	        |d      5 }	 |j                         }	 d d d        	 | j                        }|D ]g  }|j                  ddg      }	 |j                  |       |j                  |d   |       |j                  |d   |d	   ||j                  d
d              i y y y # t        $ r}t        d| d|       d }~ww xY w# 1 sw Y   xY w# t        $ r}t        d| d|       |d }~ww xY w# t        $ r}t        d| d|       |d }~ww xY w)Nutf8)encodingz Encoding error - expected UTF8: z: zError reading r   r   r.   r   r   rX   )r   r   r   isfileopenreadUnicodeDecodeErrorr   parserb   rP   r]   r`   rM   )	r0   kmr   ftxtr   valsr   	user_ctxss	            r   r   zKeymapConfig.load_path   sv   77>>!!2a&) WQW&&(CW
Hzz#  LEE%(4	
L&&y1IIah	2FFeH !%!*UU640	  L "3 * W),LQCrRSQT*UVVWW W # H%qcA3&?@aGH " L)N1#Rs*CD!KLs[   D
C((D AD9(	D1DDD

D	D6D11D69	EEEc           	         	 t         j                  j                  dd      j                  |      }|sg S t        |t              st        d
      |D ]  }|j                         t        j                         z
  }|rt        d|z        t         |j                         z
  }|rt        d|z        |j                         D ]!  }t        |   ||         rt        d|z          |S # t         j                  j                  j
                  $ rk}t        |d      rO|j                  j                         }t        d|j                  j                  dz   d|d|j                        t        d	      d }~ww xY w)NsafeT)typpureproblem_markz!Key binding config error at line rm   z:

zCould not parse key bindings.z3Invalid keybinding config - expected a list of keyszUnknown key attributes: %sz#Missing required key attributes: %szInvalid type for %s)ruamelyamlYAMLloadr   MarkedYAMLErrorhasattrr   get_snippetr   lineproblemr   rZ   rH   keyAttrsrequiredKeyAttrs)	r0   textdatar   snipkunknownmissingattrs	            r   r   zKeymapConfig.parse   se   
	G;;##T#:??ED I$%!"WXX 		HAffh0G%&BW&LMM&1G%&Kg&UVV H~ag.)*?$*FGGH		H 3 {{  00 	Gq.)~~113%~~**Q.aiiA 
 &&EFF	Gs   0C* *'E<A&E77E<)r   r   r   r   r1   r   	mitmproxytypesPathr   r   r   r   r   r   r   r   r      sX    K W__*+YY__%9%9 Yd Y ,Y!L2r   r   )r   r   collectionsr   collections.abcr   	functoolsr   ruamel.yaml.errorr   mitmproxy.typesr   r   r   r   mitmproxy.tools.consoler	   r
   	Exceptionr   rN   navkeysr*   rC   r   r   r   r   r   r   <module>r      s     	 # $        3 +	i 	 2 2*h hX ('L(	 5> J Jr   