HEX
Server: LiteSpeed
System: Linux standart9.isimtescil.net 3.10.0-962.3.2.lve1.5.26.7.el7.x86_64 #1 SMP Wed Oct 2 07:53:12 EDT 2019 x86_64
User: karalev (5310)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: //opt/alt/python37/lib/python3.7/site-packages/tempita/__pycache__/__init__.cpython-37.pyc
B

��]��@sJdZddlZddlZddlZddlmZddlZddlZddl	m
Z
ddlmZddl
mZmZmZmZmZddd	d
ddd
gZe�d�Ze�dej�ZGdd�de�ZGdd�de�ZGdd�de�Zdd�ZGdd�de�ZdVdd	�ZdWdd�Z Gdd
�d
e!�Z"Gdd�de�Z#dXdd�Z$d d!�Z%d"d#�Z&Gd$d
�d
e�Z'd%d�Z(Gd&d'�d'e�Z)Gd(d)�d)e�Z*Gd*d+�d+e�Z+Gd,d-�d-e�Z,e,�Z-[,dYd.d/�Z.e�d0�Z/d1d2d3d4d5d6gZ0e�d7�Z1e�d8�Z2d9d:�Z3d;d<�Z4dZd=d>�Z5d[d@dA�Z6dBdC�Z7dDdE�Z8dFdG�Z9dHdI�Z:dJdK�Z;dLdM�Z<dNdO�Z=dPdQ�Z>dRZ?d\dSdT�Z@eAdUk�rFe@�dS)]a�
A small templating language

This implements a small templating language.  This language implements
if/elif/else, for/continue/break, expressions, and blocks of Python
code.  The syntax is::

  {{any expression (function calls etc)}}
  {{any expression | filter}}
  {{for x in y}}...{{endfor}}
  {{if x}}x{{elif y}}y{{else}}z{{endif}}
  {{py:x=1}}
  {{py:
  def foo(bar):
      return 'baz'
  }}
  {{default var = default_value}}
  {{# comment}}

You use this with the ``Template`` class or the ``sub`` shortcut.
The ``Template`` class takes the template string and the name of
the template (for errors) and a default namespace.  Then (like
``string.Template``) you can call the ``tmpl.substitute(**kw)``
method to make a substitution (or ``tmpl.substitute(a_dict)``).

``sub(content, **kw)`` substitutes the template immediately.  You
can use ``__name='tmpl.html'`` to set the name of the template.

If there are syntax errors ``TemplateError`` will be raised.
�N)�quote)�StringIO)�looper)�bytes�basestring_�next�
is_unicode�coerce_text�
TemplateError�Template�sub�HTMLTemplate�sub_html�html�bunchz\s+in\s+z^[a-z_][a-z0-9_]*$c@s"eZdZdZddd�Zdd�ZdS)r
z.Exception raised while parsing a template
    NcCst�||�||_||_dS)N)�	Exception�__init__�position�name)�self�messagerr�r�A/opt/alt/python37/lib/python3.7/site-packages/tempita/__init__.pyr5szTemplateError.__init__cCsDd�|j�}|jr,d||jd|jdf}|jr@|d|j7}|S)N� z%s at line %s column %sr�z in %s)�join�argsrr)r�msgrrr�__str__:szTemplateError.__str__)N)�__name__�
__module__�__qualname__�__doc__rrrrrrr
1s
c@seZdZdS)�_TemplateContinueN)rr r!rrrrr#Dsr#c@seZdZdS)�_TemplateBreakN)rr r!rrrrr$Hsr$cCs.tj�tj�|j�|�}|jj||j|jd�S)N)�	namespace�get_template)	�os�pathr�dirnamer�	__class__�
from_filenamer%r&)rZ
from_templater(rrr�get_file_templateLsr,c@s�eZdZdded�ZdZdZd#dd�Zdddefd	d
�Z	e
e	�Z	dd�Zd
d�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�ZdS)$rz{{z}})�start_braces�
end_bracesr�utf8Nrc	Csh||_|dkr$|jd|jdf}nLt|�dkrBtdd�|D��sFt�|jj��|_|d|jd<|d|jd<||_t|�|_	|dk�r |dk	�r yt
�|�}	Wntk
r�YnjX|	j
}
|	j}d|
kr�|
d}|�d	�s�|�d
�r�|dd�}nd|
k�r
|
d}nd
}|�r |d|7}||_t||||jd�|_|dk�rHi}||_||_|dk	�rd||_dS)Nr-r.�cSsg|]}t|t��qSr)�
isinstance�str)�.0Z	delimeterrrr�
<listcomp>hsz%Template.__init__.<locals>.<listcomp>rr�__file__z.pycz.pyo���rz<string>z:%s)r�line_offset�
delimeters)�content�default_namespace�len�all�AssertionErrorr*�copyr8r�_unicode�sys�	_getframe�
ValueError�	f_globals�f_lineno�endswithr�parse�_parsedr%r&�default_inherit)rr9rr%�
stacklevelr&rHr7r8�caller�globals�linenorrrr^sF




