U
    ÍZjˆ3  ã                	   @   sÊ   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 ddlmZ e	d	ƒZe e ¡ ¡Zd
ddddddddg	ZG dd„ dejƒZG dd„ dejƒZG d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)Ústring_types)Ú_gi)ÚGErrorÚGLibr   r   r   r   r   ÚOptionÚOptionGroupÚOptionParserÚmake_optionc                   @   sP   e Zd ZdZejjd Zejjdddg Zdej	 Z
dd„ Zd	d
„ 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ú--c                 O   sX   t jj| f|ž|Ž | js"tdƒ‚t| jƒt| jƒk r>tdƒ‚| jsTt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Úkwargs© r!   úM/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/gi/_option.pyr   _   s    ÿzOption.__init__c                 C   sF   | j |kr| j | j ¡ tj | |¡ t| jƒt| jƒkrBtdƒ‚d S )NzCgoption.Option needs more long option names than short option names)	Ú	REMAININGr   Úappendr   r   Ú_set_opt_stringr   r   r   )r   Úoptsr!   r!   r"   r%   k   s
    
zOption._set_opt_stringc                 c   sð   d}| j r|tjjO }| jr(|tjjO }|  ¡ rD| jrP|tjjO }n|tjj	O }| j
dkrf|tjjO }t| j| jƒD ]@\}}|d }t|tƒs˜| d¡}|dd … ||| j| jfV  qt| jt| jƒd … D ] }|dd … d|| j| jfV  qÊd S )Nr   r   r   zutf-8é   ó    )r   r   ZOptionFlagsZHIDDENr   ZIN_MAINÚtakes_valuer   ZOPTIONAL_ARGZNO_ARGÚtypeZFILENAMEÚzipr   r   Ú
isinstanceÚbytesÚencoder   Úmetavarr   )r   ÚflagsZ	long_nameZ
short_nameZshort_bytesr!   r!   r"   Ú_to_goptionentriess   s$    


zOption._to_goptionentriesN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚTYPESÚATTRSr   ZOPTION_REMAININGr#   r   r%   r1   r!   r!   r!   r"   r   8   s   ý
c                   @   s<   e Zd ZdZddd„Zdd„ Zdd	„ Zdd
d„Zd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                 C   sV   t j | td|¡ || _d | _|| _|r.|| _d | _|| _	|rR|D ]}|  
|¡ qBd S )NÚerror)r   ÚOptionContainerr   r   ÚnameÚparserÚhelp_descriptionÚdefaultsÚvaluesÚtranslation_domainÚ
add_option)r   r;   Údescriptionr=   Úoption_listr>   r@   Úoptionr!   r!   r"   r   ª   s    zOptionGroup.__init__c                 C   s   g | _ |  ¡  d S ©N)rC   Ú_create_option_mappings)r   r!   r!   r"   Ú_create_option_list¼   s    zOptionGroup._create_option_listc                    sb   ‡ ‡fdd„}t  ˆjˆjˆj|¡}ˆjr6| ˆj¡ g }ˆjD ]}| | 	¡ ¡ q@| 
|¡ |S )Nc                    s†   |   d¡rˆj|  }n
ˆj|  }z| | |ˆjˆ ¡ W nJ tk
r€   t ¡ d }tt	|ƒƒ}t
|_tjj|_t	|ƒ|_|‚Y nX d S )Nr   r   )Ú
startswithÚ	_long_optÚ
_short_optÚprocessr?   r   ÚsysÚexc_infor   ÚstrÚOPTION_CONTEXT_ERROR_QUARKÚdomainr   r   Ú	BAD_VALUEÚcodeÚmessage)Úoption_nameÚoption_valueÚgroupÚoptr9   Zgerror©r<   r   r!   r"   ÚcallbackÁ   s    



z.OptionGroup._to_goptiongroup.<locals>.callback)r
   r   r;   rB   r=   r@   Zset_translation_domainrC   Úextendr1   Úadd_entries)r   r<   rY   rV   ÚentriesrD   r!   rX   r"   Ú_to_goptiongroupÀ   s     ÿ

zOptionGroup._to_goptiongroupc                 C   s   |   ¡  |  |¡S )z€ Returns the corresponding GOptionGroup object.

        Can be used as parameter for gnome_program_init(), gtk_init().
        )Úset_values_to_defaultsr]   )r   r<   r!   r!   r"   Úget_option_groupÞ   s    zOptionGroup.get_option_groupc                 C   sR   | j D ]8}| j |j¡}t|tƒr| ¡ }| ||¡| j|j< qt 	| j¡| _
