B
    GZ16                 @   s  d Z ddlZddlZddlZddlmZ ddlmZmZ ddlm	Z	 ddl
mZmZmZmZmZmZ dae Ze Zeddd Zed	Zejej d
 dZdddddZx2e	ededdD ]Zde deee< qW edZedZ dZ!ejdej"dZ#G dd de$Z%e% Z&dd Z'dd  Z(d!d" Z)d#d$ Z*G d%d& d&e$Z+d'd( Z,d)d* Z-d+d, Z.d-d. Z/d/d0 Z0d1d2 Z1d5d3d4Z2dS )6z
    werkzeug._internal
    ~~~~~~~~~~~~~~~~~~

    This module provides internally used helpers and constants.

    :copyright: (c) 2014 by the Werkzeug Team, see AUTHORS for more details.
    :license: BSD, see LICENSE for more details.
    N)WeakKeyDictionary)datetimedate)chain)
iter_bytes	text_typeBytesIOint_to_byte
range_typeinteger_typesi     )s   expiress   paths   comments   max-ages   secures   httponlys   versionz/=!#$%&'*+-.^_`|~:asciis   \054s   \073s   \"s   \\)   ,   ;   "   \          z\%03olatin1s   \\[0-3][0-7][0-7]s   [\\].s/   [\w\d!#%&\'~_`><@,:/\$\*\+\-\.\^\|\)\(\?\}\{\=]s   
    (?P<key>[^=;]+)
    (?:\s*=\s*
        (?P<val>
            "(?:[^\\"]|\\.)*" |
             (?:.*?)
        )
    )?
    \s*;
)flagsc               @   s   e Zd Zdd Zdd ZdS )_Missingc             C   s   dS )Nzno value )selfr   r   1lib/python3.7/site-packages/werkzeug/_internal.py__repr__<   s    z_Missing.__repr__c             C   s   dS )N_missingr   )r   r   r   r   
__reduce__?   s    z_Missing.__reduce__N)__name__
__module____qualname__r   r   r   r   r   r   r   :   s   r   c             C   s,   t | d| }t|ts(tdt| j |S )Nenvironz/%r is not a WSGI environment (has to be a dict))getattr
isinstancedictAssertionErrortyper   )objenvr   r   r   _get_environE   s    r)   c             O   sj   t dkrLddl}|da |jjsLt j|jkrLt |j |	 }t 
| tt | | f|| dS )z&Log into the internal werkzeug logger.Nr   Zwerkzeug)_loggerloggingZ	getLoggerrootZhandlerslevelZNOTSETZsetLevelINFOZStreamHandlerZ
addHandlerr"   rstrip)r&   messageargskwargsr+   Zhandlerr   r   r   _logL   s    

r3   c       	   	      s   t | dr| j} t| }|dk	r&|S t tdr<t| }n
t| }|dd \}}|p`d}t| g xjt|D ]^\}}t	|t
rtdy||   }W n tk
r   |ddf}Y nX |d|f}| qxW t fd	d
}|t| < |S )z+Return a signature object for the function.im_funcNgetfullargspec   r   zCcannot parse functions that unpack tuples in the function signatureFTc       
         s   g }g }i }xt D ]\}\}}}y|| |  W nX tk
r   y||| W n. tk
r   |rz|| n
|| Y nX Y qX ||kr||||< qW |  d  }	d k	r||	 d}	|rd kr|| i }|||||	fS )Nr   )	enumerateappend
IndexErrorpopKeyErrorextendupdate)
r1   r2   Znew_argsZmissingZextraidxnameZhas_defaultdefaultZextra_positional)	arg_count	arguments	kwarg_var
vararg_varr   r   parse{   s0    


z_parse_signature.<locals>.parse)hasattrr4   _signature_cachegetinspectr5   Z
getargspeclenr7   r#   list	TypeErrorr9   r8   tuple)	funcrE   tupZ
positionaldefaultsr>   r?   r@   Zparamr   )rA   rB   rC   rD   r   _parse_signature[   s2    





 rQ   c             C   s   t | tr|  } nt | ttf r,t| S | dd \}}}}}}t||d t | d }|d | }|d | }	|	d | }
|
S )z]Converts a timetuple, integer or datetime object into the seconds from
    epoch in utc.
    N   r      <   )	r#   r   Zutctimetupler   floatintr   	toordinal
_epoch_ord)argZyearZmonthZdayZhourZminutesecondZdaysZhoursZminutesZsecondsr   r   r   _date_to_unix   s    

r[   c               @   s@   e Zd ZdZdZdddZdddZdd	 Zd
d Zdd Z	dS )_DictAccessorPropertyz7Baseclass for `environ_property` and `header_property`.FNc             C   s0   || _ || _|| _|| _|d k	r&|| _|| _d S )N)r?   r@   	load_func	dump_func	read_only__doc__)r   r?   r@   r]   r^   r_   docr   r   r   __init__   s    z_DictAccessorProperty.__init__c          	   C   sl   |d kr| S |  |}| j|kr&| jS || j }| jd k	rhy| |}W n ttfk
rf   | j}Y nX |S )N)lookupr?   r@   r]   
ValueErrorrL   )r   r'   r&   Zstoragervr   r   r   __get__   s    



z_DictAccessorProperty.__get__c             C   s6   | j rtd| jd k	r"| |}|| || j< d S )Nzread only property)r_   AttributeErrorr^   rc   r?   )r   r'   valuer   r   r   __set__   s
    

z_DictAccessorProperty.__set__c             C   s&   | j rtd| || jd  d S )Nzread only property)r_   rg   rc   r:   r?   )r   r'   r   r   r   
__delete__   s    z _DictAccessorProperty.__delete__c             C   s   d| j j| jf S )Nz<%s %s>)	__class__r   r?   )r   r   r   r   r      s    z_DictAccessorProperty.__repr__)NNNNN)N)
r   r   r    r`   r_   rb   rf   ri   rj   r   r   r   r   r   r\      s    
	