zTemplate.__init__cCs:t|d�}|��}|��|r(|�|�}||||||d�S)N�rb)r9rr%rHr&)�open�read�close�decode)�cls�filenamer%�encodingrHr&�f�crrrr+�s

zTemplate.from_filenamecCs$d|jjtt|��dd�|jfS)Nz<%s %s name=%r>r0)r*r�hex�idr)rrrr�__repr__�szTemplate.__repr__cOs�|rL|rtd��t|�dkr$td��t|dd�sDtd|df��|d}|}|j|d<|jrl|�|j�|�|�\}}}|s�|j}|r�|�||||�}|S)Nz3You can only give positional *or* keyword argumentsrz)You can only give one positional argumentr�itemszqIf you pass in a single argument, you must pass in a dictionary-like object (with a .items() method); you gave %rZ__template_name__)	�	TypeErrorr;�hasattrrr%�update�
_interpretrH�_interpret_inherit)rr�kw�ns�result�defs�inheritrrr�
substitute�s,
zTemplate.substitutecCsHd}g}i}|j|j|||d�d|kr4|�d�}nd}d�|�||fS)NT)�outrc�__inherit__�)�_interpret_codesrG�popr)rra�__traceback_hide__�partsrcrdrrrr^�szTemplate._interpretc
Csrd}|jstdd|jd��|�||�}t|j�}x |��D]\}}	t|||	�q:W||_|��}||d<|�|�S)NTz:You cannot use inheritance without passing in get_template)rrr)	r&r
r�TemplateObjectrZ�setattr�bodyr>re)
rrorcZinherit_templaterarkZtemplZself_r�valuerrrr_�s
zTemplate._interpret_inheritcCs<d}x2|D]*}t|t�r$|�|�q
|�||||�q
WdS)NT)r1r�append�_interpret_code)r�codesrarfrcrk�itemrrrri�s


zTemplate._interpret_codescCsd}|d|d}}|dkr4|�|d||��n�|dkrFt���n�|dkrXt���n�|dkr�|d|d	|d
}}	}
|�|	||�}	|�||	|
|||��n`|dkr�|dd�}|�||||��n8|dk�r6|d�d
�}|�|d||�}x,|dd�D]}
|�|
||�}||�}�qW|�|�||��n�|dk�rt|d|d	}}	||k�r|�|	||�}|||<n�|dk�r�|d}	|�|	||�}||d<nd|dk�r�|d}|d	}|d
}t	||||||d�||<||<n |dk�r�dSd�st
d|��dS)NTrr�pyr0�continue�break�for���cond�expr�|�defaultrdrg�def)rora�pos�commentzUnknown code: %r)�_execr#r$�_eval�_interpret_for�
_interpret_if�splitrq�_repr�TemplateDefr=)r�coderarfrcrkrr��varsr|r9rl�base�part�func�varrbrp�	signaturerrrrr�sP









zTemplate._interpret_codec	Cs�d}x�|D]�}t|�dkr(|||d<nHt|�t|�krPtdt|�t|�f��xt||�D]\}	}
|
||	<q\Wy|�||||�Wq
tk
r�w
Yq
tk
r�PYq
Xq
WdS)NTrrz&Need %i items to unpack (got %i items))r;rB�ziprir#r$)rr�r|r9rarfrcrkrtrrprrrr�s 
zTemplate._interpret_forc
Cspd}xf|D]^}t|t�rt�|d|d}}|dkr<d}	n|�|d||�}	|	r
|�|d|||�Pq
WdS)NTrr�elser0ry)r1rr=r�ri)
rrlrarfrcrkr�rr�rbrrrr�s
zTemplate._interpret_ifc	
Cs�d}yFyt||j|�}Wn.tk
rF}ztd|��Wdd}~XYnX|St��}|d}t|dd�rz|jd}nt|�}|�||�f|_|d|��	|d��YnXdS)NTz invalid syntax in expression: %srrrr0)
�evalr:�SyntaxErrorr@�exc_info�getattrrr	�_add_line_info�with_traceback)	rr�rar�rkrp�er�Zarg0rrrr�"s zTemplate._evalcCs|d}yt||j|�Wn`t��}|d}|jrL|�|jd|�f|_n|�d|�f|_|d|��|d��YnXdS)NTrrr0)�execr:r@r�rr�r�)rr�rar�rkr�r�rrrr�5szTemplate._execcCsvd}yn|dkrdS|jrDyt|�}Wqptk
r@t|�}YqpXn,t|t�sVt|�}t|�rp|jrp|�	|j�}WnHt
��}|d}|�|j
d|�f|_
|d|��|d��Yn�X|j�r<t|t��r<|js�td|��y|�|j�}WnFtk
�r8}z&t|j|j|j|j|jd|��Wdd}~XYnXn2|j�snt|��rn|j�sbtd|��|�	|j�}|SdS)	NTrhrrr0zHCannot decode bytes value %r into unicode (no default_encoding provided)z
 in string %rzHCannot encode unicode value %r into bytes (no default_encoding provided))r?r2�UnicodeDecodeErrorrr1rr	r�default_encoding�encoder@r�r�rr�rQrT�object�start�end�reason�UnicodeEncodeError)rrpr�rkr�r�rrrr�BsP
