o
    	j6hxE  ã                   @   sä   d Z ddlZddlZddlZddlZddlT dZe de ¡Ze deef ¡Z	e
 dd¡ZG d	d
„ d
ƒZdd„ Zdd„ ejD ƒZdd„ Zdd„ ZG dd„ dƒZedkrndZdD ]Zede ƒ ed eeeƒ¡ƒ eƒ  qXdS dS )a6  distutils.fancy_getopt

Wrapper around the standard getopt module that provides the following
additional features:
  * short and long options are tied together
  * options have help strings, so fancy_getopt could potentially
    create a complete usage summary
  * options set attributes of a passed-in object
é    N)Ú*z[a-zA-Z](?:[a-zA-Z0-9-]*)z^%s$z^(%s)=!(%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d„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zd dd„Zdd„ Zddd„Zd dd„ZdS )!ÚFancyGetoptaÕ  Wrapper around the standard 'getopt()' module that provides some
    handy extra functionality:
      * short and long options are tied together
      * options have help strings, and help text can be assembled
        from them
      * options set attributes of a passed-in object
      * boolean options can have "negative aliases" -- eg. if
        --quiet is the "negative alias" of --verbose, then "--quiet"
        on the command line sets 'verbose' to false
    Nc                 C   sN   || _ i | _| j r|  ¡  i | _i | _g | _g | _i | _i | _i | _	g | _
d S ©N)Úoption_tableÚoption_indexÚ_build_indexÚaliasÚnegative_aliasÚ
short_optsÚ	long_optsÚ
short2longÚ	attr_nameÚ	takes_argÚoption_order©Úselfr   © r   úq/var/www/html/chefvision.cloud.itp360.com/venv/lib/python3.10/site-packages/setuptools/_distutils/fancy_getopt.pyÚ__init__)   s   	
zFancyGetopt.__init__c                 C   s(   | j  ¡  | jD ]	}|| j |d < qd S )Nr   )r   Úclearr   )r   Úoptionr   r   r   r	   Q   s   

ÿzFancyGetopt._build_indexc                 C   s   || _ |  ¡  d S r   )r   r	   r   r   r   r   Úset_option_tableV   s   zFancyGetopt.set_option_tablec                 C   s:   || j v rtd| ƒ‚|||f}| j |¡ || j |< d S )Nz'option conflict: already an option '%s')r   ÚDistutilsGetoptErrorr   Úappend)r   Úlong_optionÚshort_optionÚhelp_stringr   r   r   r   Ú
add_optionZ   s   
ÿ
zFancyGetopt.add_optionc                 C   s
   || j v S )zcReturn true if the option table for this parser has an
        option with long name 'long_option'.)r   ©r   r   r   r   r   Ú
has_optionc   s   
zFancyGetopt.has_optionc                 C   s
   |  t¡S )z’Translate long option name 'long_option' to the form it
        has as an attribute of some object: ie., translate hyphens
        to underscores.©Ú	translateÚlongopt_xlater    r   r   r   Úget_attr_nameh   ó   
zFancyGetopt.get_attr_namec                 C   s\   t |tƒsJ ‚| ¡ D ] \}}|| jvrtd|||f ƒ‚|| jvr+td|||f ƒ‚qd S )Nz(invalid %s '%s': option '%s' not definedz0invalid %s '%s': aliased option '%s' not defined)Ú
isinstanceÚdictÚitemsr   r   )r   ÚaliasesÚwhatr
   Úoptr   r   r   Ú_check_alias_dictn   s   
ÿ
ÿÿüzFancyGetopt._check_alias_dictc                 C   ó   |   |d¡ || _dS )z'Set the aliases for this option parser.r
   N)r-   r
   )r   r
   r   r   r   Úset_aliasesx   s   
zFancyGetopt.set_aliasesc                 C   r.   )zÚSet the negative aliases for this option parser.
        'negative_alias' should be a dictionary mapping option names to
        option names, both the key and value must already be defined
        in the option table.znegative aliasN)r-   r   )r   r   r   r   r   Úset_negative_aliases}   s   
