
    f_T3                     <   d Z ddlZddlZddlmZmZmZmZmZ ddlm	Z	 ddl
mZ ddlmZ  e	d          Ze                    e                                          Zg d	Z G d
 dej                  Z G d dej                  Z G d dej                  ZeZdS )a,  GOption command line parser

Extends optparse to use the GOptionGroup, GOptionEntry and GOptionContext
objects. So it is possible to use the gtk, gnome_program and gstreamer command
line groups and contexts.

Use this interface instead of the raw wrappers of GOptionContext and
GOptionGroup in glib.
    N)OptParseErrorOptionErrorOptionValueErrorBadOptionErrorOptionConflictError   )get_introspection_module)_gi)GErrorGLib)	r   r   r   r   r   OptionOptionGroupOptionParsermake_optionc                   x    e Zd ZdZej        j        dz   Zej        j        g dz   Zdej	        z   Z
d Zd Zd ZdS )	r   a  Represents a command line option

    To use the extended possibilities of the GOption API Option
    (and make_option) are extended with new types and attributes.

    Types:
        filename   The supplied arguments are read as filename, GOption
                   parses this type in with the GLib filename encoding.

    :ivar optional_arg:
        This does not need a arguement, but it can be supplied.
    :ivar hidden:
        The help list does not show this option
    :ivar in_main:
        This option apears in the main group, this should only
        be used for backwards compatibility.

    Use Option.REMAINING as option name to get all positional arguments.

    .. NOTE::
        Every argument to an option is passed as utf-8 coded string, the only
        exception are options which use the 'filename' type, its arguments
        are passed as strings in the GLib filename encoding.

    For further help, see optparse.Option.
    )filename)hiddenin_mainoptional_arg--c                    t          j        j        | g|R i | | j        st	          d          t          | j                  t          | j                  k     rt	          d          | j        st	          d| j        d                   d S )Nz!%s at least one long option name.z;%s at least more long option names than short option names.z%s needs a help message.r   )optparser   __init__
_long_opts
ValueErrorlen_short_optshelpselfargskwargss      ,/usr/lib/python3/dist-packages/gi/_option.pyr   zOption.__init__^   s     7777777 	B@AAAt#d&6"7"777MO O O y 	M79KLLL	M 	M    c                    | j         |v r| j                            | j                    t          j                            | |           t          | j                  t          | j                  k    rt          d          d S )NzCgoption.Option needs more long option names than short option names)		REMAININGr   appendr   r   _set_opt_stringr   r   r   )r    optss     r#   r(   zOption._set_opt_stringj   s~    >T!!O""4>222''d333t  3t#7#777 8 9 9 9 87r$   c              #     K   d}| j         r|t          j        j        z  }| j        r|t          j        j        z  }|                                 r| j        r|t          j        j        z  }n|t          j        j	        z  }| j
        dk    r|t          j        j        z  }t          | j        | j                  D ]R\  }}|d         }t          |t                     s|                    d          }|dd          ||| j        | j        fV  S| j        t)          | j                  d          D ]}|dd          d|| j        | j        fV  d S )Nr   r   r   zutf-8       )r   r   OptionFlagsHIDDENr   IN_MAINtakes_valuer   OPTIONAL_ARGNO_ARGtypeFILENAMEzipr   r   
isinstancebytesencoder   metavarr   )r    flags	long_name
short_nameshort_bytess        r#   _to_goptionentrieszOption._to_goptionentriesr   sp     ; 	-T%,,E< 	.T%--E 	-  7)66T%,,E9
""T%..E'*4?D<L'M'M 	O 	O#Y
$Q-Kk511 :)0099QRR=+udiNNNNNT-=)>)>)?)?@ 	I 	IIQRR=%	4<HHHHH	I 	Ir$   N)__name__
__module____qualname____doc__r   r   TYPESATTRSr   OPTION_REMAININGr&   r   r(   r>    r$   r#   r   r   7   s         4 O! % E O! % % % E t,,I
M 
M 
M9 9 9I I I I Ir$   r   c                   :    e Zd ZdZ	 	 	 d	dZd Zd Zd
dZd ZdS )r   a  A group of command line options.

    :param str name:
        The groups name, used to create the --help-{name} option
    :param str description:
        Shown as title of the groups help view
    :param str help_description:
        Shown as help to the --help-{name} option
    :param list option_list:
        The options used in this group, must be option.Option()
    :param dict defaults:
        A dicitionary of default values
    :param translation_domain:
           Sets the translation domain for gettext().

    .. NOTE::
        This OptionGroup does not exactly map the optparse.OptionGroup
        interface. There is no parser object to supply, but it is possible
        to set default values and option_lists. Also the default values and
        values are not shared with the OptionParser.

    To pass a OptionGroup into a function which expects a GOptionGroup (e.g.
    gnome_program_init() ). OptionGroup.get_option_group() can be used.

    For further help, see optparse.OptionGroup.
     Nc                     t           j                            | t          d|           || _        d | _        || _        |r|| _        d | _        || _	        |r|D ]}| 
                    |           d S d S )Nerror)r   OptionContainerr   r   nameparserhelp_descriptiondefaultsvaluestranslation_domain
