o
    0cH                     @   s  U 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Zd dlZd dlm	Z	 d dlmZ d dlm
Z
 d dlmZ d dlmZ ejrZd dlmZ d dlmZ d d	lmZ d
dlmZ daejej ed< e Ze	dd
d
 Zedd ej ej dD Z dddddZ!ee"de"ddD ]Z#de#d$de!e#%d
ej&< qe'dZ(e'dZ)dZ*ej'dej+d Z,G d!d" d"Z-e- Z.ej/d#e0d$ej1e0ge0f fd%d&Z2ej/d#e3d$ej1e0ge3f fd'd&Z2d#ej4d$ej1e0gej4f fd(d&Z2d)ej5ej4d*f d$dfd+d,Z6e7 Z8e8d-fd.ej9e0e3f d/e0d0e0d$e3fd1d2Z:ej/	*	*	*dnd.dd/eje0 d0e0d3e;d$df
d4d5Z<ej/	*	*	*dnd.ej=d/eje0 d0e0d3e;d$e0f
d6d5Z<e8d-d7fd.ejej= d/eje0 d0e0d3e;d$ejej9e0e3f  f
d8d5Z<	:dod;e0d/e0d0e0d$e0fd<d=Z>	:dod;e0d/e0d0e0d$e0fd>d?Z?d@ej9dA d$dBfdCdDZ@dEejd$e;fdFdGZAG dHdI dIejBZCdJe0dKe0dLej=dMej=d$df
dNdOZDdPdQ ZEej/dpdSdTZFej/dRed$efdUdTZFdReje d$eje fdVdTZFeGdWZHG dXdY dYejIeH ZJdZe3d$e3fd[d\ZKdZe3d$e3fd]d^ZLdZe3d$ejMej5e3e3f  fd_d`ZNdae0d$e3fdbdcZOdaej9e0e3f d$e0fdddeZPej/dqdfdgZQej/dae0d$e3fdhdgZQdaeje0 d$eje3 fdidgZQdrdjejdk d$dkfdldmZRdS )s    N)date)datetime)timezone)chain)WeakKeyDictionary)StartResponse)WSGIApplication)WSGIEnvironment   )Request_loggeri  c                 c       | ]}| d V  qdS )asciiNencode).0c r   H/var/www/html/gps/gps/lib/python3.10/site-packages/werkzeug/_internal.py	<genexpr>   s
    
r   z/=!#$%&'*+-.^_`|~:s   \054s   \073s   \"s   \\)   ,   ;   "   \          \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efddZdefddZdS )_Missingreturnc                 C      dS )Nzno valuer   selfr   r   r   __repr__4      z_Missing.__repr__c                 C   r#   )N_missingr   r$   r   r   r   
__reduce__7   r'   z_Missing.__reduce__N)__name__
__module____qualname__strr&   r)   r   r   r   r   r!   3   s    r!   	referencer"   c                 C      d S Nr   r.   r   r   r   _make_encode_wrapper>      r2   c                 C   r/   r0   r   r1   r   r   r   r2   C   r3   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 r0   r   )xr   r   r   <lambda>M   s    z&_make_encode_wrapper.<locals>.<lambda>r   r   )
isinstancer-   operatormethodcallerr1   r   r   r   r2   H   s   
value.c                    sH   | sdS t | d trtnt t fdd| D r"td| ddS )z0Ensure tuple items are all strings or all bytes.Nr   c                 3   s    | ]	}t |  V  qd S r0   )r6   )r   item	item_typer   r   r   Y   s    z#_check_str_tuple.<locals>.<genexpr>z(Cannot mix str and bytes arguments (got ))r6   r-   bytesany	TypeError)r9   r   r;   r   _check_str_tupleR   s   rA   strictr4   charseterrorsc                 C   sJ   | d u s	t | tr| S t | ttfrt| S t | tr!| ||S td)NzExpected bytes)r6   r>   	bytearray
memoryviewr-   r   r@   )r4   rC   rD   r   r   r   	_to_bytes`   s   
rG   allow_none_charsetc                 C   r/   r0   r   r4   rC   rD   rH   r   r   r   _to_stro      rJ   c                 C   r/   r0   r   rI   r   r   r   rJ   y   rK   Fc                 C   sH   | d u s	t | tr| S t | ttfst| S |d u r|r| S | ||S r0   )r6   r-   r>   rE   decoderI   r   r   r   rJ      s   utf-8replacesc                 C   s   |  d||S Nr   )r   rL   rO   rC   rD   r   r   r   _wsgi_decoding_dance   s   rR   c                 C   s(   t | tr| d|S | |d|S rP   )r6   r>   rL   r   rQ   r   r   r   _wsgi_encoding_dance   s   
rS   obj)r	   r   r	   c                 C   s.   t | d| }t|tsJ t| jd|S )Nenvironz- is not a WSGI environment (has to be a dict))getattrr6   dicttyper*   )rT   envr   r   r   _get_environ   s   rZ   loggerc                    sF   |    | }|r!t fdd|jD rdS |js	 dS |j}|s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 r0   level)r   handlerr\   r   r   r          z%_has_level_handler.<locals>.<genexpr>TF)getEffectiveLevelr?   handlers	propagateparent)r[   currentr   r\   r   _has_level_handler   s   	re   c                       s"   e Zd ZdZd fddZ  ZS )_ColorStreamHandlerz=On Windows, wrap stream with Colorama for ANSI style support.r"   Nc                    s@   zdd l }W n ty   d }Y nw |tj}t | d S )Nr   )coloramaImportErrorAnsiToWin32sysstderrsuper__init__)r%   rg   stream	__class__r   r   rm      s   z_ColorStreamHandler.__init__)r"   N)r*   r+   r,   __doc__rm   __classcell__r   r   ro   r   rf      s    rf   rX   messageargskwargsc                 O   sb   t du rtda t jtjkrt tj tt st t	  t
t | | g|R i | 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.
    Nwerkzeug)r   logging	getLoggerr]   NOTSETsetLevelINFOre   
addHandlerrf   rV   rstrip)rX   rs   rt   ru   r   r   r   _log   s   

$r~   c           	   	      s   t | }|dur|S t| }|dd \}}|pd}t| g t|D ].\}}t|tr5tdz||   }W n t	yK   |ddf}Y nw |d|f}
| q(t fdd}|t | < |S )	zReturn a signature object for the function.

    .. deprecated:: 2.0
        Will be removed in Werkzeug 2.1 along with ``utils.bind`` and
        ``validate_arguments``.
    N   r   zCcannot parse functions that unpack tuples in the function signatureFTc           
         s   g }g }i }t D ]F\}\}}}z	|| |  W n* tyD   z
||| W n tyA   |r:|| n|| Y nw Y q
w ||v rP||||< q
|  d  }	d urb||	 d}	|rod u ro|| i }|||||	fS )Nr   )	enumerateappend
IndexErrorpopKeyErrorextendupdate)
rt   ru   new_argsmissingextraidxnamehas_defaultdefaultextra_positional	arg_count	arguments	kwarg_var
vararg_varr   r   parse  sH   
	

z_parse_signature.<locals>.parse)_signature_cachegetinspectgetfullargspeclenr   r6   listr@   r   r   tuple)	funcr   tup
positionaldefaultsr   r   r   paramr   r   r   _parse_signature   s0   



)r   dtc                 C   r/   r0   r   r   r   r   r   
_dt_as_utc1  r3   r   c                 C   r/   r0   r   r   r   r   r   r   6  r3   c                 C   s@   | d u r| S | j d u r| jtjdS | j tjkr| tjS | S )N)tzinfo)r   rN   r   utc
astimezoner   r   r   r   r   ;  s   
_TAccessorValuec                   @   s8  e Zd ZdZdZ					ddedeje dejej	egef  dejej	egef  deje
 d	eje d
dfddZdejd
ejeejf fddZejddded
dfddZejdejded
efddZdejej ded
ejedf fddZdejded
dfddZdejd
dfddZd
efddZdS )_DictAccessorPropertyz7Baseclass for `environ_property` and `header_property`.FNr   r   	load_func	dump_func	read_onlydocr"   c                 C   s0   || _ || _|| _|| _|d ur|| _|| _d S r0   )r   r   r   r   r   rq   )r%   r   r   r   r   r   r   r   r   r   rm   O  s   	
z_DictAccessorProperty.__init__instancec                 C   s   t r0   )NotImplementedErrorr%   r   r   r   r   lookup`  r'   z_DictAccessorProperty.lookupownerz&_DictAccessorProperty[_TAccessorValue]c                 C   r/   r0   r   r%   r   r   r   r   r   __get__c  s   z_DictAccessorProperty.__get__c                 C   r/   r0   r   r   r   r   r   r   i  r3   c              	   C   sh   |d u r| S |  |}| j|vr| jS || j }| jd ur2z| |W S  ttfy1   | j Y S w |S r0   )r   r   r   r   
ValueErrorr@   )r%   r   r   storager9   r   r   r   r   m  s   




