Current File : //usr/local/apps/python3/lib/python3.11/site-packages/asgiref/__pycache__/wsgi.cpython-311.pyc
�

�rRha��b�ddlmZddlmZddlmZmZGd�d��ZGd�d��ZdS)	�)�BytesIO)�SpooledTemporaryFile)�AsyncToSync�
sync_to_asyncc��eZdZdZd�Zd�ZdS)�
WsgiToAsgizG
    Wraps a WSGI application to make it into an ASGI application.
    c��||_dS�N)�wsgi_application��selfrs  �D/usr/local/apps/python3/lib/python3.11/site-packages/asgiref/wsgi.py�__init__zWsgiToAsgi.__init__s�� 0�����c��TK�t|j��|||���d{V��dS)z�
        ASGI application instantiation point.
        We return a new WsgiToAsgiInstance here with the WSGI app
        and the scope, ready to respond when it is __call__ed.
        N)�WsgiToAsgiInstancer)r
�scope�receive�sends    r�__call__zWsgiToAsgi.__call__s@����8� ��!6�7�7��w��M�M�M�M�M�M�M�M�M�M�MrN)�__name__�
__module__�__qualname__�__doc__rr�rrrrsA��������1�1�1�N�N�N�N�Nrrc�B�eZdZdZd�Zd�Zd�Zdd�Zed���Z	dS)	rz;
    Per-socket instance of a wrapped WSGI application
    c�0�||_d|_d|_dS)NF)r�response_started�response_content_lengthrs  rrzWsgiToAsgiInstance.__init__s �� 0��� %���'+��$�$�$rc��K�|ddkrtd���||_td���5}	|���d{V��}|ddkrtd���|�|�d	d
����|�d��sn�k|�d��t
|��|_|�|���d{V��ddd��dS#1swxYwYdS)
N�type�httpz&WSGI wrapper received a non-HTTP scopei)�max_sizeTzhttp.requestz0WSGI wrapper received a non-HTTP-request message�bodyr�	more_bodyr)	�
ValueErrorrr�write�get�seekr�	sync_send�run_wsgi_app)r
rrrr$�messages      rrzWsgiToAsgiInstance.__call__"sY������=�F�"�"��E�F�F�F���
�
!�5�
1�
1�
1�
	*�T�
� '��	�	�/�/�/�/�/�/���6�?�n�4�4�$�%W�X�X�X��
�
�7�;�;�v�s�3�3�4�4�4��{�{�;�/�/���

�
�I�I�a�L�L�L�(��.�.�D�N��#�#�D�)�)�)�)�)�)�)�)�)�
	*�
	*�
	*�
	*�
	*�
	*�
	*�
	*�
	*�
	*�
	*�
	*����
	*�
	*�
	*�
	*�
	*�
	*s�B1C3�3C7�:C7c
���|�dd���d���d��}|d�d���d��}|�|��r|t	|��d�}|d|||d�d	��d
|dzd|�d
d��|t��dddd�}d|vr0|dd|d<t
|dd��|d<n
d|d<d|d<|�d���|dd|d<|j�dg��D]�\}}|�d��}|dkrd}n4|dkrd}n+d |����	d!d"��z}|�d��}||vr||d#z|z}|||<��|S)$zM
        Builds a scope and request body into a WSGI environ object.
        �	root_path��utf8�latin1�pathN�method�query_string�asciizHTTP/%s�http_version)�r�schemer"TF)�REQUEST_METHOD�SCRIPT_NAME�	PATH_INFO�QUERY_STRING�SERVER_PROTOCOLzwsgi.versionzwsgi.url_schemez
