o f_T3@sdZddlZddlZddlmZmZmZmZmZddlm Z ddl m Z ddl m Z e dZeeZgd ZGd d d ejZGd d d ejZGdddejZeZdS)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 OptionErrorOptionValueErrorBadOptionErrorOptionConflictError)get_introspection_module)_gi)GErrorGLib) rrrrrOption OptionGroup OptionParser make_optionc@sNeZdZdZejjdZejjgdZdej Z ddZ ddZ d d Z d S) r aRepresents 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)hiddenin_main optional_arg--cOs^tjj|g|Ri||jstdt|jt|jkr"td|js-td|jddS)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 ValueErrorlen _short_optshelpselfargskwargsr ,/usr/lib/python3/dist-packages/gi/_option.pyr^szOption.__init__cCsF|j|vr |j|jtj||t|jt|jkr!tddS)NzCgoption.Option needs more long option names than short option names) REMAININGrappendrr _set_opt_stringrrr)roptsr r r!r$js zOption._set_opt_stringccsd}|jr |tjjO}|jr|tjjO}|r#|jr"|tjjO}n|tjj O}|j dkr4|tjj O}t |j |jD] \}}|d}t|tsM|d}|dd|||j|jfVq;|j t|jdD]}|ddd||j|jfVqfdS)Nrrrzutf-8)rr OptionFlagsHIDDENrIN_MAIN takes_valuer OPTIONAL_ARGNO_ARGtypeFILENAMEziprr isinstancebytesencodermetavarr)rflags long_name short_name short_bytesr r r!_to_goptionentriesrs*        zOption._to_goptionentriesN)__name__ __module__ __qualname____doc__rr TYPESATTRSr OPTION_REMAININGr"rr$r9r r r r!r 7s   r c@sBeZdZdZ   dddZddZdd Zdd d Zd d ZdS)r aA 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. NcCsZtj|td|||_d|_||_|r||_d|_||_ |r)|D] }| |q!dSdS)Nerror) rOptionContainerrr nameparserhelp_descriptiondefaultsvaluestranslation_domain add_option)rrD descriptionrF option_listrGrIoptionr r r!rs zOptionGroup.__init__cCsg|_|dSN)rL_create_option_mappings)rr r r!_create_option_lists zOptionGroup._create_option_listcsbfdd}tjjj|}jr|jg}jD] }|| q | ||S)Ncs~|dr j|}nj|}z |||jWdSty>td}tt |}t |_ t j j|_t ||_|w)Nrr) startswith _long_opt _short_optprocessrHrsysexc_infor strOPTION_CONTEXT_ERROR_QUARKdomainr r BAD_VALUEcodemessage) option_name option_valuegroupoptrBgerrorrErr r!callbacks        z.OptionGroup._to_goptiongroup..callback) r r rDrKrFrIset_translation_domainrLextendr9 add_entries)rrErcr_entriesrMr rbr!_to_goptiongroups    zOptionGroup._to_goptiongroupcCs|||S)z Returns the corresponding GOptionGroup object. Can be used as parameter for gnome_program_init(), gtk_init(). )set_values_to_defaultsrh)rrEr r r!get_option_groups zOptionGroup.get_option_groupcCsR|jD]}|j|j}t|tr|}||||j|j<qt |j|_ dSrN) rLrGgetdestr1rWget_opt_string check_valuerValuesrH)rrMdefaultopt_strr r r!ris   z"OptionGroup.set_values_to_defaults)rANNNrN) r:r;r<r=rrPrhrjrir r r r!r s   r c@sJeZdZdZddZddZddZdd Zd d Zd d Z dddZ dS)raHCommand 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. cOsNd|vrt|d<|dd|_|dd|_tjj|g|Rddi|dS)N option_class help_enabledTignore_unknown_optionsFadd_help_option)r poprsrtrrrrr r r!rs   zOptionParser.__init__cCs<|dur d|_dS|dr|tdd|_dS||_dS)NrAz%prog)usagerQr)rrwr r r! set_usages    zOptionParser.set_usagec sjr jdj}nj}t|}|j|jjD]}t |tj r.|}n| }| |q#fdd}t ddd|}g}j D] } || qM|||||S)Nz - cs4|dr j|}nj|}|||dS)Nr)rQrRrSrT)r]r^r_r`rrHr r!rc's   z1OptionParser._to_goptioncontext..callback)rKrwr OptionContextset_help_enabledrsset_ignore_unknown_optionsrt option_groupsr1r rj add_grouprLrer9rfset_main_group) rrHparameter_stringcontext option_groupg_grouprc main_group main_entriesrMr ryr!_to_goptioncontexts&          zOptionParser._to_goptioncontextcOst|dtrtj|t|g|Ri|dSt|dkrO|sOt|dtr=|djs2||d_|dj|ur=tdt|dt jrO|j |ddStjj|g|Ri|dS)Nrrz"invalid OptionGroup (wrong parser)) r1rWrradd_option_groupr rrErr r}r#rr r r!r7s  zOptionParser.add_option_groupcCs6|jdd}|jD]}t|tjr||jq |SrN)rLr}r1rr re)roptionsr_r r r!_get_all_optionsGs    zOptionParser._get_all_optionscCs4||}|tjdg|dd|dd<dS)Nrr)rparserUargv)rlargsrargsrHrr r r! _process_argsNs *zOptionParser._process_argsNcCsz tj|||\}}Wn8tyDtd}|jtkr|jt j j kr+t |j |jt j jkr7t|j |jt j jkrCt|j w|jD]}|jjD] \}}|||qPqH||fS)Nr)rr parse_argsr rUrVrYrXr[r rrZrr\UNKNOWN_OPTIONrFAILEDrr}rH__dict__items ensure_value)rrrHrrBr_keyvaluer r r!rVs*       zOptionParser.parse_args)NN) r:r;r<r=rrxrrrrrr r r r!rs  r)r=rUrrrrrrmodulergir gi._errorr r quark_to_stringoption_error_quarkrX__all__r r rrr r r r!s     Wa