$zTemplate._reprcCs.d||d|df}|jr*|d|j7}|S)Nz%s at line %s column %srrz in file %s)r)rrr�rrrr�ns
zTemplate._add_line_info)NNNNNrN)rr r!rr:r�rHrr,r+�classmethodrYrer^r_rirrr�r�r�r�r�r�rrrrrSs.
+	+
,cKs"|�d�}t|||d�}|�|�S)N�__name)rr8)�getrre)r9r8r`r�tmplrrrrvs
cCst||d�}|�|�S)N)r)rre)r9r�rSr�rrr�paste_script_template_renderer|sr�c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)rcKs&x |��D]\}}t|||�q
WdS)N)rZrn)rr`rrprrrr�szbunch.__init__cCs|||<dS)Nr)rrrprrr�__setattr__�szbunch.__setattr__cCs*y||Stk
r$t|��YnXdS)N)�KeyError�AttributeError)rrrrr�__getattr__�szbunch.__getattr__cCsDd|kr4yt�||�Stk
r0t�|d�SXnt�||�SdS)Nr~)�dict�__getitem__r�)r�keyrrrr��szbunch.__getitem__cCs:dd�|��D�}|��d|jjd�dd�|D��fS)NcSsg|]\}}||f�qSrr)r3�k�vrrrr4�sz"bunch.__repr__.<locals>.<listcomp>z<%s %s>rcSsg|]\}}d||f�qS)z%s=%rr)r3r�r�rrrr4�s)rZ�sortr*rr)rrZrrrrY�s
zbunch.__repr__N)rr r!rr�r�r�rYrrrrr�s
	c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
rcCs
||_dS)N)rp)rrprrrr�sz
html.__init__cCs|jS)N)rp)rrrrr�szhtml.__str__cCs|jS)N)rp)rrrr�__html__�sz
html.__html__cCsd|jj|jfS)Nz<%s %r>)r*rrp)rrrrrY�sz
html.__repr__N)rr r!rrr�rYrrrrr�sTcCs�|st|d�r|��S|dkr"dSt|t�s4t|�}tjdkrft|t�rft�	|�
d�d�}|�d�}nt�	|d�}tjdkr�t|�r�|�dd�}|S)Nr�rh�3�latin1r�ascii�xmlcharrefreplace)
r\r�r1rr	r@�versionr�cgi�escaperQr�r)rp�forcerrr�
html_quote�s

r�cCs"t|�}t|�r|�d�}t|�S)Nr/)r	rr��	url_quote)r�rrr�url�s
r�cKsrt|���}|��g}xJ|D]B\}}|dkr0q|�d�rF|dd�}|�dt|�t|�f�qWtd�|��S)N�_r6z%s="%s"r)�listrZr�rErqr�rr)r`rlrrprrr�attr�s
r�c@s4eZdZej��Ze�eee	e
ed��dd�ZdS)r
)rr�r�r�cCs>t|d�r|��}d}nd}t�|||�}|r6t|�S|SdS)Nr�FT)r\r�rr�r�)rrpr�r�plainrrrr��s
zHTMLTemplate._reprN)
rr r!rr:r>r]r�rr�r�r�r�rrrrr
�s

