U
    do                      @  sV  U 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mZ d dlm	Z	 ej
rld dlmZ ddlmZ daded	< G d
d dZe ZejdddddZejdddddZdddddZdddddZe Zedfddddddd ZejdSdd"dd#dd$d%d&ZejdTd'd"dd#dd$d(d&Zedd)fd*d"dd#d+d$d,d&ZdUddddd/d0d1ZdVddddd/d2d3Zd4d5d6d7d8Zd9d#d:d;d<ZG d=d> d>ejZddd'd'dd?d@dAZ ejdddBdCdDZ!ejdEdEdBdFdDZ!dGdGdBdHdDZ!e"dIZ#G dJdK dKej$e# Z%dddLdMdNZ&e'dOej(Z)ddPddQdRZ*dS )W    )annotationsN)datetime)timezone)WSGIEnvironment   )Requestzlogging.Logger | None_loggerc                   @  s(   e Zd ZddddZddddZdS )_Missingstrreturnc                 C  s   dS )Nzno value selfr   r   6/tmp/pip-unpacked-wheel-m99gisyz/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	   r
   zt.Callable[[str], str])	referencer   c                 C  s   d S Nr   r   r   r   r   _make_encode_wrapper   s    r   byteszt.Callable[[str], bytes]c                 C  s   d S r   r   r   r   r   r   r   "   s    zt.AnyStrzt.Callable[[str], t.AnyStr]c                 C  s   t | trdd S tddS )zCreate a function that will be called with a string argument. If
    the reference is bytes, values will be encoded to bytes.
    c                 S  s   | S r   r   )xr   r   r   <lambda>,       z&_make_encode_wrapper.<locals>.<lambda>encodelatin1)
isinstancer
   operatormethodcallerr   r   r   r   r   '   s    
ztuple[t.AnyStr, ...]None)valuer   c                   sH   | sdS t | d trtnt t fdd| D rDtd| ddS )z0Ensure tuple items are all strings or all bytes.Nr   c                 3  s   | ]}t |  V  qd S r   )r!   ).0itemZ	item_typer   r   	<genexpr>8   s     z#_check_str_tuple.<locals>.<genexpr>z(Cannot mix str and bytes arguments (got ))r!   r
   r   any	TypeErrorr%   r   r(   r   _check_str_tuple1   s
    r.   strictzstr | bytes)r   charseterrorsr   c                 C  sN   | d kst | tr| S t | ttfr,t| S t | trB| ||S tdd S )NzExpected bytes)r!   r   	bytearray
memoryviewr
   r   r,   )r   r0   r1   r   r   r   	_to_bytes?   s    
r4   .
str | Nonebool)r   r0   r1   allow_none_charsetr   c                 C  s   d S r   r   r   r0   r1   r7   r   r   r   _to_strN   s    r9   t.Anyc                 C  s   d S r   r   r8   r   r   r   r9   X   s    Ft.Any | Nonezstr | bytes | Nonec                 C  sH   | d kst | tr| S t | ttfs,t| S |d kr<|r<| S | ||S r   )r!   r
   r   r2   decoder8   r   r   r   r9   b   s    utf-8replace)sr0   r1   r   c                 C  s   |  d||S Nr    r   r<   r?   r0   r1   r   r   r   _wsgi_decoding_danceu   s    rC   c                 C  s   |  |d|S r@   rA   rB   r   r   r   _wsgi_encoding_dance{   s    rD   zWSGIEnvironment | Requestr   )objr   c                 C  s.   t | d| }t|ts*tt| jd|S )Nenvironz- is not a WSGI environment (has to be a dict))getattrr!   dictAssertionErrortyper   )rE   envr   r   r   _get_environ   s     rL   zlogging.Logger)loggerr   c                   s@   |    | }|r<t fdd|jD r,dS |js4q<|j}qdS )znCheck if there is a handler in the logging chain that will handle
    the given logger's effective level.
    c                 3  s   | ]}|j  kV  qd S r   level)r&   handlerrN   r   r   r)      s     z%_has_level_handler.<locals>.<genexpr>TF)getEffectiveLevelr+   handlers	propagateparent)rM   currentr   rN   r   _has_level_handler   s    rV   c                      s&   e Zd ZdZdd fddZ  ZS )_ColorStreamHandlerz=On Windows, wrap stream with Colorama for ANSI style support.r$   r   c                   sB   zdd l }W n tk
