a f¥_T3ã@s°dZddlZddlZddlmZmZmZmZmZddlm Z ddl m Z ddl m Z e dƒZe e ¡¡Zgd ¢ZGd d „d ejƒZGd d „d ejƒZGdd„dejƒZeZdS)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) rrrrrÚOptionÚ OptionGroupÚ OptionParserÚ make_optionc@sNeZdZdZejjdZejjgd¢Zdej Z dd„Z dd„Z d 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ú--cOs^tjj|g|¢Ri|¤Ž|js(tdƒ‚t|jƒt|jƒkrDtdƒ‚|jsZtd|jdƒ‚dS)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Úkwargs©r ú0/usr/lib64/python3.9/site-packages/gi/_option.pyr^sÿzOption.__init__cCsF|j|vr|j |j¡tj ||¡t|jƒt|jƒkrBtdƒ‚dS)NzCgoption.Option needs more long option names than short option names) Ú REMAININGrÚappendrr Ú_set_opt_stringrrr)rZoptsr r r!r$js  zOption._set_opt_stringccsðd}|jr|tjjO}|jr(|tjjO}| ¡rD|jrP|tjjO}n |tjj O}|j dkrf|tjj O}t |j |jƒD]@\}}|d}t|tƒs˜| d¡}|dd…|||j|jfVqt|j t|jƒd…D] }|dd…d||j|jfVqÊdS)Nrrrzutf-8éó)rr Z OptionFlagsZHIDDENrZIN_MAINZ takes_valuerZ OPTIONAL_ARGZNO_ARGÚtypeZFILENAMEÚziprrÚ isinstanceÚbytesÚencoderÚmetavarr)rÚflagsZ long_nameZ short_nameZ short_bytesr r r!Ú_to_goptionentriesrs$       zOption._to_goptionentriesN)Ú__name__Ú __module__Ú __qualname__Ú__doc__rr ZTYPESZATTRSr ZOPTION_REMAININGr"rr$r.r r r r!r 7s   r c@s<eZdZdZddd„Zdd„Zdd „Zdd d „Zd d „ZdS)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. ÚNcCsVtj |td|¡||_d|_||_|r.||_d|_||_ |rR|D]}|  |¡qBdS)NÚerror) rZOptionContainerrr ÚnameÚparserÚhelp_descriptionÚdefaultsÚvaluesÚtranslation_domainZ add_option)rr5Ú descriptionr7Ú option_listr8r:Úoptionr r r!r©szOptionGroup.__init__cCsg|_| ¡dS©N)r<Z_create_option_mappings)rr r r!Ú_create_option_list»szOptionGroup._create_option_listcsb‡‡fdd„}t ˆjˆjˆj|¡}ˆjr6| ˆj¡g}ˆjD]}| |  ¡¡q@|  |¡|S)Ncs„| d¡rˆj|}n ˆj|}z| ||ˆjˆ¡WnHty~t ¡d}tt |ƒƒ}t |_ t j j|_t |ƒ|_|‚Yn0dS)Nrr)Ú startswithÚ _long_optÚ _short_optÚprocessr9rÚsysÚexc_infor ÚstrÚOPTION_CONTEXT_ERROR_QUARKÚdomainr rÚ BAD_VALUEÚcodeÚmessage)Ú option_nameÚ option_valueÚgroupÚoptr4Zgerror©r6rr r!ÚcallbackÀs        z.OptionGroup._to_goptiongroup..callback) r r r5r;r7r:Zset_translation_domainr<Úextendr.Ú add_entries)rr6rQrNÚentriesr=r rPr!Ú_to_goptiongroup¿s ÿ   zOptionGroup._to_goptiongroupcCs| ¡| |¡S)z€ Returns the corresponding GOptionGroup object. Can be used as parameter for gnome_program_init(), gtk_init(). )Úset_values_to_defaultsrU)rr6r r r!Úget_option_groupÝszOptionGroup.get_option_groupcCsR|jD]8}|j |j¡}t|tƒr| ¡}| ||¡|j|j<qt  |j¡|_ dSr>) r<r8ÚgetÚdestr)rFZget_opt_stringZ check_valuerZValuesr9)rr=ÚdefaultZopt_strr r r!rVås  ÿz"OptionGroup.set_values_to_defaults)r3NNN)N) r/r0r1r2rr?rUrWrVr r r r!r Žsþ  r c@sJeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z ddd„Z 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)NZ option_classÚ help_enabledTÚignore_unknown_optionsFZadd_help_option)r Úpopr[r\rrrrr r r!rsÿ ÿ ÿzOptionParser.__init__cCs8|durd|_n$| d¡r.|tdƒd…|_n||_dS)Nr3z%prog)Úusager@r)rr^r r r!Ú set_usages  zOptionParser.set_usagec sƈjrˆjdˆj}nˆj}t |¡}| ˆj¡| ˆj¡ˆjD]*}t |tj ƒr\|}n |  ˆ¡}|  |¡qF‡‡fdd„}t  ddd|¡}g}ˆj D]} | |  ¡¡qš| |¡| |¡|S)Nz - cs4| d¡rˆj|}n ˆj|}| ||ˆˆ¡dS)Nr)r@rArBrC)rLrMrNrO©rr9r r!rQ's   z1OptionParser._to_goptioncontext..callback)r;r^r Z OptionContextZset_help_enabledr[Zset_ignore_unknown_optionsr\Ú option_groupsr)r rWÚ add_groupr<rRr.rSZset_main_group) rr9Zparameter_stringÚcontextZ option_groupZg_grouprQZ main_groupZ main_entriesr=r r`r!Ú_to_goptioncontexts&          zOptionParser._to_goptioncontextcOs¼t|dtƒr2tj |t|g|¢Ri|¤Ž¡dSt|ƒdkrž|sžt|dtƒrz|djsd||d_|dj|urztdƒ‚t|dt jƒrž|j   |d¡dStjj|g|¢Ri|¤ŽdS)Nrrz"invalid OptionGroup (wrong parser)) r)rFrrÚadd_option_groupr rr6rr rar#rr r r!re7sÿ  zOptionParser.add_option_groupcCs6|jdd…}|jD]}t|tjƒr| |j¡q|Sr>)r<rar)rr rR)rÚoptionsrNr r r!Ú_get_all_optionsGs   zOptionParser._get_all_optionscCs4| |¡}| tjdg|¡dd…|dd…<dS)Nrr)rdÚparserDÚargv)rZlargsZrargsr9rcr r r!Ú _process_argsNs zOptionParser._process_argsNcCsÊztj |||¡\}}Wnzty’t ¡d}|jtkr>‚|jt j j krXt |j ƒ‚n6|jt j jkrrt|j ƒ‚n|jt j jkrŒt|j ƒ‚n‚Yn0|jD]&}|jj ¡D]\}}| ||¡qªqš||fS)Nr)rrÚ parse_argsr rDrErHrGrJr rrIrrKZUNKNOWN_OPTIONrZFAILEDrrar9Ú__dict__ÚitemsZ ensure_value)rrr9rfr4rNÚkeyÚvaluer r r!rkVs&ÿ        zOptionParser.parse_args)NN) r/r0r1r2rr_rdrergrjrkr r r r!rïs  r)r2rDrrrrrrÚmodulerZgir Z gi._errorr r Zquark_to_stringZoption_error_quarkrGÚ__all__r r rrr r r r!Ús     Wa