
    gi&5                     <   d Z 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 ddl	m
Z
 ddlmZmZ ddlmZ  e
d      Zej#                  ej%                               Zg d	Z G d
 dej*                        Z G d dej,                        Z G d dej.                        ZeZy)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PyGIDeprecationWarning)GErrorGLib)	r   r   Optionr   r   OptionGroupOptionParserr   make_optionc                       e Zd ZdZg ej
                  j                  dZg ej
                  j                  dddZdej                  z   Z
d Zd Zd	 Zy
)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                 f   t        j                  dt        d       t        j                  j
                  | g|i | | j                  st        d      t        | j                        t        | j                        k  rt        d      | j                  st        d| j                  d         y )NzZgi.repository.GLib.option.Option is deprecated, use gi.repository.GLib.OptionEntry instead   
stacklevelz!%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   )warningswarnr   optparser   __init__
_long_opts
ValueErrorlen_short_optshelpselfargskwargss      ,/usr/lib/python3/dist-packages/gi/_option.pyr   zOption.__init___   s    h"	

 	  777@AAt#d&6&6"77M  yy79KLL     c                    | j                   |v r%| j                  j                  | j                          t        j                  j                  | |       t        | j                        t        | j                        kD  rt        d      y )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_stringq   si    >>T!OO""4>>2''d3t 3t#77U  8r*   c              #   $  K   d}| j                   r|t        j                  j                  z  }| j                  r|t        j                  j
                  z  }| j                         r*| j                  r;|t        j                  j                  z  }n|t        j                  j                  z  }| j                  dk(  r|t        j                  j                  z  }t        | j                  | j                        D ]K  \  }}|d   }t        |t               s|j#                  d      }|dd  ||| j$                  | j&                  f M | j                  t)        | j                        d  D ]"  }|dd  d|| j$                  | j&                  f $ y w)Nr   r   r   zutf-8r       )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_goptionentriesz   sZ    ;;T%%,,,E<<T%%---E  ))666T%%,,,E99
"T%%...E%($:J:J%K 	O!Iz$Q-Kk51)009QR=+udiiNN		O T-=-=)>)@A 	IIQR=%		4<<HH	Is   FFN)__name__
__module____qualname____doc__r   r   TYPESATTRSr   OPTION_REMAININGr,   r   r.   rC    r*   r)   r   r   =   sf    6 1hoo##0Z0EIhoo##IXIyI.IEt,,,IM$Ir*   r   c                   :    e Zd ZdZ	 	 	 	 ddZd Zd Zd	dZd Zy)
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                  dt        d       t        j                  j                  | t        d|       || _        d | _        || _	        |r|| _
        d | _        || _        |r|D ]  }| j                  |        y y )Nzagi.repository.GLib.option.OptionGroup is deprecated, use gi.repository.GLib.OptionContext insteadr   r   error)r   r   r   r   OptionContainerr   r   nameparserhelp_descriptiondefaultsvaluestranslation_domain
add_option)r&   rP   descriptionrR   option_listrS   rU   options           r)   r   zOptionGroup.__init__   s     	o"	

 	  ))$M	 0$DM"4% ('( r*   c                 2    g | _         | j                          y N)rX   _create_option_mappings)r&   s    r)   _create_option_listzOptionGroup._create_option_list   s    $$&r*   c                 V     fd}t        j                   j                   j                   j                  |      } j
                  r|j                   j
                         g } j                  D ]!  }|j                  |j                                # |j                  |       |S )Nc                    | j                  d      rj                  |    }nj                  |    }	 |j                  | |j                         y # t
        $ rh t        j                         d   }t        t        |            }t        |_        t        j                  j                  |_        t        |      |_        |w xY w)Nr   r   )
