o
    ߥi                     @   s   d dl Z d dlmZmZ d dlmZmZmZ ddlm	Z	 ddl
mZ ee	gef Zdedefd	d
Zdee	egef deegef fddZdS )    N)CallableIterable)EnvironStartResponseWSGIApp   Request)Responseviewreturnc                    s,   t  dtdtdtt f fdd}|S )z
    This can turn a callable object into a WSGI application.

    ```python
    @request_response
    def f(request: Request) -> Response:
        ...
    ```
    environstart_responser   c                 3   s&    t | } |}|| |E d H  d S Nr   )r   r   requestresponser    G/home/ubuntu/.local/lib/python3.10/site-packages/baize/wsgi/shortcut.pywsgi   s   zrequest_response.<locals>.wsgi)	functoolswrapsr   r   r   bytes)r   r   r   r   r   request_response   s    r   handlerc                    s$   t  dtdtf fdd}|S )af  
    This can turn a callable object into a decorator for view.

    ```python
    @decorator
    def m(request: Request, next_call: Callable[[Request], Response]) -> Response:
        ...
        response = next_call(request)
        ...
        return response

    @request_response
    @m
    def v(request: Request) -> Response:
        ...
    ```
    	next_callr   c                    s&   t  dtdtf fdd}|S )z/
        This is the actual decorator.
        r   r   c                    s
    | S r   r   )r   )r   r   r   r   r   ;   s   
z"decorator.<locals>.d.<locals>.view)r   r   r	   r
   )r   r   r   )r   r   d5   s   zdecorator.<locals>.d)r   r   ViewType)r   r   r   r   r   	decorator    s   r   )r   typingr   r   baize.typingr   r   r   requestsr	   	responsesr
   r   r   r   r   r   r   r   <module>   s    