
    f5                     <   S r SSKrSSKrSSKrSSKJrJrJrJrJr  SSK	J
r
  SSKJrJr  SSKJr  \
" S5      r\R#                  \R%                  5       5      r/ S	Qr " S
 S\R*                  5      r " S S\R,                  5      r " S S\R.                  5      r\rg)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   r   r   r   OptionOptionGroupOptionParsermake_optionc                       \ rS rSrSr\R                  R                  S-   r\R                  R                  / SQ-   rS\	R                  -   rS rS rS rS	rg
)r   8   am  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                 |   [         R                  " S[        5        [        R                  R
                  " U /UQ70 UD6  U R                  (       d  [        S5      e[        U R                  5      [        U R                  5      :  a  [        S5      eU R                  (       d  [        SU R                  S   5      eg )NzZgi.repository.GLib.option.Option is deprecated, use gi.repository.GLib.OptionEntry insteadz!%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   Option.__init___   s    h"	
 	  777@AAt#d&6&6"77MO O yy79KLL     c                    U R                   U;   a%  U R                  R                  U R                   5        [        R                  R                  X5        [        U R                  5      [        U R                  5      :  a  [        S5      eg )NzCgoption.Option needs more long option names than short option names)		REMAININGr   appendr   r   _set_opt_stringr    r!   r   )r$   optss     r'   r-   Option._set_opt_stringo   si    >>T!OO""4>>2''3t 3t#77 8 9 9 8r)   c              #   Z  #    SnU R                   (       a  U[        R                  R                  -  nU R                  (       a  U[        R                  R
                  -  nU R                  5       (       a/  U R                  (       a  U[        R                  R                  -  nOU[        R                  R                  -  nU R                  S:X  a  U[        R                  R                  -  n[        U R                  U R                  5       HO  u  p#US   n[        U[         5      (       d  UR#                  S5      nUSS  XAU R$                  U R&                  4v   MQ     U R                  [)        U R                  5      S   H"  nUSS  SXR$                  U R&                  4v   M$     g 7f)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_goptionentriesOption._to_goptionentriesw   sN    ;;T%%,,,E<<T%%---E  ))666T%%,,,E99
"T%%...E'*4??D<L<L'M#Y$Q-Kk511)009QR=+diiNN	 (N T-=-=)>)?@IQR=%		4<<HH As   F)F+ N)__name__
__module____qualname____firstlineno____doc__r   r   TYPESATTRSr   OPTION_REMAININGr+   r   r-   rD   __static_attributes__rF   r)   r'   r   r   8   s`    4 OO!! % E OO!! % E t,,,IM 9Ir)   r   c                   D    \ rS rSrSr   S
S jrS rS rSS jrS r	S	r
g)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                 $   [         R                  " S[        5        [        R                  R                  U [        SU5        Xl        S U l        X0l	        U(       a  XPl
        S U l        X`l        U(       a  U H  nU R                  U5        M     g g )Nzagi.repository.GLib.option.OptionGroup is deprecated, use gi.repository.GLib.OptionContext insteaderror)r   r   r   r   OptionContainerr   r   nameparserhelp_descriptiondefaultsvaluestranslation_domain
add_option)r$   rU   descriptionrW   option_listrX   rZ   options           r'   r   OptionGroup.__init__   sw     	o"	
 	  ))$M	 0$M"4%' & r)   c                 2    / U l         U R                  5         g N)r]   _create_option_mappings)r$   s    r'   _create_option_listOptionGroup._create_option_list   s    $$&r)   c                 h  ^ ^ UU 4S jn[         R                  " T R                  T R                  T R                  U5      nT R
                  (       a  UR                  T R
                  5        / nT R                   H"  nUR                  UR                  5       5        M$     UR                  U5        U$ )Nc                   > U R                  S5      (       a  TR                  U    nOTR                  U    n UR                  XTR                  T5        g ! [
         ai    [        R                  " 5       S   n[        [        U5      5      n[        Ul        [        R                  R                  Ul        [        U5      Ul        Uef = f)Nr   r   )
startswith	_long_opt
_short_optprocessrY   r   sysexc_infor   strOPTION_CONTEXT_ERROR_QUARKdomainr   r   	BAD_VALUEcodemessage)option_nameoption_valuegroupoptrS   gerrorrV   r$   s         r'   callback.OptionGroup._to_goptiongroup.<locals>.callback   s    %%d++nn[1ook2Kt{{FK# q)E
+ :"..88!$Us   A A3C	)r
   r   rU   r\   rW   rZ   set_translation_domainr]   extendrD   add_entries)r$   rV   rx   ru   entriesr^   s   ``    r'   _to_goptiongroupOptionGroup._to_goptiongroup   s    	  		4+;+; $ 5 5xA""(()@)@A&&FNN64467 ' 	'"r)   c                 D    U R                  5         U R                  U5      $ )zoReturns the corresponding GOptionGroup object.

Can be used as parameter for gnome_program_init(), gtk_init().
)set_values_to_defaultsr~   )r$   rV   s     r'   get_option_groupOptionGroup.get_option_group   s!    
 	##%$$V,,r)   c                 \   U R                    Hw  nU R                  R                  UR                  5      n[	        U[
        5      (       d  M?  UR                  5       nUR                  X25      U R                  UR                  '   My     [        R                  " U R                  5      U l
        g ra   )r]   rX   getdestr<   rm   get_opt_stringcheck_valuer   ValuesrY   )r$   r^   defaultopt_strs       r'   r   "OptionGroup.set_values_to_defaults   s{    &&Fmm''4G'3'' //1-3-?-?.&fkk*	 ' oodmm4r)   )rX   rW   rU   r]   rV   rZ   rY   ) NNNra   )rG   rH   rI   rJ   rK   r   rc   r~   r   r   rO   rF   r)   r'   r   r      s+    4 <>,0$((,'<-5r)   r   c                   F    \ rS rSrSrS rS rS rS rS r	S r
SS
 jrSrg	)r      a  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                     [         R                  " S[        5        SU;  a	  [        US'   UR	                  SS5      U l        UR	                  SS5      U l        [        R                  R                  " U /UQ7SS0UD6  g )Nzbgi.repository.GLib.option.OptionParser is deprecated, use gi.repository.GLib.OptionContext insteadoption_classhelp_enabledTignore_unknown_optionsFadd_help_option)
r   r   r   r   popr   r   r   r   r   r#   s      r'   r   OptionParser.__init__  s    p"	
 '%+F>""JJ~t<&,jj1I16'8#&&t 	8(,	8U 	806	8r)   c                 z    Uc  SU l         g UR                  S5      (       a  U[        S5      S  U l         g Xl         g )Nr   z%prog)usagerg   r    )r$   r   s     r'   	set_usageOptionParser.set_usage  s6    =DJg&&s7|}-DJJr)   c                   ^ ^ T R                   (       a  T R                  S-   T R                   -   nOT R                  n[        R                  " U5      nUR	                  T R
                  5        UR                  T R                  5        T R                   HG  n[        U[        R                  5      (       a  UnOUR                  T 5      nUR                  U5        MI     U U4S jn[        R                  " S S S U5      n/ nT R                   H"  n	UR                  U	R                  5       5        M$     UR!                  U5        UR#                  U5        U$ )Nz - c                    > U R                  S5      (       a  TR                  U    nOTR                  U    nUR                  XTT5        g )Nr   )rg   rh   ri   rj   )rs   rt   ru   rv   r$   rY   s       r'   rx   1OptionParser._to_goptioncontext.<locals>.callback4  s@    %%d++nn[1ook2KK64@r)   )r\   r   r
   OptionContextset_help_enabledr   set_ignore_unknown_optionsr   option_groupsr<   r   r   	add_groupr]   r{   rD   r|   set_main_group)
r$   rY   parameter_stringcontextoption_groupg_grouprx   
main_groupmain_entriesr^   s
   ``        r'   _to_goptioncontextOptionParser._to_goptioncontext$  s   #zzE1D4D4DD#zz##$45  !2!23**4+F+FG ..L,88&&77=g& /	A __T4x@
&&F 9 9 ;< '|,z*r)   c                 *   [        US   [        5      (       a.  [        R                  R	                  U [        U /UQ70 UD65        g [        U5      S:X  a  U(       d  [        US   [
        5      (       a:  US   R                  (       d	  XS   l        US   R                  U La  [        S5      e[        US   [        R
                  5      (       a  U R                  R                  US   5        g [        R                  R                  " U /UQ70 UD6  g )Nr   r   z"invalid OptionGroup (wrong parser))r<   rm   r   r   add_option_groupr   r    rV   r   r
   r   r,   r#   s      r'   r   OptionParser.add_option_groupD  s    d1gs##!!2243>t3Ud3Uf3UWY!^F$q';//Aw~~%)GN7>>-$%IJJ$q'3??33""))$q'2..tEdEfEr)   c                     U R                   S S  nU R                   H?  n[        U[        R                  5      (       d  M$  UR                  UR                   5        MA     U$ ra   )r]   r   r<   r   r   r{   )r$   optionsru   s      r'   _get_all_optionsOptionParser._get_all_optionsT  sN    ""1%''E%!5!566u001 ( r)   c                 ~    U R                  U5      nUR                  [        R                  S   /U-   5      SS  US S & g )Nr   r   )r   parserk   argv)r$   largsrargsrY   r   s        r'   _process_argsOptionParser._process_args[  s<    ))&1
 ==#((1+!67;ar)   Nc                     [         R                  R                  XU5      u  p1U R$                   HA  nUR&                  R(                  R+                  5        H  u  pgUR-                  Xg5        M     MC     X14$ ! [         a    [        R
                  " 5       S   nUR                  [        :w  a  e UR                  [        R                  R                  :X  a  [        UR                  5      eUR                  [        R                  R                  :X  a  [        UR                  5      eUR                  [        R                  R                   :X  a  [#        UR                  5      ee f = f)Nr   )r   r   
parse_argsr   rk   rl   ro   rn   rq   r   r   rp   r   rr   UNKNOWN_OPTIONr   FAILEDr   r   rY   __dict__itemsensure_value)r$   r%   rY   r   rS   ru   keyvalues           r'   r   OptionParser.parse_argsc  s   	$11<<F$MG ''E#ll3399;
$$S0 < ( }#  	LLN1%E||99zzT--777&u}}55t//>>>$U]]33t//666#EMM22	s   "A8 8C0E()r   r   r   )NN)rG   rH   rI   rJ   rK   r   r   r   r   r   r   r   rO   rF   r)   r'   r   r      s,    ,8@F <r)   r   )rK   rk   r   r   r   r   r   r   r   moduler	   gir
   r   	gi._errorr   r   quark_to_stringoption_error_quarkrn   __all__r   r   r   r   rF   r)   r'   <module>r      s   (   ( ( , * '!11$2I2I2KL 
XIX__ XIvb5(&& b5J@8(( @F r)   