startswith	_long_opt
_short_optprocessrT   r   sysexc_infor   strOPTION_CONTEXT_ERROR_QUARKdomainr   r   	BAD_VALUEcodemessage)option_nameoption_valuegroupoptrN   gerrorrQ   r&   s         r)   callbackz.OptionGroup._to_goptiongroup.<locals>.callback   s    %%d+nn[1ook2Kt{{FK# q)E
+ :"..88!$Us   A A1C)r
   r   rP   rW   rR   rU   set_translation_domainrX   extendrC   add_entries)r&   rQ   rq   rn   entriesrY   s   ``    r)   _to_goptiongroupzOptionGroup._to_goptiongroup   s    	  IIt'')>)>
 ""(()@)@A&& 	8FNN64467	8 	'"r*   c                 D    | j                          | j                  |      S )zReturns the corresponding GOptionGroup object.

        Can be used as parameter for gnome_program_init(), gtk_init().
        )set_values_to_defaultsrv   )r&   rQ   s     r)   get_option_groupzOptionGroup.get_option_group   s!    
 	##%$$V,,r*   c                 L   | j                   D ]q  }| j                  j                  |j                        }t	        |t
              s9|j                         }|j                  ||      | j                  |j                  <   s t        j                  | j                        | _
        y r[   )rX   rS   getdestr;   rf   get_opt_stringcheck_valuer   ValuesrT   )r&   rY   defaultopt_strs       r)   rx   z"OptionGroup.set_values_to_defaults   s~    && 	RFmm''4G'3' //1-3-?-?-Qfkk*		R
 oodmm4r*   ) NNNr[   )	rD   rE   rF   rG   r   r]   rv   ry   rx   rK   r*   r)   r   r      s.    > (:'>-5r*   r   c                   <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d
d	Z
y)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                     t        j                  dt        d       d|vr	t        |d<   |j	                  dd      | _        |j	                  dd      | _        t        j                  j                  | g|d	di| y )
Nzbgi.repository.GLib.option.OptionParser is deprecated, use gi.repository.GLib.OptionContext insteadr   r   option_classhelp_enabledTignore_unknown_optionsFadd_help_option)
r   r   r   r   popr   r   r   r   r   r%   s      r)   r   zOptionParser.__init__  su    p"	

 '%+F>""JJ~t<&,jj1I5&Q#&&tTTTUTVTr*   c                 p    |d| _         y |j                  d      r|t        d      d  | _         y || _         y )Nr   z%prog)usager`   r"   )r&   r   s     r)   	set_usagezOptionParser.set_usage&  s5    =DJg&s7|~.DJDJr*   c                      j                   r j                  dz    j                   z   }n j                  }t        j                  |      }|j	                   j
                         |j                   j                          j                  D ]A  }t        |t        j                        r|}n|j                         }|j                  |       C  fd}t        j                  d d d |      }g } j                  D ]!  }	|j                  |	j                                # |j!                  |       |j#                  |       |S )Nz - c                     | j                  d      rj                  |    }nj                  |    }|j                  | |       y )Nr   )r`   ra   rb   rc   )rl   rm   rn   ro   r&   rT   s       r)   rq   z1OptionParser._to_goptioncontext.<locals>.callback>  s?    %%d+nn[1ook2KK\64@r*   )rW   r   r
   OptionContextset_help_enabledr   set_ignore_unknown_optionsr   option_groupsr;   r   ry   	add_grouprX   rs   rC   rt   set_main_group)
r&   rT   parameter_stringcontextoption_groupg_grouprq   
main_groupmain_entriesrY   s
   ``        r)   _to_goptioncontextzOptionParser._to_goptioncontext.  s   #zzE1D4D4DD#zz##$45  !2!23**4+F+FG .. 	'L,8&&77=g&	'	A __T4x@
&& 	=F 9 9 ;<	=|,z*r*   c                    t        |d   t              r.t        j                  j	                  | t        | g|i |       y t        |      dk(  r|st        |d   t
              r5|d   j                  s
| |d   _        |d   j                  | urt        d      t        |d   t        j
                        r| j                  j                  |d          y t        j                  j                  | g|i | y )Nr   r   z"invalid OptionGroup (wrong parser))r;   rf   r   r   add_option_groupr   r"   rQ   r!   r
   r   r-   r%   s      r)   r   zOptionParser.add_option_groupN  s    d1gs#!!22k$888 t9>&$q';/Aw~~%)DGN7>>-$%IJJ$q'3??3""))$q'2..tEdEfEr*   c                     | j                   d d  }| j                  D ]8  }t        |t        j                        s|j                  |j                          : |S r[   )rX   r   r;   r   r   rs   )r&   optionsrn   s      r)   _get_all_optionszOptionParser._get_all_options_  sP    ""1%'' 	2E%!5!56u001	2 r*   c                 |    | j                  |      }|j                  t        j                  d   g|      dd  |d d  y )Nr   r   )r   parserd   argv)r&   largsrargsrT   r   s        r)   _process_argszOptionParser._process_argsf  s=    ))&1
 ==#((1+!6!67;ar*   Nc                    	 t         j                  j                  | ||      \  }}| j$                  D ]@  }|j&                  j(                  j+                         D ]  \  }}|j-                  ||        B ||fS # t        $ r t	        j
                         d   }|j                  t        k7  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)Nr   )r   r   
parse_argsr   rd   re   rh   rg   rj   r   r   ri   r   rk   UNKNOWN_OPTIONr   FAILEDr   r   rT   __dict__itemsensure_value)r&   r'   rT   r   rN   rn   keyvalues           r)   r   zOptionParser.parse_argsn  s'   	$11<<T4PMGT '' 	1E#ll3399; 1
U$$S%01	1 }!  
	LLN1%E||99zzT--777&u}}55zzT--<<<$U]]33zzT--444#EMM22
	s   $A9 9C*E#)NN)rD   rE   rF   rG   r   r   r   r   r   r   r   rK   r*   r)   r   r     s-    ,
U@F"<r*   r   )rG   rd   r   r   r   r   r   r   r   moduler	   gir
   r   	gi._errorr   r   quark_to_stringoption_error_quarkrg   __all__r   r   r   r   rK   r*   r)   <module>r      s   &     - * '!11$2I2I2KL 
VIX__ VIrj5(&& j5Z~8(( ~B r*   