add_option)r    rL   descriptionrN   option_listrO   rQ   options           r#   r   zOptionGroup.__init__   s     	 ))$MMM	 0 	%$DM"4 	(% ( (''''	( 	(( (r$   c                 <    g | _         |                                  d S N)rT   _create_option_mappings)r    s    r#   _create_option_listzOptionGroup._create_option_list   s"    $$&&&&&r$   c                 4     fd}t          j         j         j         j        |          } j        r|                     j                   g } j        D ])}|                    |	                                           *|
                    |           |S )Nc                    |                      d          rj        |          }nj        |          }	 |                    | |j                   d S # t
          $ rn t          j                    d         }t          t          |                    }t          |_        t          j        j        |_        t          |          |_        |w xY w)Nr   r   )
startswith	_long_opt
_short_optprocessrP   r   sysexc_infor   strOPTION_CONTEXT_ERROR_QUARKdomainr   r   	BAD_VALUEcodemessage)option_nameoption_valuegroupoptrJ   gerrorrM   r    s         r#   callbackz.OptionGroup._to_goptiongroup.<locals>.callback   s    %%d++ 3n[1ok2Kt{FKKKKK#   q)E

++ :".8!$Us   A A8C
)r
   r   rL   rS   rN   rQ   set_translation_domainrT   extendr>   add_entries)r    rM   rm   rj   entriesrU   s   ``    r#   _to_goptiongroupzOptionGroup._to_goptiongroup   s    	 	 	 	 	 	  	4+; $ 5xA A" 	B(()@AAA& 	8 	8FNN644667777'"""r$   c                 T    |                                   |                     |          S )z Returns the corresponding GOptionGroup object.

        Can be used as parameter for gnome_program_init(), gtk_init().
        )set_values_to_defaultsrr   )r    rM   s     r#   get_option_groupzOptionGroup.get_option_group   s*    
 	##%%%$$V,,,r$   c                 ,   | j         D ]m}| j                            |j                  }t	          |t
                    r7|                                }|                    ||          | j        |j        <   nt          j	        | j                  | _
        d S rW   )rT   rO   getdestr6   rb   get_opt_stringcheck_valuer   ValuesrP   )r    rU   defaultopt_strs       r#   rt   z"OptionGroup.set_values_to_defaults   s    & 	& 	&Fm''44G'3'' & //11-3-?-?W.& .&fk*odm44r$   )rH   NNNrW   )	r?   r@   rA   rB   r   rY   rr   ru   rt   rF   r$   r#   r   r      s~         4 <>,0$(( ( ( ($' ' '  <- - - -5 5 5 5 5r$   r   c                   >    e Zd ZdZd Zd Zd Zd Zd Zd Z	d
d	Z
dS )r   aH  Command line parser with GOption support.

    :param bool help_enabled:
        The --help, --help-all and --help-{group} options are enabled (default).
    :param bool ignore_unknown_options:
        Do not throw a exception when a option is not knwon, the option
        will be in the result list.

    .. NOTE::
        The OptionParser interface is not the exactly the same as the
        optparse.OptionParser interface. Especially the usage parameter
        is only used to show the metavar of the arguements.

    OptionParser.add_option_group() does not only accept OptionGroup instances
    but also glib.OptionGroup, which is returned by gtk_get_option_group().

    Only glib.option.OptionGroup and glib.option.Option instances should
    be passed as groups and options.

    For further help, see optparse.OptionParser.
    c                     d|vr