wsgi.inputzwsgi.errorszwsgi.multithreadzwsgi.multiprocessz
wsgi.run_once�serverr�SERVER_NAMEr7�SERVER_PORT�	localhost�80�client�REMOTE_ADDR�headers�content-length�CONTENT_LENGTHzcontent-type�CONTENT_TYPEzHTTP_%s�-�_�,)
r(�encode�decode�
startswith�lenr�strr�upper�replace)	r
rr$�script_name�	path_info�environ�name�value�corrected_names	         r�
build_environz WsgiToAsgiInstance.build_environ5s���i�i��R�0�0�7�7��?�?�F�F�x�P�P���&�M�(�(��0�0�7�7��A�A�	�����,�,�	6�!�#�k�"2�"2�"4�"4�5�I�#�H�o�&�"�!�.�1�8�8��A�A�(�5��+@�@�"�$�y�y��6�:�:��"�9�9� $�!%�"�

�

���u���%*�8�_�Q�%7�G�M�"�%(��x���);�%<�%<�G�M�"�"�%0�G�M�"�%)�G�M�"��9�9�X���*�%*�8�_�Q�%7�G�M�"� �:�>�>�)�R�8�8�	,�	,�K�D�%��;�;�x�(�(�D��'�'�'�!1�����'�'�!/���!*�T�Z�Z�\�\�-A�-A�#�s�-K�-K�!K���L�L��*�*�E���(�(���/�#�5��=��&+�G�N�#�#��rNc��|jr!|d�|d���t|d��r|�td���|�dd��\}}t|��}d�|D��}d|_|D]1\}}|���dkrt|��|_�2d	||d
�|_dS)z/
        WSGI start_response callable.
        r7��response_startNz=You cannot call start_response a second time without exc_info� c��g|]A\}}|����d��|�d��f��BS)r5)�lowerrL)�.0rVrWs   r�
<listcomp>z5WsgiToAsgiInstance.start_response.<locals>.<listcomp>vsS��
�
�
���e��Z�Z�\�\�
 �
 ��
)�
)�5�<�<��+@�+@�A�
�
�
rrFzhttp.response.start)r!�statusrE)	r�with_traceback�hasattrr&�split�intrr_r\)	r
rb�response_headers�exc_info�status_coderJrErVrWs	         r�start_responsez!WsgiToAsgiInstance.start_responsefs���
� �	:��1�+�,�,�X�a�[�9�9�9��4�)�*�*�	�x�/?��O���
� ���c�1�-�-���Q��+�&�&��
�
�/�
�
�
��
(,��$�+�	:�	:�K�D�%��z�z�|�|�/�/�/�/2�5�z�z��,��*�!��
�
����rc��|�|j|��}d}|�||j��D]�}|js!d|_|�|j��|j�'|j|z
}t|��|kr
|d|�}|�d|dd���|t|��z
}||jkrn��|js!d|_|�|j��|�ddi��dS)z�
        Called in a subthread to run the WSGI app. We encapsulate like
        this so that the start_response callable is called in the same thread.
        rTNzhttp.response.body)r!r$r%r!)	rYrrrjrr*r\rrO)r
r$rU�
bytes_sent�output�
bytes_alloweds      rr+zWsgiToAsgiInstance.run_wsgi_app�s4���$�$�T�Z��6�6���
��+�+�G�T�5H�I�I�	�	�F��(�
4�(,��%����t�2�3�3�3��+�7� $� <�z� I�
��v�;�;��.�.�#�N�]�N�3�F��N�N�-�v�D�Q�Q�
�
�
�
�#�f�+�+�%�J��T�9�9�9���:��$�	0�$(�D�!��N�N�4�.�/�/�/����� 4�5�6�6�6�6�6rr
)
rrrrrrrYrjrr+rrrrrs|��������,�,�,�
*�*�*�&/�/�/�b
�
�
�
�@�7�7��]�7�7�7rrN)	�ior�tempfiler�asgiref.syncrrrrrrr�<module>rrs���������)�)�)�)�)�)�3�3�3�3�3�3�3�3�N�N�N�N�N�N�N�N�"N7�N7�N7�N7�N7�N7�N7�N7�N7�N7r