d S rE   )rC   r>   ÚgetÚdestr,   r	   Úget_opt_stringÚcheck_valuer   ÚValuesr?   )r   rD   ÚdefaultÚopt_strr!   r!   r"   r^   æ   s    

 ÿz"OptionGroup.set_values_to_defaults)r8   NNN)N)	r2   r3   r4   r5   r   rG   r]   r_   r^   r!   r!   r!   r"   r   �   s        þ

c                   @   sJ   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	d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                 O   sL   d|krt |d< | dd¡| _| dd¡| _tjj| f|žddi|—Ž d S )NÚoption_classÚhelp_enabledTÚignore_unknown_optionsFÚadd_help_option)r   Úpoprh   ri   r   r   r   r   r!   r!   r"   r     s    ÿ
ÿÿzOptionParser.__init__c                 C   s8   |d krd| _ n$| d¡r.|tdƒd … | _ n|| _ d S )Nr8   z%prog)ÚusagerH   r   )r   rl   r!   r!   r"   Ú	set_usage  s
    
zOptionParser.set_usagec           
         sÆ   ˆ j rˆ jd ˆ j  }nˆ j}t |¡}| ˆ j¡ | ˆ j¡ ˆ jD ]*}t	|tj
ƒr\|}n
| ˆ ¡}| |¡ qF‡ ‡fdd„}t 
d d d |¡}g }ˆ jD ]}	| |	 ¡ ¡ qš| |¡ | |¡ |S )Nz - c                    s4   |   d¡rˆ j|  }n
ˆ j|  }| | |ˆˆ ¡ d S )Nr   )rH   rI   rJ   rK   )rT   rU   rV   rW   ©r   r?   r!   r"   rY   (  s    

z1OptionParser._to_goptioncontext.<locals>.callback)rB   rl   r
   ZOptionContextZset_help_enabledrh   Zset_ignore_unknown_optionsri   Úoption_groupsr,   r   r_   Ú	add_grouprC   rZ   r1   r[   Zset_main_group)
r   r?   Zparameter_stringÚcontextÚoption_groupZg_grouprY   Z
main_groupZmain_entriesrD   r!   rn   r"   Ú_to_goptioncontext  s&    





zOptionParser._to_goptioncontextc                 O   s°   t |d tƒr,tj | t| f|ž|Ž¡ d S t|ƒdkr˜|s˜t |d tƒrt|d js^| |d _|d j| k	rttdƒ‚t |d t	jƒr˜| j
 |d ¡ d S tjj| f|ž|Ž d S )Nr   r   z"invalid OptionGroup (wrong parser))r,   r	   r   r   Úadd_option_groupr   r   r<   r   r
   ro   r$   r   r!   r!   r"   rt   8  s    ÿ

zOptionParser.add_option_groupc                 C   s6   | j d d … }| jD ]}t|tjƒr| |j ¡ q|S rE   )rC   ro   r,   r   r   rZ   )r   ÚoptionsrV   r!   r!   r"   Ú_get_all_optionsH  s
    
zOptionParser._get_all_optionsc                 C   s4   |   |¡}| tjd g| ¡dd … |d d …< d S )Nr   r   )rs   ÚparserL   Úargv)r   ÚlargsÚrargsr?   rq   r!   r!   r"   Ú_process_argsO  s    
zOptionParser._process_argsNc                 C   sÌ   zt j | ||¡\}}W n| tk
r”   t ¡ d }|jtkr@‚ |jt	j
jkrZt|jƒ‚n6|jt	j
jkrtt|jƒ‚n|jt	j
jkrŽt|jƒ‚n‚ Y nX | jD ]&}|jj ¡ D ]\}}| ||¡ q¬qœ||fS )Nr   )r   r   Ú
parse_argsr   rL   rM   rP   rO   rR   r   r   rQ   r   rS   ZUNKNOWN_OPTIONr   ZFAILEDr   ro   r?   Ú__dict__ÚitemsÚensure_value)r   r   r?   ru   r9   rV   ÚkeyÚvaluer!   r!   r"   r|   W  s*      ÿ

zOptionParser.parse_args)NN)r2   r3   r4   r5   r   rm   rs   rt   rv   r{   r|   r!   r!   r!   r"   r   ð   s   	 )r5   rL   r   r   r   r   r   r   Úmoduler   Z_compatr	   Úgir
   Z	gi._errorr   r   Zquark_to_stringZoption_error_quarkrO   Ú__all__r   r   r   r   r!   r!   r!   r"   Ú<module>   s.   
÷Wa