t           |d<   |                    dd          | _        |                    dd          | _        t	          j        j        | g|R ddi| d S )Noption_classhelp_enabledTignore_unknown_optionsFadd_help_option)r   popr   r   r   r   r   r   s      r#   r   zOptionParser.__init__  s    ''%+F>""JJ~t<<&,jj1I16'8 '8#&t 	8(,	8 	8 	8U 	806	8 	8 	8 	8 	8r$   c                     |	d| _         d S |                    d          r|t          d          d          | _         d S || _         d S )NrH   z%prog)usager\   r   )r    r   s     r#   	set_usagezOptionParser.set_usage  sM    =DJJJg&& 	s7||}}-DJJJDJJJr$   c                 r     j         r j        dz    j         z   }n j        }t          j        |          }|                     j                   |                     j                    j        D ]I}t          |t          j
                  r|}n|                               }|                    |           J fd}t          j
        d d d |          }g } j        D ])}	|                    |	                                           *|                    |           |                    |           |S )Nz - c                     |                      d          rj        |          }nj        |          }|                    | |           d S )Nr   )r\   r]   r^   r_   )rh   ri   rj   rk   r    rP   s       r#   rm   z1OptionParser._to_goptioncontext.<locals>.callback'  sQ    %%d++ 3n[1ok2KK\64@@@@@r$   )rS   r   r
   OptionContextset_help_enabledr   set_ignore_unknown_optionsr   option_groupsr6   r   ru   	add_grouprT   ro   r>   rp   set_main_group)
r    rP   parameter_stringcontextoption_groupg_grouprm   
main_groupmain_entriesrU   s
   ``        r#   _to_goptioncontextzOptionParser._to_goptioncontext  sg    	*#zE1D4DD#z#$455  !2333**4+FGGG . 	' 	'L,88 >&&77==g&&&&	A 	A 	A 	A 	A 	A _T4x@@
& 	= 	=F 9 9 ; ;<<<<|,,,z***r$   c                 $   t          |d         t                    r0t          j                            | t          | g|R i |           d S t          |          dk    r|st          |d         t
                    r8|d         j        s| |d         _        |d         j        | urt          d          t          |d         t          j                  r"| j
                            |d                    d S t          j        j        | g|R i | d S )Nr   r   z"invalid OptionGroup (wrong parser))r6   rb   r   r   add_option_groupr   r   rM   r   r
   r   r'   r   s      r#   r   zOptionParser.add_option_group7  s   d1gs## 	!2243>t3Ud3U3U3Uf3U3UW W WFYY!^^F^$q';// KAw~ *%)DGN7>--$%IJJJ$q'3?33 "))$q'222.tEdEEEfEEEEEr$   c                     | j         d d          }| j        D ]6}t          |t          j                  r|                    |j                    7|S rW   )rT   r   r6   r   r   ro   )r    optionsrj   s      r#   _get_all_optionszOptionParser._get_all_optionsG  sU    "111%' 	2 	2E%!566 2u0111r$   c                     |                      |          }|                    t          j        d         g|z             dd          |d d <   d S )Nr   r   )r   parser`   argv)r    largsrargsrP   r   s        r#   _process_argszOptionParser._process_argsN  sJ    ))&11
 ==#(1+!677;aaar$   Nc                 d   	 t           j                            | ||          \  }}n# t          $ r t	          j                    d         }|j        t          k    r |j        t          j
        j        k    rt          |j                  |j        t          j
        j        k    rt          |j                  |j        t          j
        j        k    rt#          |j                   w xY w| j        D ]<}|j        j                                        D ]\  }}|                    ||           =||fS )Nr   )r   r   
parse_argsr   r`   ra   rd   rc   rf   r   r   re   r   rg   UNKNOWN_OPTIONr   FAILEDr   r   rP   __dict__itemsensure_value)r    r!   rP   r   rJ   rj   keyvalues           r#   r   zOptionParser.parse_argsV  s6   	$1<<dF$ $MGTT 	 	 	LNN1%E|999zT-777&u}555t/>>>$U]333t/666#EM222	 ' 	1 	1E#l399;; 1 1
U$$S%00001 }s
   $' C C')NN)r?   r@   rA   rB   r   r   r   r   r   r   r   rF   r$   r#   r   r      s         ,8 8 8    @F F F   < < <     r$   r   )rB   r`   r   r   r   r   r   r   moduler	   gir
   	gi._errorr   r   quark_to_stringoption_error_quarkrc   __all__r   r   r   r   rF   r$   r#   <module>r      s  (  


 ( ( ( ( ( ( ( ( ( ( ( ( ( ( , , , , , ,            ''!11$2I2I2K2KLL 
 
 
TI TI TI TI TIX_ TI TI TIn^5 ^5 ^5 ^5 ^5(& ^5 ^5 ^5B| | | | |8( | | |~ r$   