r9   c                 C   sF   | j rtd| jd ur| || || j< d S || || j< d S Nzread only property)r   AttributeErrorr   r   r   )r%   r   r9   r   r   r   __set__  s
   
z_DictAccessorProperty.__set__c                 C   s&   | j rtd| || jd  d S r   )r   r   r   r   r   r   r   r   r   
__delete__  s   z _DictAccessorProperty.__delete__c                 C   s   dt | j d| j dS )N< >)rX   r*   r   r$   r   r   r   r&     s   z_DictAccessorProperty.__repr__)NNNNN)r*   r+   r,   rq   r   r-   tOptionalr   Callableboolrm   AnyMutableMappingr   typingoverloadrX   r   Unionr   r   r&   r   r   r   r   r   J  sX    
 

	r   bc                 C   sh   t  }d}tj}|j}| D ]}|dtj}|tvr!d}|||}|| q|r,t|S td| d S )NTr
   Fr   )	rE   _cookie_quoting_mapr   r   to_bytesrj   	byteorder_legal_cookie_charsr>   )r   buf	all_legal_lookup_pushchar_intcharr   r   r   _cookie_quote  s   

r   c           	      C   st  t | dk r| S | d d dks| dd  dkr| S | dd } d}t | }t }|j}d|  kr6|k rn t	|S t| |}t| |}|sY|sY|| |d   	 t	|S d }}|rd|d}|rk|d}|r|rs||k r|| ||  || |d |d   |d }n|| ||  |t| |d |d  d |d }d|  kr|k s;t	|S  t	|S )N   r
   r   r   r      )
