� K�g ����ddlmZddlZddlZddlZddlZddlZddlZddlZddl Z ddlm Z ddl m Z ddl mZddlmZmZddlmZddlmZmZdd lmZmZmZdd lmZdd lmZdd lm Z dd l!m"Z"m#Z#m$Z$ddl%m&Z&m'Z'm(Z(m)Z)m*Z*ddl+m,Z,m-Z-Gd�de.��Z/Gd�de ��Z0dBd�Z1dCd�Z2dDd�Z3dEd"�Z4dFd)�Z5ej6d*��Z7dGd,�Z8Gd-�d.��Z9Gd/�d0e9��Z:Gd1�d2e9��Z;Gd3�d4e9��Z<Gd5�d6e9��Z=ej>d7��Z?Gd8�d9ej@e?��ZAdHd=�ZBGd>�d?��ZCGd@�dA��ZDdS)I�)� annotationsN)�asynccontextmanager)�Enum)�wrap_app_handling_exceptions)�get_route_path�is_async_callable)�run_in_threadpool)�CONVERTOR_TYPES� Convertor)�URL�Headers�URLPath)� HTTPException)� Middleware)�Request)�PlainTextResponse�RedirectResponse�Response)�ASGIApp�Lifespan�Receive�Scope�Send)� WebSocket�WebSocketClosec�$��eZdZdZd �fd� Z�xZS) � NoMatchFoundz} Raised by `.url_for(name, **path_params)` and `.url_path_for(name, **path_params)` if no matching route exists. �name�str� path_params�dict[str, typing.Any]�return�Nonec����d�t|�������}t���d|�d|�d���dS)N�, zNo route exists for name "z" and params "z".)�join�list�keys�super�__init__)�selfrr �params� __class__s ��a/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/starlette/routing.pyr*zNoMatchFound.__init__!sZ������4� � 0� 0� 2� 2�3�3�4�4�� �����T�d�T�T�&�T�T�T�U�U�U�U�U�)rrr r!r"r#)�__name__� __module__� __qualname__�__doc__r*� __classcell__)r-s@r.rrsQ��������� V�V�V�V�V�V�V�V�V�Vr/rc��eZdZdZdZdZdS)�Matchr��N)r0r1r2�NONE�PARTIAL�FULL�r/r.r6r6&s������ �D��G� �D�D�Dr/r6�obj� typing.Anyr"�boolc���tjdt��t|tj��r!|j}t|tj���!tj|��S)z~ Correctly determines if an object is a coroutine function, including those wrapped in functools.partial objects. zViscoroutinefunction_or_partial is deprecated, and will be removed in a future release.) �warnings�warn�DeprecationWarning� isinstance� functools�partial�func�inspect�iscoroutinefunction)r=s r.�iscoroutinefunction_or_partialrJ,sd��  �M�`����� �S�)�+� ,� ,���h�� �S�)�+� ,� ,�� � &�s� +� +�+r/rG�Atyping.Callable[[Request], typing.Awaitable[Response] | Response]rc�j��t|��r|ntjt|���d �fd � }|S) zi Takes a function or coroutine `func(request) -> response`, and returns an ASGI application. �scoper�receiver�sendrr"r#c����K�t|||���d ��fd � }t|���|||���d{V��dS) NrMrrNrrOrr"r#c��T�K������d{V��}||||���d{V��dS�Nr<)rMrNrO�response�f�requests ��r.�appz*request_response.<locals>.app.<locals>.appHsR������Q�w�Z�Z�'�'�'�'�'�'�H��(�5�'�4�0�0� 0� 0� 0� 0� 0� 0� 0� 0� 0r/�rMrrNrrOrr"r#)rr)rMrNrOrVrUrTs @�r.rVzrequest_response.<locals>.appEsu�������%��$�/�/�� 1� 1� 1� 1� 1� 1� 1�9�*�3��8�8����N�N�N�N�N�N�N�N�N�N�Nr/rW)rrErFr )rGrVrTs @r.�request_responserX:sX���"�$�'�'�W���Y�->�?P�RV�-W�-W��O�O�O�O�O�O� �Jr/�4typing.Callable[[WebSocket], typing.Awaitable[None]]c���d �fd � }|S) zM Takes a coroutine `func(session)`, and returns an ASGI application. rMrrNrrOrr"r#c����K�t|||����d ��fd � }t|���|||���d{V��dS) N)rNrOrMrrNrrOrr"r#c��.�K������d{V��dSrRr<)rMrNrOrG�sessions ��r.rVz+websocket_session.<locals>.app.<locals>.app\s-������$�w�-�-� � � � � � � � � r/rW)rr)rMrNrOrVr]rGs @�r.rVzwebsocket_session.<locals>.appYsx�������E�7��>�>�>�� � � � � � � �9�*�3��8�8����N�N�N�N�N�N�N�N�N�N�Nr/rWr<)rGrVs` r.�websocket_sessionr^Qs.���O�O�O�O�O�O� �Jr/�endpoint� typing.Callable[..., typing.Any]rc�8�t|d|jj��S)Nr0)�getattrr-r0)r_s r.�get_namercds�� �8�Z��);�)D� E� E�Er/�path�param_convertors� dict[str, Convertor[typing.Any]]r �dict[str, str]�tuple[str, dict[str, str]]c��t|�����D]]\}}d|zdz|vrN||}|�|��}|�d|zdz|��}|�|���^||fS)N�{�})r'�items� to_string�replace�pop)rdrer �key�value� convertors r.�replace_paramsrshs��� �;�,�,�.�.�/�/�!�!� ��U� ��9�s�?�d� "� "�(��-�I��'�'��.�.�E��<�<��c� �C���7�7�D� �O�O�C� � � �� �� �r/z4{([a-zA-Z_][a-zA-Z0-9_]*)(:[a-zA-Z_][a-zA-Z0-9_]*)?}�Atuple[typing.Pattern[str], str, dict[str, Convertor[typing.Any]]]c��|�d�� }d}d}t��}d}i}t�|��D]�}|�d��\}} | �d��} | t vsJd| �d����t | } |tj|||� �����z }|d |�d | j �d �z }||||� ���z }|d |zz }||vr|� |��| ||<|� ��}��|rQd � t|����} t|��dkrdnd} t!d| �d| �d|�����|r>||d��d��d} |tj| ��dzz }n"|tj||d���dzz }|||d�z }tj|��||fS)a* Given a path string, like: "/{username:str}", or a host string, like: "{subdomain}.mydomain.org", return a three-tuple of (regex, format, {param_name:convertor}). regex: "/(?P<username>[^/]+)" format: "/{username}" convertors: {"username": StringConvertor()} �/�^�rr�:zUnknown path convertor '�'z(?P<�>�)z{%s}r%r7�szDuplicated param name� z at path N�$)� startswith�set� PARAM_REGEX�finditer�groups�lstripr �re�escape�start�regex�add�endr&�sorted�len� ValueError�split�compile)rd�is_host� path_regex� path_format�duplicated_params�idxre�match� param_name�convertor_typerr�names�ending�hostnames r.� compile_pathr�zsK���/�/�#�&�&�&�G��J��K����� �C����%�%�d�+�+����%*�\�\�%�%8�%8�"� �N�'�.�.�s�3�3����0�0�0�2^�^�2^�2^�2^�0�0�0�#�N�3� ��b�i��S�5�;�;�=�=�%8� 9�:�:�:� ��<�Z�<�<�)�/�<�<�<�<� ��t�C�%�+�+�-�-�/�0�0� ��v� �*�*� � �)� )� )� � !� !�*� -� -� -�'0���$��i�i�k�k����R�� � �&�!2�3�3�4�4���-�.�.��2�2������P��P�P�%�P�P�$�P�P�Q�Q�Q��2�����:�#�#�C�(�(��+���b�i��)�)�C�/�/� � ��b�i��S�T�T� �+�+�c�1�1� ��4����:��K� �:�j� !� !�;�0@� @�@r/c�.�eZdZdd�Zdd �Zdd�Zdd�ZdS)� BaseRouterMrr"�tuple[Match, Scope]c��t���rR��NotImplementedError)r+rMs r.�matcheszBaseRoute.matches����!�#�#�#r/rrr r>rc ��t���rRr�)r+rr s r.� url_path_forzBaseRoute.url_path_for�r�r/rNrrOrr#c��"K�t���rRr��r+rMrNrOs r.�handlezBaseRoute.handle�s����!�#�#�#r/c��~K�|�|��\}}|tjkr`|ddkr%tdd���}||||���d{V��n-|ddkr!t ��}||||���d{V��dS|�|��|�|||���d{V��dS)z� A route may be used in isolation as a stand-alone ASGI app. This is a somewhat contrived case, as they'll almost always be used within a Router, but could be useful for some tooling and minimal apps. �type�http� Not Found��� status_codeN� websocket)r�r6r9rr�updater�)r+rMrNrOr�� child_scoperS�websocket_closes r.�__call__zBaseRoute.__call__�s����� "�\�\�%�0�0���{� �E�J� � ��V�}��&�&�,�[�c�J�J�J���h�u�g�t�4�4�4�4�4�4�4�4�4�4��v��+�-�-�"0�"2�"2��%�o�e�W�d�;�;�;�;�;�;�;�;�;� �F� � � �[�!�!�!��k�k�%��$�/�/�/�/�/�/�/�/�/�/�/r/N�rMrr"r��rrr r>r"rrW)r0r1r2r�r�r�r�r<r/r.r�r��sd������$�$�$�$�$�$�$�$�$�$�$�$�0�0�0�0�0�0r/r�c�J�eZdZddddd�d#d�Zd$d�Zd%d�Zd&d�Zd'd!�Zd(d"�ZdS))�RouteNT)�methodsr�include_in_schema� middlewarerdrr_r`r��list[str] | Noner� str | Noner�r?r��"typing.Sequence[Middleware] | Noner"r#c���|�d��s Jd���||_||_|�t|��n||_||_|}t |tj��r!|j }t |tj���!tj |��stj |��rt|��|_|�dg}n||_|�,t|��D]\}} } ||jg| �Ri| ��|_�|�d|_n4d�|D��|_d|jvr|j�d��t%|��\|_|_|_dS)Nrv� Routed paths must start with '/'�GETc�6�h|]}|�����Sr<)�upper)�.0�methods r.� <setcomp>z!Route.__init__.<locals>.<setcomp>�s ��A�A�A�v�F�L�L�N�N�A�A�Ar/�HEAD)r�rdr_rcrr�rDrErFrGrH� isfunction�ismethodrXrV�reversedr�r�r�r�r�re) r+rdr_r�rr�r��endpoint_handler�cls�args�kwargss r.r*zRoute.__init__�s������s�#�#�G�G�%G�G�G�#��� � �� �*.�,�H�X�&�&�&�D�� �!2���#���)�9�+<�=�=� 5�/�4� ��)�9�+<�=�=� 5� � �.� /� /� �7�3C�DT�3U�3U� �'��1�1�D�H��� �'��� �D�H� � !�%-�j�%9�%9� :� :�!��T�6��3�t�x�9�$�9�9�9�&�9�9���� �?��D�L�L�A�A��A�A�A�D�L��� �$�$�� � � ��(�(�(�CO�PT�CU�CU�@����)�4�+@�+@�+@r/rMrr�c��|ddkr�t|��}|j�|��}|r�|���}|���D](\}}|j|�|��||<�)t|�di����}|� |��|j |d�}|j r|d|j vrtj |fStj|fStjifS)Nr�r�r �r_r r�)rr�r�� groupdictrlre�convert�dict�getr�r_r�r6r:r;r9� r+rM� route_pathr��matched_paramsrprqr r�s r.r�z Route.matches�s �� ��=�F� "� "�'��.�.�J��O�)�)�*�5�5�E�� 3�!&���!2�!2��"0�"6�"6�"8�"8�T�T�J�C��*.�*?��*D�*L�*L�U�*S�*S�N�3�'�'�"�5�9�9�]�B�#?�#?�@�@� ��"�"�>�2�2�2�+/�=��U�U� ��<�3�E�(�O�4�<�$G�$G� �=�+�5�5� �:�{�2�2��z�2�~�r/r r>rc �8�t|�����}t|j�����}||jks||krt ||���t |j|j|��\}}|rJ�t|d���S)Nr��rd�protocol�r�r(rerrrsr�r�r+rr � seen_params�expected_paramsrd�remaining_paramss r.r�zRoute.url_path_for s����+�*�*�,�,�-�-� ��d�3�8�8�:�:�;�;�� �4�9� � � �� >� >��t�[�1�1� 1�!/��0@�$�BW�Yd�!e�!e����#�#�#�#��D�6�2�2�2�2r/rNrrOrc�� K�|jrg|d|jvrXdd�|j��i}d|vrtd|����tdd|���}||||���d{V��dS|�|||���d{V��dS)Nr��Allowr%rVi�)r��headerszMethod Not Allowed)r�r&rrrV)r+rMrNrOr�rSs r.r�z Route.handles����� �<� 1�E�(�O�4�<�?�?��� � �$�,� 7� 7�8�G���~�~�#��W�E�E�E�E�,�-A�s�\c�d�d�d���(�5�'�4�0�0� 0� 0� 0� 0� 0� 0� 0� 0� 0��(�(�5�'�4�0�0� 0� 0� 0� 0� 0� 0� 0� 0� 0r/�otherc��t|t��o/|j|jko|j|jko|j|jkSrR)rDr�rdr_r��r+r�s r.�__eq__z Route.__eq__"sI�� �u�e� $� $� .�� �U�Z�'� .�� ���/� .�� �� �-�  r/c�~�|jj}t|jpg��}|j|j}}|�d|�d|�d|�d�S)N�(path=�, name=z , methods=r|)r-r0r�r�rdr)r+� class_namer�rdrs r.�__repr__zRoute.__repr__*sT���^�,� ����+��,�,���Y�� �d���Q�Q�D�Q�Q�4�Q�Q�W�Q�Q�Q�Qr/)rdrr_r`r�r�rr�r�r?r�r�r"r#r�r�rW�r�r>r"r?�r"r� r0r1r2r*r�r�r�r�r�r<r/r.r�r��s������� %)��"&�9=�'V�'V�'V�'V�'V�'V�R����$ 3� 3� 3� 3� 1� 1� 1� 1� � � � �R�R�R�R�R�Rr/r�c�F�eZdZddd�dd �Zd d�Zd!d�Zd"d�Zd#d�Zd$d�ZdS)%�WebSocketRouteN)rr�rdrr_r`rr�r�r�r"r#c�2�|�d��s Jd���||_||_|�t|��n||_|}t |t j��r!|j}t |t j���!tj |��stj |��rt|��|_ n||_ |�,t|��D]\}}}||j g|�Ri|��|_ �t|��\|_|_|_dS)Nrvr�)r�rdr_rcrrDrErFrGrHr�r�r^rVr�r�r�r�re) r+rdr_rr�r�r�r�r�s r.r*zWebSocketRoute.__init__2s5�����s�#�#�G�G�%G�G�G�#��� � �� �*.�,�H�X�&�&�&�D�� �#���)�9�+<�=�=� 5�/�4� ��)�9�+<�=�=� 5� � �.� /� /� �7�3C�DT�3U�3U� �(��2�2�D�H�H� �D�H� � !�%-�j�%9�%9� :� :�!��T�6��3�t�x�9�$�9�9�9�&�9�9����CO�PT�CU�CU�@����)�4�+@�+@�+@r/rMrr�c���|ddkr�t|��}|j�|��}|r�|���}|���D](\}}|j|�|��||<�)t|�di����}|� |��|j |d�}tj |fStj ifS)Nr�r�r r�)rr�r�r�rlrer�r�r�r�r_r6r;r9r�s r.r�zWebSocketRoute.matchesOs��� ��=�K� '� '�'��.�.�J��O�)�)�*�5�5�E�� /�!&���!2�!2��"0�"6�"6�"8�"8�T�T�J�C��*.�*?��*D�*L�*L�U�*S�*S�N�3�'�'�"�5�9�9�]�B�#?�#?�@�@� ��"�"�>�2�2�2�+/�=��U�U� ��z�;�.�.��z�2�~�r/r r>rc �8�t|�����}t|j�����}||jks||krt ||���t |j|j|��\}}|rJ�t|d���S)Nr�r�r�r�s r.r�zWebSocketRoute.url_path_for^s����+�*�*�,�,�-�-� ��d�3�8�8�:�:�;�;�� �4�9� � � �� >� >��t�[�1�1� 1�!/��0@�$�BW�Yd�!e�!e����#�#�#�#��D�;�7�7�7�7r/rNrrOrc��DK�|�|||���d{V��dSrR�rVr�s r.r�zWebSocketRoute.handlei�4�����h�h�u�g�t�,�,�,�,�,�,�,�,�,�,�,r/r�r?c�l�t|t��o|j|jko|j|jkSrR)rDr�rdr_r�s r.r�zWebSocketRoute.__eq__ls2���%��0�0�p�T�Y�%�*�5L�p�QU�Q^�bg�bp�Qp�pr/c�@�|jj�d|j�d|j�d�S)Nr�r�r|)r-r0rdr�r+s r.r�zWebSocketRoute.__repr__os*���.�)�S�S���S�S�T�Y�S�S�S�Sr/) rdrr_r`rr�r�r�r"r#r�r�rWr�r�r�r<r/r.r�r�1s�������  �9=� V�V�V�V�V�V�: � � � � 8� 8� 8� 8�-�-�-�-�q�q�q�q�T�T�T�T�T�Tr/r�c�d�eZdZ d#dd�d$d�Zed%d���Zd&d�Zd'd�Zd(d�Zd)d!�Z d*d"�Z dS)+�MountN�r�rdrrV�ASGIApp | None�routes�!typing.Sequence[BaseRoute] | Nonerr�r�r�r"r#c��|dks|�d��s Jd���|� |� Jd���|�d��|_|�||_nt |���|_|j|_|�,t |��D]\}}}||jg|�Ri|��|_�||_t|jdz��\|_ |_ |_ dS)Nrxrvr�z0Either 'app=...', or 'routes=' must be specified)r�z /{path:path}) r��rstriprd� _base_app�RouterrVr�rr�r�r�re) r+rdrVr�rr�r�r�r�s r.r*zMount.__init__ts����r�z�z�T�_�_�S�1�1�z�z�3U�z�z�1���&�"4�"4�6h�"4�"4�4��K�K��$�$�� � �?�&)�D�N�N�#�6�2�2�2�D�N��>��� � !�%-�j�%9�%9� :� :�!��T�6��3�t�x�9�$�9�9�9�&�9�9������ �CO�PT�PY�\j�Pj�Ck�Ck�@����)�4�+@�+@�+@r/�list[BaseRoute]c�.�t|jdg��S�Nr�)rbrr�s r.r�z Mount.routes�s���t�~�x��4�4�4r/rMrr�c��|ddv�r+|�dd��}t|��}|j�|��}|r�|���}|���D](\}}|j|�|��||<�)d|�d��z}|dt|�� �} t|�di����} | � |��| |�d|��|| z|j d �} tj| fStjifS) Nr��r�r�� root_pathrxrvrdr � app_root_path)r r r r_)r�rr�r�r�rlrer�ror�r�r�rVr6r;r9) r+rMr r�r�r�rprq�remaining_path� matched_pathr r�s r.r�z Mount.matches�sN�� ��=�1� 1� 1�� � �+�r�2�2�I�'��.�.�J��O�)�)�*�5�5�E�� /�!&���!2�!2��"0�"6�"6�"8�"8�T�T�J�C��*.�*?��*D�*L�*L�U�*S�*S�N�3�'�'�!$�~�'9�'9�&�'A�'A�!A��)�*@�S��-@�-@�,@�*@�A� �"�5�9�9�]�B�#?�#?�@�@� ��"�"�>�2�2�2�#.�&+�Y�Y�� �%J�%J�!*�\�!9� $���� � �z�;�.�.��z�2�~�r/r r>rc ���|j�^||jkrSd|vrO|d�d��|d<t|j|j|��\}}|st |���Sn�|j�|�|jdz��r�|j�|}n|t|j��dzd�}|�d��}d|d<t|j|j|��\}}|�||d<|j pgD][} |j |fi|��} t |� d��t| ��z| j ���cS#t$rY�XwxYwt||���)Nrdrv)rdryr7rxr�)rr�rsr�rerr�r�r�r�r�rrr�r) r+rr rdr��remaining_name� path_kwarg� path_prefix�route�urls r.r�zMount.url_path_for�s��� �9� �T�T�Y�%6�%6�6�[�;P�;P�"-�f�"5�"<�"<�S�"A�"A�K�� �%3�D�4D�d�F[�]h�%i�%i� "�D�"�#� *��D�)�)�)�)� *� �Y� �$�/�/�$�)�c�/�"B�"B� ��y� �!%���"&�c�$�)�n�n�q�&8�&:�&:�!;��$����0�0�J�"$�K�� �,:�4�;K�T�Mb�do�,p�,p� )�K�)��%�+5� ��(���*�� � ���,�%�,�^�P�P�?O�P�P�C�"� �(:�(:�3�(?�(?�#�c�(�(�(J�UX�Ua�b�b�b�b�b�b��#�����D������4��-�-�-s�>AE� E�ErNrrOrc��DK�|�|||���d{V��dSrRr�r�s r.r�z Mount.handle�r�r/r�r?c�l�t|t��o|j|jko|j|jkSrR)rDr�rdrVr�s r.r�z Mount.__eq__�s0���%��'�'�]�D�I���,C�]���TY�T]�H]�]r/c�\�|jj}|jpd}|�d|j�d|�d|j�d�S)Nrxr�r��, app=r|)r-r0rrdrV�r+r�rs r.r�zMount.__repr__��B���^�,� ��y��B���S�S�D�I�S�S��S�S�d�h�S�S�S�Sr/)NNN) rdrrVr�r�rrr�r�r�r"r#�r"rr�r�rWr�r�� r0r1r2r*�propertyr�r�r�r�r�r�r<r/r.r�r�ss�������#�48�� l�:>�l�l�l�l�l�l�.�5�5�5��X�5�����B.�.�.�.�6-�-�-�-�^�^�^�^�T�T�T�T�T�Tr/r�c�X�eZdZddd �Zed d ���Zd!d�Zd"d�Zd#d�Zd$d�Z d%d�Z dS)&�HostN�hostrrVrrr�r"r#c��|�d��r Jd���||_||_||_t |��\|_|_|_dS)NrvzHost must not start with '/')r�rrVrr�� host_regex� host_formatre)r+rrVrs r.r*z Host.__init__�s[���?�?�3�'�'�G�G�)G�G�G�'��� ������ �CO�PT�CU�CU�@����)�4�+@�+@�+@r/rc�.�t|jdg��Sr)rbrVr�s r.r�z Host.routes�s���t�x��2�.�.�.r/rMrr�c�*�|ddvr�t|���}|�dd���d��d}|j�|��}|r�|���}|���D](\}}|j|�|��||<�)t|�di����}|� |��||j d �} tj | fStjifS) Nr�r �rMrrxryrr )r r_)r r�r�r!r�r�rlrer�r�r�rVr6r;r9) r+rMr�rr�r�rprqr r�s r.r�z Host.matches�s�� ��=�1� 1� 1��E�*�*�*�G��;�;�v�r�*�*�0�0��5�5�a�8�D��O�)�)�$�/�/�E�� /�!&���!2�!2��"0�"6�"6�"8�"8�T�T�J�C��*.�*?��*D�*L�*L�U�*S�*S�N�3�'�'�"�5�9�9�]�B�#?�#?�@�@� ��"�"�>�2�2�2�.9�t�x�P�P� ��z�;�.�.��z�2�~�r/r r>rc �R�|j�V||jkrKd|vrG|�d��}t|j|j|��\}}|st ||���Sn�|j�|�|jdz��r�|j�|}n|t|j��dzd�}t|j|j|��\}}|jpgD]F} |j |fi|��}t t|��|j |���cS#t$rY�CwxYwt||���)Nrd)rdrryr7)rdr�r) rrorsr"rerr�r�r�r�rr�r) r+rr rdrr�rrrs r.r�zHost.url_path_for�sc�� �9� �T�T�Y�%6�%6�6�[�;P�;P��?�?�6�*�*�D�%3�D�4D�d�F[�]h�%i�%i� "�D�"�#� 5��D�t�4�4�4�4� 5� �Y� �$�/�/�$�)�c�/�"B�"B� ��y� �!%���"&�c�$�)�n�n�q�&8�&:�&:�!;��%3�D�4D�d�F[�]h�%i�%i� "�D�"���*�� � ���,�%�,�^�P�P�?O�P�P�C�"��C���3�<�d�S�S�S�S�S�S��#�����D������4��-�-�-s�1D � D�DrNrrOrc��DK�|�|||���d{V��dSrRr�r�s r.r�z Host.handle r�r/r�r?c�l�t|t��o|j|jko|j|jkSrR)rDrrrVr�s r.r�z Host.__eq__ s0���%��&�&�\�4�9�� �+B�\�t�x�SX�S\�G\�\r/c�\�|jj}|jpd}|�d|j�d|�d|j�d�S)Nrxz(host=r�rr|)r-r0rrrVrs r.r�z Host.__repr__rr/rR�rrrVrrr�r"r#rr�r�rWr�r�rr<r/r.rr�s�������V�V�V�V�V��/�/�/��X�/� � � � �.�.�.�.�.-�-�-�-�]�]�]�]�T�T�T�T�T�Tr/r�_Tc�&�eZdZdd�Zdd�Zdd�ZdS)�_AsyncLiftContextManager�cm�typing.ContextManager[_T]c��||_dSrR)�_cm)r+r.s r.r*z!_AsyncLiftContextManager.__init__s ������r/r"r+c��8K�|j���SrR)r1� __enter__r�s r.� __aenter__z#_AsyncLiftContextManager.__aenter__s�����x�!�!�#�#�#r/�exc_type�type[BaseException] | None� exc_value�BaseException | None� traceback�types.TracebackType | None� bool | Nonec��>K�|j�|||��SrR)r1�__exit__)r+r5r7r9s r.� __aexit__z"_AsyncLiftContextManager.__aexit__s"���� �x� � ��9�i�@�@�@r/N)r.r/)r"r+)r5r6r7r8r9r:r"r;)r0r1r2r*r4r>r<r/r.r-r-sV����������$�$�$�$�A�A�A�A�A�Ar/r-�lifespan_context�Styping.Callable[[typing.Any], typing.Generator[typing.Any, typing.Any, typing.Any]]�Etyping.Callable[[typing.Any], typing.AsyncContextManager[typing.Any]]c�p��tj|���tj���d�fd� ��}|S)NrVr>r"�$_AsyncLiftContextManager[typing.Any]c�4��t�|����SrR)r-)rV�cmgrs �r.�wrapperz+_wrap_gen_lifespan_context.<locals>.wrapper-s���'���S� � �2�2�2r/)rVr>r"rC)� contextlib�contextmanagerrE�wraps)r?rFrEs @r.�_wrap_gen_lifespan_contextrJ(sP��� � $�%5� 6� 6�D��_�T���3�3�3�3�3���3� �Nr/c�.�eZdZdd�Zdd�Zdd �Zdd �ZdS)�_DefaultLifespan�routerrc��||_dSrR)�_router)r+rMs r.r*z_DefaultLifespan.__init__5s ���� � � r/r"r#c��HK�|j����d{V��dSrR)rO�startupr�s r.r4z_DefaultLifespan.__aenter__8s2�����l�"�"�$�$�$�$�$�$�$�$�$�$�$r/�exc_info�objectc��HK�|j����d{V��dSrR)rO�shutdown)r+rRs r.r>z_DefaultLifespan.__aexit__;s2�����l�#�#�%�%�%�%�%�%�%�%�%�%�%r/r+r+rVc��|SrRr<)r+rVs r.r�z_DefaultLifespan.__call__>s��� r/N)rMr�r"r#)rRrSr"r#)r+r+rVrSr"r+)r0r1r2r*r4r>r�r<r/r.rLrL4sd����������%�%�%�%�&�&�&�&������r/rLc���eZdZ d?dd�d@d�ZdAd�ZdBd �ZdCd!�ZdCd"�ZdAd#�ZdAd$�Z dAd%�Z dDd'�Z dEdFd,�Z dEdGd.�Z dHdId4�Z dEdJd6�Z dHdKd8�ZdEdLd9�ZdMd=�ZdNd>�ZdS)OrNTr�r�r�redirect_slashesr?�defaultr�� on_startup�7typing.Sequence[typing.Callable[[], typing.Any]] | None� on_shutdown�lifespan�Lifespan[typing.Any] | Noner�r�r"r#c���|�gnt|��|_||_|�|jn||_|�gnt|��|_|�gnt|��|_|s|r0tjdt��|rtjd��|�t|��|_ n�tj |��r/tjdt��t|��|_ nJtj|��r/tjdt��t!|��|_ n||_ |j|_|r,t'|��D]\}} } ||jg| �Ri| ��|_�dSdS)Nz�The on_startup and on_shutdown parameters are deprecated, and they will be removed on version 1.0. Use the lifespan parameter instead. See more about it on https://www.starlette.io/lifespan/.z�The `lifespan` parameter cannot be used with `on_startup` or `on_shutdown`. Both `on_startup` and `on_shutdown` will be ignored.zjasync generator function lifespans are deprecated, use an @contextlib.asynccontextmanager function insteadzdgenerator function lifespans are deprecated, use an @contextlib.asynccontextmanager function instead)r'r�rY� not_foundrZr[r]rArBrCrLr?rH�isasyncgenfunctionr�isgeneratorfunctionrJrV�middleware_stackr�) r+r�rYrZr[r]r^r�r�r�r�s r.r*zRouter.__init__Cs���#�N�b�b��V� � �� � 0���)0��t�~�~�g�� � *� 2�"�"��Z�8H�8H���!,�!4�2�2�$�{�:K�:K��� � �� � �M�K�#�  � � � � �� ����� � �:J�4�:P�:P�D� !� !� � '�� 1� 1� -� �M�J�"� � � � %8��%�%�D� !� !�� (�� 2� 2� -� �M�J�"� � � � %?��%�%�D� !� !�%-�D� !� $���� � T�%-�j�%9�%9� T� T�!��T�6�(+��D�,A�(S�D�(S�(S�(S�F�(S�(S��%�%� T� T� T� Tr/rMrrNrrOrc���K�|ddkr#t��}||||���d{V��dSd|vrtd����tdd���}||||���d{V��dS)Nr�r�rVr�r�r�)rrr)r+rMrNrOr�rSs r.razRouter.not_found�s����� ��=�K� '� '�,�.�.�O�!�/�%��$�7�7� 7� 7� 7� 7� 7� 7� 7� �F� �E�>�>��C�0�0�0� 0�(��#�F�F�F�H��h�u�g�t�,�,�,�,�,�,�,�,�,�,�,r/rrr r>rc �v�|jD]"} |j|fi|��cS#t$rY�wxYwt||���rR)r�r�r)r+rr rs r.r�zRouter.url_path_for�si���[� � �E� �)�u�)�$�>�>�+�>�>�>�>�>��� � � ��� �����4��-�-�-s � � (�(c��rK�|jD],}t|��r|���d{V���"|���-dS)z7 Run any `.on_startup` event handlers. N)r[r�r+�handlers r.rQzRouter.startup�sY������ � �G� ��)�)� ��g�i�i����������� � � � �  � r/c��rK�|jD],}t|��r|���d{V���"|���-dS)z8 Run any `.on_shutdown` event handlers. N)r]rrhs r.rUzRouter.shutdown�sZ�����'� � �G� ��)�)� ��g�i�i����������� � � � �  � r/c��BK�d}|�d��}|���d{V�� |�|��4�d{V��}|�.d|vrtd���|d�|��|ddi���d{V��d}|���d{V��ddd���d{V��n#1�d{V��swxYwY|dd i���d{V��dS#t$r@t j��}|r|d |d ����d{V��n|d |d ����d{V���wxYw) z{ Handle ASGI lifespan messages, which allows us to manage application startup and shutdown events. FrVN�statez:The server does not support "state" in the lifespan scope.r�zlifespan.startup.completeTzlifespan.shutdown.completezlifespan.shutdown.failed)r��messagezlifespan.startup.failed)r�r?� RuntimeErrorr�� BaseExceptionr9� format_exc)r+rMrNrO�startedrV� maybe_state�exc_texts r.r^zRouter.lifespan�s6���� ���)�)�E�*�*���g�i�i�������� ?��,�,�S�1�1� � � � � � � �[��*��e�+�+�*�+g�h�h�h��'�N�)�)�+�6�6�6��d�F�$?�@�A�A�A�A�A�A�A�A�A����g�i�i�������� � � � � � � � � � � � � � � � � � � � � � � ���� � � � � �$�� <�=�>�>� >� >� >� >� >� >� >� >� >��� � � � �+�-�-�H�� U��d�$>�8�T�T�U�U�U�U�U�U�U�U�U�U��d�$=�(�S�S�T�T�T�T�T�T�T�T�T� �  ���s1�C�AB.�C�. B8�8C�;B8�<C�A Dc��DK�|�|||���d{V��dS)z; The main entry point to the Router class. N)rdr�s r.r�zRouter.__call__�s8�����#�#�E�7�D�9�9�9�9�9�9�9�9�9�9�9r/c�� K�|ddvsJ�d|vr||d<|ddkr|�|||���d{V��dSd}|jD]u}|�|��\}}|tjkr5|�|��|�|||���d{V��dS|tjkr|�|}|}�v|�4|�|��|�|||���d{V��dSt|��} |ddkr�|j r�| dkr�t|��} | � d��r| d� d��| d<n| ddz| d<|jD]m}|�| ��\}}|tj krCt| ���} tt!| ��� ��} | |||���d{V��dS�n|�|||���d{V��dS) Nr�)r�r�r^rMr^r�rvrdr%)r)r^r�r�r6r;r�r�r:rrYr��endswithrr9r rrrZ) r+rMrNrOrFrr�r�� partial_scoper��redirect_scope� redirect_urlrSs r.rVz Router.app�s������V�}� A�A�A�A�A� �5� � �"�E�(�O� ��=�J� &� &��-�-��w��5�5� 5� 5� 5� 5� 5� 5� 5� �F����[� ,� ,�E�"'���u�!5�!5� �E�;��� �"�"�� � �[�)�)�)��l�l�5�'�4�8�8�8�8�8�8�8�8�8�����%�-�'�'�G�O��� +� �� � � �L�L�� '� '� '��.�.����6�6� 6� 6� 6� 6� 6� 6� 6� �F�#�E�*�*� � ��=�F� "� "�t�'<� "��s�AR�AR�!�%�[�[�N��"�"�3�'�'� F�)7��)?�)F�)F�s�)K�)K��v�&�&�)7��)?�#�)E��v�&��� � ��%*�]�]�>�%B�%B�"��{��E�J�&�&�#&�^�#<�#<�#<�L�/�C� �4E�4E�F�F�F�H�"�(�5�'�4�8�8�8�8�8�8�8�8�8��F�F� '� �l�l�5�'�4�0�0�0�0�0�0�0�0�0�0�0r/r�c�L�t|t��o|j|jkSrR)rDrr�r�s r.r�z Router.__eq__�s ���%��(�(�H�T�[�E�L�-H�Hr/rdrVrr�c�^�t|||���}|j�|��dS�N)rVr)r�r��append)r+rdrVrrs r.�mountz Router.mounts2���d��$�/�/�/�� � ���5�!�!�!�!�!r/rc�^�t|||���}|j�|��dSr|)rr�r})r+rrVrrs r.rz Router.hosts2���T�s��.�.�.�� � ���5�!�!�!�!�!r/r_rKr�r�r�c�b�t|||||���}|j�|��dS)N)r_r�rr�)r�r�r})r+rdr_r�rr�rs r.� add_routezRouter.add_route sE��� ����/�  � � �� � ���5�!�!�!�!�!r/rYc�^�t|||���}|j�|��dS)N)r_r)r�r�r})r+rdr_rrs r.�add_websocket_routezRouter.add_websocket_routes4�� �t�h�T�B�B�B�� � ���5�!�!�!�!�!r/�typing.Callablec�X������tjdt��d�����fd� }|S)z� We no longer document this decorator style API, and its usage is discouraged. Instead you should use the following approach: >>> routes = [Route(path, endpoint=...), ...] >>> app = Starlette(routes=routes) z�The `route` decorator is deprecated, and will be removed in version 1.0.0.Refer to https://www.starlette.io/routing/#http-routing for the recommended approach.rGr�r"c�<�����|������|S)N)r�rr�)r�)rGr�r�rrdr+s �����r.� decoratorzRouter.route.<locals>.decorator8s4��� �N�N�����"3� � � � ��Kr/�rGr�r"r��rArBrC)r+rdr�rr�r�s````` r.rz Router.route$s`������� � � d� � � � �  � � � � � � � � � ��r/c�P����tjdt��d���fd� }|S)a We no longer document this decorator style API, and its usage is discouraged. Instead you should use the following approach: >>> routes = [WebSocketRoute(path, endpoint=...), ...] >>> app = Starlette(routes=routes) z�The `websocket_route` decorator is deprecated, and will be removed in version 1.0.0. Refer to https://www.starlette.io/routing/#websocket-routing for the recommended approach.rGr�r"c�8�����|����|S)N)r)r�)rGrrdr+s ���r.r�z)Router.websocket_route.<locals>.decoratorRs#��� � $� $�T�4�d� $� ;� ;� ;��Kr/r�r�)r+rdrr�s``` r.�websocket_routezRouter.websocket_routeDsT����� � � `� � � � �  � � � � � � � ��r/� event_typerG�typing.Callable[[], typing.Any]c��|dvsJ�|dkr|j�|��dS|j�|��dS)N)rQrUrQ)r[r}r])r+r�rGs r.�add_event_handlerzRouter.add_event_handlerXsX���4�4�4�4�4� �� "� "� �O� "� "�4� (� (� (� (� (� � � #� #�D� )� )� )� )� )r/c�L���tjdt��d��fd� }|S)Nz�The `on_event` decorator is deprecated, and will be removed in version 1.0.0. Refer to https://www.starlette.io/lifespan/ for recommended approach.rGr�r"c�4�����|��|SrR)r�)rGr�r+s ��r.r�z"Router.on_event.<locals>.decoratorgs��� � "� "�:�t� 4� 4� 4��Kr/r�r�)r+r�r�s`` r.�on_eventzRouter.on_event`sL����� � T� � � � �  � � � � � � ��r/)NTNNNN)r�rrYr?rZr�r[r\r]r\r^r_r�r�r"r#rWr�rWr�rR)rdrrVrrr�r"r#r*)NNT) rdrr_rKr�r�rr�r�r?r"r#)rdrr_rYrr�r"r#) rdrr�r�rr�r�r?r"r�)rdrrr�r"r�)r�rrGr�r"r#)r�rr"r�)r0r1r2r*rar�rQrUr^r�rVr�r~rr�r�rr�r�r�r<r/r.rrBs�������59�!%�"&�NR�OS�15�<T�:>�<T�<T�<T�<T�<T�<T�| -� -� -� -�.�.�.�.���������?�?�?�?�6:�:�:�:� 01�01�01�01�dI�I�I�I�"�"�"�"�"�"�"�"�"�"�%)��"&� "�"�"�"�"�* � "�"�"�"�"�%)��"&� �����@�����(*�*�*�*� � � � � � r/r)r=r>r"r?)rGrKr"r)rGrYr"r)r_r`r"r)rdrrerfr rgr"rh)rdrr"rt)r?r@r"rA)E� __future__rrGrErHr�r9�types�typingrAr�enumr�starlette._exception_handlerr�starlette._utilsrr�starlette.concurrencyr �starlette.convertorsr r �starlette.datastructuresr r r�starlette.exceptionsr�starlette.middlewarer�starlette.requestsr�starlette.responsesrrr�starlette.typesrrrrr�starlette.websocketsrr� Exceptionrr6rJrXr^rcrsr�r�r�r�r�r�r�r�TypeVarr+�AsyncContextManagerr-rJrLrr<r/r.�<module>r�sN��"�"�"�"�"�"������������� � � � ����� � � � � � � � �����*�*�*�*�*�*�������E�E�E�E�E�E�>�>�>�>�>�>�>�>�3�3�3�3�3�3�;�;�;�;�;�;�;�;�:�:�:�:�:�:�:�:�:�:�.�.�.�.�.�.�+�+�+�+�+�+�&�&�&�&�&�&�M�M�M�M�M�M�M�M�M�M�C�C�C�C�C�C�C�C�C�C�C�C�C�C�:�:�:�:�:�:�:�:�V�V�V�V�V�9�V�V�V� � � � � �D� � � � ,� ,� ,� ,�����.����&F�F�F�F� � � � ��b�j�O�P�P� �5A�5A�5A�5A�p0�0�0�0�0�0�0�0�<^R�^R�^R�^R�^R�I�^R�^R�^R�B?T�?T�?T�?T�?T�Y�?T�?T�?T�DaT�aT�aT�aT�aT�I�aT�aT�aT�H;T�;T�;T�;T�;T�9�;T�;T�;T�|�V�^�D���� A� A� A� A� A�v�9�"�=� A� A� A� � � � � � � � � � � � �i�i�i�i�i�i�i�i�i�ir/
Memory