U
    PyhM                     @   sv  d Z ddlZddlZdgZdZG dd deZG dd deZG d	d
 d
e	Z
G dd de
ZG dd de
ZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd  d eZd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd<d.d/Zd0d1 Zd2d3 Zd4d5 Z d6d7 Z!G d8d9 d9e"Z#d=d;dZ$dS )>a  Pythonic command-line interface parser that will make you smile.

 * http://docopt.org
 * Repository and issue-tracker: https://github.com/docopt/docopt
 * Licensed under terms of MIT license (see LICENSE-MIT)
 * Copyright (c) 2013 Vladimir Keleshev, vladimir@keleshev.com

    Ndocoptz0.6.2c                   @   s   e Zd ZdZdS )DocoptLanguageErrorz4Error in construction of usage-message by developer.N__name__
__module____qualname____doc__ r	   r	   0/usr/local/lib/python3.8/dist-packages/docopt.pyr      s   r   c                   @   s   e Zd ZdZdZdddZdS )
DocoptExitz;Exit in case user invoked program with incorrect arguments. c                 C   s   t | |d | j   d S )N
)
SystemExit__init__usagestrip)selfmessager	   r	   r
   r      s    zDocoptExit.__init__N)r   )r   r   r   r   r   r   r	   r	   r	   r
   r      s   r   c                   @   sB   e Zd Zdd Zdd Zdd Zddd	Zd
d Zedd Z	dS )Patternc                 C   s   t | t |kS Nrepr)r   otherr	   r	   r
   __eq__"   s    zPattern.__eq__c                 C   s   t t| S r   )hashr   r   r	   r	   r
   __hash__%   s    zPattern.__hash__c                 C   s   |    |   | S r   )fix_identitiesfix_repeating_argumentsr   r	   r	   r
   fix(   s    zPattern.fixNc                 C   sx   t | ds| S |dkr&tt|  n|}t| jD ]>\}}t |dsh||ksRt||| | j|< q4|| q4dS )z>Make pattern-tree tips point to same object if they are equal.childrenN)	hasattrlistsetflat	enumerater    AssertionErrorindexr   )r   Zuniqicr	   r	   r
   r   -   s    

