o
    i8                     @   s  d 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 dd	lmZ dd
lmZ ddlmZ ddlmZ dae
 Zeddd Zejej d dZdddddZeededdD ]Zde deee< qqe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'd)d* Z(G d+d, d,e!Z)d-d. Z*d/d0 Z+d1d2 Z,d3d4 Z-d5d6 Z.d7d8 Z/d;d9d:Z0dS )<z
    werkzeug._internal
    ~~~~~~~~~~~~~~~~~~

    This module provides internally used helpers and constants.

    :copyright: 2007 Pallets
    :license: BSD-3-Clause
    N)date)datetime)chain)WeakKeyDictionary   )int_to_byte)integer_types)
iter_bytes)
range_type)	text_typei  z/=!#$%&'*+-.^_`|~: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      dS )Nzno value selfr   r   M/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/werkzeug/_internal.py__repr__9      z_Missing.__repr__c                 C   r   )N_missingr   r   r   r   r   
__reduce__<   r   z_Missing.__reduce__N)__name__
__module____qualname__r   r   r   r   r   r   r   8   s    r   c                 C   s,   t | d| }t|tsJ dt| j |S )Nenvironz/%r is not a WSGI environment (has to be a dict))getattr
isinstancedicttyper    )objenvr   r   r   _get_environC   s
   r*   c                    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 Nlevel).0handlerr,   r   r   	<genexpr>S   s    z%_has_level_handler.<locals>.<genexpr>TF)getEffectiveLevelanyhandlers	propagateparent)loggercurrentr   r,   r   _has_level_handlerK   s   	r8   c                 O   sd   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)_loggerlogging	getLoggerr-   NOTSETsetLevelINFOr8   
addHandlerStreamHandlerr$   rstrip)r'   messageargskwargsr   r   r   _log^   s   

$rF   c           	   	      s   t | dr| j} t| }|dur|S t tdrt| }nt| }|dd \}}|p0d}t| g t|D ].\}}t	|t
rHtdz||   }W n ty^   |ddf}Y nw |d|f}| q;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 }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)
rD   rE   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)hasattrrG   _signature_cachegetinspectrH   
getargspeclenrJ   r%   list	TypeErrorrL   rK   tuple)	funcr^   tup
positionaldefaultsrT   rU   rW   paramr   rY   r   _parse_signaturet   s8   





)rm   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   utctimetupler   floatintr   	toordinal
_epoch_ord)argyearmonthdayhourminuteseconddayshoursminutessecondsr   r   r   _date_to_unix   s   

r   c                   @   sJ   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 ur|| _|| _d S r+   )rU   rW   	load_func	dump_func	read_only__doc__)r   rU   rW   r   r   r   docr   r   r   __init__   s   	
z_DictAccessorProperty.__init__c              	   C   sn   |d u r| S |  |}| j|vr| jS || j }| jd ur5z| |}W |S  ttfy4   | j}Y |S w |S r+   )lookuprU   rW   r   
ValueErrorrf   )r   r(   r'   storagervr   r   r   __get__   s   



z_DictAccessorProperty.__get__c                 C   s6   | j rtd| jd ur| |}|| || j< d S Nzread only property)r   AttributeErrorr   r   rU   )r   r(   valuer   r   r   __set__   s
   

z_DictAccessorProperty.__set__c                 C   s&   | j rtd| || jd  d S r   )r   r   r   rM   rU   )r   r(   r   r   r   
__delete__   s   z _DictAccessorProperty.__delete__c                 C   s   d| j j| jf S )Nz<%s %s>)	__class__r    rU   r   r   r   r   r     s   z_DictAccessorProperty.__repr__)NNNNNr+   )
r    r!   r"   r   r   r   r   r   r   r   r   r   r   r   r      s    

r   c                 C   s^   t  }d}tj}|j}t| D ]}|tvrd}|||}|| q|r't|S td| d S )NTFr   )	bytearray_cookie_quoting_mapra   rO   r	   _legal_cookie_charsbytes)bbuf	all_legal_lookup_push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   rI      )
rd   r   rO   	_octal_research	_quote_restartrK   rs   r   )	r   inr   r   o_matchq_matchjkr   r   r   _cookie_unquote  sB    


 r   c                 c   sv    d}t | }||k r9t| d |}|sdS |d }|dp$d}|d}t|t|fV  ||k sdS dS )z8Lowlevel cookie parsing facility that operates on bytes.r   r   keyval    N)rd   
_cookie_rer   groupstripendr   )r   r   r   matchr   r   r   r   r   _cookie_parse_impl;  s   
r   c                 C   sl   t | ts| d | S z| dW S  ty   Y nw | d}t|D ]\}}|d||< q%d|S )Nr   .idna   .)r%   r   decodeencodeUnicodeErrorsplitrJ   joindomainpartsrT   partr   r   r   _encode_idnaL  s   



r   c              	   C   s   t | trz| d} W n ty   |  Y S w | d}t|D ]\}}z	|d||< W q! ty?   |dd||< Y q!w d|S )Nr   r   r   ignorer   )r%   r   r   r   r   rJ   r   r   r   r   r   r   _decode_idna_  s   


r   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   _make_cookie_domainv  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zlib
decompress	b64decoder   )gyverr   r   r   r   r   bzzzzzzz  s   z_easteregg.<locals>.bzzzzzzz
c                 S   s    g | ]}|d t | d  qS )M    )rd   )r.   xr   r   r   
<listcomp>  s    z_easteregg.<locals>.<listcomp>s#	  
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
7f2zLkGNv8b191cD/3vs9Q833z8tc                    sJ   d	 fdd	}d ur|  ddkr| |S |ddg d dgS )
Nc                    s   | d  | ||S )N)zX-Powered-ByWerkzeug)rK   )statusheadersexc_infostart_responser   r   injecting_start_response  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>%s


</pre>
</body>
</html>r   r+   )ra   r   )r#   r   r   appr   r   r   easteregged  s   
z_easteregg.<locals>.easteregged)r   
splitlines)r   r   r   r   r   r   
_easteregg  s   !(!r   r+   )1r   rb   r;   restringr   r   	itertoolsr   weakrefr   _compatr   r   r	   r
   r   r:   r`   rt   ru   ascii_lettersdigitsr   r   r   _icompiler   r   _legal_cookie_chars_reVERBOSEr   objectr   r   r*   r8   rF   rm   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sZ   	


N4$