o
    ‹ågŽ)  ã                   @   sö   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZddlm	Z	 dd„ Z
G dd„ dƒZd	d
„ Zd#dd„ZG dd„ dƒZG dd„ dƒZG dd„ deƒZG dd„ dƒZG dd„ deƒZe dej¡Zdd„ Zdd„ Zdd„ Zd$dd „Zd!d"„ ZdS )%é    )ÚparseNé   )Úimportlib_metadata_getc                 C   s   || _ |j| _| S ©N)Ú__wrapped__Ú__name__)Ú	decoratedÚfn© r
   úE/var/www/html/flaskapp/venv/lib/python3.10/site-packages/mako/util.pyÚupdate_wrapper   s   r   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚPluginLoaderc                 C   s   || _ i | _d S r   )ÚgroupÚimpls)Úselfr   r
   r
   r   Ú__init__   ó   
zPluginLoader.__init__c                 C   sh   || j v r| j | ƒ S t| jƒD ]}|j|kr#|j| j |< | ¡   S qddlm} | d| j|f ¡‚)Nr   )Ú
exceptionszCan't load plugin %s %s)r   r   r   ÚnameÚloadÚmakor   ÚRuntimeException)r   r   Úimplr   r
   r
   r   r      s   

þÿzPluginLoader.loadc                    s   ‡ ‡fdd„}|| j |< d S )Nc                     s4   t ˆ ƒ} ˆ  d¡dd … D ]}t| |ƒ} qt| ˆƒS )NÚ.r   )Ú
__import__ÚsplitÚgetattr)ÚmodÚtoken©Ú
modulepathÚobjnamer
   r   r   ,   s   
z#PluginLoader.register.<locals>.load)r   )r   r   r    r!   r   r
   r   r   Úregister+   s   zPluginLoader.registerN)r   Ú
__module__Ú__qualname__r   r   r"   r
   r
   r
   r   r      s    r   c                 C   sP   d}t j | ¡s&z|d7 }t  | d¡ W n	   |dkr‚ Y t j | ¡rdS dS )z,create and/or verify a filesystem directory.r   r   ií  é   N)ÚosÚpathÚexistsÚmakedirs)Údir_Útriesr
   r
   r   Úverify_directory5   s   ÿûr,   c                 C   s$   | d u r|S t | ttfƒs| gS | S r   )Ú
isinstanceÚlistÚtuple)ÚxÚdefaultr
   r
   r   Úto_listC   s
   r2   c                   @   ó"   e Zd ZdZddd„Zdd„ ZdS )Úmemoized_propertyz2A read-only @property that is only evaluated once.Nc                 C   ó   || _ |p|j| _|j| _d S r   ©ÚfgetÚ__doc__r   ©r   r7   Údocr
   r
   r   r   P   ó   zmemoized_property.__init__c                 C   s&   |d u r| S |   |¡ |j| j< }|S r   )r7   Ú__dict__r   )r   ÚobjÚclsÚresultr
   r
   r   Ú__get__U   s   zmemoized_property.__get__r   ©r   r#   r$   r8   r   r@   r
   r
   r
   r   r4   L   s    
r4   c                   @   r3   )Úmemoized_instancemethodzàDecorate a method memoize its return value.

    Best applied to no-arg methods: memoization is not sensitive to
    argument values, and will always return the same value even when
    called with different arguments.

    Nc                 C   r5   r   r6   r9   r
   r
   r   r   f   r;   z memoized_instancemethod.__init__c                    s.   ˆ d u rˆS ‡ ‡fdd„}ˆj |_ ˆj|_|S )Nc                     sD   ˆj ˆg| ¢R i |¤Ž‰ ‡ fdd„}ˆj|_ˆj|_|ˆjˆj< ˆ S )Nc                     s   ˆ S r   r
   )ÚaÚkw©r?   r
   r   Úmemor   s   z>memoized_instancemethod.__get__.<locals>.oneshot.<locals>.memo)r7   r   r8   r<   )ÚargsrD   rF   ©r=   r   rE   r   Úoneshoto   s   z0memoized_instancemethod.__get__.<locals>.oneshot)r   r8   )r   r=   r>   rI   r
   rH   r   r@   k   s   zmemoized_instancemethod.__get__r   rA   r
   r
   r
   r   rB   \   s    
rB   c                   @   s   e Zd ZdZdd„ ZdS )ÚSetLikeDictz0a dictionary that has some setlike methods on itc                 C   s   t di | ¤Ž}| |¡ |S )zˆproduce a 'union' of this dict and another (at the key level).

        values in the second dict take precedence over that of the firstNr
   )rJ   Úupdate)r   Úotherr0   r
   r
   r   Úunionƒ   s   
