ó
RgdNc        	   @   s  d  Z  d d l Z d d l Z d d l m Z m Z m Z m Z m Z e j d k rg e	 Z
 d „  Z n e Z
 e	 Z d d l Z e j d Z d d	 d
 d d d d d d g	 Z d e j f d „  ƒ  YZ d e j f d „  ƒ  YZ d e j f d „  ƒ  YZ e Z d S(   s,  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.
iÿÿÿÿN(   t   OptParseErrort   OptionErrort   OptionValueErrort   BadOptionErrort   OptionConflictErrori   i    c         C   s
   |  j  ƒ  S(   N(   t   encode(   t   s(    (    s/   /usr/lib/python2.7/dist-packages/glib/option.pyt   <lambda>'   s    s
   glib._glibR    R   R   R   R   t   Optiont   OptionGroupt   OptionParsert   make_optionc           B   s_   e  Z d  Z e j j d	 Z e j j d d d g Z d e j Z	 d „  Z
 d „  Z d „  Z RS(
   s¼  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.

    Attributes:
        optional_arg  This does not need a arguement, but it can be supplied.
        hidden        The help list does not show this option
        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.
    t   filenamet   hiddent   in_maint   optional_args   --c         O   s   t  j j |  | | Ž |  j s. t d ƒ ‚ n  t |  j ƒ t |  j ƒ k  r[ t d ƒ ‚ n  |  j s} t d |  j d ƒ ‚ n  d  S(   Ns!   %s at least one long option name.s;   %s at least more long option names than short option names.s   %s needs a help message.i    (   t   optparseR   t   __init__t
   _long_optst
   ValueErrort   lent   _short_optst   help(   t   selft   argst   kwargs(    (    s/   /usr/lib/python2.7/dist-packages/glib/option.pyR   _   s    		c         C   si   |  j  | k r% |  j j |  j  ƒ n  t j j |  | ƒ t |  j ƒ t |  j ƒ k re t d ƒ ‚ n  d  S(   NsC   goption.Option needs more long option names than short option names(	   t	   REMAININGR   t   appendR   R   t   _set_opt_stringR   R   R   (   R   t   opts(    (    s/   /usr/lib/python2.7/dist-packages/glib/option.pyR   l   s
    c         c   s#  d } |  j  r | t j O} n  |  j r8 | t j O} n  |  j ƒ  r` |  j rm | t j O} qm n | t j O} |  j	 d k rŒ | t j
 O} n  xK t |  j |  j ƒ D]4 \ } } | d t | d ƒ | |  j |  j f Vq¢ WxB |  j t |  j ƒ D]* } | d t d ƒ | |  j |  j f Vqñ Wd  S(   Ni    R   i   i   t    (   R   t   _glibt   OPTION_FLAG_HIDDENR   t   OPTION_FLAG_IN_MAINt   takes_valueR   t   OPTION_FLAG_OPTIONAL_ARGt   OPTION_FLAG_NO_ARGt   typet   OPTION_FLAG_FILENAMEt   zipR   R   t   _bytesR   t   metavarR   (   R   t   flagst	   long_namet
   short_name(    (    s/   /usr/lib/python2.7/dist-packages/glib/option.pyt   _to_goptionentriest   s    			",(   s   filename(   t   __name__t
   __module__t   __doc__R   R   t   TYPESt   ATTRSR   t   OPTION_REMAININGR   R   R   R-   (    (    (    s/   /usr/lib/python2.7/dist-packages/glib/option.pyR   ;   s   		
		c           B   sJ   e  Z d  Z d d d d d „ Z d „  Z d „  Z d d „ Z d „  Z RS(   s×  A group of command line options.

    Arguements:
       name:             The groups name, used to create the
                         --help-{name} option
       description:      Shown as title of the groups help view
       help_description: Shown as help to the --help-{name} option
       option_list:      The options used in this group, must be option.Option()
       defaults:         A dicitionary of default values
       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.
    t    c         C   sƒ   t  j j |  t d | ƒ | |  _ d  |  _ | |  _ | rF | |  _ n  d  |  _	 | |  _
 | r x | D] } |  j | ƒ qe Wn  d  S(   Nt   error(   R   t   OptionContainerR   R   t   namet   Nonet   parsert   help_descriptiont   defaultst   valuest   translation_domaint
   add_option(   R   R7   t   descriptionR:   t   option_listR;   R=   t   option(    (    s/   /usr/lib/python2.7/dist-packages/glib/option.pyR   ¢   s    					c         C   s   g  |  _  |  j ƒ  d  S(   N(   R@   t   _create_option_mappings(   R   (    (    s/   /usr/lib/python2.7/dist-packages/glib/option.pyt   _create_option_list´   s    	c            s   ‡  ‡ f d †  } t  j ˆ  j ˆ  j ˆ  j | ƒ } ˆ  j rO | j ˆ  j ƒ n  g  } x$ ˆ  j D] } | j | j	 ƒ  ƒ q_ W| j
 | ƒ | S(   Nc            s³   |  j  d ƒ r ˆ  j |  } n ˆ  j |  } y | j |  | ˆ  j ˆ ƒ Wnc t k
 r® t j ƒ  d } t j	 t
 | ƒ ƒ } t j | _ t j | _ t
 | ƒ | _ | ‚ n Xd  S(   Ns   --i   (   t
   startswitht	   _long_optt
   _short_optt   processR<   R   t   syst   exc_infoR   t   GErrort   strt   OPTION_ERRORt   domaint   OPTION_ERROR_BAD_VALUEt   codet   message(   t   option_namet   option_valuet   groupt   optR5   t   gerror(   R   R9   (    s/   /usr/lib/python2.7/dist-packages/glib/option.pyt   callback¹   s    (   R   R	   R7   R?   R:   R=   t   set_translation_domainR@   t   extendR-   t   add_entries(   R   R9   RV   RS   t   entriesRA   (    (   R   R9   s/   /usr/lib/python2.7/dist-packages/glib/option.pyt   _to_goptiongroup¸   s    	c         C   s   |  j  ƒ  |  j | ƒ S(   s€    Returns the corresponding GOptionGroup object.

        Can be used as parameter for gnome_program_init(), gtk_init().
        (   t   set_values_to_defaultsR[   (   R   R9   (    (    s/   /usr/lib/python2.7/dist-packages/glib/option.pyt   get_option_groupÖ   s    
c         C   s|   x` |  j  D]U } |  j j | j ƒ } t | t ƒ r
 | j ƒ  } | j | | ƒ |  j | j <q
 q
 Wt j	 |  j ƒ |  _
 d  S(   N(   R@   R;   t   gett   destt
   isinstancet   _basestringt   get_opt_stringt   check_valueR   t   ValuesR<   (   R   RA   t   defaultt   opt_str(    (    s/   /usr/lib/python2.7/dist-packages/glib/option.pyR\   Þ   s    N(	   R.   R/   R0   R8   R   RC   R[   R]   R\   (    (    (    s/   /usr/lib/python2.7/dist-packages/glib/option.pyR	   Œ   s   		c           B   sS   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d d d „ Z
 RS(	   sq  Command line parser with GOption support.

    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.

    Attribues:
        help_enabled:           The --help, --help-all and --help-{group}
                                options are enabled (default).
        ignore_unknown_options: Do not throw a exception when a option is not
                                knwon, the option will be in the result list.

    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   sc   d | k r t  | d <n  | j d t ƒ |  _ | j d t ƒ |  _ t j j |  d t | | Žd  S(   Nt   option_classt   help_enabledt   ignore_unknown_optionst   add_help_option(	   R   t   popt   TrueRh   t   FalseRi   R   R
   R   (   R   R   R   (    (    s/   /usr/lib/python2.7/dist-packages/glib/option.pyR   ý   s    	c         C   sJ   | d  k r d |  _ n. | j d ƒ r= | t d ƒ |  _ n	 | |  _ d  S(   NR4   s   %prog(   R8   t   usageRD   R   (   R   Rn   (    (    s/   /usr/lib/python2.7/dist-packages/glib/option.pyt	   set_usage  s
    c   
         s  ˆ  j  r  ˆ  j d ˆ  j  } n	 ˆ  j } t j | ƒ } | j ˆ  j ƒ | j ˆ  j ƒ xH ˆ  j D]= } t	 | t j
 ƒ rƒ | } n | j ˆ  ƒ } | j | ƒ qb W‡  ‡ f d †  } t j
 d  d  d  | ƒ } g  } x$ ˆ  j D] }	 | j |	 j ƒ  ƒ qÝ W| j | ƒ | j | ƒ | S(   Ns    - c            sF   |  j  d ƒ r ˆ  j |  } n ˆ  j |  } | j |  | ˆ ˆ  ƒ d  S(   Ns   --(   RD   RE   RF   RG   (   RQ   RR   RS   RT   (   R   R<   (    s/   /usr/lib/python2.7/dist-packages/glib/option.pyRV     s    (   R?   Rn   R   t   OptionContextt   set_help_enabledRh   t   set_ignore_unknown_optionsRi   t   option_groupsR`   R	   R]   t	   add_groupR8   R@   RX   R-   RY   t   set_main_group(
   R   R<   t   parameter_stringt   contextt   option_groupt   g_groupRV   t
   main_groupt   main_entriesRA   (    (   R   R<   s/   /usr/lib/python2.7/dist-packages/glib/option.pyt   _to_goptioncontext  s&    			c         O   sï   t  | d t ƒ r6 t j j |  t |  | | Ž ƒ d  St | ƒ d k rÕ | rÕ t  | d t ƒ r¤ | d j s |  | d _ n  | d j |  k	 r¤ t d ƒ ‚ q¤ n  t  | d t	 j ƒ rÕ |  j
 j | d ƒ d  Sn  t j j |  | | Ž d  S(   Ni    i   s"   invalid OptionGroup (wrong parser)(   R`   Ra   R   R
   t   add_option_groupR	   R   R9   R   R   Rs   R   (   R   R   R   (    (    s/   /usr/lib/python2.7/dist-packages/glib/option.pyR}   .  s    c         C   sG   |  j  } x6 |  j D]+ } t | t j ƒ r | j | j  ƒ q q W| S(   N(   R@   Rs   R`   R   R	   RX   (   R   t   optionsRS   (    (    s/   /usr/lib/python2.7/dist-packages/glib/option.pyt   _get_all_options>  s
    
c         C   s5   |  j  | ƒ } | j t j d g | ƒ d | (d  S(   Ni    i   (   R|   t   parseRH   t   argv(   R   t   largst   rargsR<   Rw   (    (    s/   /usr/lib/python2.7/dist-packages/glib/option.pyt   _process_argsE  s    c   	      C   sA  | p	 g  } y" t  j j |  | | ƒ \ } } Wn« t j k
 rÛ t j ƒ  d } | j t j k ri ‚  n  | j	 t j
 k r t | j ƒ ‚ qÜ | j	 t j k r± t | j ƒ ‚ qÜ | j	 t j k rÕ t | j ƒ ‚ qÜ ‚  n XxD |  j D]9 } x0 | j j j ƒ  D] \ } } | j | | ƒ qÿ Wqæ W| d t | ƒ !} | | f S(   Ni   i   (   R   R
   t
   parse_argsR   RJ   RH   RI   RM   RL   RO   RN   R   RP   t   OPTION_ERROR_UNKNOWN_OPTIONR   t   OPTION_ERROR_FAILEDR    Rs   R<   t   __dict__t   itemst   ensure_valueR   (	   R   R   R<   t   old_argsR~   R5   RS   t   keyt   value(    (    s/   /usr/lib/python2.7/dist-packages/glib/option.pyR…   M  s(    	N(   R.   R/   R0   R   Ro   R|   R}   R   R„   R8   R…   (    (    (    s/   /usr/lib/python2.7/dist-packages/glib/option.pyR
   ç   s   				 			(   i   i    (   R0   RH   R   R    R   R   R   R   t   version_infoRK   Ra   R(   t
   basestringt   glibt   modulesR   t   __all__R   R	   R
   R   (    (    (    s/   /usr/lib/python2.7/dist-packages/glib/option.pyt   <module>   s.   (	Q[