Skip to main content
Glama

ClickUp Operator

by noah-vh
routing.cpython-312.pyc44 kB
� �MMgˆ���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 �Z0d-d�Z1 d.d�Z2 d/d�Z3d0d�Z4 d1d�Z5ejld�Z7 d2d�Z8Gd�d�Z9Gd�de9�Z:Gd�d e9�Z;Gd!�d"e9�Z<Gd#�d$e9�Z=ej|d%�Z?Gd&�d'ej�e?�ZA d3d(�ZBGd)�d*�ZCGd+�d,�ZDy)4�)� 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. c���djt|j���}t�|�d|�d|�d��y)N�, zNo route exists for name "z" and params "z".)�join�list�keys�super�__init__)�self�name� path_params�params� __class__s ��]C:\Users\noahv\Documents\GitHub\clickup-operator\.venv\Lib\site-packages\starlette/routing.pyr$zNoMatchFound.__init__!s=������4� � 0� 0� 2�3�4�� ���5�d�V�>�&��QS�T�U�)r&�strr'zdict[str, typing.Any]�return�None)�__name__� __module__� __qualname__�__doc__r$� __classcell__)r)s@r*rrs���� V�Vr+rc��eZdZdZdZdZy)�Matchr��N)r/r0r1�NONE�PARTIAL�FULL�r+r*r5r5&s�� �D��G� �Dr+r5c���tjdt�t|tj �r'|j }t|tj �r�'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)�objs r*�iscoroutinefunction_or_partialrG,sT��  �M�M�`��� �S�)�+�+� ,��h�h�� �S�)�+�+� ,� � &� &�s� +�+r+c�b��t|�r|ntjt|��d�fd� }|S)zi Takes a function or coroutine `func(request) -> response`, and returns an ASGI application. c��t��K�t|||��d��fd� }t|��|||��d{���y7��w)Nc��Z�K�����d{���}||||��d{���y7�7��w�Nr;)�scope�receive�send�response�f�requests ��r*�appz*request_response.<locals>.app.<locals>.appHs.������w�Z�'�H��5�'�4�0� 0� 0�(�� 0�s� +�'�+�)�+�+�rLrrMrrNrr-r.)rr)rLrMrNrRrQrPs @�r*rRzrequest_response.<locals>.appEs8������%��$�/�� 1�9�*�3��8����N�N�N�s �,8�6�8rS)rrArBr )rCrRrPs @r*�request_responserT:s2���"�$�'��Y�->�->�?P�RV�-W��O� �Jr+c���d�fd� }|S)zM Takes a coroutine `func(session)`, and returns an ASGI application. c��v��K�t|||���d��fd� }t|��|||��d{���y7��w)N)rMrNc��2�K�����d{���y7��wrKr;)rLrMrNrC�sessions ��r*rRz+websocket_session.<locals>.app.<locals>.app\s������w�-� � �s � ��rS)rr)rLrMrNrRrXrCs @�r*rRzwebsocket_session.<locals>.appYs8������E�7��>�� �9�*�3��8����N�N�N�s �-9�7�9rSr;)rCrRs` r*�websocket_sessionrYQs���O� �Jr+c�D�t|d|jj�S)Nr/)�getattrr)r/)�endpoints r*�get_namer]ds�� �8�Z��);�);�)D�)D� E�Er+c���t|j��D]O\}}d|zdz|vs�||}|j|�}|jd|zdz|�}|j |��Q||fS)N�{�})r!�items� to_string�replace�pop)�path�param_convertorsr'�key�value� convertors r*�replace_paramsrjhs{�� �;�,�,�.�/� ��U� ��9�s�?�d� "�(��-�I��'�'��.�E��<�<��c� �C���7�D� �O�O�C� � 0� �� �r+z4{([a-zA-Z_][a-zA-Z0-9_]*)(:[a-zA-Z_][a-zA-Z0-9_]*)?}c�x�|jd� }d}d}t�}d}i}tj|�D]�}|j d�\}} | j d�} | t vs Jd| �d���t | } |tj|||j��z }|d |�d | j�d �z }||||j�z }|d |zz }||vr|j|�| ||<|j�}��|r@d jt|��} t|�dkDrdnd} t!d| �d| �d|����|r3||dj#d�d} |tj| �dzz }n|tj||d�dzz }|||dz }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}rr6�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)re�is_host� path_regex� path_format�duplicated_params�idxrf�match� param_name�convertor_typeri�names�ending�hostnames r*� compile_pathr�zs����/�/�#�&�&�G��J��K���� �C����%�%�d�+��%*�\�\�%�%8�"� �N�'�.�.�s�3����0�^�4L�^�L\�\]�2^�^�0�#�N�3� ��b�i�i��S�5�;�;�=� 9�:�:� ���Z�L��)�/�/�):�!�<�<� ��t�C�%�+�+�-�0�0� ��v� �*�*� � �)� )� � !� !�*� -�'0���$��i�i�k��#,�&�� � �&�!2�3�4���-�.��2�����0����%�� �$��P�Q�Q�����:�#�#�C�(��+���b�i�i��)�C�/�/� ��b�i�i��S�T� �+�c�1�1� ��4���:��K� �:�:�j� !�;�0@� @�@r+c�,�eZdZdd�Zdd�Zdd�Zdd�Zy) � BaseRoutec��t��rK��NotImplementedError)r%rLs r*�matcheszBaseRoute.matches�� ��!�#�#r+c ��t��rKr�)r%r&r's r*� url_path_forzBaseRoute.url_path_for�r�r+c��K�t���wrKr��r%rLrMrNs r*�handlezBaseRoute.handle�s����!�#�#�s� c��XK�|j|�\}}|tjk(rM|ddk(r tdd��}||||��d{���y|ddk(rt �}||||��d{���y|j |�|j |||��d{���y7�W7�47� �w)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�r5r8rr�updater�)r%rLrMrNr�� child_scoperO�websocket_closes r*�__call__zBaseRoute.__call__�s����� "�\�\�%�0���{� �E�J�J� ��V�}��&�,�[�c�J���u�g�t�4�4�4� ��v��+�-�"0�"2��%�e�W�d�;�;�;� � � � �[�!��k�k�%��$�/�/�/�5��<�� 0�s6�A B*� B$� $B*�1B&�2,B*�B(�B*�&B*�(B*N�rLrr-ztuple[Match, Scope]�r&r,r'� typing.Anyr-rrS)r/r0r1r�r�r�r�r;r+r*r�r��s��$�$�$�0r+r�c�b�eZdZddddd� d d�Zd d�Zd d�Zd d�Zdd�Zdd �Zy)�RouteNT)�methodsr&�include_in_schema� middlewarec���|jd�sJd��||_||_|� t|�n||_||_|}t |tj�r'|j}t |tj�r�'tj|�stj|�rt|�|_|� dg}n||_|�/t|�D]!\}} } ||jg| ��i| ��|_�#|�d|_nL|D� chc]} | j#���c} |_d|j vr|j j%d�t'|�\|_|_|_ycc} w)Nrl� Routed paths must start with '/'�GET�HEAD)rvrer\r]r&r�r@rArBrCrD� isfunction�ismethodrTrR�reversedr��upperr�r�r�r�rf) r%rer\r�r&r�r��endpoint_handler�cls�args�kwargs�methods r*r$zRoute.__init__�sV�����s�#�G�%G�G�#��� � �� �*.�,�H�X�&�D�� �!2���#���)�9�+<�+<�=�/�4�4� ��)�9�+<�+<�=� � � �.� /�7�3C�3C�DT�3U�'��1�D�H��� �'�� �D�H� � !�%-�j�%9�!��T�6��t�x�x�9�$�9�&�9���&:� �?��D�L�9@�A��v�F�L�L�N��A�D�L��� � �$�� � � � ��(�CO�PT�CU�@����)�4�+@�� Bs� E2c��|ddk(r�t|�}|jj|�}|r�|j�}|j �D]&\}}|j |j |�||<�(t|jdi��}|j|�|j|d�}|jr#|d|jvrtj|fStj|fStjifS)Nr�r�r'�r\r'r�)rr�r�� groupdictrarf�convert�dict�getr�r\r�r5r9r:r8� r%rL� route_pathr��matched_paramsrgrhr'r�s r*r�z Route.matches�s��� ��=�F� "�'��.�J��O�O�)�)�*�5�E��!&���!2��"0�"6�"6�"8�J�C��*.�*?�*?��*D�*L�*L�U�*S�N�3�'�#9�"�5�9�9�]�B�#?�@� ��"�"�>�2�+/�=�=��U� ��<�<�E�(�O�4�<�<�$G� �=�=�+�5�5� �:�:�{�2�2��z�z�2�~�r+c �$�t|j��}t|jj��}||jk7s||k7r t ||��t |j |j|�\}}|rJ�t|d��S)Nr��re�protocol�rwr"rfr&rrjr�r�r%r&r'� seen_params�expected_paramsre�remaining_paramss r*r�zRoute.url_path_for s����+�*�*�,�-� ��d�3�3�8�8�:�;�� �4�9�9� � �� >��t�[�1� 1�!/��0@�0@�$�BW�BW�Yd�!e����#�#�#��D�6�2�2r+c��"K�|jr`|d|jvrOddj|j�i}d|vr td|���tdd|��}||||��d{���y|j |||��d{���y7�!7��w)Nr��AllowrrRi�)r��headerszMethod Not Allowed)r�r rrrR)r%rLrMrNr�rOs r*r�z Route.handles����� �<�<�E�(�O�4�<�<�?��� � �$�,�,� 7�8�G���~�#��W�E�E�,�-A�s�\c�d���5�'�4�0� 0� 0��(�(�5�'�4�0� 0� 0� 1�� 0�s$�A'B�)B �*B�B �B� Bc���t|t�xrO|j|jk(xr4|j|jk(xr|j|jk(SrK)r@r�rer\r��r%�others r*�__eq__z Route.__eq__"sR�� �u�e� $� .�� � �U�Z�Z�'� .�� � ����/� .�� � �� � �-�  r+c��|jj}t|jxsg�}|j|j }}|�d|�d|�d|�d�S)N�(path=�, name=z , methods=rr)r)r/r�r�rer&)r%� class_namer�rer&s r*�__repr__zRoute.__repr__*sT���^�^�,�,� �����+��,���Y�Y�� � �d����V�D�8�7�4�(�*�W�K�q�Q�Qr+)rer,r\� typing.Callable[..., typing.Any]r��list[str] | Noner&� str | Noner��boolr��"typing.Sequence[Middleware] | Noner-r.r�r�rS�r�r�r-r��r-r,� r/r0r1r$r�r�r�r�r�r;r+r*r�r��s|�� %)��"&�9=�'V��'V�3�'V� "� 'V� � 'V� �'V�7�'V� �'V�R�$ 3� 1� �Rr+r�c�V�eZdZddd� d d�Zd d�Zd d�Zd d�Zd d�Zdd�Zy)�WebSocketRouteN)r&r�c� �|jd�sJd��||_||_|� t|�n||_|}t |t j�r'|j}t |t j�r�'tj|�stj|�rt|�|_ n||_ |�/t|�D]!\}}}||jg|��i|��|_ �#t|�\|_|_|_y)Nrlr�)rvrer\r]r&r@rArBrCrDr�r�rYrRr�r�r�r�rf) r%rer\r&r�r�r�r�r�s r*r$zWebSocketRoute.__init__2s������s�#�G�%G�G�#��� � �� �*.�,�H�X�&�D�� �#���)�9�+<�+<�=�/�4�4� ��)�9�+<�+<�=� � � �.� /�7�3C�3C�DT�3U�(��2�D�H� �D�H� � !�%-�j�%9�!��T�6��t�x�x�9�$�9�&�9���&:�DP�PT�CU�@����)�4�+@r+c��|ddk(r�t|�}|jj|�}|r�|j�}|j �D]&\}}|j |j |�||<�(t|jdi��}|j|�|j|d�}tj|fStjifS)Nr�r�r'r�)rr�r�r�rarfr�r�r�r�r\r5r:r8r�s r*r�zWebSocketRoute.matchesOs��� ��=�K� '�'��.�J��O�O�)�)�*�5�E��!&���!2��"0�"6�"6�"8�J�C��*.�*?�*?��*D�*L�*L�U�*S�N�3�'�#9�"�5�9�9�]�B�#?�@� ��"�"�>�2�+/�=�=��U� ��z�z�;�.�.��z�z�2�~�r+c �$�t|j��}t|jj��}||jk7s||k7r t ||��t |j |j|�\}}|rJ�t|d��S)Nr�r�r�r�s r*r�zWebSocketRoute.url_path_for^s����+�*�*�,�-� ��d�3�3�8�8�:�;�� �4�9�9� � �� >��t�[�1� 1�!/��0@�0@�$�BW�BW�Yd�!e����#�#�#��D�;�7�7r+c��FK�|j|||��d{���y7��wrK�rRr�s r*r�zWebSocketRoute.handlei������h�h�u�g�t�,�,�,�� �!��!c��t|t�xr4|j|jk(xr|j|jk(SrK)r@r�rer\r�s r*r�zWebSocketRoute.__eq__ls9���%��0�p�T�Y�Y�%�*�*�5L�p�QU�Q^�Q^�bg�bp�bp�Qp�pr+c�h�|jj�d|j�d|j�d�S)Nr�r�rr)r)r/rer&�r%s r*r�zWebSocketRoute.__repr__os/���.�.�)�)�*�&���� �W�T�Y�Y�M�QR�S�Sr+) rer,r\r�r&r�r�r�r-r.r�r�rSr�r�r�r;r+r*r�r�1s`��  �9=� V��V�3�V� � V� 7� V� �V�: � 8�-�q�Tr+r�c�r�eZdZ d dd� d d�Zed d��Zd d�Zdd�Zdd�Zdd�Z dd �Z y)�MountN�r�c��|dk(s|jd�sJd��|� |�Jd��|jd�|_|�||_nt |��|_|j|_|�/t |�D]!\}}}||j g|��i|��|_�#||_t|jdz�\|_ |_ |_ y)Nrnrlr�z0Either 'app=...', or 'routes=' must be specified)�routesz /{path:path}) rv�rstripre� _base_app�RouterrRr�r&r�r�r�rf) r%rerRr�r&r�r�r�r�s r*r$zMount.__init__ts����r�z�T�_�_�S�1�U�3U�U�1���&�"4�h�6h�h�4��K�K��$�� � �?�&)�D�N�#�6�2�D�N��>�>��� � !�%-�j�%9�!��T�6��t�x�x�9�$�9�&�9���&:��� �CO�PT�PY�PY�\j�Pj�Ck�@����)�4�+@r+c�0�t|jdg�S�Nr�)r[r�r�s r*r�z Mount.routes�s���t�~�~�x��4�4r+c�F�|ddv�r|jdd�}t|�}|jj|�}|r�|j �}|j �D]&\}}|j |j|�||<�(d|jd�z}|dt|� } t|jdi��} | j|�| |jd|�|| z|jd �} tj| fStjifS) Nr��r�r�� root_pathrnrlrer'� app_root_path)r'r�r�r\)r�rr�r�r�rarfr�rdr�r�r�rRr5r:r8) r%rLr�r�r�r�rgrh�remaining_path� matched_pathr'r�s r*r�z Mount.matches�s�� ��=�1� 1�� � �+�r�2�I�'��.�J��O�O�)�)�*�5�E��!&���!2��"0�"6�"6�"8�J�C��*.�*?�*?��*D�*L�*L�U�*S�N�3�'�#9�!$�~�'9�'9�&�'A�!A��)�*@�S��-@�,@�A� �"�5�9�9�]�B�#?�@� ��"�"�>�2�#.�&+�Y�Y�� �%J�!*�\�!9� $���� � �z�z�;�.�.��z�z�2�~�r+c ���|j�\||jk(rMd|vrI|djd�|d<t|j|j|�\}}|s�t |��S|j�|j |jdz�r�|j�|}n|t|j�dzd}|jd�}d|d<t|j|j|�\}}|�||d<|jxsgD]I} |j|fi|��} t |jd�t| �z| j��cSt||��#t$rY�cwxYw)Nrerl)reror6rnr�)r&r{rjr�rfrrvr�r�r�r�r�r,r�r) r%r&r'rer��remaining_name� path_kwarg� path_prefix�route�urls r*r�zMount.url_path_for�sw�� �9�9� �T�T�Y�Y�%6�6�[�;P�"-�f�"5�"<�"<�S�"A�K�� �%3�D�4D�4D�d�F[�F[�]h�%i� "�D�"�#��D�)�)� �Y�Y� �$�/�/�$�)�)�c�/�"B��y�y� �!%��"&�c�$�)�)�n�q�&8�&:�!;��$����0�J�"$�K�� �,:�4�;K�;K�T�Mb�Mb�do�,p� )�K�)��%�+5� ��(����*��*���,�%�,�,�^�P�?O�P�C�"� �(:�(:�3�(?�#�c�(�(J�UX�Ua�Ua�b�b�+� �4��-�-��$����s�AE&�& E2�1E2c��FK�|j|||��d{���y7��wrKr�r�s r*r�z Mount.handle�r�r�c��t|t�xr4|j|jk(xr|j|jk(SrK)r@r�rerRr�s r*r�z Mount.__eq__�s6���%��'�]�D�I�I����,C�]����TY�T]�T]�H]�]r+c��|jj}|jxsd}|�d|j�d|�d|j�d�S)Nrnr�r��, app=rr)r)r/r&rerR�r%r�r&s r*r�zMount.__repr__��F���^�^�,�,� ��y�y��B����V�D�I�I�=���x�v�d�h�h�\�QR�S�Sr+)NNN) rer,rR�ASGIApp | Noner��!typing.Sequence[BaseRoute] | Noner&r�r�r�r-r.�r-zlist[BaseRoute]r�r�rSr�r�� r/r0r1r$�propertyr�r�r�r�r�r�r;r+r*r�r�ss���#�48�� l�:>�l��l��l�2� l� � l�7�l� �l�.�5��5��B.�6-�^�Tr+r�c�P�eZdZd d d�Zed d��Zd d�Zd d�Zdd�Zdd�Z dd�Z y)�HostNc��|jd�rJd��||_||_||_t |�\|_|_|_y)NrlzHost must not start with '/')rv�hostrRr&r�� host_regex� host_formatrf)r%rrRr&s r*r$z Host.__init__�sI���?�?�3�'�G�)G�G�'��� ������ �CO�PT�CU�@����)�4�+@r+c�0�t|jdg�Sr�)r[rRr�s r*r�z Host.routes�s���t�x�x��2�.�.r+c���|ddvr�t|��}|jdd�jd�d}|jj |�}|r�|j �}|j �D]&\}}|j|j|�||<�(t|jdi��}|j|�||jd �} tj| fStjifS) Nr�r��rLrrnrorr')r'r\)r r�r�rr�r�rarfr�r�r�rRr5r:r8) r%rLr�rr�r�rgrhr'r�s r*r�z Host.matches�s��� ��=�1� 1��E�*�G��;�;�v�r�*�0�0��5�a�8�D��O�O�)�)�$�/�E��!&���!2��"0�"6�"6�"8�J�C��*.�*?�*?��*D�*L�*L�U�*S�N�3�'�#9�"�5�9�9�]�B�#?�@� ��"�"�>�2�.9�t�x�x�P� ��z�z�;�.�.��z�z�2�~�r+c ��|j�W||jk(rHd|vrD|jd�}t|j|j|�\}}|s�t ||��S|j�|j |jdz�r�|j�|}n|t|j�dzd}t|j|j|�\}}|jxsgD]8} |j|fi|��}t t|�|j|��cSt||��#t$rY�RwxYw)Nre)rerror6)rer�r) r&rdrjrrfrrvr�r�r�r,r�r) r%r&r'rerr�rrrs r*r�zHost.url_path_for�s3�� �9�9� �T�T�Y�Y�%6�6�[�;P��?�?�6�*�D�%3�D�4D�4D�d�F[�F[�]h�%i� "�D�"�#��D�t�4�4� �Y�Y� �$�/�/�$�)�)�c�/�"B��y�y� �!%��"&�c�$�)�)�n�q�&8�&:�!;��%3�D�4D�4D�d�F[�F[�]h�%i� "�D�"����*��*���,�%�,�,�^�P�?O�P�C�"��C��3�<�<�d�S�S�+� �4��-�-��$����s�03D3�3 D?�>D?c��FK�|j|||��d{���y7��wrKr�r�s r*r�z Host.handle r�r�c��t|t�xr4|j|jk(xr|j|jk(SrK)r@rrrRr�s r*r�z Host.__eq__ s6���%��&�\�4�9�9�� � �+B�\�t�x�x�SX�S\�S\�G\�\r+c��|jj}|jxsd}|�d|j�d|�d|j�d�S)Nrnz(host=r�r rr)r)r/r&rrRr s r*r�z Host.__repr__r r+rK�rr,rRrr&r�r-r.rr�r�rSr�r�rr;r+r*rr�s7��V��/��/� �.�.-�]�Tr+r�_Tc�4�eZdZdd�Zdd�Z dd�Zy)�_AsyncLiftContextManagerc��||_yrK)�_cm)r%�cms r*r$z!_AsyncLiftContextManager.__init__s ����r+c��>K�|jj�S�wrK)r$� __enter__r�s r*� __aenter__z#_AsyncLiftContextManager.__aenter__s�����x�x�!�!�#�#�s�c��DK�|jj|||�S�wrK)r$�__exit__)r%�exc_type� exc_value� tracebacks r*� __aexit__z"_AsyncLiftContextManager.__aexit__s!���� �x�x� � ��9�i�@�@�s� N)r%ztyping.ContextManager[_T])r-r )r+ztype[BaseException] | Noner,zBaseException | Noner-ztypes.TracebackType | Noner-z bool | None)r/r0r1r$r(r.r;r+r*r"r"s<���$�A�,�A�(�A�.� A� � Ar+r"c�n��tj|��tj��d�fd� �}|S)Nc�&��t�|��SrK)r")rR�cmgrs �r*�wrapperz+_wrap_gen_lifespan_context.<locals>.wrapper-s���'��S� �2�2r+)rRr�r-z$_AsyncLiftContextManager[typing.Any])� contextlib�contextmanagerrA�wraps)�lifespan_contextr2r1s @r*�_wrap_gen_lifespan_contextr7(s8��� � $� $�%5� 6�D��_�_�T��3��3� �Nr+c�,�eZdZdd�Zdd�Zdd�Zd d�Zy) �_DefaultLifespanc��||_yrK)�_router)r%�routers r*r$z_DefaultLifespan.__init__5s ���� r+c��TK�|jj��d{���y7��wrK)r;�startupr�s r*r(z_DefaultLifespan.__aenter__8s�����l�l�"�"�$�$�$�� �(�&�(c��TK�|jj��d{���y7��wrK)r;�shutdown)r%�exc_infos r*r.z_DefaultLifespan.__aexit__;s�����l�l�#�#�%�%�%�r?c��|SrKr;)r%rRs r*r�z_DefaultLifespan.__call__>s��� r+N)r<r��r-r.)rB�objectr-r.)r%r rRrEr-r )r/r0r1r$r(r.r�r;r+r*r9r94s���%�&�r+r9c��eZdZ ddd� dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Z dd �Z dd �Z ddd �Z ddd �Z d dd�Z d dd�Z d d d�Zdd!d�Zd"d�Zd#d�Zy)$r�Nr�c���|�gn t|�|_||_|� |jn||_|�gn t|�|_|�gn t|�|_|s|r1tjdt�|rtjd�|�t|�|_ n�tj|�r+tjdt�t|�|_ nGtj|�r+tjdt�t!|�|_ n||_ |j"|_|r0t'|�D]!\}} } ||j$g| ��i| ��|_�#yy)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��redirect_slashes� not_found�default� on_startup� on_shutdownr=r>r?r9r6rD�isasyncgenfunctionr�isgeneratorfunctionr7rR�middleware_stackr�) r%r�rHrJrKrL�lifespanr�r�r�r�s r*r$zRouter.__init__CsY��#�N�b��V� �� � 0���)0��t�~�~�g�� � *� 2�"��Z�8H���!,�!4�2�$�{�:K��� �� �M�M�K�#�  � �� � ��� � �:J�4�:P�D� !� � '� '�� 1� �M�M�J�"� � %8��%�D� !�� (� (�� 2� �M�M�J�"� � %?��%�D� !�%-�D� !� $����� �%-�j�%9�!��T�6�(+�D�,A�,A�(S�D�(S�F�(S��%�&:� r+c��K�|ddk(rt�}||||��d{���yd|vr td���tdd��}||||��d{���y7�57��w)Nr�r�rRr�r�r�)rrr)r%rLrMrNr�rOs r*rIzRouter.not_found�sl���� ��=�K� '�,�.�O�!�%��$�7� 7� 7� � �E�>��C�0� 0�(��#�F�H��u�g�t�,�,�,� 8�� -�s!� A�A�/A�A�A�Ac ��|jD]} |j|fi|��cSt||��#t$rY�1wxYwrK)r�r�r)r%r&r'rs r*r�zRouter.url_path_for�sP���[�[�E� �)�u�)�)�$�>�+�>�>�!� �4��-�-�� � �� �s �3� ?�?c��vK�|jD]$}t|�r|��d{����|��&y7��w)z7 Run any `.on_startup` event handlers. N)rKr�r%�handlers r*r>zRouter.startup�s/�������G� ��)��i���� � '��� �%9�7�9c��vK�|jD]$}t|�r|��d{����|��&y7��w)z8 Run any `.on_shutdown` event handlers. N)rLrrTs r*rAzRouter.shutdown�s1�����'�'�G� ��)��i���� � (��rVc��6K�d}|jd�}|��d{��� |j|�4�d{���}|�#d|vr td��|dj|�|ddi��d{���d}|��d{���ddd��d{���|dd i��d{���y7��7�q7�<7�-7�#1�d{���7swY�/xYw7�$#t$rAt j �}|r|d |d ���d{���7�|d |d ���d{���7�wxYw�w) z{ Handle ASGI lifespan messages, which allows us to manage application startup and shutdown events. FrRN�statez:The server does not support "state" in the lifespan scope.r�zlifespan.startup.completeTzlifespan.shutdown.completezlifespan.shutdown.failed)r��messagezlifespan.startup.failed)r�r6� RuntimeErrorr�� BaseExceptionr-� format_exc)r%rLrMrN�startedrR� maybe_state�exc_texts r*rPzRouter.lifespan�s%���� ���)�)�E�*���i��� ?��,�,�S�1�1�[��*��e�+�*�+g�h�h��'�N�)�)�+�6��F�$?�@�A�A�A����i���2�1� �� <�=�>� >� >�% ��1�� B����2��1�1�1�� ?��� � �+�+�-�H���$>�8�T�U�U�U� ��$=�(�S�T�T�T� �  �s��D�B+�D�C �B-�C �3B5�2B/�3B5�B1�B5� C �B3�C � D�%C �&D�-C �/B5�1B5�3C �5C�;B> �<C�C � D� -D�9C<�:D�D�D�Dc��FK�|j|||��d{���y7��w)z; The main entry point to the Router class. N)rOr�s r*r�zRouter.__call__�s �����#�#�E�7�D�9�9�9�r�c���K�|ddvsJ�d|vr||d<|ddk(r|j|||��d{���yd}|jD]r}|j|�\}}|tjk(r.|j |�|j |||��d{���y|tjk(s�l|��o|}|}�t|�-|j �|j |||��d{���yt|�} |ddk(r�|jr�| dk7r�t|�} | jd�r| djd�| d<n | ddz| d<|jD]^}|j| �\}}|tjk7s�+t| ��} tt!| �� �} | |||��d{���y|j#|||��d{���y7���7��B7��7�+7��w) Nr�)r�r�rPr<rPr�rlrer)r)rPr�r�r5r:r�r�r9rrHr��endswithr�r8r rr,rJ) r%rLrMrNrBrr�r�� partial_scoper��redirect_scope� redirect_urlrOs r*rRz Router.app�s������V�}� A�A�A�A� �5� �"�E�(�O� ��=�J� &��-�-��w��5� 5� 5� ����[�[�E�"'���u�!5� �E�;��� � �"�� � �[�)��l�l�5�'�4�8�8�8���%�-�-�'�G�O��� +� �!� � � �L�L�� '��.�.����6� 6� 6� �#�E�*� � ��=�F� "�t�'<�'<��s�AR�!�%�[�N��"�"�3�'�)7��)?�)F�)F�s�)K��v�&�)7��)?�#�)E��v�&�����%*�]�]�>�%B�"��{��E�J�J�&�#&�^�#<�L�/�C� �4E�F�H�"�5�'�4�8�8�8�� %��l�l�5�'�4�0�0�0�S 6��9�� 7�� 9�� 1�sk�1G#�G�A$G#�G�G#�3G#�6/G#�%G�&BG#�.G#�3G�4G#�G!�G#�G#�G#�G#�!G#c�X�t|t�xr|j|jk(SrK)r@r�r�r�s r*r�z Router.__eq__�s!���%��(�H�T�[�[�E�L�L�-H�Hr+c�V�t|||��}|jj|�y�N)rRr&)r�r��append)r%rerRr&rs r*�mountz Router.mounts"���d��$�/�� � � ���5�!r+c�V�t|||��}|jj|�yri)rr�rj)r%rrRr&rs r*rz Router.hosts"���T�s��.�� � � ���5�!r+c�Z�t|||||��}|jj|�y)N)r\r�r&r�)r�r�rj)r%rer\r�r&r�rs r*� add_routezRouter.add_route s1��� ����/�  �� � � ���5�!r+c�V�t|||��}|jj|�y)N)r\r&)r�r�rj)r%rer\r&rs r*�add_websocket_routezRouter.add_websocket_routes$�� �t�h�T�B�� � � ���5�!r+c�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.c�4���j�|�����|S)N)r�r&r�)rn)rCr�r�r&rer%s �����r*� decoratorzRouter.route.<locals>.decorator8s*��� �N�N�����"3� � ��Kr+�rC�typing.Callabler-ru�r=r>r?)r%rer�r&r�rss````` 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.c�0���j�|���|S)N)r&)rp)rCr&rer%s ���r*rsz)Router.websocket_route.<locals>.decoratorRs��� � $� $�T�4�d� $� ;��Kr+rtrv)r%rer&rss``` r*�websocket_routezRouter.websocket_routeDs'��� � � � `� � �  ��r+c��|dvsJ�|dk(r|jj|�y|jj|�y)N)r>rAr>)rKrjrL)r%� event_typerCs r*�add_event_handlerzRouter.add_event_handlerXs?���4�4�4�4� �� "� �O�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.c�,���j�|�|SrK)r|)rCr{r%s ��r*rsz"Router.on_event.<locals>.decoratorgs��� � "� "�:�t� 4��Kr+rtrv)r%r{rss`` r*�on_eventzRouter.on_event`s%���� � � T� � �  ��r+)NTNNNN)r�rrHr�rJr rK�7typing.Sequence[typing.Callable[[], typing.Any]] | NonerLr�rPzLifespan[typing.Any] | Noner�r�r-r.rSr�rDr�rK)rer,rRrr&r�r-r.r)NNT) rer,r\�Atyping.Callable[[Request], typing.Awaitable[Response] | Response]r�r�r&r�r�r�r-r.)rer,r\�4typing.Callable[[WebSocket], typing.Awaitable[None]]r&r�r-r.) rer,r�r�r&r�r�r�r-ru)rer,r&r�r-ru)r{r,rCztyping.Callable[[], typing.Any]r-r.)r{r,r-ru)r/r0r1r$rIr�r>rArPr�rRr�rkrrnrprryr|rr;r+r*r�r�Bs���59�!%�"&�NR�OS�15�<T�:>�<T�1�<T��<T� � <T� L� <T� M� <T�.�<T�7�<T� �<T�| -�.���?�6:� 01�dI�"�"�%)��"&� "��"�T�"�"� "� � "�  � "� �"�* � "��"�G�"�� "� � "�%)��"&� ���"��� �  � � � �@�(*� r+r�)rFr�r-r�)rCr�r-r)rCr�r-r)r\r�r-r,)rer,rfz dict[str, Convertor[typing.Any]]r'zdict[str, str]r-ztuple[str, dict[str, str]])rer,r-zAtuple[typing.Pattern[str], str, dict[str, Convertor[typing.Any]]])r6zStyping.Callable[[typing.Any], typing.Generator[typing.Any, typing.Any, typing.Any]]r-zEtyping.Callable[[typing.Any], typing.AsyncContextManager[typing.Any]])E� __future__rr3rArDr|r-�types�typingr=r�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� Exceptionrr5rGrTrYr]rjr�rxr�r�r�r�r�r�TypeVarr �AsyncContextManagerr"r7r9r�r;r+r*�<module>r�s���"���� �� � ��*��E�>�3�;�:�:�.�+�&�M�M�C�C�:�V�9�V� �D� � ,�� K�� ��.� >�� ��&F� � � �6� � � � � ��b�j�j�O�P� �5A� �5A�F�5A�p0�0�<^R�I�^R�B?T�Y�?T�DaT�I�aT�H;T�9�;T�|�V�^�^�D��� A�v�9�9�"�=� A� �i� �J� � � �i�ir+

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/noah-vh/mcp-server-clickup'

If you have feedback or need assistance with the MCP directory API, please join our Discord server