zPattern.fix_identitiesc                    s   dd | j jD }|D ]  fdd D D ]v}t|tksNt|tkrz|jrz|jdkr`g |_nt|jtk	rz|j |_t|t	kst|tkr,|jdkr,d|_q,q| S )z5Fix elements that should accumulate/increment values.c                 S   s   g | ]}t |jqS r	   r"   r    .0r)   r	   r	   r
   
<listcomp>;   s     z3Pattern.fix_repeating_arguments.<locals>.<listcomp>c                    s   g | ]}  |d kr|qS )   )countr+   caser	   r
   r-   =   s      Nr   )
eitherr    typeArgumentOptionargcountvaluer"   splitCommand)r   r2   er	   r0   r
   r   9   s    
"
zPattern.fix_repeating_argumentsc           
      C   s  g }| gg}|r| d}dd |D }t|krrdd |D d }| || |jD ]}||g|  qZqt|krdd |D d }| || |t|j|  qt|krdd |D d }| || |t|j|  qt|kr4dd |D d }| || |t|j|  qt	|krzdd |D d }	| ||	 |t|	jd	 |  q|| qtd
d |D  S )zATransform pattern into an equivalent, with only top-level Either.r   c                 S   s   g | ]}t |qS r	   r3   r+   r	   r	   r
   r-   P   s     z"Pattern.either.<locals>.<listcomp>c                 S   s   g | ]}t |tkr|qS r	   )r3   Eitherr+   r	   r	   r
   r-   R   s      c                 S   s   g | ]}t |tkr|qS r	   )r3   Requiredr+   r	   r	   r
   r-   W   s      c                 S   s   g | ]}t |tkr|qS r	   )r3   Optionalr+   r	   r	   r
   r-   [   s      c                 S   s   g | ]}t |tkr|qS r	   )r3   
AnyOptionsr+   r	   r	   r
   r-   _   s      c                 S   s   g | ]}t |tkr|qS r	   )r3   	OneOrMorer+   r	   r	   r
   r-   c   s         c                 S   s   g | ]}t | qS r	   )r=   )r,   r:   r	   r	   r
   r-   h   s     )
popr<   r'   r    appendr=   r"   r>   r?   r@   )
r   retgroupsr    typesr2   r)   requiredoptionalZ	oneormorer	   r	   r
   r2   G   s8    



zPattern.either)N)
r   r   r   r   r   r   r   r   propertyr2   r	   r	   r	   r
   r       s   
r   c                   @   s0   e Zd Zd
ddZdd Zdd Zddd	ZdS )ChildPatternNc                 C   s   || _ || _d S r   namer7   r   rL   r7   r	   r	   r
   r   m   s    zChildPattern.__init__c                 C   s   d| j j| j| jf S )Nz
%s(%r, %r))	__class__r   rL   r7   r   r	   r	   r
   __repr__q   s    zChildPattern.__repr__c                 G   s   |rt | |kr| gS g S r   r;   r   rF   r	   r	   r
   r$   t   s    zChildPattern.flatc                    s   |d krg n|}  |\}}|d kr0d||fS |d | ||d d   } fdd|D }t jttfkrt jtkrd}nt|jtkr|jgn|j}|s||_d|||g fS |d  j|7  _d||fS d|||g fS )NFr.   c                    s   g | ]}|j  j kr|qS r	   )rL   r,   ar   r	   r
   r-   }   s      z&ChildPattern.match.<locals>.<listcomp>Tr   )single_matchr3   r7   intr"   str)r   left	collectedposmatchZleft_Z	same_name	incrementr	   r   r
   rY   w   s$    

zChildPattern.match)N)N)r   r   r   r   rO   r$   rY   r	   r	   r	   r
   rJ   k   s   
rJ   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )ParentPatternc                 G   s   t || _d S r   r*   )r   r    r	   r	   r
   r      s    zParentPattern.__init__c                 C   s"   d| j jddd | jD f S )Nz%s(%s), c                 s   s   | ]}t |V  qd S r   r   rQ   r	   r	   r
   	<genexpr>   s     z)ParentPattern.__repr__.<locals>.<genexpr>)rN   r   joinr    r   r	   r	   r
   rO      s    zParentPattern.__repr__c                    s,   t |  kr| gS t fdd| jD g S )Nc                    s   g | ]}|j   qS r	   )r$   r+   rF   r	   r
   r-      s     z&ParentPattern.flat.<locals>.<listcomp>)r3   sumr    rP   r	   r_   r
   r$      s    zParentPattern.flatN)r   r   r   r   rO   r$   r	   r	   r	   r
   r[      s   r[   c                   @   s    e Zd Zdd Zedd ZdS )r4   c                 C   s8   t |D ]*\}}t|tkr|t| j|jf  S qdS NNN)r%   r3   r4   rL   r7   r   rV   npr	   r	   r
   rS      s    zArgument.single_matchc                 C   s8   t d|d }t jd|t jd}| ||r2|d nd S )Nz(<\S*?>)r   \[default: (.*)\]flags)refindallI)class_sourcerL   r7   r	   r	   r
   parse   s    zArgument.parseN)r   r   r   rS   classmethodrn   r	   r	   r	   r
   r4      s   r4   c                   @   s   e Zd ZdddZdd ZdS )r9   Fc                 C   s   || _ || _d S r   rK   rM   r	   r	   r
   r      s    zCommand.__init__c                 C   sF   t |D ]8\}}t|tkr|j| jkr<|t| jdf  S  qBqdS )NTrb   )r%   r3   r4   r7   rL   r9   rc   r	   r	   r
   rS      s    zCommand.single_matchN)F)r   r   r   r   rS   r	   r	   r	   r
   r9      s   
r9   c                   @   s>   e Zd ZdddZedd Zdd	 Zed
d Zdd Z	dS )r5   Nr   Fc                 C   sB   |dkst || | _| _|| | _| _|dkr8|r8d n|| _d S )N)r   r.   F)r&   shortlongr6   r7   )r   rp   rq   r6   r7   r	   r	   r
   r      s    zOption.__init__c                 C   s   d\}}}}|  d\}}}|dddd}| D ](}	|	drP|	}q<|	dr`|	}q<d}q<|rtjd	|tjd
}
|
r|
d nd }| ||||S )N)NNr   Fz  , =---r.   rf   rg   r   )r   	partitionreplacer8   
startswithri   rj   rk   )rl   Zoption_descriptionrp   rq   r6   r7   options_descriptionsmatchedr	   r	   r
   rn      s    

zOption.parsec                 C   s.   t |D ] \}}| j|jkr||f  S qdS ra   )r%   rL   rc   r	   r	   r
   rS      s    zOption.single_matchc                 C   s   | j p
| jS r   )rq   rp   r   r	   r	   r
   rL      s    zOption.namec                 C   s   d| j | j| j| jf S )NzOption(%r, %r, %r, %r))rp   rq   r6   r7   r   r	   r	   r
   rO      s    
 zOption.__repr__)NNr   F)
r   r   r   r   ro   rn   rS   rI   rL   rO   r	   r	   r	   r
   r5      s   


r5   c                   @   s   e Zd ZdddZdS )r=   Nc                 C   sR   |d krg n|}|}|}| j D ](}|||\}}}|sd||f  S qd||fS )NFTr    rY   )r   rV   rW   lr)   re   r~   r	   r	   r
   rY      s    
zRequired.match)Nr   r   r   rY   r	   r	   r	   r
   r=      s   r=   c                   @   s   e Zd ZdddZdS )r>   Nc                 C   s8   |d krg n|}| j D ]}|||\}}}qd||fS )NTr   )r   rV   rW   re   mr	   r	   r
   rY      s    
zOptional.match)Nr   r	   r	   r	   r
   r>      s   r>   c                   @   s   e Zd ZdZdS )r?   z*Marker/placeholder for [options] shortcut.Nr   r	   r	   r	   r
   r?      s   r?   c                   @   s   e Zd ZdddZdS )r@   Nc                 C   s   t | jdkst|d krg n|}|}|}d }d}d}|rr| jd ||\}}}||r\dnd7 }||krlqr|}q6|dkrd||fS d||fS )Nr.   Tr   F)lenr    r&   rY   )r   rV   rW   r   r)   Zl_r~   timesr	   r	   r
   rY      s     
zOneOrMore.match)Nr   r	   r	   r	   r
   r@      s   r@   c                   @   s   e Zd ZdddZdS )r<   Nc                 C   sb   |d krg n|}g }| j D ](}||| \}}}}|r|| q|rXt|dd dS d||fS )Nc                 S   s   t | d S )Nr.   r   )outcomer	   r	   r
   <lambda>      zEither.match.<locals>.<lambda>)keyF)r    rY   rC   min)r   rV   rW   Zoutcomesre   r~   r{   r   r	   r	   r
   rY     s    
zEither.match)Nr   r	   r	   r	   r
   r<     s   r<   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TokenStreamc                 C   s$   | t |dr| n|7 } || _d S )Nr8   )r!   r8   error)r   rm   r   r	   r	   r
   r   #  s    zTokenStream.__init__c                 C   s   t | r| dS d S Nr   )r   rB   r   r	   r	   r
   move'  s    zTokenStream.movec                 C   s   t | r| d S d S r   r   r   r	   r	   r
   current*  s    zTokenStream.currentN)r   r   r   r   r   r   r	   r	   r	   r
   r   !  s   r   c                    s  |   d\ }} ds"t||  kr6dkr>n ndn|} fdd|D }| jtkrx|g krx fdd|D }t|dkr| d	 d
dd |D f nt|dk r|dkrdnd}td |}|	| | jtkrtd ||r|nd}nt|d j
|d j|d j|d j}|jdkrJ|dk	rz| d|j n0|dkrz|  dkrr| d|j |   }| jtkr|dk	r|nd|_|gS )z-long ::= '--' chars [ ( ' ' | '=' ) chars ] ;rt   ru   r   Nc                    s   g | ]}|j  kr|qS r	   rq   r,   or   r	   r
   r-   3  s     
 zparse_long.<locals>.<listcomp>c                    s"   g | ]}|j r|j  r|qS r	   )rq   ry   r   r   r	   r
   r-   5  s       r.   z%s is not a unique prefix: %s?r\   c                 s   s   | ]}|j V  qd S r   r   r   r	   r	   r
   r]   8  s     zparse_long.<locals>.<genexpr>r   Tz%s must not have an argument%s requires argument)r   rw   ry   r&   r   r   r   r^   r5   rC   rp   rq   r6   r7   r   )tokensrz   eqr7   similarr6   r   r	   r   r
   
parse_long.  s<     

 

r   c                    s\  |   }|dr|dr t|d}g }|dkrXd|d  |dd   } fdd|D }t|dkr| d	 t|f nt|dk rt dd}|| | jtkrt ddd
}nt |d j	|d j
|d j}d}|j
dkr,|dkr$|  dkr| d  |   }n|}d}| jtkrL|dk	rF|nd
|_|| q.|S )z-shorts ::= '-' ( chars )* [ [ ' ' ] chars ] ;rv   ru   r   r   r.   Nc                    s   g | ]}|j  kr|qS r	   rp   r   r   r	   r
   r-   W  s     
 z parse_shorts.<locals>.<listcomp>z$%s is specified ambiguously %d timesTr   )r   ry   r&   lstripr   r   r5   rC   r   rq   r6   r7   r   )r   rz   tokenrV   parsedr   r   r7   r	   r   r
   parse_shortsO  s@    




 

r   c                 C   sF   t tdd| t}t||}| d k	r>|dd| t| S )Nz([\[\]\(\)\|]|\.\.\.)z \1 zunexpected ending: %rrs   )	r   ri   subr   
parse_exprr   r   r^   r=   )rm   rz   r   resultr	   r	   r
   parse_patternr  s    
r   c                 C   s   t | |}|  dkr|S t|dkr0t| gn|}|  dkrr|   t | |}|t|dkrjt| gn|7 }q4t|dkrt| gS |S )zexpr ::= seq ( '|' seq )* ;|r.   )	parse_seqr   r   r=   r   r<   )r   rz   seqr   r	   r	   r
   r   {  s    

 r   c                 C   sF   g }|   dkrBt| |}|   dkr8t| g}|   ||7 }q|S )zseq ::= ( atom [ '...' ] )* ;)N])r   z...)r   
parse_atomr@   r   )r   rz   r   Zatomr	   r	   r
   r     s    


r   c                 C   s   |   }g }|dkrd|   dtgdtgd| \}}|t| | }|  |kr^| d| |gS |dkr||   t gS |dr|dkrt| |S |dr|d	krt	| |S |d
r|
ds| rt|  gS t|  gS dS )ziatom ::= '(' expr ')' | '[' expr ']' | 'options'
             | long | shorts | argument | command ;
    z([r   r   )([zunmatched '%s'rz   ru   rv   )rv   ru   <>N)r   r   r=   r>   r   r   r?   ry   r   r   endswithisupperr4   r9   )r   rz   r   r   Zmatchingpatternr	   r	   r
   r     s&    

r   Fc                 C   s   g }|   dk	r|   dkr.|dd | D  S |   drL|t| |7 }q|   drv|   dkrv|t| |7 }q|r|dd | D  S |td|   q|S )zParse command-line argument vector.

    If options_first:
        argv ::= [ long | shorts ]* [ argument ]* [ '--' [ argument ]* ] ;
    else:
        argv ::= [ long | shorts | argument ]* [ '--' [ argument ]* ] ;

    Nru   c                 S   s   g | ]}t d |qS r   r4   r,   vr	   r	   r
   r-     s     zparse_argv.<locals>.<listcomp>rv   c                 S   s   g | ]}t d |qS r   r   r   r	   r	   r
   r-     s     )r   ry   r   r   rC   r4   r   )r   rz   options_firstr   r	   r	   r
   
parse_argv  s    	r   c                 C   sN   t d| dd  }dd t|d d d |dd d D }dd |D }|S )Nz
 *(<\S+?>|-\S+?)r.   c                 S   s   g | ]\}}|| qS r	   r	   )r,   s1s2r	   r	   r
   r-     s     z"parse_defaults.<locals>.<listcomp>rA   c                 S   s    g | ]}| d rt|qS )rv   )ry   r5   rn   r,   r}   r	   r	   r
   r-     s     
 )ri   r8   zip)docr8   rz   r	   r	   r
   parse_defaults  s    (r   c                 C   sV   t d| }t|dk r tdt|dkr4tdt dd|dd  d  S )	Nz([Uu][Ss][Aa][Gg][Ee]:)   z&"usage:" (case-insensitive) not found.z*More than one "usage:" (case-insensitive).z\n\s*\nr   r.   r   )ri   r8   r   r   r^   r   )r   Zusage_splitr	   r	   r
   printable_usage  s    r   c                    s8   |   dd   dd fdd dd  D  d S )Nr.   z( rs   c                 3   s"   | ]}| d  krdn|V  qdS )r   z) | (Nr	   r   Zpur	   r
   r]     s     zformal_usage.<locals>.<genexpr>z ))r8   r^   )r   r	   r   r
   formal_usage  s    r   c                 C   sV   | r,t dd |D r,t|d t  |rRt dd |D rRt| t  d S )Nc                 s   s   | ]}|j d ko|jV  qdS ))z-hz--helpNrK   r   r	   r	   r
   r]     s     zextras.<locals>.<genexpr>r   c                 s   s   | ]}|j d ko|jV  qdS )z	--versionNrK   r   r	   r	   r
   r]     s     )anyprintr   sysexit)helpversionrz   r   r	   r	   r
   extras  s    r   c                   @   s   e Zd Zdd ZdS )Dictc                 C   s    dd dd t|  D  S )Nz{%s}z,
 c                 s   s   | ]}d | V  qdS )z%r: %rNr	   )r,   r(   r	   r	   r
   r]     s     z Dict.__repr__.<locals>.<genexpr>)r^   sorteditemsr   r	   r	   r
   rO     s    zDict.__repr__N)r   r   r   rO   r	   r	   r	   r
   r     s   r   Tc                 C   s   |dkrt jdd }t| t_t| }tttj|}tt	|tt
||}t|t}|tD ]}t| }	t
t|	| |_qft||||  | |\}
}}|
r|g krtdd | | D S t dS )a  Parse `argv` based on command-line interface described in `doc`.

    `docopt` creates your command-line interface based on its
    description that you pass as `doc`. Such description can contain
    --options, <positional-argument>, commands, which could be
    [optional], (required), (mutually | exclusive) or repeated...

    Parameters
    ----------
    doc : str
        Description of your command-line interface.
    argv : list of str, optional
        Argument vector to be parsed. sys.argv[1:] is used if not
        provided.
    help : bool (default: True)
        Set to False to disable automatic help on -h or --help
        options.
    version : any object
        If passed, the object will be printed if --version is in
        `argv`.
    options_first : bool (default: False)
        Set to True to require options preceed positional arguments,
        i.e. to forbid options and positional arguments intermix.

    Returns
    -------
    args : dict
        A dictionary, where keys are names of command-line elements
        such as e.g. "--verbose" and "<path>", and values are the
        parsed values of those elements.

    Example
    -------
    >>> from docopt import docopt
    >>> doc = '''
    Usage:
        my_program tcp <host> <port> [--timeout=<seconds>]
        my_program serial <port> [--baud=<n>] [--timeout=<seconds>]
        my_program (-h | --help | --version)

    Options:
        -h, --help  Show this screen and exit.
        --baud=<n>  Baudrate [default: 9600]
    '''
    >>> argv = ['tcp', '127.0.0.1', '80', '--timeout', '30']
    >>> docopt(doc, argv)
    {'--baud': '9600',
     '--help': False,
     '--timeout': '30',
     '--version': False,
     '<host>': '127.0.0.1',
     '<port>': '80',
     'serial': False,
     'tcp': True}

    See also
    --------
    * For video introduction see http://docopt.org
    * Full documentation is available in README.rst as well as online
      at https://github.com/docopt/docopt#readme

    Nr.   c                 s   s   | ]}|j |jfV  qd S r   rK   rQ   r	   r	   r
   r]   B  s     zdocopt.<locals>.<genexpr>)r   argvr   r   r   r   r   r   r   r   r"   r#   r$   r5   r?   r    r   r   rY   r   )r   r   r   r   r   rz   r   Zpattern_optionsZaoZdoc_optionsr~   rV   rW   r	   r	   r
   r     s"    ?
)F)NTNF)%r   r   ri   __all____version__	Exceptionr   r   r   objectr   rJ   r[   r4   r9   r5   r=   r>   r?   r@   r<   r"   r   r   r   r   r   r   r   r   r   r   r   r   dictr   r   r	   r	   r	   r
   <module>   s>   
K!(	!#	


	