o
    㥵i                     @  sx   d dl mZ d dlZd dlmZ ddlmZmZmZ ddlm	Z	 G dd	 d	ee	 ej
e	 ZG d
d dZdddZdS )    )annotationsN)Self   )	BaseRoute	HttpRouteRoutes   )ViewTypec                      s4   e Zd Zddg g dd fddZdddZ  ZS )MultimethodRoutes N	namespacetagshttp_middlewaressocket_middlewaresiterableGtyping.Union[BaseRoute[ViewType], typing.Iterable[BaseRoute[ViewType]]]
base_classtyper   strr   typing.Iterable[str] | Noner   typing.Sequence[typing.Any]r   returnNonec                  s"   || _ t j|||||d d S )Nr   )r   super__init__)selfr   r   r   r   r   r   	__class__ V/home/ubuntu/.local/lib/python3.10/site-packages/kui/routing/extensions/multimethod.pyr      s   zMultimethodRoutes.__init__r   r   routeBaseRoute[ViewType]c                   s:  t jdr
tdtts| j | S z)ttfdd| j t jdr6t  jds?t  jds?t	dj
 dW n tyP   | j Y | S w t  jdryt jj| jtfi  fdd	 jjD jj tji}ntd
| jtf jj t jjj tji}tt| _| S )N__methods__z0MultimethodRoutes not allow use class-base view.c                   s   t | to
| j jkS N)
isinstancer   pathr)r!   r   r    <lambda>+   s    z*MultimethodRoutes.append.<locals>.<lambda>
__method__z	Routing 'z>' conflict, can be resolved by restricting the request method.c                   s"   i | ]}|  t j|  qS r   )lowergetattrendpoint).0methodr'   r   r    
<dictcomp>=   s    z,MultimethodRoutes.append.<locals>.<dictcomp>_MultimethodEndpoint)hasattrr-   	TypeErrorr%   r   _listappendnextfilterRuntimeErrorr&   StopIterationr   __name__r   _MultiMethodViewr#   r*   r+   staticmethodtypingcastr	   )r   r!   r-   r   )r(   r!   r    r5       s\   




	zMultimethodRoutes.append)r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r!   r"   r   r   )r:   
__module____qualname__r   r5   __classcell__r   r   r   r    r
      s    r
   c                   @  s   e Zd ZdZdS )r;   z
    Just as a mark
    N)r:   r?   r@   __doc__r   r   r   r    r;   R   s    r;   clsr   r   boolc                 C  s   t | to	t| tS r$   )r%   r   
issubclassr;   )rC   r   r   r    is_multimethod_viewX   s   rF   )rC   r   r   rD   )
__future__r   r=   typing_extensionsr   routingr   r   r   r	   Genericr
   r;   rF   r   r   r   r    <module>   s    G