
    c                     h    d Z dZddlmZ ddlZddlZ eded        G d d	ej                        Zy)
a  Extend OptionParser with commands.

Example:

>>> parser = OptionParser()
>>> parser.usage = '%prog COMMAND [options] <arg> ...'
>>> parser.add_command('build', 'mymod.build')
>>> parser.add_command('clean', run_clean, add_opt_clean)
>>> run, options, args = parser.parse_command(sys.argv[1:])
>>> return run(options, args[1:])

With mymod.build that defines two functions run and add_options
zrestructuredtext en    )warnNz>lgc.optparser module is deprecated, use lgc.clcommands instead   )
stacklevelc                   &    e Zd Zd ZddZd Zd Zy)OptionParserc                 v    t        j                  j                  | g|i | i | _        d\  | _        | _        y )N)r      )optparser   __init__	_commandsmin_argsmax_args)selfargskwargss      :/usr/lib/python3/dist-packages/logilab/common/optparser.pyr   zOptionParser.__init__/   s5    &&t=d=f='+$t}    c                 t    t        |t              st        |t              sJ d       ||f| j                  |<   y)z]name of the command, name of module or tuple of functions
        (run, add_options)
        z<mod_or_funcs has to be a module name or a tuple of functionsN)
isinstancestrtupler   )r   namemod_or_funcshelps       r   add_commandzOptionParser.add_command4   sC     ,,
%1
 	JI	J 
 !-d3tr   c                     t         j                  j                  |        t        d       | j                  j                         D ]  \  }\  }}t        |dd|         y )Nz

commands:z 10z - )r
   r   
print_helpprintr   items)r   cmdname_r   s       r   print_main_helpzOptionParser.print_main_help=   sX    ((.m"&.."6"6"8 	-GYaWSMTF+,	-r   c                    t        |      dk(  r%| j                          t        j                  d       |d   }|dd  }|| j                  vrq|dv r&| j                          t        j                  d       n6| j
                  *|dk(  r%| j                          t        j                  d       | j                  d       | j                   d| | _        | j                  |   \  }}|| _	        t        |t              rt        d|z         n|\  }} |        | j                  |      \  }}| j                  t        |      cxk  r| j                  k  sn | j                  d       ||fS )	Nr   r	   )z-hz--helpz	--versionzunknown command zfrom %s import run, add_optionszincorrect number of arguments)lenr"   sysexitr   versionprint_versionerrorprogdescriptionr   r   exec
parse_argsr   r   )r   r   cmdmod_or_fr   runadd_optionsoptionss           r   parse_commandzOptionParser.parse_commandC   s8   t9>  "HHQK1gABxdnn$&&$$&)c[.@""$JJ()yyk3%(	,$h$2X=>'CD//$/$T;dmm;JJ67GT!!r   N) )__name__
__module____qualname__r   r   r"   r4    r   r   r   r   .   s    ,
4-"r   r   )__doc____docformat__warningsr   r&   r
   DeprecationWarningr   r9   r   r   <module>r>      s=   $ &  
  D/"8(( /"r   