r\   c             C   sb   t  }d}tj}|j}x.t| D ]"}|tkr:d}|||}|| q W |rRt|S td| d S )NTFr   )	bytearray_cookie_quoting_maprH   r<   r   _legal_cookie_charsbytes)bZbufZ	all_legalZ_lookup_pushcharr   r   r   _cookie_quote   s    
rs   c       	      C   sV  t | dk r| S | d d dks0| dd  dkr4| S | dd } d}t | }t }|j}xd|  krp|k rLn nt| |}t| |}|s|s|| |d   P d }}|r|d}|r|d}|r|r||k r|| ||  || |d |d   |d }qZ|| ||  |t| |d |d  d |d }qZW t	|S )N   r   r   r   r6      )
rJ   rl   r<   	_octal_research	_quote_restartr8   rV   ro   )	rp   inre   rq   Zo_matchZq_matchjkr   r   r   _cookie_unquote   s8     


 r   c             c   sx   d}t | }xf||k rrt| d |}|s,P |d }|dpFd}|d}| tkrt|t|fV  qW dS )z8Lowlevel cookie parsing facility that operates on bytes.r   r   keyval    N)	rJ   
_cookie_rerx   groupstripendlower_cookie_paramsr   )rp   r{   r|   matchr   rh   r   r   r   _cookie_parse_impl  s    

r   c             C   sp   t | ts| d | S y
| dS  tk
r6   Y nX | d}x"t|D ]\}}|d||< qLW d|S )Nr   .idna   .)r#   r   decodeencodeUnicodeErrorsplitr7   join)domainpartsr>   partr   r   r   _encode_idna'  s    



r   c          	   C   s   t | tr.y| d} W n tk
r,   | S X | d}xLt|D ]@\}}y|d||< W qB tk
r   |dd||< Y qBX qBW d|S )Nr   r   r   ignorer   )r#   r   r   r   r   r7   r   r   )r   r   r>   r   r   r   r   _decode_idna:  s    

r   c             C   sD   | d krd S t | } d| kr,| ddd } d| kr8| S tdd S )N   :r   r   r   a'  Setting 'domain' for a cookie on a server running locally (ex: localhost) is not supported by complying browsers. You should have something like: '127.0.0.1 localhost dev.localhost' on your hosts file and then point your server to run on 'dev.localhost' and also set 'domain' for 'dev.localhost')r   r   rd   )r   r   r   r   _make_cookie_domainQ  s    r   c                s6   dd }d dd |d D  fdd}|S )	z0Like the name says.  But who knows how it works?c             S   s&   dd l }dd l}||| dS )Nr   r   )base64zlibZ
decompressZ	b64decoder   )gyverr   r   r   r   r   bzzzzzzzd  s    z_easteregg.<locals>.bzzzzzzz
c             S   s    g | ]}|d t | d  qS )M    )rJ   ).0xr   r   r   
<listcomp>h  s    z_easteregg.<locals>.<listcomp>s#	  
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
7f2zLkGNv8b191cD/3vs9Q833z8tc                sJ   d	 fdd	}d k	r.|  ddkr.| |S |ddg d dgS )
Nc                s   | d  | ||S )N)zX-Powered-ByZWerkzeug)r8   )ZstatusZheadersexc_info)start_responser   r   injecting_start_response  s    
zA_easteregg.<locals>.easteregged.<locals>.injecting_start_responseZQUERY_STRINGZmacgybarchakkuz200 OK)zContent-Typez	text/htmla  
<!DOCTYPE html>
<html>
<head>
<title>About Werkzeug</title>
<style type="text/css">
  body { font: 15px Georgia, serif; text-align: center; }
  a { color: #333; text-decoration: none; }
  h1 { font-size: 30px; margin: 20px 0 10px 0; }
  p { margin: 0 0 30px 0; }
  pre { font: 11px 'Consolas', 'Monaco', monospace; line-height: 0.95; }
</style>
</head>
<body>
<h1><a href="http://werkzeug.pocoo.org/">Werkzeug</a></h1>
<p>the Swiss Army knife of Python web development.</p>
<pre>%s


</pre>
</body>
</html>r   )N)rH   r   )r!   r   r   )appr   )r   r   easteregged  s
    
z_easteregg.<locals>.easteregged)r   
splitlines)r   r   r   r   )r   r   r   
_eastereggb  s
    r   )N)3r`   restringrI   weakrefr   r   r   	itertoolsr   Zwerkzeug._compatr   r   r   r	   r
   r   r*   Z_empty_streamrG   rW   rX   setr   Zascii_lettersZdigitsr   rn   rm   Z_icompilerw   ry   Z_legal_cookie_chars_reVERBOSEr   objectr   r   r)   r3   rQ   r[   r\   rs   r   r   r   r   r   r   r   r   r   r   <module>
   sN    


	D0$