Sindbad~EG File Manager

Current Path : /usr/local/lib/python3.12/site-packages/werkzeug/middleware/__pycache__/
Upload File :
Current File : //usr/local/lib/python3.12/site-packages/werkzeug/middleware/__pycache__/lint.cpython-312.pyc

�

'ٜg�8��<�dZddlmZddlZddlmZddlmZddl	m
Z
ddlmZdd	l
mZdd
lmZej"rddlmZddlmZdd
lmZGd�de�ZGd�de�Zefdd�ZGd�d�ZGd�d�ZGd�d�ZGd�d�ZGd�d�Zy)a�
WSGI Protocol Linter
====================

This module provides a middleware that performs sanity checks on the
behavior of the WSGI server and application. It checks that the
:pep:`3333` WSGI spec is properly implemented. It also warns on some
common HTTP errors such as non-empty responses for 304 status codes.

.. autoclass:: LintMiddleware

:copyright: 2007 Pallets
:license: BSD-3-Clause
�)�annotationsN)�
TracebackType)�urlparse)�warn�)�Headers)�is_entity_header)�FileWrapper)�
StartResponse)�WSGIApplication)�WSGIEnvironmentc��eZdZdZy)�WSGIWarningz Warning class for WSGI warnings.N��__name__�
__module__�__qualname__�__doc__���C/usr/local/lib/python3.12/site-packages/werkzeug/middleware/lint.pyrr!���*rrc��eZdZdZy)�HTTPWarningz Warning class for HTTP warnings.Nrrrrrr%rrrc	��t|�|ur9t|�d|j�dt|�j�d�td��yy)Nz
 requires z, got �.���
stacklevel)�typerrr)�context�obj�needs   r�
check_typer$)sH���C�y�����k��D�M�M�#4�F�4��9�;M�;M�:P�PQ�R���	
�rc�4�eZdZdd�Zdd�Zdd�Zd	d�Zd
d�Zy)�InputStreamc��||_y�N��_stream��self�streams  r�__init__zInputStream.__init__3�	����rc��t|�dk(rtdtd��n t|�dk7rtdtd��|jj|�S)Nrz�WSGI does not guarantee an EOF marker on the input stream, thus making calls to 'wsgi.input.read()' unsafe. Conforming servers may never return from this call.rr�z2Too many parameters passed to 'wsgi.input.read()'.)�lenrrr*�read�r,�argss  rr3zInputStream.read6sY���t�9��>��*���
���Y�!�^��D���
�
!�t�|�|� � �$�'�'rc���t|�dk(rtdtd��n,t|�dk(rtdtd��ntd��|jj
|�S)Nrz_Calls to 'wsgi.input.readline()' without arguments are unsafe. Use 'wsgi.input.read()' instead.rrr1z~'wsgi.input.readline()' was called with a size hint. WSGI does not support this, although it's available on all major servers.z5Too many arguments passed to 'wsgi.input.readline()'.)r2rr�	TypeErrorr*�readliner4s  rr8zInputStream.readlineGsf���t�9��>��0���	
���Y�!�^��O���	
��S�T�T�$�t�|�|�$�$�d�+�+rc��	t|j�S#t$r tdtd��td�cYSwxYw)Nz'wsgi.input' is not iterable.rrr)�iterr*r7rr�r,s r�__iter__zInputStream.__iter__Zs;��	�����%�%���	��0�+�!�L���8�O�	�s��&A�Ac�\�tdtd��|jj�y)Nz(The application closed the input stream!rr�rrr*�closer;s rr?zInputStream.closea� ���
7��QR�S������rN)r-zt.IO[bytes]�return�None)r5�t.AnyrA�bytes)rAzt.Iterator[bytes]�rArB)rrrr.r3r8r<r?rrrr&r&2s���(�",�&�rr&c�4�eZdZdd�Zdd�Zd	d�Zd
d�Zd	d�Zy)�ErrorStreamc��||_yr(r)r+s  rr.zErrorStream.__init__gr/rc�\�td|t�|jj|�y)Nzwsgi.error.write())r$�strr*�write�r,�ss  rrKzErrorStream.writejs!���'��C�0������1�rc�8�|jj�yr()r*�flushr;s rrOzErrorStream.flushns�������rc�4�|D]}|j|��yr()rK)r,�seq�lines   r�
writelineszErrorStream.writelinesqs���D��J�J�t��rc�\�tdtd��|jj�y)Nz(The application closed the error stream!rrr>r;s rr?zErrorStream.closeur@rN)r-z	t.IO[str]rArB)rMrJrArBrE)rQzt.Iterable[str]rArB)rrrr.rKrOrSr?rrrrGrGfs������rrGc��eZdZdd�Zdd�Zy)�GuardedWritec� �||_||_yr()�_write�_chunks)r,rK�chunkss   rr.zGuardedWrite.__init__{s�������rc��td|t�|j|�|jj	t|��y)Nzwrite())r$rDrXrY�appendr2rLs  r�__call__zGuardedWrite.__call__s/���9�a��'����A�������C��F�#rN)rKzt.Callable[[bytes], object]rZ�	list[int]rArB)rMrDrArB)rrrr.r]rrrrVrVzs���$rrVc�D�eZdZ								dd�Zdd�Zd	d�Zd
d�Zd
d�Zy)�GuardedIteratorc�p�||_t|�j|_d|_||_||_y)NF)�	_iteratorr:�__next__�_next�closed�headers_setrZ)r,�iteratorrfrZs    rr.zGuardedIterator.__init__�s2��"����(�^�,�,��
����&�����rc��|Sr(rr;s rr<zGuardedIterator.__iter__�s���rc��|jrtdtd��|j�}|jstdtd��td|t�|jjt|��|S)Nz Iterated over closed 'app_iter'.rrz8The application returned before it started the response.zapplication iterator items)
rerrrdrfr$rDrZr\r2)r,�rvs  rrczGuardedIterator.__next__�se���;�;��3�[�Q�O�
�Z�Z�\������J���
�	�/��U�;������3�r�7�#��	rc�z�d|_t|jd�r|jj�|jr�|j\}}t|j�}|jdt��}|dk(rW|D]<\}}|j�}|dvs�t|�s�'td|�d�td	�
��>|rtdtd	�
�yyd|cxkrd
ksn|dk(r3|dk7rt|�d�td	�
�|rt|�d�td	�
�yy|�||k7rtdtd	�
�yyyy)NTr?zcontent-length)r i0)�expireszcontent-locationzEntity header z found in 304 response.rrz#304 responses must not have a body.�d����rz- responses must have an empty content length.z  responses must not have a body.zGContent-Length and the number of bytes sent to the client do not match.)re�hasattrrbr?rf�sumrZ�get�int�lowerr	rrr)r,�status_code�headers�
bytes_sent�content_length�key�_values       rr?zGuardedIterator.close�sZ������4�>�>�7�+��N�N� � �"����#'�#3�#3� �K���T�[�[�)�J�$�[�[�)9��[�D�N��c�!�#*�K�C���)�)�+�C��"A�A�FV��G��,�S�G�3J�K�'�'(��$+���=�#�#$�����)�c�)�[�C�-?�!�Q�&��&�-�'T�U�#�#$��
��&�-�'G�H�#�#$��� �+��*�0L��,�� �	�1M�+�Grc�b�|js	tdtd��yy#t$rYywxYw)Nz4Iterator was garbage collected before it was closed.rr)rerr�	Exceptionr;s r�__del__zGuardedIterator.__del__�s8���{�{�
��J�� �����
��
�s�"�	.�.N)rg�t.Iterable[bytes]rf�tuple[int, Headers]rZr^rArB)rAr`)rArDrE)rrrr.r<rcr?r}rrrr`r`�sB��
�#�
�)�
��	
�

�
���"/�b	rr`c�P�eZdZdZd	d�Zd
d�Z								dd�Zdd�Zd
d�Zdd�Z	y)�LintMiddlewarea�Warns about common errors in the WSGI and HTTP behavior of the
    server and wrapped application. Some of the issues it checks are:

    -   invalid status codes
    -   non-bytes sent to the WSGI server
    -   strings returned from the WSGI application
    -   non-empty conditional responses
    -   unquoted etags
    -   relative URLs in the Location header
    -   unsafe calls to wsgi.input
    -   unclosed iterators

    Error information is emitted using the :mod:`warnings` module.

    :param app: The WSGI application to wrap.

    .. code-block:: python

        from werkzeug.middleware.lint import LintMiddleware
        app = LintMiddleware(app)
    c��||_yr()�app)r,r�s  rr.zLintMiddleware.__init__�s	����rc��t|�turtdtd��dD]}||vs�td|�d�td���|dd	k7rtd
td��|j	dd�}|j	d
d�}|r|ddk7rtd|��td��|r|ddk7rtd|��td��yyy)Nz/WSGI environment is not a standard Python dict.�r)	�REQUEST_METHOD�SERVER_NAME�SERVER_PORT�wsgi.version�
wsgi.input�wsgi.errorszwsgi.multithreadzwsgi.multiprocessz
wsgi.run_oncezRequired environment key z
 not foundrr�)r1rz"Environ is not a WSGI 1.0 environ.�SCRIPT_NAME��	PATH_INFOr�/z+'SCRIPT_NAME' does not start with a slash: z)'PATH_INFO' does not start with a slash: )r �dictrrrr)r,�environry�script_name�	path_infos     r�
check_environzLintMiddleware.check_environ�s�����=��$��A���
�


�C��'�!��/��w�j�A�� ��

�"�>�"�f�,��5�{�q�Q��k�k�-��4���K�K��R�0�	��;�q�>�S�0��=�k�_�M���
���1���,��;�I�=�I���
�-�9rc�F�td|t�|jdd�d}t|�dk7s|j	�stdtd��t|�dks|ddk7rtd	|�d
�td��t|�}|dkrtdtd��t|�turtd
td��|D]�}t|�tust|�dk7rtdtd��|\}}t|�tust|�turtdtd��|j�dk(s��tdtd����|�"t|t�stdtd��t|�}	|j|	�||	fS)N�statusr1rrz!Status code must be three digits.rr�� zInvalid value for status zJ. Valid status strings are three digits, a space and a status explanation.rmzStatus code < 100 detected.zHeader list is not a list.rz#Header items must be 2-item tuples.z'Header keys and values must be strings.zFThe status header is not supported due to conflicts with the CGI spec.zInvalid value for exc_info.)r$rJ�splitr2�	isdecimalrrrsr �list�tuplert�
isinstancer�
check_headers)
r,r�rv�exc_info�status_code_strru�item�name�value�headers_objs
          r�check_start_responsez#LintMiddleware.check_start_response)s{��	�8�V�S�)� �,�,�t�Q�/��2�����1�$�O�,E�,E�,G��4�k�a�P��v�;��?�f�Q�i�3�.��+�F�:�6=�=���	
��/�*������.���J���=��$��-�{�q�I��D��D�z��&�#�d�)�q�.��:�K�TU�V��K�D�%��D�z��$��U��3�(>��=�{�WX���z�z�|�x�'��4�� �	�� ��
�8�U�(C��.���J��g�&�����;�'��K�'�'rc�^�|jd�}|�^|jd�r(|jd�rtdtd��|dd}|dd|d	dcxk(rd
k(sntdtd��|jd�}|�)t	|�j
std
td��yyy)N�etag)zW/�w/r�z)Weak etag indicator should be upper case.r�rrr1����"zUnquoted etag emitted.�locationz+Absolute URLs required for location header.)rr�
startswithrrr�netloc)r,rvr�r�s    rr�zLintMiddleware.check_headers]s����{�{�6�"�������|�,��?�?�4�(��C�#�#$���A�B�x����!�H��R�S�	�0�S�0��-�{�q�I��;�;�z�*�����H�%�,�,��A�� ��-� rc�J�t|t�rtdtd��yy)Nz�The application returned a string. The response will send one character at a time to the client, which will kill performance. Return a list or iterable instead.rr)r�rJrr)r,�app_iters  r�check_iteratorzLintMiddleware.check_iteratorxs&���h��$��6���
�%rc������t|�dk7rtdtd��|rtdtd��|d}|d��j|�t	|d�|d<t|d�|d<t|d	<g�g�						d����fd
�}�j|tjd|��}�j|�t|tjtttf����S)
NrzA WSGI app takes two arguments.rz+A WSGI app does not take keyword arguments.rr1r�r�zwsgi.file_wrapperc���t|�dvrtdt|��d�td��|rtdtd��|d}|d}t|�d	k(r|dnd}�j|||��ddt	�|||���S)
N>rrzInvalid number of arguments: z, expected 2 or 3.rrz1'start_response' does not take keyword arguments.rr1r)r2rrr�rV)	r5�kwargsr�rvr�rZrfr,�start_responses	     ����r�checking_start_responsez8LintMiddleware.__call__.<locals>.checking_start_response�s�����4�y��&��3�C��I�;�>P�Q�� ����G�� ���q�'�F�-1�!�W�G��t�9��>��Q��t�
�"�6�6�v�w��Q�K��N���v�w�� I�6�R�Rrr)r5rCr�rCrAzt.Callable[[bytes], None])r2rrr�r&rGr
r��t�castr�r`r�rsr)	r,r5r�r�r�r�rZrfr�s	`     @@@rr]zLintMiddleware.__call__�s
����t�9��>��2�K�A�N���=�{�WX�
�$(��7��(,�Q������7�#� +�G�L�,A� B����!,�W�]�-C�!D��
��(3��#�$�#%����	S��	S�$)�	S�
&�	S�	S�4�8�8�G�Q�V�V�O�=T�%U�V�����H�%���a�f�f�U�3��<�0�+�>��
�	
rN)r�rrArB)r�r
rArB)r�rJrvzlist[tuple[str, str]]r�z?None | tuple[type[BaseException], BaseException, TracebackType]rAr)rvrrArB)r�r~rArB)r5rCr�rCrAr~)
rrrrr.r�r�r�r�r]rrrr�r��sN���,�*�X2(��2(�'�2(�T�	2(�

�2(�h�6�5
rr�)r!rJr"�objectr#r rArB) r�
__future__r�typingr��typesr�urllib.parser�warningsr�datastructuresr�httpr	�wsgir
�
TYPE_CHECKING�_typeshed.wsgirrr
�WarningrrrJr$r&rGrVr`r�rrr�<module>r�s���
�#���!��$�#���?�?�,�.�.�+�'�+�+�'�+�8;�
�1�1�h��($�$�[�[�|T
�T
r

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists