
    :)di#                     6   d dl mZ d dlZd dlmZmZmZ d dlm	Z
 d dlmZ d dlmZmZmZmZmZ dej        _        dd	ed
ded
giej        _         G d de          Z G d dej                  Z G d dej        ej                  Z G d de
          Z	dS )    )AnyN)OptionParserParsingState_unpack_args)Group)log)DEPRECATED_COMMANDSinit_commandsSUPPORTED_BURN_COMMANDSSUPPORTED_READ_COMMANDSSUPPORTED_COMMANDST*zBurn commands)namecommandszRead commandsc                   2    e Zd ZdZdeddfdZdeddfdZdS )ChainParserz
    This is a modified version of the OptionParser class from click.parser.
    It allows for the processing of arguments and options in interspersed order
    together with chaining commands.
    statereturnNc                    |j         r|j                             d          }t          |          }|dk    rd S |                    dd          t          v r|j                            |           d S |d d         | j        v r|dk    r|                     ||           n?| j	        r|j                            |           n|j         
                    d|           d S |j         d S d S )Nr   --_-   )rargspoplenreplacer   largsappend_opt_prefixes_process_optsallow_interspersed_argsinsert)selfr   argarglens       X/var/www/menimich/repos/protonApp/venv/lib/python3.11/site-packages/espefuse/cli_util.py_process_args_for_optionsz%ChainParser._process_args_for_options+   s   k 	+//!$$CXXF d{{S#&&*<<<""3'''RaRD...6A::""3....- ""3''''""1c***# k 	 	 	 	 	    c                    t          |j        |j        z   d | j        D                       \  }}t	          |          dk    r6t          | j                  D ]!\  }}|                    ||         |           "||_        g |_        d S )Nc                     g | ]	}|j         
S  )nargs).0xs     r'   
<listcomp>z6ChainParser._process_args_for_args.<locals>.<listcomp>A   s    'D'D'DA'D'D'Dr)   r   )r   r   r   _argsr   	enumerateprocess)r$   r   pargsargsidxr%   s         r'   _process_args_for_argsz"ChainParser._process_args_for_args?   s    "K%+%'D'D'D'D'D
 
t
 u::>>%dj11 / /SE#J....r)   )__name__
__module____qualname____doc__r   r(   r7   r,   r)   r'   r   r   $   sb         |     (L T      r)   r   c                   *    e Zd Zedefd            ZdS )EfuseContextr   c                     |                      t                     | j                            dd          }|st	          j        d           |S )Nshow_sensitive_infoFz9Sensitive data will be hidden (see --show-sensitive-info))ensure_objectdictobjgetr   print)r$   values     r'   r?   z EfuseContext.show_sensitive_infoN   sK    4   hll#8%@@ 	SIQRRRr)   N)r8   r9   r:   propertyboolr?   r,   r)   r'   r=   r=   M   s9        T    X  r)   r=   c                        e Zd ZeZ fdZdedefdZde	j
        def fdZde	j
        dee         f fdZde	j
        defd	Z xZS )
ChainingCommandc                 :     t                      j        |i | d S N)super__init__)r$   r5   kwargs	__class__s      r'   rM   zChainingCommand.__init__Z   s%    $)&)))))r)   r%   r   c                 V    |                     d          p|                     d          S )Nr   r   )
startswith)r$   r%   s     r'   
_is_optionzChainingCommand._is_option]   s%    ~~d##:s~~c':'::r)   ctxc                     t          j        d| j         d           t                                          |          S )Nz

=== Run "z" command ===)r   rD   r   rL   invoke)r$   rS   rO   s     r'   rU   zChainingCommand.invoke`   s7    	8	888999ww~~c"""r)   r5   c           	      (   d }t          |          D ]\  }}|                    dd          t          v s|                     |          r|dk    rt	          d | j        D                       }| j        D ]n}|j        dk    r|                    |          |z
  dz   |_        |}|j        dk    r3|j        r,|j	        s%t          j        d| j         d|j         d	            nt                                          ||          }|d|_        |S )
Nr   r   r   c              3   J   K   | ]}t          |t          j                  V  d S rK   )
isinstanceclickArgument)r.   params     r'   	<genexpr>z-ChainingCommand.parse_args.<locals>.<genexpr>m   s?       & &:?Juen55& & & & & &r)   r   z	Command `z` requires the `z` argument.)r2   r   r   rR   sumparamsr-   indexrequiredresilient_parsingrY   
UsageErrorr   rL   
parse_args)
r$   rS   r5   param_changedr6   r%   arguments_countr[   retrO   s
            r'   rd   zChainingCommand.parse_argsd   sa    !$ 	 	HC{{3$$(:::$$ ;),q"% & &CG;& & & # # "[  E{b((  #'**S//O"Ca"GEK$)Mq((!N ) # 5 ) $.(	 ( (5: ( ( (   gg  d++$EK
r)   c                     t          |          }d|_        |                     |          D ]}|                    ||           |S )z6Creates the underlying option parser for this command.T)r   r"   
get_paramsadd_to_parser)r$   rS   parserr[   s       r'   make_parserzChainingCommand.make_parser   sP    S!!)-&__S)) 	- 	-E,,,,r)   )r8   r9   r:   r=   context_classrM   strrG   rR   rY   Contextr   rU   listrd   r   rl   __classcell__rO   s   @r'   rI   rI   W   s         M* * * * *;c ;d ; ; ; ;#%- #C # # # # # #&em &49 & & & & & &Pu}         r)   rI   c            	       ,    e Zd ZddiZeZeZede	e
         dee	e	e
                  e	e
         f         fd            Zede	e
         de	e	e
                  de	e	e
                  fd            Zd	ej        de	e
         f fd
Zd	ej        de
f fdZ xZS )r   z--file_namez--file-namer5   r   c                 
   g }g }g }| D ]b}|                     dd          t          v r.|                    |           |                    |           |g}M|                    |           c|                    |           ||fS )ax  
        This function splits the args list into groups,
        where each item is a cmd with all its args.

        Example:
        all_args:
        ['burn-key-digest', 'secure_images/ecdsa256_secure_boot_signing_key_v2.pem',
         'burn-key', 'BLOCK_KEY0', 'images/efuse/128bit_key',
         'XTS_AES_128_KEY_DERIVED_FROM_128_EFUSE_BITS']

        used_cmds: ['burn-key-digest', 'burn-key']
        groups:
        [['burn-key-digest', 'secure_images/ecdsa256_secure_boot_signing_key_v2.pem'],
         ['burn-key', 'BLOCK_KEY0', 'images/efuse/128bit_key',
          'XTS_AES_128_KEY_DERIVED_FROM_128_EFUSE_BITS']]
        r   r   )r   r   r   )r5   groups
args_group	used_cmdsr%   s        r'   _split_to_groupszGroup._split_to_groups   s    $ #% "
!	 	' 	'C{{3$$(:::j)))  %%%!U

!!#&&&&j!!!y  r)   rw   ru   c                     t          d | D                       dk    r]t          d | D                       dk    r@g }|D ]&}|d         t          v r|                    |           '|                    |           |S )Nc              3   (   K   | ]}|t           v V  d S rK   )r   r.   cmds     r'   r\   z-Group.repeat_read_commands.<locals>.<genexpr>   s(      DD3..DDDDDDr)   r   c              3   (   K   | ]}|t           v V  d S rK   )r   r{   s     r'   r\   z-Group.repeat_read_commands.<locals>.<genexpr>   s(      HHsC22HHHHHHr)   )r^   r   r   extend)rw   ru   read_commandsgroups       r'   repeat_read_commandszGroup.repeat_read_commands   s    
 DD)DDDDDqHHHHiHHHHH1LL M 0 08666!((///MM-(((r)   rS   c                    |                     t                     t          fd|j        D                       |j        d<   dv r                    d          ndv r                    d          nd}|dk    r!|dz   t                    k     r|dz            nd|j        d<   |                               |                               \  }}|j	        r3t          d |j        d         d	
          }|                    |            nNt          |          dk    r;t          j        |                     |                     |                                 |                     ||          }d |D             ||j        d<   |j        d<   t#          t$          j        |                               |          S )Nc              3       K   | ]}|v V  	d S rK   r,   )r.   help_argr5   s     r'   r\   z#Group.parse_args.<locals>.<genexpr>   s(       X XhT!1 X X X X X Xr)   is_helpz--chipz-cr]   r   autochipTportr   skip_connectr   c                     g | ]	}|D ]}|
S r,   r,   )r.   r   r%   s      r'   r0   z$Group.parse_args.<locals>.<listcomp>   s%    ===u======r)   rw   r5   )r@   rA   anyhelp_option_namesrB   r`   r   _replace_deprecated_argsrx   rb   r
   add_cli_commandsr   rD   get_helpexitr   rL   rY   	RichGrouprd   )r$   rS   r5   r6   
cmd_groupsrw   r   rO   s     `    r'   rd   zGroup.parse_args   s   $  X X X X#BW X X XXX	 4 JJx   &*dll$**T""" 	
 ,/"99q3t999L9L$sQw--RX ,,T22 $ 5 5d ; ;
I   	$$SWV_SWXXXH%%d++++^^q  IdmmC(()))HHJJJ..y*EE
=====(U_d++66sDAAAr)   c                 T   t          |                     |                    t          t                    z
  sP|j        d         }|dk    rt	          j        d           d}t          d |d          }|                    |            t                      	                    |          S )Nr   r   zoChip not specified, showing commands for ESP32 by default. Specify the --chip option to get chip-specific help.esp32Tr   )
setlist_commandsr	   rB   r   noter
   r   rL   r   )r$   rS   r   r   rO   s       r'   r   zGroup.get_help   s     D&&s++,,s3F/G/GG 		,76?Dv~~K   $$TMMMH%%d+++ww$$$r)   )r8   r9   r:   DEPRECATED_OPTIONSrI   command_classr=   rm   staticmethodrp   rn   tuplerx   r   rY   ro   rd   r   rq   rr   s   @r'   r   r      s2       } $M M!tCy !U4S	?DI3M-N ! ! ! \!< 9&*49o	d3i   \Bem B49 B B B B B B:%EM %c % % % % % % % % % %r)   r   )typingr   
rich_clickrY   click.parserr   r   r   esptool.cli_utilr   EsptoolGroupesptool.loggerr   espefuse.efuse_interfacer	   r
   r   r   r   USE_CLICK_SHORT_HELPCOMMAND_GROUPSr   RichContextr=   RichCommandCommandrI   r,   r)   r'   <module>r      s  
           A A A A A A A A A A 2 2 2 2 2 2                    )-  %#/	
 	

 $/	
 	
	
#  & & & & &, & & &R    5$   ; ; ; ; ;e' ; ; ;|a% a% a% a% a%L a% a% a% a% a%r)   