zSetLikeDict.unionN)r   r#   r$   r8   rM   r
   r
   r
   r   rJ      s    rJ   c                   @   s*   e Zd ZdZd
dd„Zdd„ Zdd	„ ZdS )ÚFastEncodingBufferzVa very rudimentary buffer that is faster than StringIO,
    and supports unicode data.NÚstrictc                 C   s*   t  ¡ | _|| _d| _|| _| jj| _d S )NÚ )ÚcollectionsÚdequeÚdataÚencodingÚdelimÚerrorsÚappendÚwrite)r   rT   rV   r
   r
   r   r   ‘   s
   
zFastEncodingBuffer.__init__c                 C   s   t  ¡ | _| jj| _d S r   )rQ   rR   rS   rW   rX   ©r   r
   r
   r   Útruncate˜   s   
zFastEncodingBuffer.truncatec                 C   s.   | j r| j | j¡ | j | j¡S | j | j¡S r   )rT   rU   ÚjoinrS   ÚencoderV   rY   r
   r
   r   Úgetvalueœ   s
   ÿzFastEncodingBuffer.getvalue)NrO   )r   r#   r$   r8   r   rZ   r]   r
   r
   r
   r   rN   Œ   s
    
rN   c                   @   sP   e Zd ZdZG dd„ dƒZddd„Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚLRUCachea$  A dictionary-like object that stores a limited number of items,
    discarding lesser used items periodically.

    this is a rewrite of LRUCache from Myghty to use a periodic timestamp-based
    paradigm so that synchronization is not really needed.  the size management
    is inexact.
    c                   @   s   e Zd Zdd„ Zdd„ ZdS )zLRUCache._Itemc                 C   s   || _ || _t ¡ | _d S r   )ÚkeyÚvalueÚtimeitÚdefault_timerÚ	timestamp©r   r_   r`   r
   r
   r   r   °   s   zLRUCache._Item.__init__c                 C   s
   t | jƒS r   )Úreprr`   rY   r
   r
   r   Ú__repr__µ   s   
zLRUCache._Item.__repr__N)r   r#   r$   r   rf   r
   r
   r
   r   Ú_Item¯   s    rg   ç      à?c                 C   s   || _ || _d S r   )ÚcapacityÚ	threshold)r   ri   rj   r
   r
   r   r   ¸   r   zLRUCache.__init__c                 C   s   t  | |¡}t ¡ |_|jS r   )ÚdictÚ__getitem__ra   rb   rc   r`   )r   r_   Úitemr
   r
   r   rl   ¼   s   
zLRUCache.__getitem__c                 C   s   dd„ t  | ¡D ƒS )Nc                 S   s   g | ]}|j ‘qS r
   )r`   )Ú.0Úir
   r
   r   Ú
<listcomp>Â   s    z#LRUCache.values.<locals>.<listcomp>)rk   ÚvaluesrY   r
   r
   r   rq   Á   s   zLRUCache.valuesc                 C   s   || v r| | S || |< |S r   r
   rd   r
   r
   r   Ú
setdefaultÄ   s   zLRUCache.setdefaultc                 C   sB   t  | |¡}|d u r|  ||¡}t  | ||¡ n||_|  ¡  d S r   )rk   Úgetrg   Ú__setitem__r`   Ú_manage_size)r   r_   r`   rm   r
   r
   r   rt   Ê   s   zLRUCache.__setitem__c              	   C   sŠ   t | ƒ| j| j| j  krCtt | ¡t d¡dd�}|| jd … D ]}z| |j= W q! t	y3   Y  nw t | ƒ| j| j| j  ksd S d S )Nrc   T)r_   Úreverse)
Úlenri   rj   Úsortedrk   rq   ÚoperatorÚ
attrgetterr_   ÚKeyError)r   Úbytimerm   r
   r
   r   ru   Ó   s   ýý"÷zLRUCache._manage_sizeN)rh   )r   r#   r$   r8   rg   r   rl   rq   rr   rt   ru   r
   r
   r
   r   r^   ¥   s    
		r^   z([ \t\f]* \# .* coding[=:][ \t]*([-\w.]+)c              	   C   sð   |   ¡ }|  d¡ zh|  ¡ }| tj¡}|r|ttjƒd… }t | 	dd¡¡}|sMz
t
| 	dd¡ƒ W n ttfy?   Y nw |  ¡ }t | 	dd¡¡}|r]|rUtdƒ‚W |  |¡ dS |rj| d¡W |  |¡ S W |  |¡ dS |  |¡ w )a  Deduce the encoding of a Python source file (binary mode) from magic
    comment.

    It does this in the same way as the `Python interpreter`__

    .. __: http://docs.python.org/ref/encodings.html

    The ``fp`` argument should be a seekable file object in binary mode.
    r   NÚasciiÚignorez\python refuses to compile code with both a UTF8 byte-order-mark and a magic encoding commentÚutf_8r   )ÚtellÚseekÚreadlineÚ
