o
    ã¥µi$  ã                   @  sÂ   d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 ddlmZ dd	lmZmZ eG d
d„ deje ƒƒZeG dd„ dee eje ƒƒZeG dd„ dee eje ƒƒZdS )é    )ÚannotationsN)Ú	dataclass)Úreduce)ÚSelfé   )Úupdate_wrapperé   )ÚMiddlewareTypeÚViewTypec                   @  sZ   e Zd ZU ded< ded< dZded< ded	< ddd„Zddd„Zddd„Zd dd„ZdS )!Ú	BaseRouteÚstrÚpathr
   ÚendpointÚ útyping.Optional[str]Únameztyping.ClassVarÚ_auto_paramsÚroutesú$typing.Iterable[BaseRoute[ViewType]]ÚreturnÚNonec                 C  s   t ‚©N)ÚNotImplementedError©Úselfr   © r   úF/home/ubuntu/.local/lib/python3.10/site-packages/kui/routing/routes.pyÚextend_middlewares   s   zBaseRoute.extend_middlewaresÚmiddlewaresútyping.Iterable[MiddlewareType]c                 C  s   t tj|| ƒ d S r   )r   ÚoperatorÚmatmul)r   r   r   r   r   Ú_extend_middlewares   s   zBaseRoute._extend_middlewaresr   r   Ú
middlewarer	   c                 C  sÈ   | j }t|dƒr?ttj|jƒD ]-}t||ƒ}||ƒ}t|dd ƒ|u r&tdƒ‚||ur4t||ƒ |  	|¡}t
||t|ƒƒ q| S |}||ƒ}t|dd ƒ|u rQtdƒ‚||ur_t||ƒ |  	|¡}|| _ | S )NÚ__methods__Ú__wrapped__z.Cannot use `@functools.wraps` on a middleware.)r   ÚhasattrÚmapr   Úlowerr$   ÚgetattrÚRuntimeErrorr   r   ÚsetattrÚstaticmethod)r   r#   r   ÚmethodÚold_callbackÚnew_callbackr   r   r   Ú
__matmul__    s*   




ø

zBaseRoute.__matmul__c                 C  sD   | j  d¡s| j dksJ dƒ‚| jdkr| jj| _|  | j¡| _d S )Nú/r   zRoute path must start with '/')r   Ú
startswithr   r   Ú__name__r   )r   r   r   r   Ú__post_init__7   s   ÿ

zBaseRoute.__post_init__N©r   r   r   r   )r   r   r   r   )r   r   r#   r	   r   r   ©r   r   )	r3   Ú
__module__Ú__qualname__Ú__annotations__r   r   r"   r0   r4   r   r   r   r   r      s   
 


r   c                      sN   e Zd ZU dZded< dZded< dZded< d‡ fd	d
„Zddd„Z‡  Z	S )Ú	HttpRouteNr   ÚsummaryÚdescriptionz%typing.Optional[typing.Iterable[str]]Útagsr   r   c                   sn   t ƒ  ¡  t | j¡r| jj}n| j}| jrt|d| jƒ | jr't|d| jƒ | j	r5t|dt
| j	ƒƒ d S d S )NÚ__docs_summary__Ú__docs_description__Ú__docs_tags__)Úsuperr4   ÚinspectÚismethodr   Ú__func__r;   r+   r<   r=   Úlist)r   Úw©Ú	__class__r   r   r4   F   s   

ÿzHttpRoute.__post_init__r   r   c                 C  ó   |   t|dg ƒ¡ d S )NÚ_http_middlewares©r"   r)   r   r   r   r   r   X   ó   zHttpRoute.extend_middlewaresr6   r5   )
r3   r7   r8   r;   r9   r<   r=   r4   r   Ú__classcell__r   r   rG   r   r:   @   s   
 r:   c                   @  s   e Zd Zddd„ZdS )	ÚSocketRouter   r   r   r   c                 C  rI   )NÚ_socket_middlewaresrK   r   r   r   r   r   ^   rL   zSocketRoute.extend_middlewaresNr5   )r3   r7   r8   r   r   r   r   r   rN   \   s    rN   )Ú
__future__r   rB   r    ÚtypingÚdataclassesr   Ú	functoolsr   Útyping_extensionsr   Ú
parametersr   r	   r
   ÚGenericr   r:   rN   r   r   r   r   Ú<module>   s    0"