r$   d }Y nX |tj}t | d S )Nr   )coloramaImportErrorAnsiToWin32sysstderrsuper__init__)r   rX   stream	__class__r   r   r^      s    
z_ColorStreamHandler.__init__)r   r   r   __doc__r^   __classcell__r   r   r`   r   rW      s   rW   )rJ   messageargskwargsr   c                 O  s\   t dkr>tda t jtjkr*t tj tt s>t t	  t
t | | f|| dS )a  Log a message to the 'werkzeug' logger.

    The logger is created the first time it is needed. If there is no
    level set, it is set to :data:`logging.INFO`. If there is no handler
    for the logger's effective level, a :class:`logging.StreamHandler`
    is added.
    NZwerkzeug)r   logging	getLoggerrO   NOTSETsetLevelINFOrV   
addHandlerrW   rG   rstrip)rJ   rd   re   rf   r   r   r   _log   s    

rn   )dtr   c                 C  s   d S r   r   ro   r   r   r   
_dt_as_utc   s    rq   r   c                 C  s   d S r   r   rp   r   r   r   rq      s    zdatetime | Nonec                 C  s@   | d kr| S | j d kr$| jtjdS | j tjkr<| tjS | S )N)tzinfo)rr   r>   r   utc
astimezonerp   r   r   r   rq      s    
_TAccessorValuec                	   @  s   e Zd ZdZdZd%dddddd	d
dddZdddddZejd
dddddZ	ejddddddZ	ddddddZ	ddd
dddZ
dd
dd d!Zdd"d#d$ZdS )&_DictAccessorPropertyz7Baseclass for `environ_property` and `header_property`.FNr
   z_TAccessorValue | Nonez)t.Callable[[str], _TAccessorValue] | Nonez)t.Callable[[_TAccessorValue], str] | Nonezbool | Noner5   r$   )namedefault	load_func	dump_func	read_onlydocr   c                 C  s0   || _ || _|| _|| _|d k	r&|| _|| _d S r   )rw   rx   ry   rz   r{   rb   )r   rw   rx   ry   rz   r{   r|   r   r   r   r^      s    	z_DictAccessorProperty.__init__r:   zt.MutableMapping[str, t.Any])instancer   c                 C  s   t d S r   )NotImplementedErrorr   r}   r   r   r   lookup   s    z_DictAccessorProperty.lookuprJ   z&_DictAccessorProperty[_TAccessorValue])r}   ownerr   c                 C  s   d S r   r   r   r}   r   r   r   r   __get__   s    z_DictAccessorProperty.__get__ru   c                 C  s   d S r   r   r   r   r   r   r      s    r;   z8_TAccessorValue | _DictAccessorProperty[_TAccessorValue]c              	   C  sj   |d kr| S |  |}| j|kr&| jS || j }| jd k	rfz| |W S  ttfk
rd   | j Y S X |S r   )r   rw   rx   ry   
ValueErrorr,   )r   r}   r   Zstorager%   r   r   r   r      s    



)r}   r%   r   c                 C  sD   | j rtd| jd k	r0| || || j< n|| || j< d S Nzread only property)r{   AttributeErrorrz   r   rw   )r   r}   r%   r   r   r   __set__  s
    
z_DictAccessorProperty.__set__c                 C  s&   | j rtd| || jd  d S r   )r{   r   r   poprw   r   r   r   r   
__delete__  s    z _DictAccessorProperty.__delete__r   c                 C  s   dt | j d| j dS )N< >)rJ   r   rw   r   r   r   r   r     s    z_DictAccessorProperty.__repr__)NNNNN)r   r   r   rb   r{   r^   r   toverloadr   r   r   r   r   r   r   r   rv      s"        	rv   )domainr   c              	   C  s   z|  d}W n tk
r&   |  Y S X z|dW S  tk
rH   Y nX g }|dD ]>}z||d W qX tk
r   ||d Y qXX qXd|S )Nasciiidna   ..)r   UnicodeEncodeErrorr<   UnicodeDecodeErrorsplitappendjoin)r   datapartspartr   r   r   _decode_idna"  s    
r   z-?\d+intc                 C  s"   |   } t| dkrtt| S )zParse an int only if it is only ASCII digits and ``-``.

    This disallows ``+``, ``_``, and non-ASCII digits, which are accepted by ``int`` but
    are not allowed in HTTP header values.

    Any leading or trailing whitespace is stripped
    N)strip_plain_int_re	fullmatchr   r   r-   r   r   r   
_plain_int>  s    r   )...)...)r=   r>   )r=   r/   )+
__future__r   rg   r"   rer[   typingr   r   r   TYPE_CHECKINGZ_typeshed.wsgir   Zwrappers.requestr   r   __annotations__r	   r   r   r   r.   getdefaultencodingZ_default_encodingr4   r9   rC   rD   rL   rV   StreamHandlerrW   rn   rq   TypeVarru   Genericrv   r   compileASCIIr   r   r   r   r   r   <module>   sp    
    	      
K