
    ]eM                        d Z ddlZddlZdgZdZ G d de      Z G d de      Z G d	 d
e	      Z
 G d de
      Z G d de
      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d d e      Zd! Zd" Zd# Zd$ Zd% Zd& Zd/d'Zd( Zd) Zd* Z d+ Z! G d, d-e"      Z#d0d.Z$y)1a  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                       e Zd ZdZy)DocoptLanguageErrorz4Error in construction of usage-message by developer.N__name__
__module____qualname____doc__     (/usr/lib/python3/dist-packages/docopt.pyr   r      s    >r   r   c                       e Zd ZdZdZddZy)
DocoptExitz;Exit in case user invoked program with incorrect arguments. c                 l    t         j                  | |dz   | j                  z   j                                y )N
)
SystemExit__init__usagestrip)selfmessages     r   r   zDocoptExit.__init__   s(    D7T>DJJ#>"E"E"GHr   N)r   )r   r   r	   r
   r   r   r   r   r   r   r      s    EEIr   r   c                   <    e Zd Zd Zd Zd ZddZd Zed        Z	y)	Patternc                 0    t        |       t        |      k(  S Nrepr)r   others     r   __eq__zPattern.__eq__"   s    DzT%[((r   c                 *    t        t        |             S r   )hashr   r   s    r   __hash__zPattern.__hash__%   s    DJr   c                 F    | j                          | j                          | S r   )fix_identitiesfix_repeating_argumentsr#   s    r   fixzPattern.fix(   s    $$&r   Nc                 0   t        | d      s| S |"t        t        | j                                     n|}t	        | j
                        D ]J  \  }}t        |d      s(||v sJ ||j                  |         | j
                  |<   :|j                  |       L y)z>Make pattern-tree tips point to same object if they are equal.childrenN)hasattrlistsetflat	enumerater*   indexr&   )r   uniqics       r   r&   zPattern.fix_identities-   s    tZ(K)-tC		$%4dmm, 	'DAq1j)Dy y#'

1#6a   &	'r   c                 T   | j                   j                  D cg c]  }t        |j                         }}|D ]  }|D cg c]  }|j                  |      dkD  s| c}D ]  }t	        |      t
        u st	        |      t        u rZ|j                  rN|j                  g |_        n:t	        |j                        t        ur|j                  j                         |_        t	        |      t        u s"t	        |      t        u s|j                  dk(  sd|_          | S c c}w c c}w )z5Fix elements that should accumulate/increment values.   r   )eitherr*   r,   counttypeArgumentOptionargcountvaluesplitCommand)r   r3   r6   casees        r   r'   zPattern.fix_repeating_arguments9   s    ,0KK,@,@Aq$qzz"AA 	 D!%;AA):a;  7h&$q'V*;

ww"$aggd2"#''--/7g%aF):qzzQAG 	   B;s   D  D%D%c                    g }| gg}|r|j                  d      }|D cg c]  }t        |       }}t        |v rm|D cg c]  }t        |      t        u s| c}d   }|j                  |j                  |             |j                  D ]  }|j                  |g|z           nt        |v rn|D cg c]  }t        |      t        u s| c}d   }|j                  |j                  |             |j                  t        |j                        |z          nst        |v rm|D cg c]  }t        |      t        u s| c}d   }|j                  |j                  |             |j                  t        |j                        |z          nt        |v rm|D cg c]  }t        |      t        u s| c}d   }|j                  |j                  |             |j                  t        |j                        |z          nt        |v rp|D cg c]  }t        |      t        u s| c}d   }	|j                  |j                  |	             |j                  t        |	j                        dz  |z          n|j                  |       |rt        |D 
cg c]
  }
t        |
  c}
 S c c}w c c}w c c}w c c}w c c}w c c}w c c}
w )zATransform pattern into an equivalent, with only top-level Either.r      )popr8   Eitherr0   r*   appendRequiredr,   Optional
AnyOptions	OneOrMore)r   retgroupsr*   r3   typesr6   requiredoptional	oneormorer@   s              r   r6   zPattern.eitherG   sU   
 &zz!}H&./T!W/E/%-CaF1B!CAFX^^F34 2AMM1#.12U"'/G!47h3FAGJX^^H56d8#4#45@AU"'/G!47h3FAGJX^^H56d8#4#45@Au$'/I!47j3HAI!LX^^H56d8#4#45@Ae#(0I1DGy4HQI!L	X^^I67d9#5#56:XEF

8$3 4 c2!2331 0C
 H H J J
 3sF   J1J6J64J;J;*K K K6KK
+K
Kr   )
r   r   r	   r    r$   r(   r&   r'   propertyr6   r   r   r   r   r       s/    ) 

'  4  4r   r   c                   (    e Zd ZddZd Zd ZddZy)ChildPatternNc                      || _         || _        y r   namer<   r   rU   r<   s      r   r   zChildPattern.__init__m       	
r   c                 h    | j                   j                  d| j                  d| j                  dS )N(, ))	__class__r   rU   r<   r#   s    r   __repr__zChildPattern.__repr__q   s!    #~~66		4::NNr   c                 *    |rt        |       |v r| gS g S r   )r8   )r   rL   s     r   r.   zChildPattern.flatt   s    "d4jE&9vArAr   c                    |g n|}| j                  |      \  }}|d||fS |d | ||dz   d  z   }|D cg c]  }|j                  | j                  k(  s|  }}t        | j                        t        t
        fv rt        | j                        t        u rd}n4t        |j                        t        u r|j                  gn|j                  }|s||_        d|||gz   fS |d   xj                  |z  c_        d||fS d|||gz   fS c c}w )NFr5   Tr   )single_matchrU   r8   r<   intr,   str)	r   left	collectedposmatchleft_a	same_name	increments	            r   rf   zChildPattern.matchw   s   #+B	&&t,
U=$	))Tc
T#'(^+ )A1QVVtyy-@QA	A

T{*DJJ3&	.25;;.?3.Fekk]"'++ 'UI$777aL)+	))UI/// Bs   DDr   )r   r   r	   r   r]   r.   rf   r   r   r   rR   rR   k   s    OB0r   rR   c                       e Zd Zd Zd Zd Zy)ParentPatternc                 $    t        |      | _        y r   )r,   r*   )r   r*   s     r   r   zParentPattern.__init__   s    Xr   c                 z    | j                   j                  ddj                  d | j                  D              dS )NrY   rZ   c              3   2   K   | ]  }t        |        y wr   r   .0rh   s     r   	<genexpr>z)ParentPattern.__repr__.<locals>.<genexpr>   s     $DT!W$Ds   r[   )r\   r   joinr*   r#   s    r   r]   zParentPattern.__repr__   s1    >>2299$Ddmm$DDF 	Fr   c                     t        |       |v r| gS t        | j                  D cg c]  } |j                  |  c}g       S c c}w r   )r8   sumr*   r.   )r   rL   r3   s      r   r.   zParentPattern.flat   s>    :6MDMM:qFAFFEN:B??:s   AN)r   r   r	   r   r]   r.   r   r   r   rl   rl      s    'F@r   rl   c                   "    e Zd Zd Zed        Zy)r9   c                     t        |      D ]:  \  }}t        |      t        u s|t        | j                  |j                        fc S  yNNN)r/   r8   r9   rU   r<   r   rc   nps       r   r`   zArgument.single_match   sD    dO 	7DAqAw("(499agg666	7 r   c                     t        j                  d|      d   }t        j                  d|t         j                        } | ||r	|d         S d       S )Nz(<\S*?>)r   \[default: (.*)\]flags)refindallI)class_sourcerU   r<   s       r   parsezArgument.parse   sI    zz+v.q1

/rttDdE!H88488r   N)r   r   r	   r`   classmethodr   r   r   r   r9   r9      s     9 9r   r9   c                       e Zd ZddZd Zy)r>   c                      || _         || _        y r   rT   rV   s      r   r   zCommand.__init__   rW   r   c                     t        |      D ]K  \  }}t        |      t        u s|j                  | j                  k(  r|t        | j                  d      fc S  y y)NTry   )r/   r8   r9   r<   rU   r>   rz   s       r   r`   zCommand.single_match   sV    dO 	DAqAw("77dii'gdii666	 r   NF)r   r   r	   r   r`   r   r   r   r>   r>      s    r   r>   c                   @    e Zd ZddZed        Zd Zed        Zd Z	y)r:   Nc                 v    |dv sJ ||c| _         | _        ||c| _        | _        |du r
|rd | _        y || _        y )N)r   r5   Fshortlongr;   r<   )r   r   r   r;   r<   s        r   r   zOption.__init__   sE    6!!! %t
DI$,e!tz"e^T
e
r   c                    d\  }}}}|j                         j                  d      \  }}}|j                  dd      j                  dd      }|j                         D ],  }	|	j	                  d      r|	}|	j	                  d      r|	}+d}. |r/t        j                  d	|t
        j                  
      }
|
r|
d   nd } | ||||      S )NNNr   Fz  , =---r5   r~   r   r   )r   	partitionreplacer=   
startswithr   r   r   )r   option_descriptionr   r   r;   r<   options_descriptionsmatcheds              r   r   zOption.parse   s    ';$tXu"4":":"<"F"Ft"LK//#s+33C= 	A||D!c"	 jj!5{"$$OG")GAJtEeT8U33r   c                 h    t        |      D ]$  \  }}| j                  |j                  k(  s ||fc S  yrx   )r/   rU   rz   s       r   r`   zOption.single_match   s7    dO 	DAqyyAFF"!t	 r   c                 6    | j                   xs | j                  S r   )r   r   r#   s    r   rU   zOption.name   s    yy&DJJ&r   c           	      p    d| j                   d| j                  d| j                  d| j                  d	S )NzOption(rZ   r[   r   r#   s    r   r]   zOption.__repr__   s(    +/::tyy+/==$**F 	Fr   r   )
r   r   r	   r   r   r   r`   rP   rU   r]   r   r   r   r:   r:      s;    D 4 4  ' 'Fr   r:   c                       e Zd ZddZy)rF   Nc                     |g n|}|}|}| j                   D ]!  }|j                  ||      \  }}}|rd||fc S  d||fS )NFTr*   rf   )r   rc   rd   lr3   r|   r   s          r   rf   zRequired.match   s^    #+B	 	.AGGAqMMGQdI--	. Qzr   r   r   r   r	   rf   r   r   r   rF   rF      s    r   rF   c                       e Zd ZddZy)rG   Nc                 f    |g n|}| j                   D ]  }|j                  ||      \  }}} d||fS )NTr   )r   rc   rd   r|   ms        r   rf   zOptional.match   sE    #+B	 	:A!"y!9AtY	:T9$$r   r   r   r   r   r   rG   rG      s    %r   rG   c                       e Zd ZdZy)rH   z*Marker/placeholder for [options] shortcut.Nr   r   r   r   rH   rH      s    4r   rH   c                       e Zd ZddZy)rI   Nc                     t        | j                        dk(  sJ |g n|}|}|}d }d}d}|r7| j                  d   j                  ||      \  }}}||rdndz  }||k(  rn|}|r7|dk\  rd||fS d||fS )Nr5   Tr   F)lenr*   rf   )r   rc   rd   r   r3   l_r   timess           r   rf   zOneOrMore.match   s    4==!Q&&&#+B	 MM!,221a8MGQ'Qq(EQwB  A:A:dI%%r   r   r   r   r   r   rI   rI      s    &r   rI   c                       e Zd ZddZy)rD   Nc                     |g n|}g }| j                   D ].  }|j                  ||      x\  }}}}|s|j                  |       0 |rt        |d       S d||fS )Nc                     t        | d         S )Nr5   r   )outcomes    r   <lambda>zEither.match.<locals>.<lambda>  s    S_ r   )keyF)r*   rf   rE   min)r   rc   rd   outcomesr|   r   r   r   s           r   rf   zEither.match  sp    #+B	 	)A&'ggdI&>>MGQG(	) x%DEEdI%%r   r   r   r   r   r   rD   rD     s    	&r   rD   c                       e Zd Zd Zd Zd Zy)TokenStreamc                 T    | t        |d      r|j                         n|z  } || _        y )Nr=   )r+   r=   error)r   r   r   s      r   r   zTokenStream.__init__#  s$    '&'":F
r   c                 >    t        |       r| j                  d      S d S Nr   )r   rC   r#   s    r   movezTokenStream.move'  s    !$itxx{1T1r   c                 &    t        |       r| d   S d S r   r   r#   s    r   currentzTokenStream.current*  s    d)tAw--r   N)r   r   r	   r   r   r   r   r   r   r   r   !  s    2.r   r   c                 R   | j                         j                  d      \  }}}|j                  d      sJ ||cxk(  rdk(  rn ndn|}|D cg c]  }|j                  |k(  s| }}| j                  t
        u r=|g k(  r8|D cg c]-  }|j                  s|j                  j                  |      s,|/ }}t        |      dkD  r-| j	                  |ddj                  d |D              d	      t        |      dk  rN|dk(  rdnd
}t        d||      }|j                  |       | j                  t
        u rt        d|||r|nd      }|gS t        |d
   j                  |d
   j                  |d
   j                  |d
   j                        }|j                  d
k(  r |^| j	                  d|j                  z        |>| j                         | j	                  d|j                  z        | j                         }| j                  t
        u r||nd|_        |gS c c}w c c}w )z-long ::= '--' chars [ ( ' ' | '=' ) chars ] ;r   r   r   Nr5   z is not a unique prefix: rZ   c              3   4   K   | ]  }|j                     y wr   )r   rq   os     r   rr   zparse_long.<locals>.<genexpr>8  s     +DqAFF+Ds   ?r   Tz%s must not have an argument%s requires argument)r   r   r   r   r   r   r   rs   r:   rE   r   r;   r<   r   )tokensr   r   eqr<   r   similarr;   s           r   
parse_longr   .  s   kkm--c2OD"e??4   %%2%D5E!4QQVVt^q4G4||z!gm%LAFF4E4Ed4K1LL
7|all $))+DG+D"DF G 	G	W	c	1q4x(q<<:%tT8hUDIA 3J 71:##WQZ__1:&&
(8(8:::? ll#AAFF#JKK}>>#+ ,,'='FGG<<:%$0edAG3J3 5Ls   H"HH$H$1H$c                 h   | j                         }|j                  d      r|j                  d      rJ |j                  d      }g }|dk7  r_d|d   z   |dd }}|D cg c]  }|j                  |k(  s| }}t	        |      dkD  r| j                  d|t	        |      fz        t	        |      dk  r?t        |dd      }|j                  |       | j
                  t        u rt        |ddd      }nt        ||d   j                  |d   j                  |d   j                        }d}|j                  dk7  r>|dk(  r5| j                         | j                  d	|z        | j                         }n|}d}| j
                  t        u r||nd|_        |j                  |       |dk7  r_|S c c}w )
z-shorts ::= '-' ( chars )* [ [ ' ' ] chars ] ;r   r   r   r   r5   Nz$%s is specified ambiguously %d timesTr   )r   r   lstripr   r   r   r:   rE   r   r   r;   r<   r   )	r   r   tokenrc   parsedr   r   r   r<   s	            r   parse_shortsr   O  s   KKMEC )9)9$)???<<DF
"*DGmT!"Xt%:E)91::w<!,,E %s7|4 5 6 6\AudA&ANN1||z)5$40ugajooqz**GAJ,<,<>AEzzQ2:~~'/$ll+AE+IJJ"KKME ED||z)#(#4%$a3 "*4 M1 ;s   F/4F/c                     t        t        j                  dd|       t              }t	        ||      }|j                         #|j                  ddj                  |      z        t        | S )Nz([\[\]\(\)\|]|\.\.\.)z \1 zunexpected ending: %rr   )	r   r   subr   
parse_exprr   r   rs   rF   )r   r   r   results       r   parse_patternr   r  sa     8'6J,.F(F~~#ll2SXXf5EEFFVr   c                 f   t        | |      }| j                         dk7  r|S t        |      dkD  r	t        | gn|}| j                         dk(  rL| j	                          t        | |      }|t        |      dkD  r	t        | gn|z  }| j                         dk(  rLt        |      dkD  r	t        | gS |S )zexpr ::= seq ( '|' seq )* ;|r5   )	parse_seqr   r   rF   r   rD   )r   r   seqr   s       r   r   r   {  s    
FG
$C~~3
!$SAhn3F
..
c
!(c#hl8S>"; ..
c
! !$FaFFO;V;r   c                     g }| j                         dvrPt        | |      }| j                         dk(  rt        | g}| j                          ||z  }| j                         dvrP|S )zseq ::= ( atom [ '...' ] )* ;)N]r[   r   z...)r   
parse_atomrI   r   )r   r   r   atoms       r   r   r     sj    F
..
"7
7&'*>>u$t$%DKKM$ ..
"7
7 Mr   c                    | j                         }g }|dv r`| j                          dt        gdt        gd|   \  }} |t	        | |       }| j                         |k7  r| j                  d|z        |gS |dk(  r| j                          t               gS |j                  d      r|dk7  rt        | |      S |j                  d      r|d	vrt        | |      S |j                  d
      r|j                  d      s|j                         rt        | j                               gS t        | j                               gS )ziatom ::= '(' expr ')' | '[' expr ']' | 'options'
             | long | shorts | argument | command ;
    z([r[   r   )rY   [zunmatched '%s'r   r   r   )r   r   <>)r   r   rF   rG   r   r   rH   r   r   r   endswithisupperr9   r>   )r   r   r   r   matchingpatterns         r   r   r     s#    NNEF}#&/hHO'*VW56;;=H$,,/%788x	)	~			$	ETM&'**			#	5#;FG,,			#	5>>##6%--/'((&''r   c                 2   g }| j                         | j                         dk(  r|| D cg c]  }t        d|       c}z   S | j                         j                  d      r|t        | |      z  }n| j                         j                  d      r#| j                         dk7  r|t	        | |      z  }nH|r|| D cg c]  }t        d|       c}z   S |j                  t        d| j                                      | j                         |S c c}w c c}w )zParse command-line argument vector.

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

    Nr   r   )r   r9   r   r   r   rE   r   )r   r   options_firstr   vs        r   