z FancyGetopt.set_negative_aliasesc                 C   sÀ  g | _ g | _| j ¡  i | _| jD ]Ì}t|ƒdkr!|\}}}d}nt|ƒdkr.|\}}}}ntd|f ƒ‚t|t	ƒr@t|ƒdk rFt
d| ƒ‚|du s[t|t	ƒrUt|ƒdks[t
d	| ƒ‚|| j|< | j  |¡ |d
 dkr~|rr|d }|dd
… }d| j|< n!| j |¡}|durš| j| r•t
d||f ƒ‚|| j d
< d| j|< | j |¡}|dur»| j| | j| kr»t
d||f ƒ‚t |¡sÆt
d| ƒ‚|  |¡| j|< |rÝ| j |¡ || j|d < qdS )zPopulate the various data structures that keep tabs on the
        option table.  Called by 'getopt()' before it can do anything
        worthwhile.
        é   r   é   zinvalid option tuple: %ré   z9invalid long option '%s': must be a string of length >= 2Né   z:invalid short option '%s': must a single character or Noneéÿÿÿÿú=ú:z>invalid negative alias '%s': aliased option '%s' takes a valuezginvalid alias '%s': inconsistent with aliased option '%s' (one of them takes a value, the other doesn'tzEinvalid long option name '%s' (must be letters, numbers, hyphens only)r   r   r   r   Úrepeatr   ÚlenÚ
ValueErrorr'   Ústrr   r   r   r   Úgetr
   Ú
longopt_reÚmatchr%   r   )r   r   ÚlongÚshortÚhelpr8   Úalias_tor   r   r   Ú_grok_option_table…   st   


ÿÿÿ

þÿ

ýÿ

ÿÿ€¿zFancyGetopt._grok_option_tablec              
   C   s†  |du rt jdd… }|du rtƒ }d}nd}|  ¡  d | j¡}zt ||| j¡\}}W n tjy> } zt	|ƒ‚d}~ww |D ]y\}}t
|ƒdkrY|d dkrY| j|d  }nt
|ƒdkrg|dd… d	ksiJ ‚|dd… }| j |¡}	|	ry|	}| j| s•|d
ks†J dƒ‚| j |¡}	|	r“|	}d}nd}| j| }
|r¬| j |
¡dur¬t||
dƒd }t||
|ƒ | j ||f¡ qA|rÁ||fS |S )a  Parse command-line options in args. Store as attributes on object.

        If 'args' is None or not supplied, uses 'sys.argv[1:]'.  If
        'object' is None or not supplied, creates a new OptionDummy
        object, stores option values there, and returns a tuple (args,
        object).  If 'object' is supplied, it is modified in place and
        'getopt()' just returns 'args'; in both cases, the returned
        'args' is a modified copy of the passed-in 'args' list, which
        is left untouched.
        Nr4   TFú r3   r   r   z--Ú zboolean option can't have value)ÚsysÚargvÚOptionDummyrC   Újoinr   Úgetoptr   ÚerrorÚDistutilsArgErrorr9   r   r
   r<   r   r   r   r8   ÚgetattrÚsetattrr   r   )r   ÚargsÚobjectÚcreated_objectr   ÚoptsÚmsgr,   Úvalr
   Úattrr   r   r   rJ   Ò   sJ   €ÿ 

zFancyGetopt.getoptc                 C   s   | j du r	tdƒ‚| j S )z«Returns the list of (option, value) tuples processed by the
        previous run of 'getopt()'.  Raises RuntimeError if
        'getopt()' hasn't been called yet.
        Nz!'getopt()' hasn't been called yet)r   ÚRuntimeError)r   r   r   r   Úget_option_order  s   