cKs |�d�}t||d�}|�|�S)Nr�)r)r�r
re)r9r`rr�rrrr�s
c@s@eZdZddd�Zdd�Zdd�Zdd	�Zdd
d�Zdd
�ZdS)r�NcCs.||_||_||_||_||_||_||_dS)N)�	_template�
_func_name�_func_signature�_body�_ns�_pos�_bound_self)r�template�	func_nameZfunc_signaturerorar��
bound_selfrrrr�szTemplateDef.__init__cCsd|j|j|jj|jfS)Nz"<tempita function %s(%s) at %s:%s>)r�r�r�rr�)rrrrrYszTemplateDef.__repr__cCs|�S)Nr)rrrrr	szTemplateDef.__str__cOsZ|�||�}|j��}|�|�|jdk	r4|j|d<g}i}|j�|j|||�d�|�S)Nrrh)	�_parse_signaturer�r>r]r�r�rir�r)rrr`�valuesrarfZsubdefsrrr�__call__s



zTemplateDef.__call__c	Cs0|dkr|S|j|j|j|j|j|j|j|d�S)N)r�)r*r�r�r�r�r�r�)r�obj�typerrr�__get__s
zTemplateDef.__get__cCsTi}|j\}}}}i}xF|��D]:\}	}
|s@|	|kr@td|	��|	|krR|
||<q |
||	<q Wt|�}t|�}xv|r�x|r�|d|kr�|�d�qvW|r�|�d�}	|�d�||	<qp|r�t|�||<Pqptdd�dd�|D����qpWx4|��D](\}	}|	|kr�|j�||j	|j
�||	<q�Wx$|D]}	|	|k�r"td|	���q"W|�rP|||<|S)NzUnexpected argument %srzExtra position arguments: %sz, css|]}t|�VqdS)N)�repr)r3r�rrr�	<genexpr>8sz/TemplateDef._parse_signature.<locals>.<genexpr>zMissing argument: %s)r�rZr[r�rj�tuplerr�r�r�r�)rrr`r��sig_argsZvar_args�var_kw�defaultsZextra_kwrrpZ
value_exprrrrr�sF




zTemplateDef._parse_signature)N)N)	rr r!rrYrr�r�r�rrrrr��s
	
r�c@seZdZdd�Zdd�ZdS)rmcCs||_t|�|_dS)N)�_TemplateObject__name�TemplateObjectGetterr�)rrrrrrHszTemplateObject.__init__cCsd|jj|jfS)Nz<%s %s>)r*rr�)rrrrrYLszTemplateObject.__repr__N)rr r!rrYrrrrrmFsrmc@s$eZdZdd�Zdd�Zdd�ZdS)r�cCs
||_dS)N)�#_TemplateObjectGetter__template_obj)rZtemplate_objrrrrRszTemplateObjectGetter.__init__cCst|j|t�S)N)r�r��Empty)rr�rrrr�Usz TemplateObjectGetter.__getattr__cCsd|jj|jfS)Nz<%s around %r>)r*rr�)rrrrrYXszTemplateObjectGetter.__repr__N)rr r!rr�rYrrrrr�Psr�c@sJeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Ze	j
d
krFeZdS)�_EmptycOs|S)Nr)rrr`rrrr�]sz_Empty.__call__cCsdS)Nrhr)rrrrr`sz_Empty.__str__cCsdS)Nr�r)rrrrrYcsz_Empty.__repr__cCsdS)Nrhr)rrrr�__unicode__fsz_Empty.__unicode__cCstd�S)Nr)�iter)rrrr�__iter__isz_Empty.__iter__cCsdS)NFr)rrrr�__bool__lsz_Empty.__bool__r�N)rr r!r�rrYr�r�r�r@r��__nonzero__rrrrr�\s
r�cCsr|dkrtjdtjdf}d}g}d}d}t�dt�|d�t�|d�f�}	x�|	�|�D]�}
|
�d�}t||
��|�}||dkr�|r�t	d	|d||d
��n&||dkr�|s�t	d|d||d
��||dkr�|||
�
��}
|
r�|�|
�d}n|�|||
�
��|f�d}|
��}|}q^W|�rDt	d
|d||d��||d�}
|
�r`|�|
�|�rnt|�}|S)aY
    Lex a string into chunks:

        >>> lex('hey')
        ['hey']
        >>> lex('hey {{you}}')
        ['hey ', ('you', (1, 7))]
        >>> lex('hey {{')
        Traceback (most recent call last):
            ...
        TemplateError: No }} to finish last expression at line 1 column 7
        >>> lex('hey }}')
        Traceback (most recent call last):
            ...
        TemplateError: }} outside expression at line 1 column 7
        >>> lex('hey {{ {{')
        Traceback (most recent call last):
            ...
        TemplateError: {{ inside expression at line 1 column 10

    Nr-r.Fr)rrz%s|%srz%s inside expression)rrz%s outside expressionTzNo %s to finish last expression)rr)
