����JFIF���������
1#@!#!123s
D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
proc
/
self
/
root
/
opt
/
alt
/
python312
/
lib64
/
python3.12
/
wsgiref
/
__pycache__
/
Filename :
validate.cpython-312.pyc
back
Copy
� ����B[Yh�:�����������������������*����d�Z�dgZddlZddlZddlZ�ej ������������������d�������Z�ej ������������������d�������Z�G�d��de�������Z d��Z d ��Zd ��Z�G�d��d�������Z �G�d ��d�������Z�G�d��d�������Z�G�d��d�������Z�G�d��d�������Zd��Zd��Zd��Zd��Zd��Zd��Zd��Zd��Zy)a&�� Middleware to check for obedience to the WSGI specification. Some of the things this checks: * Signature of the application and start_response (including that keyword arguments are not used). * Environment checks: - Environment is a dictionary (and not a subclass). - That all the required keys are in the environment: REQUEST_METHOD, SERVER_NAME, SERVER_PORT, wsgi.version, wsgi.input, wsgi.errors, wsgi.multithread, wsgi.multiprocess, wsgi.run_once - That HTTP_CONTENT_TYPE and HTTP_CONTENT_LENGTH are not in the environment (these headers should appear as CONTENT_LENGTH and CONTENT_TYPE). - Warns if QUERY_STRING is missing, as the cgi module acts unpredictably in that case. - That CGI-style variables (that don't contain a .) have (non-unicode) string values - That wsgi.version is a tuple - That wsgi.url_scheme is 'http' or 'https' (@@: is this too restrictive?) - Warns if the REQUEST_METHOD is not known (@@: probably too restrictive). - That SCRIPT_NAME and PATH_INFO are empty or start with / - That at least one of SCRIPT_NAME or PATH_INFO are set. - That CONTENT_LENGTH is a positive integer. - That SCRIPT_NAME is not '/' (it should be '', and PATH_INFO should be '/'). - That wsgi.input has the methods read, readline, readlines, and __iter__ - That wsgi.errors has the methods flush, write, writelines * The status is a string, contains a space, starts with an integer, and that integer is in range (> 100). * That the headers is a list (not a subclass, not another kind of sequence). * That the items of the headers are tuples of strings. * That there is no 'status' header (that is used in CGI, but not in WSGI). * That the headers don't contain newlines or colons, end in _ or -, or contain characters codes below 037. * That Content-Type is given if there is content (CGI often has a default content type, but WSGI does not). * That no Content-Type is given when there is no content (@@: is this too restrictive?) * That the exc_info argument to start_response is a tuple or None. * That all calls to the writer are with strings, and no other methods on the writer are accessed. * That wsgi.input is used properly: - .read() is called with exactly one argument - That it returns a string - That readline, readlines, and __iter__ return strings - That .close() is not called - No other methods are provided * That wsgi.errors is used properly: - .write() and .writelines() is called with a string - That .close() is not called, and no other methods are provided. * The response iterator: - That it is not a string (it should be a list of a single string; a string will work, but perform horribly). - That .__next__() returns a string - That the iterator is not iterated over until start_response has been called (that can signal either a server or application error). - That .close() is called (doesn't raise exception, only prints to sys.stderr, because we only know it isn't called when the object is garbage collected). � validator�����Nz^[a-zA-Z][a-zA-Z0-9\-_]*$z[\000-\037]c�������������������������e�Zd�ZdZy)�WSGIWarningz: Raised in response to WSGI-spec-related warnings N)�__name__� __module__�__qualname__�__doc__��������7/opt/alt/python312/lib64/python3.12/wsgiref/validate.pyr���r���y���s������r���r���c�����������������������|�st��������|���y��N)�AssertionError)�cond�argss��� r����assert_r���~���s��������d�#�#��r���c������������������p�����t��������|��������t��������u�r|�S�t��������dj������������������|t ��������|�����������������������)Nz!{0} must be of type str (got {1}))�type�strr����format�repr)�value�titles��� r����check_string_typer�������s6�������U�|�s���� �+�2�2�5�$�u�+�F�H��Hr���c���������������������������fd�}|S�)a��� When applied between a WSGI server and a WSGI application, this middleware will check for WSGI compliance on a number of levels. This middleware does not modify the request or response in any way, but will raise an AssertionError if anything seems off (except for a failure to close the application iterator, which will be printed to stderr -- there's no way to raise an exception at that point). c�������������������0�������t��������t��������|��������dk(��d��������t��������|�d��������|�\��}�t��������|��������g����fd�}t��������|d����������|d<���t ��������|d����������|d<�����||�������}t��������|d�uxr�|dk7��d��������t��������|��������t ��������|��������S�) N����zTwo arguments required�No keyword arguments allowedc�������������������L�����t��������t��������|��������dk(��xs�t��������|��������dk(��d|�����������t��������|�d��������|�d���}|�d���}t��������|��������dk(��r|�d���}nd�}t��������|��������t��������|��������t ��������||��������t��������|���������j ������������������d���������t����������|����������S�)Nr�������zInvalid number of arguments: r���r�������)r����len�check_status� check_headers�check_content_type�check_exc_info�append�WriteWrapper)r����kw�status�headers�exc_info�start_response�start_response_starteds��� ��r����start_response_wrapperz;validator.<locals>.lint_app.<locals>.start_response_wrapper����s���������C��I��N�4�c�$�i�1�n��59�;� >���F�:�;��!�W�F��1�g�G��4�y�A�~���7������ ��'�"��v�w�/��8�$�"�)�)�$�/���� 5�6�6r���� wsgi.input�wsgi.errorsFz>The application must return an iterator, if only an empty list)r���r"���� check_environ�InputWrapper�ErrorWrapper�check_iterator�IteratorWrapper)r���r)����environr/����iteratorr-���r.����applications��� @@�r����lint_appzvalidator.<locals>.lint_app����s����������D� �Q�� 8�9��B��6�7�"&�����g���"$�� 7�&�!-�W�\�-B� C����!-�g�m�.D�!E�� ���w�(>�?�����$�:��U�):�L� N�� �x� ��x�)?�@�@r���r ���)r9���r:���s���` r���r���r�������s�������'A�R��Or���c��������������������0�����e�Zd�Zd��Zd��Zd��Zd��Zd��Zd��Zy)r3���c�����������������������||�_���������y�r���)�input)�self� wsgi_inputs��� r����__init__zInputWrapper.__init__����s �������� r���c�����������������������t��������t��������|�������dk(�����������|�j������������������j������������������|��}t��������t ��������|�������t ��������u���������|S��Nr!���)r���r"���r=����readr����bytes�r>���r����vs��� r���rC���zInputWrapper.read����s<��������D� �Q����D�J�J�O�O�T�"����Q��5� �!��r���c�����������������������t��������t��������|�������dk�����������|�j������������������j������������������|��}t��������t ��������|�������t ��������u���������|S�rB���)r���r"���r=����readliner���rD���rE���s��� r���rH���zInputWrapper.readline����s>��������D� �Q����D�J�J����&����Q��5� �!��r���c������������������������t��������t��������|�������dk�����������|�j������������������j������������������|��}t��������t ��������|�������t ��������u���������|D�]��}t��������t ��������|�������t��������u�����������|S�rB���)r���r"���r=���� readlinesr����listrD���)r>���r����lines�lines��� r���rJ���zInputWrapper.readlines����sY��������D� �Q���$�� � �$�$�d�+����U��t�#�$��D��D��J�%�'�(����r���c��������������#����`���K����|�j��������������������������x}r|���|�j��������������������������x}r�y�y��wr���)rH���)r>���rM���s��� r����__iter__zInputWrapper.__iter__����s/����������m�m�o�%�d�%��J���m�m�o�%�d�%�s����).�.c�����������������������t��������dd��������y�)Nr���z input.close() must not be called�r����r>���s��� r����closezInputWrapper.close����s ��������5�6r���N) r���r���r���r@���rC���rH���rJ���rO���rS���r ���r���r���r3���r3�������s ������ �����7r���r3���c��������������������*�����e�Zd�Zd��Zd��Zd��Zd��Zd��Zy)r4���c�����������������������||�_���������y�r���)�errors)r>����wsgi_errorss��� r���r@���zErrorWrapper.__init__����� ������!��r���c������������������n�����t��������t��������|�������t��������u���������|�j������������������j ������������������|��������y�r���)r���r���r���rV����write�r>����ss��� r���rZ���zErrorWrapper.write����s$��������Q��3��������!�r���c������������������8�����|�j�������������������j���������������������������y�r���)rV����flushrR���s��� r���r^���zErrorWrapper.flush����s�����������r���c������������������4�����|D�]��}|�j������������������|����������y�r���)rZ���)r>����seqrM���s��� r���� writelineszErrorWrapper.writelines����s�������D��J�J�t���r���c�����������������������t��������dd��������y�)Nr���z!errors.close() must not be calledrQ���rR���s��� r���rS���zErrorWrapper.close����s ��������6�7r���N)r���r���r���r@���rZ���r^���ra���rS���r ���r���r���r4���r4�������s������"����8r���r4���c�������������������������e�Zd�Zd��Zd��Zy)r(���c�����������������������||�_���������y�r���)�writer)r>����wsgi_writers��� r���r@���zWriteWrapper.__init__����rX���r���c������������������Z�����t��������t��������|�������t��������u���������|�j������������������|��������y�r���)r���r���rD���re���r[���s��� r����__call__zWriteWrapper.__call__����s��������Q��5� �!����A�r���N)r���r���r���r@���rh���r ���r���r���r(���r(�������s������"�r���r(���c�������������������������e�Zd�Zd��Zd��Zy)�PartialIteratorWrapperc�����������������������||�_���������y�r����r8���)r>���� wsgi_iterators��� r���r@���zPartialIteratorWrapper.__init__����s ������%�� r���c������������������.�����t��������|�j������������������d��������S�r���)r6���r8���rR���s��� r���rO���zPartialIteratorWrapper.__iter__���s�������t�}�}�d�3�3r���N)r���r���r���r@���rO���r ���r���r���rj���rj�������s������&�4r���rj���c��������������������*�����e�Zd�Zd��Zd��Zd��Zd��Zd��Zy)r6���c������������������N�����||�_���������t��������|�������|�_��������d|�_��������||�_��������y�)NF)�original_iterator�iterr8����closed�check_start_response)r>���rm���rt���s��� r���r@���zIteratorWrapper.__init__��s%������!.����]�+�� ����$8��!r���c�����������������������|�S�r���r ���rR���s��� r���rO���zIteratorWrapper.__iter__��s�������r���c������������������������t��������|�j�������������������d��������t��������|�j�������������������������}t ��������|�������t ��������urt��������dd|�d���������|�j�������������������t��������|�j������������������d��������d�|�_��������|S�)NzIterator read after closedFz!Iterator yielded non-bytestring (�)zjThe application returns and we started iterating over its body, but start_response has not yet been called)r���rs����nextr8���r���rD���rt���)r>���rF���s��� r����__next__zIteratorWrapper.__next__��si�������D�K�K��(� *���������7�%���E�Q�H�I��$�$�0��D�-�-�|� ~�(,�D�%��r���c������������������t�����d|�_���������t��������|�j������������������d�������r|�j������������������j���������������������������y�y�)NTrS���)rs����hasattrrq���rS���rR���s��� r���rS���zIteratorWrapper.close��s0����������4�)�)�7�3��"�"�(�(�*��4r���c�����������������������|�j�������������������st��������j������������������j������������������d��������t ��������|�j�������������������d��������y�)Nz/Iterator garbage collected without being closed)rs����sys�stderrrZ���r���rR���s��� r����__del__zIteratorWrapper.__del__ ��s0�������{�{��J�J���A� C�����=� ?r���N)r���r���r���r@���rO���ry���rS���r���r ���r���r���r6���r6�����s������9�� �+� ?r���r6���c������������������b����t��������t��������|��������t��������u�dt��������|���������d|��d���������dD�]��}t��������||�v�d|������������dD�]��}t��������||�vd|�d|d d���d �����������d|�vrt��������j������������������dt ����������������|�j ��������������������������D�]>��}d |v�r�t��������t��������|�|����������t��������u�d|�dt��������|�|�����������d|�|����d����������@�t��������t��������|�d����������t��������u�d|�d����d���������t��������|�d���dv�d|�d���z����������t��������|�d�����������t��������|�d�����������|�d���dvr t��������j������������������d|�d���z��t ����������������t��������|�j������������������d��������xs�|�d���j������������������d�������d|�d���z����������t��������|�j������������������d��������xs�|�d���j������������������d�������d|�d���z����������|�j������������������d �������r!t��������t��������|�d ����������d!k\��d"|�d ���z����������|�j������������������d�������st��������d|�v�d#��������t��������|�j������������������d�������dk7��d$��������y�)%Nz&Environment is not of the right type: z (environment: rw���) �REQUEST_METHOD�SERVER_NAME�SERVER_PORT�wsgi.versionr0���r1���zwsgi.multithreadzwsgi.multiprocessz wsgi.run_oncez"Environment missing required key: )�HTTP_CONTENT_TYPE�HTTP_CONTENT_LENGTHz%Environment should not have the key: z (use ����z instead)�QUERY_STRINGz�QUERY_STRING is not in the WSGI environment; the cgi module will use sys.argv when this variable is missing, so application errors are more likely�.zEnvironmental variable z is not a string: z (value: r����z wsgi.version should be a tuple (zwsgi.url_scheme)�http�httpszwsgi.url_scheme unknown: %rr0���r1���r����)�GET�HEAD�POST�OPTIONS�PATCH�PUT�DELETE�TRACEzUnknown REQUEST_METHOD: %r�SCRIPT_NAME�/z$SCRIPT_NAME doesn't start with /: %r� PATH_INFOz"PATH_INFO doesn't start with /: %r�CONTENT_LENGTHr���zInvalid CONTENT_LENGTH: %rzgOne of SCRIPT_NAME or PATH_INFO are required (PATH_INFO should at least be '/' if SCRIPT_NAME is empty)zOSCRIPT_NAME cannot be '/'; it should instead be '', and PATH_INFO should be '/')r���r����dict�warnings�warnr����keysr����tuple�check_input�check_errors�get� startswith�int)r7����keys��� r���r2���r2���'��sn������D��M�T�!���=�'� #�$�!��� ��w��69�;� =� !��<����7�"�"%�s�1�2�w� 0� 1��<� ��W�$�� � � 4�� � ���|�|�~���#�:����W�S�\�"�c�)��D����&���� 6� 7� ����D���(�)�U�2�18��1H�J�L��G�%�&�*;�;�%��0A�(B�B�D�����%�&����'�(���� ��)M��M�� � �(�7�3C�+D�D�� ������M�*�*�� 6��}�%�0�0��5�.���1G�G�I������K�(�(�� 4��{�#�.�.�s�3�,�w�{�/C�C�E���{�{�#�$���G�,�-�.�!�3�(�7�3C�+D�D� F���;�;�}�%���w�&� >� ?���G�K�K� �&�#�-� "�#r���c������������������J�����dD�]��}t��������t��������|�|�������d|��d|����������� �y�)N)rC���rH���rJ���rO���zwsgi.input (�) doesn't have the attribute �r���r{���)r?����attrs��� r���r����r����h��s'������=���� �D�)��4� !� "��>r���c������������������J�����dD�]��}t��������t��������|�|�������d|��d|����������� �y�)N)r^���rZ���ra���z wsgi.errors (r����r����)rW���r����s��� r���r����r����n��s'������0�����T�*��D� "� #��1r���c����������������������t��������|�d�������}�|�j������������������d�d�������d���}t��������t��������|�������dk(��d|z����������t ��������|�������}t��������|dk\��d|z����������t��������|��������dk��s|�d���d k7��rt��������j������������������d |�z��t����������������y�y�)N�Statusr!���r���r ���z)Status codes must be three characters: %r�d���zStatus code is invalid: %r����� zjThe status string (%r) should be a three-digit integer followed by a single space and a status explanation)r����splitr���r"���r����r����r����r���)r*����status_code� status_ints��� r���r#���r#���t��s������� �v�x� 0�F��,�,�t�Q�'��*�K��C����!�3�k�A�C��[�!�J��J�#��;�j�H�I� �6�{�Q��&��)�s�*�� � � B�� �!� #��+r���c����������� ������������t��������t��������|��������t��������u�d|��dt��������|������������������|�D��]9��}t��������t��������|�������t��������u�d|�dt��������|�����������������t��������t ��������|�������dk(����������|\��}}t��������|d�������}t��������|d�������}t��������|j ��������������������������dk7��d |z����������t��������d |vxr�d|vd|z����������t��������t��������j������������������|�������d |z����������t��������|j������������������d��������xr�|j������������������d��������d|z����������t��������j������������������|�������s��t��������dd|�dt��������j������������������|�������j������������������d��������d�����������<�y�)Nz Headers (z) must be of type list: zIndividual headers (z) must be of type tuple: r����Header namezHeader valuer*���zyThe Status header cannot be used; it conflicts with CGI script, and HTTP status is not given through headers (value: %r).� �:z,Header names may not contain ':' or '\n': %rzBad header name: %r�-�_z#Names may not end in '-' or '_': %rr���zBad header value: z (bad char: rw���)r���r���rK���r����r"���r����lower� header_re�search�endswith�bad_header_value_re�group)r+����item�namer���s��� r���r$���r$������sM������D��M�T�!��D��M� #�$������T� �e�#��T�$�Z� !� "�� ��D� �Q������e� ��}�5��!�%��8���� � ���(� �"� #� $�� ��D� �4�S��_�;�d�B� D�� � � ��&�(=��(D�E��D�M�M�#�&�&�A�t�}�}�S�/A�+A�1�D�8� :��%�%�e�,��A��)�0�0��7�=�=�a�@�B�� C�%�r���c����������������������t��������|�d�������}�t��������|�j������������������d�d�������d����������}d}|D�]:��\��}}t��������|d�������}|j��������������������������dk(��s�&||vr�y�t ��������dd|z�����������<�||vrt ��������dd|z����������y�y�) Nr����r!���r���)�����i0��r����zcontent-typezJContent-Type header found in a %s response, which must not return content.z,No Content-Type header found in headers (%s))r���r����r����r����r���)r*���r+����code�NO_MESSAGE_BODYr����r���s��� r���r%���r%������s������� �v�x� 0�F��v�|�|�D�!�$�Q�'�(�D��!�O����e� ��}�5���:�:�<�>�)��?�*���A��9�<@�A�� B�����?�"���A�G�K�L��#r���c����������� �������d�����t��������|�d�u�xs�t��������|��������t��������u�d|��dt��������|������������������y�)Nz exc_info (z) is not a tuple: )r���r���r����)r,���s��� r���r&���r&������s-�������H���7��X��%� 7��.6��X��G�Ir���c������������������F�����t��������t��������|�t��������t��������f��������d��������y�)NzwYou should not return a string as your application iterator, instead return a single-item list containing a bytestring.)r���� isinstancer���rD���rl���s��� r���r5���r5������s#�������� �8�c�5�\�2�2� E�Fr���)r ����__all__�rer}���r�����compiler����r�����Warningr���r���r���r���r3���r4���r(���rj���r6���r2���r����r����r#���r$���r%���r&���r5���r ���r���r����<module>r�������s������ i�T��-��� �� ����B�J�J�3�4� � �b�j�j��0����'��� $�H�5�n7��7�@8��8�&���4��4�!?��!?�F?#�B"�#�#�C�2M� I� Fr���