parse_argvr     s     F
..

&>>t#?1XdA.???^^((.j11F^^((-&..2Bc2Il6733F?1XdA.???MM(478 ..

& M @ @s   D;Dc                    t        j                  d|       dd  }t        |d d d   |dd d         D cg c]
  \  }}||z    }}}|D cg c])  }|j                  d      st        j                  |      + }}|S c c}}w c c}w )Nz\n *(<\S+?>|-\S+?)r5   rB   r   )r   r=   zipr   r:   r   )docr=   s1s2r   r   s         r   parse_defaultsr     s    HH*C04E#&uSqSz5A;#?@RR"W@E@(-C1c1Bv||ACGC N	 ACs   A=B"Bc                    t        j                  d|       }t        |      dk  rt        d      t        |      dkD  rt        d      t        j                  ddj	                  |dd              d   j                         S )	Nz([Uu][Ss][Aa][Gg][Ee]:)   z&"usage:" (case-insensitive) not found.z*More than one "usage:" (case-insensitive).z\n\s*\nr   r5   r   )r   r=   r   r   rs   r   )r   usage_splits     r   printable_usager     ss    ((5s;K
;!!"JKK
;!!"NOO88JAB 89!<BBDDr   c                 p    | j                         dd  ddj                  fddd  D              z   dz   S )Nr5   z( r   c              3   6   K   | ]  }|d    k(  rdn|  yw)r   z) | (Nr   )rq   r   pus     r   rr   zformal_usage.<locals>.<genexpr>  s      HAa2a5j7a7Hs   z ))r=   rs   )r   r   s    @r   formal_usager     s=    				 	$B#((HABHHH4OOr   c                     | r@t        d |D              r.t        |j                  d             t        j                          |r3t        d |D              r t        |       t        j                          y y y )Nc              3   T   K   | ]   }|j                   d v xr |j                   " yw))z-hz--helpNrT   r   s     r   rr   zextras.<locals>.<genexpr>  s&     NQVV//<QWW<Ns   &(r   c              3   V   K   | ]!  }|j                   d k(  xr |j                   # yw)z	--versionNrT   r   s     r   rr   zextras.<locals>.<genexpr>  s%     JQqvv,88Js   '))anyprintr   sysexit)helpversionr   r   s       r   extrasr    sS    NgNNciio
3J'JJg
 Kwr   c                       e Zd Zd Zy)Dictc                 f    ddj                  d t        | j                               D              z  S )Nz{%s}z,
 c              3   &   K   | ]	  }d |z    yw)z%r: %rNr   )rq   r2   s     r   rr   z Dict.__repr__.<locals>.<genexpr>  s     #OQHqL#Os   )rs   sorteditemsr#   s    r   r]   zDict.__repr__  s'    #O&:N#OOOOr   N)r   r   r	   r]   r   r   r   r  r    s    Pr   r  c                    |t         j                  dd }t        |       t        _        t        |       }t        t        t        j                        |      }t        t        |t              t        |      |      }t        |j                  t                    }|j                  t              D ])  }t        |       }	t        t        |	      |z
        |_        + t!        ||||        |j#                         j%                  |      \  }
}}|
r(|g k(  r#t'        d |j                         |z   D              S t               )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

    Nr5   c              3   L   K   | ]  }|j                   |j                  f  y wr   rT   rp   s     r   rr   zdocopt.<locals>.<genexpr>B  s     L!QVVQWW%Ls   "$)r   argvr   r   r   r   r   r   r   r   r,   r-   r.   r:   rH   r*   r  r(   rf   r  )r   r  r  r  r   r   r   pattern_optionsaodoc_optionsr   rc   rd   s                r   r   r     s
   ~ |xx|&s+JS!GL)9)9:GDG k$
3T']#%D',,v./Oll:& ?$S)3{+o=>? 4$$&{{}2248GT942:L0JLLL
,r   r   )NTNF)%r
   r   r   __all____version__	Exceptionr   r   r   objectr   rR   rl   r9   r>   r:   rF   rG   rH   rI   rD   r,   r   r   r   r   r   r   r   r   r   r   r   r  dictr  r   r   r   r   <module>r     s"    	 *?) ?
I IH4f H4V07 0B@G @9| 9h  %F\ %FP
} 
%} %5 5
& &,&] &
.$ 
.B F
<	(40EP
P4 P
Vr   