startswithÚcodecsÚBOM_UTF8rw   Ú_PYTHON_MAGIC_COMMENT_reÚmatchÚdecoder   ÚImportErrorÚSyntaxErrorr   )ÚfpÚposÚline1Úhas_bomÚmÚline2r
   r
   r   Úparse_encodingé   s<   

û
ÿÿû
þr‘   c                    s4   t ˆ  ¡ ƒ}| ¡  dd ‡ fdd„|D ƒ¡ d S )z{repr() a dictionary with the keys in order.

    Used by the lexer unit test to compare parse trees based on strings.

    Ú{z, c                 3   s    � | ]}d |ˆ | f V  qdS )z%r: %rNr
   )rn   Úk©Údr
   r   Ú	<genexpr>"  s   € z#sorted_dict_repr.<locals>.<genexpr>Ú})r.   ÚkeysÚsortr[   )r•   r˜   r
   r”   r   Úsorted_dict_repr  s    rš   c                 C   sx  t | dƒrdS d| _tddd| jƒ}t|ƒ| _| jjD ]}|jdkr&|| _q|jdkr.|| _qt|j	d ƒ| _
t|j	d	 ƒ| _t|j	d
 ƒ| _t|j	d jd ƒ| _t|j	d jd jƒ| _t|j	d jƒ| _t|j	d jjƒ| _t|j	d jjjƒ| _t|j	d jjjƒ| _t|j	d jjjjƒ| _t|j	d jjƒ| _t|j	d jjjƒ| _t|j	d jjjjƒ| _t|j	d jjjjjƒ| _t|j	d jjƒ| _t|j	d jjjƒ| _t|j	d jjjjƒ| _ t|j	d jjƒ| _!t|j	d jj"d jƒ| _#t|j	d jjjƒ| _$t|j	d jjjjƒ| _%t|j	d jjjj&jƒ| _'t|j	d jjjjƒ| _(t|j	d jjƒ| _!t|j	d jj"d jƒ| _#t|j	d jj)d ƒ| _*t|j	d jj)d	 ƒ| _+t|j	d jjj)d ƒ| _,t|j	d jjj)d	 ƒ| _-t|j	d jj)d ƒ| _.t|j	d jj)d	 ƒ| _/t|j	d jj)d
 ƒ| _0t|j	d jj)d ƒ| _1t|j	d jj)d ƒ| _2t|j	d jj)d	 ƒ| _3dS )zdAttempt to restore the required classes to the _ast module if it
    appears to be missing them
    ÚASTNi   a  def foo(): pass
class Bar: pass
if False: pass
baz = 'mako'
1 + 2 - 3 * 4 / 5
6 // 7 % 8 << 9 >> 10
11 & 12 ^ 13 | 14
15 and 16 or 17
-baz + (not +18) - ~17
baz and 'foo' or 'bar'
(mako is baz == baz) is not baz != mako
mako > baz < mako >= baz <= mako
mako in baz not in makoz	<unknown>Úexecr   r   r   é   é   é   r%   é   é   é   é	   é
   é   é   )4ÚhasattrÚPyCF_ONLY_ASTÚcompileÚtypeÚModuleÚ__mro__r   r   r›   ÚbodyÚFunctionDefÚClassDefÚIfÚtargetsÚNameÚctxÚStorer`   ÚStrÚopÚSubÚleftÚAddÚrightÚDivÚMultÚRShiftÚLShiftÚModÚFloorDivÚBitOrÚBitXorÚBitAndÚOrrq   ÚAndÚInvertÚNotÚoperandÚUAddÚUSubÚopsÚIsNotÚNotEqÚIsÚEqÚGtÚLtÚGtEÚLtEÚInÚNotIn)Ú_astr�   r>   r
   r
   r   Úrestore__ast%  sf   
ï


€r×   Úrbc                 C   s6   t | |ƒ�}| ¡ W  d   ƒ S 1 sw   Y  d S r   )ÚopenÚread)r'   Úmoder‹   r
   r
   r   Ú	read_filev  s   $ÿrÜ   c                 C   sB   t | dƒ}zt|ƒ}| ¡ }|r| |¡}|W | ¡  S | ¡  w )NrØ   )rÙ   r‘   rÚ   rˆ   Úclose)r'   r‹   rT   rS   r
   r
   r   Úread_python_file{  s   

rÞ   r   )rØ   )Úastr   r„   rQ   ry   r&   Úrera   Úcompatr   r   r   r,   r2   r4   rB   rk   rJ   rN   r^   r©   ÚVERBOSEr†   r‘   rš   r×   rÜ   rÞ   r
   r
   r
   r   Ú<module>   s2   
	#?ÿ1
Q