zFancyGetopt.get_option_orderc                 C   sd  d}| j D ]&}|d }|d }t|ƒ}|d dkr|d }|dur%|d }||kr+|}q|d d d }d}|| }	d	| }
|rD|g}nd
g}| j D ]e}|dd… \}}}t||	ƒ}|d dkrf|dd… }|du rƒ|ry| d|||d f ¡ n&| d||f ¡ nd||f }|r˜| d|||d f ¡ n| d| ¡ |dd… D ]	}| |
| ¡ q¥qJ|S )zŒGenerate help text (a list of strings, one per suggested line of
        output) from the option table for this FancyGetopt object.
        r   r4   r5   r6   Né   r3   éN   rD   zOption summary:r1   z  --%-*s  %sz
  --%-*s  z%s (-%s)z  --%-*s)r   r9   Ú	wrap_textr   )r   ÚheaderÚmax_optr   r?   r@   ÚlÚ	opt_widthÚ
line_widthÚ
text_widthÚ
big_indentÚlinesrA   ÚtextÚ	opt_namesr   r   r   Úgenerate_help  sL   
€

ÿÿzFancyGetopt.generate_helpc                 C   s0   |d u rt j}|  |¡D ]	}| |d ¡ qd S )NÚ
)rF   Ústdoutre   Úwrite)r   r[   ÚfileÚliner   r   r   Ú
print_helph  s
   ÿzFancyGetopt.print_helpr   )NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r	   r   r   r!   r%   r-   r/   r0   rC   rJ   rW   re   rk   r   r   r   r   r      s     
(
	

M=

Or   c                 C   s   t | ƒ}| |¡ | ||¡S r   )r   r0   rJ   )ÚoptionsÚnegative_optrP   rO   Úparserr   r   r   Úfancy_getopto  s   
rs   c                 C   s   i | ]}t |ƒd “qS )rD   )Úord)Ú.0Ú_wscharr   r   r   Ú
<dictcomp>u  s    rw   c                 C   s  | du rg S t | ƒ|kr| gS |  ¡ } |  t¡} t d| ¡}dd„ |D ƒ}g }|rŠg }d}|rZt |d ƒ}|| |krJ| |d ¡ |d= || }n|rW|d d dkrW|d= n|s/|r€|dkru| |d d|… ¡ |d |d… |d< |d d dkr€|d= | d |¡¡ |s)|S )	z¶wrap_text(text : string, width : int) -> [string]

    Split 'text' into multiple lines of no more than 'width' characters
    each, and return the list of strings that results.
    Nz( +|-+)c                 S   s   g | ]}|r|‘qS r   r   )ru   Úchr   r   r   Ú
<listcomp>…  s    zwrap_text.<locals>.<listcomp>r   r5   rD   rE   )r9   Ú
expandtabsr#   ÚWS_TRANSÚreÚsplitr   rI   )rc   ÚwidthÚchunksrb   Úcur_lineÚcur_lenr]   r   r   r   rZ   w  s>   

öà"rZ   c                 C   s
   |   t¡S )zXConvert a long option name to a valid Python identifier by
    changing "-" to "_".
    r"   )r,   r   r   r   Útranslate_longopt­  r&   r‚   c                   @   s   e Zd ZdZg fdd„ZdS )rH   z_Dummy class just used as a place to hold command-line option
    values as instance attributes.c                 C   s   |D ]}t | |dƒ qdS )zkCreate a new OptionDummy instance.  The attributes listed in
        'options' will be initialized to None.N)rN   )r   rp   r,   r   r   r   r   ¸  s   ÿzOptionDummy.__init__N)rl   rm   rn   ro   r   r   r   r   r   rH   ´  s    rH   Ú__main__z¢Tra-la-la, supercalifragilisticexpialidocious.
How *do* you spell that odd word, anyways?
(Someone ask Mary -- she'll know [or she'll
say, "How should I know?"].))é
   é   é   é(   z	width: %drf   )ro   rF   Ústringr|   rJ   Údistutils.errorsÚlongopt_patÚcompiler=   Úneg_alias_rer;   Ú	maketransr$   r   rs   Ú
whitespacer{   rZ   r‚   rH   rl   rc   ÚwÚprintrI   r   r   r   r   Ú<module>   s0    
  T6ö