
    Xf                         d dl Z d dlZd dlZd dlmZmZmZmZmZ  G d de j	                  Z
 G d de j                  ZdS )    N)ListOptionalSequenceAnyUnionc                        e Zd ZdZd
 fdZ	 ddej        dej        dee	e
e         df         dee	         ddf
d	Z xZS )HelpfulSubparserActionz^Class to either select a unique plugin based on a substring, or identify
    the alternatives.returnNc                 H     t                      j        |i | d | _        d S N)super__init__choices)selfargskwargs	__class__s      M/home/panchajanya/Development/work/volatility3/volatility3/cli/volargparse.pyr   zHelpfulSubparserAction.__init__   s*    $)&)))    parser	namespacevaluesoption_stringc                 |   dg }||D ]}s|||gz  }| j         t          j        k    rt          || j                    fd| j        D             }t          |          dk     r6d dd                    | j                   d}t          j        | |          t          |          dk    r1d d	d                    |           d}t          j        | |          | j        |d
                  }t          |d|d
                    |                    |d           \  }	}t          |	          
                                D ]\  }
}t          ||
|           |r\t          |                              t          j        g            t          |t          j                                      |           d S d S )N c                     g | ]}|v |	S  r   ).0nameparser_names     r   
<listcomp>z3HelpfulSubparserAction.__call__.<locals>.<listcomp>/   s*     
 
 
kT6I6ID6I6I6Ir      zinvalid choice z (choose from , )zplugin z matches multiple plugins (r   plugin)destargparseSUPPRESSsetattr_name_parser_maplenjoinArgumentErrorparse_known_argsvarsitems
setdefault_UNRECOGNIZED_ARGS_ATTRgetattrextend)r   r   r   r   r   arg_stringsvaluematched_parsersmsgsubnamespacekeyr    s              @r   __call__zHelpfulSubparserAction.__call__   s     + +" +"'KKE7*KK 9)))Ity+666
 
 
 
!2
 
 
 !##bKbbtyyI^?_?_bbbC(s333!##aKaaDIIoD^D^aaaC(s333&q'9:	8_Q%7888 %+$;$;K$N$N!k|,,2244 	+ 	+JCIsE**** 	UOO&&x'GLLLIx?@@GGTTTTT	U 	Ur   )r
   Nr   )__name__
__module____qualname____doc__r   r'   ArgumentParser	Namespacer   strr   r   r   r;   __classcell__)r   s   @r   r	   r	      s               (,.U .U'.U %.U c8C=$./	.U
  }.U 
.U .U .U .U .U .U .U .Ur   r	   c                       e Zd ZdefdZdS )HelpfulArgParserr
   c                 8   |                      |          }t          j        ||          }|d t          j        d          t          j        t          j        d          t          j        t          j        d          i}|                    |j                  }|#t          j	        dd|j                  |j        z  }|j
        r | dd                    |j
                   d}t	          j        ||          t          |                    d	                    S )
Nzexpected one argumentzexpected at most one argumentzexpected at least one argumentzexpected %s argumentzexpected %s argumentsz (from: r#   r$   r"   )_get_nargs_patternrematchgettextr'   OPTIONALONE_OR_MOREgetnargsngettextr   r,   r-   r+   group)r   actionarg_strings_patternnargs_patternrI   nargs_errorsr8   s          r   _match_argumentz HelpfulArgParser._match_argumentM   s   //77(;<< =go&=>>!7?3R#S#S$go6V&W&WL
 ""6<00C{$.0G  l#  ~ CBBdii&?&?BBB(555 5;;q>>"""r   N)r<   r=   r>   intrU   r   r   r   rE   rE   L   s/        #c # # # # # #r   rE   )r'   rJ   rH   typingr   r   r   r   r   _SubParsersActionr	   r@   rE   r   r   r   <module>rY      s   
   				 7 7 7 7 7 7 7 7 7 7 7 7 7 77U 7U 7U 7U 7UX7 7U 7U 7Ut# # # # #x. # # # # #r   