r   rE   r   	_octal_research	_quote_restartr   intr>   )	r   inrvr   o_matchq_matchjkr   r   r   _cookie_unquote  sB    


 r   c                 c   sr    d}t | }||k r7t| d |}|sdS |d }|dp$d}|d}|t|fV  ||k sdS dS )z8Lowlevel cookie parsing facility that operates on bytes.r   r   keyval    N)r   
_cookie_rer   groupstripendr   )r   r   r   matchr   r9   r   r   r   _cookie_parse_impl  s   
r   domainc                 C   sR   t | tr| d | S z| dW S  ty   Y nw ddd | dD S )Nr      .c                 s   r   )idnaNr   r   pr   r   r   r     r_   z_encode_idna.<locals>.<genexpr>.)r6   r>   rL   r   UnicodeErrorjoinsplitr   r   r   r   _encode_idna  s   

r   c                    s`   t | trz| d} W n ty   |  Y S w dtdtfdd d fdd| d	D S )
Nr   partr"   c                 S   s,   z|  dW S  ty   |  dd Y S w )Nr   r   ignore)rL   r   )r   r   r   r   decode_part  s
   z!_decode_idna.<locals>.decode_partr   c                 3   s    | ]} |V  qd S r0   r   r   r   r   r   r     s    z_decode_idna.<locals>.<genexpr>r   )r6   r-   r   r   r>   r   r   r   r   r   r   _decode_idna  s   
r   c                 C   r/   r0   r   r   r   r   r   _make_cookie_domain  r3   r   c                 C   r/   r0   r   r   r   r   r   r     r3   c                 C   s@   | d u rd S t | } d| v r| ddd } d| v r| S td)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   r   r   r   r   r   r     s   appr   c                    sT   dt dtfdd}ddd |d D d	d
dddtjt  f fdd}|S )z0Like the name says.  But who knows how it works?gyverr"   c                 S   s&   dd l }dd l}||| dS )Nr   r   )base64zlib
decompress	b64decoderL   )r   r   r  r   r   r   bzzzzzzz   s   z_easteregg.<locals>.bzzzzzzz
c                 S   s    g | ]}|d t | d  qS )M   r   )r   )r   r4   r   r   r   
<listcomp>'  s    z_easteregg.<locals>.<listcomp>s#	  
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
7f2zLkGNv8b191cD/3vs9Q833z8trU   r	   start_responser   c                    s   	 ddt dtjtjt t f  dtjdtjtgtjf f fdd}d ur1| ddkr1| |S |d	d
g d ddgS )Nstatusheadersexc_infor"   c                    s   | d  | ||S )N)zX-Powered-ByWerkzeug)r   )r	  r
  r  r  r   r   injecting_start_responseQ  s   
zA_easteregg.<locals>.easteregged.<locals>.injecting_start_responseQUERY_STRING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>z


</pre>
</body>
</html>r   r0   )	r-   r   ListTupler   r   r>   r   r   )rU   r  r  r   r   r  r   eastereggedN  s(   
z_easteregg.<locals>.easteregged)r>   r-   r   
splitlinesr   Iterable)r   r  r  r   r  r   
_easteregg  s"   !($r  )...)rM   rN   )r   Nr"   N)r   Nr"   Nr0   )Sr   rw   r7   restringrj   r   r   r   r   r   	itertoolsr   weakrefr   TYPE_CHECKING_typeshed.wsgir   r   r	   wrappers.requestr   r   r   Logger__annotations__r   	toordinal
_epoch_ord	frozensetascii_lettersdigitsr   r   range_ir   r   r   compiler   r   _legal_cookie_chars_reVERBOSEr   r!   r(   r   r-   r   r2   r>   AnyStrr  rA   getdefaultencoding_default_encodingr   rG   r   rJ   r   rR   rS   rZ   re   StreamHandlerrf   r~   r   r   TypeVarr   Genericr   r   r   Iteratorr   r   r   r   r  r   r   r   r   <module>   s  
 "


  "

	



	"M
K"$