o
    iK                     @   s   d 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 G d
d deeZeG dd deeZG dd deZdd Zdd Zdd Zdd ZdS )z
    flask.debughelpers
    ~~~~~~~~~~~~~~~~~~

    Various helpers to make the development experience better.

    :copyright: 2010 Pallets
    :license: BSD-3-Clause
    N)warn   )implements_to_string)	text_type)Flask)	Blueprint)_request_ctx_stackc                   @   s   e Zd ZdZdS )UnexpectedUnicodeErrorzjRaised in places where we want some better error reporting for
    unexpected unicode or binary data.
    N)__name__
__module____qualname____doc__ r   r   M/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/flask/debughelpers.pyr	      s    r	   c                   @   s    e Zd ZdZdd Zdd ZdS )DebugFilesKeyErrorzRaised from request.files during debugging.  The idea is that it can
    provide a better error message than just a generic KeyError/BadRequest.
    c                 C   sN   |j |}d||jf g}|r|dddd |D   d|| _d S )Na%  You tried to access the file "%s" in the request.files dictionary but it does not exist.  The mimetype for the request is "%s" instead of "multipart/form-data" which means that no file contents were transmitted.  To fix this error you should provide enctype="multipart/form-data" in your form.zI

The browser instead transmitted some file names. This was submitted: %sz, c                 s   s    | ]}d | V  qdS )z"%s"Nr   .0xr   r   r   	<genexpr>.   s    z.DebugFilesKeyError.__init__.<locals>.<genexpr> )formgetlistmimetypeappendjoinmsg)selfrequestkeyform_matchesbufr   r   r   __init__!   s   zDebugFilesKeyError.__init__c                 C   s   | j S N)r   )r   r   r   r   __str__2   s   zDebugFilesKeyError.__str__N)r
   r   r   r   r!   r#   r   r   r   r   r      s    r   c                   @   s   e Zd ZdZdd ZdS )FormDataRoutingRedirectzThis exception is raised by Flask in debug mode if it detects a
    redirect caused by the routing system when the request method is not
    GET, HEAD or OPTIONS.  Reasoning: form data will be dropped.
    c                 C   sr   |j }d|j|jf g}|jd |jdd kr|d |d|j  |d t| d	|
d	 d S )
NzjA request was sent to this URL (%s) but a redirect was issued automatically by the routing system to "%s"./?r   z  The URL was defined with a trailing slash so Flask will automatically redirect to the URL with the trailing slash if it was accessed without one.z  Make sure to directly send your %s-request to this URL since we can't make browsers or HTTP clients redirect with form data reliably or without user interaction.z3

Note: this exception is only raised in debug moder   zutf-8)routing_exceptionurlnew_urlbase_urlsplitr   methodAssertionErrorr!   r   encode)r   r   excr    r   r   r   r!   <   s    

z FormDataRoutingRedirect.__init__N)r
   r   r   r   r!   r   r   r   r   r$   6   s    r$   c                    s:   j j G  fddd } j|_ j|_|j _dS )zSince Flask 0.8 we're monkeypatching the files object in case a
    request is detected that does not use multipart form data but the files
    object is accessed.
    c                       s   e Zd Z fddZdS )z.attach_enctype_error_multidict.<locals>.newclsc                    s4   z  | |W S  ty   |jvr t|w r"   )__getitem__KeyErrorr   r   )r   r   oldclsr   r   r   r0   ^   s   

z:attach_enctype_error_multidict.<locals>.newcls.__getitem__N)r
   r   r   r0   r   r2   r   r   newcls]   s    r4   N)files	__class__r
   r   )r   r4   r   r2   r   attach_enctype_error_multidictV   s
   	r7   c                 c   s    dt | jt | jf V  t| j D ]=\}}|drqt|tt	fr@t
dd |D s0qd| V  |D ]}d| V  q7qt|tttttfsKqd||f V  qd S )Nzclass: %s.%s_c                 s   s    | ]
}t |ttfV  qd S r"   )
isinstancestrr   r   r   r   r   r   q   s    z$_dump_loader_info.<locals>.<genexpr>z%s:z  - %sz%s: %r)typer   r
   sorted__dict__items
startswithr9   tuplelistallr:   r   intfloatbool)loaderr   valueitemr   r   r   _dump_loader_infok   s    

rI   c                 C   sb  d| g}d}d}t j}|dur|jjdur|jj}t|D ]W\}\}}	}
t|	tr0d|	j }nt|	tr>d|	j	|	jf }nt
|	}|d|d |f  t|D ]	}|d|  qQ|
du rbd	}nd
|
d phd }|d7 }|d|  qd}|dkr|d d}n|dkr|d d}|dur|r|d|  |d |d | jd| dS )z2This should help developers understand what failedzLocating template "%s":r   Nzapplication "%s"zblueprint "%s" (%s)z% 5d: trying loader of %sr   z	       %szno matchz
found (%r)z<string>z       -> %sFz'Error: the template could not be found.Tz<Warning: multiple loaders returned a match for the template.zQ  The template was looked up from an endpoint that belongs to the blueprint "%s".z9  Maybe you did not place a template in the right folder?z7  See http://flask.pocoo.org/docs/blueprints/#templates
)r   topr   	blueprint	enumerater9   r   import_namer   namereprr   rI   loggerinfor   )apptemplateattemptsrR   total_foundrL   reqctxidxrF   srcobjtriplesrc_infolinedetailseems_fishyr   r   r   !explain_template_loading_attempts|   sH   






r_   c                   C   s(   t jddkrttddd d S d S )NWERKZEUG_RUN_MAINtruezSilently ignoring app.run() because the application is run from the flask command line executable.  Consider putting app.run() behind an if __name__ == "__main__" guard to silence this warning.   )
stacklevel)osenvirongetr   Warningr   r   r   r   explain_ignored_app_run   s   
rh   )r   rd   warningsr   _compatr   r   rS   r   
blueprintsr   globalsr   r-   UnicodeErrorr	   r1   r   r$   r7   rI   r_   rh   r   r   r   r   <module>   s    	 0