rr:�re�compiler��finditer�group�
find_positionr�r
r�rq�trim_lex)�srZtrim_whitespacer7r8Zin_expr�chunks�lastZlast_posZtoken_re�matchr|r�r�rrr�lexzsL




r�z.^(?:if |elif |for |def |inherit |default |py:)r��endif�endfor�enddefrvrwz\n\r?[\t ]*$z	^[\t ]*\nc	Cs�d}�x�tt|��D�]�}||}t||t�r2q|d}t�|�sN|tkrNq|sXd}n||d}|dt|�krzd}n||d}t|t�rt|t�s�q|p�t�|�}|dkr�|��s�d}|dk	r�|d|kr�|��s�d}|r|�rt	�|��s|t|�dkr|��s|�rj|dk�r(|���r2|dk�r@d||d<n*t�|�}|d|�
�d�}|||d<|r|}|t|�dk�r�|���s�d||d<qt	�|�}||��d�}|||d<qW|S)aa
    Takes a lexed set of tokens, and removes whitespace when there is
    a directive on a line by itself:

       >>> tokens = lex('{{if x}}\nx\n{{endif}}\ny', trim_whitespace=False)
       >>> tokens
       [('if x', (1, 3)), '\nx\n', ('endif', (3, 3)), '\ny']
       >>> trim_lex(tokens)
       [('if x', (1, 3)), 'x\n', ('endif', (3, 3)), 'y']
    NrrhrTr0r�)�ranger;r1r�statement_re�search�single_statements�trail_whitespace_re�strip�lead_whitespace_rer�r�)	�tokensZ	last_trim�i�currentrt�prev�
next_chunkZprev_ok�mrrrr��sP




r�cCs,|d|���}t|�|t|d�dfS)z/Given a string and index, return (line, column)Nr6r)�
splitlinesr;)�string�indexr7Zleadingrrrr��sr�cCsV|dkrtjdtjdf}t||||d�}g}x |rPt||�\}}|�|�q2W|S)a�
    Parses a string into a kind of AST

        >>> parse('{{x}}')
        [('expr', (1, 3), 'x')]
        >>> parse('foo')
        ['foo']
        >>> parse('{{if x}}test{{endif}}')
        [('cond', (1, 3), ('if', (1, 3), 'x', ['test']))]
        >>> parse('series->{{for x in y}}x={{x}}{{endfor}}')
        ['series->', ('for', (1, 11), ('x',), 'y', ['x=', ('expr', (1, 27), 'x')])]
        >>> parse('{{for x, y in z:}}{{continue}}{{endfor}}')
        [('for', (1, 3), ('x', 'y'), 'z', [('continue', (1, 21))])]
        >>> parse('{{py:x=1}}')
        [('py', (1, 3), 'x=1')]
        >>> parse('{{if x}}a{{elif y}}b{{else}}c{{endif}}')
        [('cond', (1, 3), ('if', (1, 3), 'x', ['a']), ('elif', (1, 12), 'y', ['b']), ('else', (1, 23), None, ['c']))]

    Some exceptions::

        >>> parse('{{continue}}')
        Traceback (most recent call last):
            ...
        TemplateError: continue outside of for loop at line 1 column 3
        >>> parse('{{if x}}foo')
        Traceback (most recent call last):
            ...
        TemplateError: No {{endif}} at line 1 column 3
        >>> parse('{{else}}')
        Traceback (most recent call last):
            ...
        TemplateError: else outside of an if block at line 1 column 3
        >>> parse('{{if x}}{{for x in y}}{{endif}}{{endfor}}')
        Traceback (most recent call last):
            ...
        TemplateError: Unexpected endif at line 1 column 25
        >>> parse('{{if}}{{endif}}')
        Traceback (most recent call last):
            ...
        TemplateError: if with no expression at line 1 column 3
        >>> parse('{{for x y}}{{endfor}}')
        Traceback (most recent call last):
            ...
        TemplateError: Bad for (no "in") in 'x y' at line 1 column 3
        >>> parse('{{py:x=1\ny=2}}')
        Traceback (most recent call last):
            ...
        TemplateError: Multi-line py blocks must start with a newline at line 1 column 3
    Nr-r.)rr7r8)rr:r��
parse_exprrq)r�rr7r8r�rbr�rrrrF�s2rFrcCs(t|dt�r"|d|dd�fS|d\}}|��}|�d�r�|dd��d�}|�d�sf|�d�r�|�d�}d|kr�|�dd�}|�dd	�}|d7}nd|kr�td
||d��d||f|dd�fS|d
k�r�d|kr�td||d��||f|dd�fS|�d��rt|||�S|�d��s(|dk�rDtd|��d||d��n�|dk�rbtd|||d��n�|dk�r�td|||d��n�|�d��r�t	|||�S|�d��r�t
|||�S|�d��r�t|||�S|�d��r�t|||�S|�d��r
d||ddf|dd�fSd||ddf|dd�fS)Nrrzpy:ryz 	�
�
z
rhz.Multi-line py blocks must start with a newline)rrru)rvrwrxzcontinue outside of for loopzif zelif r�z%s outside of an if block)�if�elifrxz%s with no expression)r�r�r�z
Unexpected %szfor zdefault zinherit zdef �#r�r|)
r1rr��
startswith�lstrip�replacer
�
parse_condr��	parse_for�
parse_default�
parse_inherit�	parse_def)r�r�contextr|r�rrrr�<sb








r�cCs�|dd}g}|d}xj|s,td||d��t|dt�rf|dddkrfd|ft|�|dd�fSt|||�\}}|�|�qWdS)Nrr)rzMissing {{endif}})rrr�r{)r
r1r��parse_one_condrq)r�rr
r��piecesr�rrrrqs
rcCs,|d|dd�\}}}g}|�d�r4|dd�}|�d�rXd||dd���|f}nN|�d�r|d	||d
d���|f}n*|dkr�d|d|f}nds�td||f��x�|s�td
||d��t|dt��r
|dddk�s|dd�d��s|dddk�r
||fSt|||�\}}|�|�q�WdS)Nrr�:r6zif rryzelif r�r�zUnexpected token %r at %szNo {{endif}})rrr�)	rErrr=r
r1r�r�rq)r�rr
�firstr�r9r�r�rrrr�s.



rc
CsH|d\}}|dd�}d|}g}|�d�s2t�|�d�rH|dd�}|dd���}t�|�}|sxtd|||d	��|d|���}d
|kr�td|||d	��tdd
�|d|����	d�D��}||�
�d�}xl|s�td||d	��t|dt��r&|dddk�r&d||||f|dd�fSt|||�\}	}|�
|	�q�WdS)Nrr)rxzfor rr6ryzBad for (no "in") in %r)rr�(z=You cannot have () in the variable section of a for loop (%r)cSsg|]}|��r|���qSr)r�)r3r�rrrr4�szparse_for.<locals>.<listcomp>�,z
No {{endfor}}r�rx)rr=rEr��in_rer�r
r�r�r�r�r1r�rq)
r�rr
rr�r9r�r�r|r�rrrr	�s>


"
r	cCs�|d\}}|�d�st�|�dd�d}|�dd�}t|�dkrTtd|||d��|d��}d|krvtd||d��t�|�s�td	|||d��|d��}d
|||f|dd�fS)Nrzdefault r�=z:Expression must be {{default var=value}}; no = found in %r)rrrz'{{default x, y = ...}} is not supportedz-Not a valid variable name for {{default}}: %rr~)rr=r�r;r
r��var_rer�)r�rr
rr�rlr�r|rrrr
�s&


r
cCs@|d\}}|�d�st�|�dd�d}d||f|dd�fS)Nrzinherit rrd)rr=r�)r�rr
rr�r|rrrr�src
Cs*|d\}}|dd�}|�d�s&t�|�dd�d}|�d�rL|dd�}d|krf|}dddif}nF|�d�s�td	|||d
��n(|dd�}|�dd�\}}t|||�}|d}g}xl|s�td||d
��t|dt��r|ddd
k�rd||||f|dd�fSt|||�\}	}|�	|	�q�WdS)Nrrzdef rr6rr�)z*Function definition doesn't end with ): %s)rr)rzMissing {{enddef}}r�r)
rr=r�rEr
�parse_signaturer1r�r�rq)
r�rr
rr�r��sig�sig_textr9r�rrrr�s6


rcsxt�t|�j��g}d}d}i}d�fdd�	}�x:d}|�\}	}
|	tjkrLP|	tjkrt|
dksf|
dkrt|
}|�\}	}
|	tjkr�td|||d��|
}|�\}	}
|	tjks�|	tjkr�|
dkr�|dkr�|}n|dkr�|}n
|�|�|	tjkr2Pq2|dk	�r
td|||d��|	tjkr2|
d	kr2d}d}
d
}d}}g}�x0|d�\}	}
}}|dk�rV|}|}|	tjk�r~|�r~td|||d��|�s�|	tjk�s�|	tjk�r�|
dk�r�t	|||�}|||<|�|�P|�|	|
f�|�r�|	tjk�r�|
|k�r�|d7}nh|�r.|	tjk�r.|
|
k�r.|d8}|�sbd}}
n4|�s8|	tjk�r8|
d
k�r8|
}d}dddd
�|}
�q8Wq2W||||fS)NFcs^yt��\}}\}}\}}}Wntk
r8tjdfSX|rR||||f||ffS||fSdS)Nrh)r�
StopIteration�tokenize�	ENDMARKER)r��tok_type�
tok_string�srow�scol�erow�ecol�line)r�rr�	get_tokensz"parse_signature.<locals>.get_token�*z**zInvalid signature: (%s))rrrrrTr)r�[�{r�]�})F)
r�generate_tokensr�readliner�OP�NAMEr
rq�isolate_expression)rrr�r�Zvar_argr�r�r&Zvar_arg_typerr �var_nameZ	nest_typeZunnest_typeZ
nest_count�	start_pos�end_posrlr�r�Zdefault_exprr)r�rr�s~	











"


rc	Cs�|\}}|d8}|\}}|d8}|�d�}||krB||||�S|||d�g}|�||d|��|t|�kr�|�||d|��d�|�S)NrTrh)r��extendr;rqr)	r�r2r3r!r"r#r$�linesrlrrrr0Gs
r0zn%prog [OPTIONS] TEMPLATE arg=value

Use py:arg=value to set a Python value; otherwise all values are
strings.
cCs�ddl}ddl}ddl}ddl}|dkr6|jdd�}|�d�}|jt|�td�}|j	ddddd	d
�|j	ddd
dd�|j	ddd
dd�|�
|�\}}t|�dkr�td�|�
d�|d}|dd�}i}	|jr�|	�|j�xd|D]\}
d|
k�r
td|
�|�
d�|
�dd�\}}
|�d��r:|dd�}t|
�}
|
|	|<q�W|dk�r`|j��}d}nt|d�}
|
��}|
��|j�r�t}nt}|||d�}|�|	�}|j�r�t|jd�}
|
�|�|
��n|j�|�dS)NrrZPaste)r��usagez-oz--output�outputZFILENAMEz(File to write output to (default stdout))�dest�metavar�helpz--html�use_html�
store_truez9Use HTML style filling (including automatic HTML quoting))r8�actionr:z--env�use_envz-Put the environment in as top-level variablesz!You must give a template filenamer0rzBad argument: %rzpy:ry�-z<stdin>rM)r�wb)r@�optparse�
pkg_resourcesr'�argv�get_distribution�OptionParserr	�_fill_command_usage�
add_option�
parse_argsr;�print�exitr>r]�environr�rr��stdinrOrNrPr;r
rrer7�write�stdout)rr@rArBr'�dist�parser�optionsZ
template_namer�rprZtemplate_contentrUZ
TemplateClassr�rbrrr�fill_command^sv










rR�__main__)N)N)T)NTrN)NrN)r)N)Br"r�r@r��urllib.parserr�r'r�iorZtempita._looperrZtempita.compat3rrrrr	�__all__r�r�Irrr
r#r$r,r�rrr�r�rrr�r�r�r
rr�rmr�r�r�r�r�r�r�r�r�r�rFr�rrr	r
rrrr0rFrRrrrrr�<module>sp

%

%

M

>


;
=
5#L
@