o
    ߥi	                     @   s   d dl mZ d dlmZmZmZ d dlmZmZm	Z	 ddl
mZmZ G dd dee	 ZG dd	 d	ee	 ZG d
d dee	 ZdS )    )Iterable)	BaseHosts
BaseRouterBaseSubpaths)EnvironStartResponseWSGIApp   )PlainTextResponseResponsec                   @   *   e Zd ZdZdededee fddZdS )Routera  
    A router to assign different paths to different WSGI applications.

    ```python
    applications = Router(
        ("/static/{filepath:any}", static_files),
        ("/api/{_:any}", api_app),
        ("/about/{name}", about_page),
        ("/", homepage),
    )
    ```
    environstart_responsereturnc                 c   sP    |  |dd}|d u rtd}n|\}}||d< |j}|||E d H  d S )N	PATH_INFO   PATH_PARAMS)searchgetr   endpoint)selfr   r   resultresponseroutepath_params r   F/home/ubuntu/.local/lib/python3.10/site-packages/baize/wsgi/routing.py__call__   s   
zRouter.__call__N	__name__
__module____qualname____doc__r   r   r   bytesr   r   r   r   r   r   	   s    r   c                   @   r   )SubpathsaH  
    A router allocates different prefix requests to different WSGI applications.

    NOTE: This will change the values of `environ["SCRIPT_NAME"]` and `environ["PATH_INFO"]`.

    ```python
    applications = Subpaths(
        ("/static", static_files),
        ("/api", api_app),
        ("", default_app),
    )
    ```
    r   r   r   c                 c   sn    | dd}| |}|d u rtd}n|\}}| dd| |d< |t|d  |d< |||E d H  d S )Nr   r   r   SCRIPT_NAME)r   r   r   len)r   r   r   pathr   r   prefixr   r   r   r   3   s   

zSubpaths.__call__Nr    r   r   r   r   r&   $   s    r&   c                   @   r   )Hostsa  
    A router that distributes requests to different WSGI applications based on Host.

    ```python
    applications = Hosts(
        (r"static\.example\.com", static_files),
        (r"api\.example\.com", api_app),
        (r"(www\.)?example\.com", default_app),
    )
    ```
    r   r   r   c                 c   s@    |  |dd}|d u rtdd}n|}|||E d H  d S )N	HTTP_HOSTr   s   Invalid hostr   )r   r   r
   )r   r   r   r   r   r   r   r   r   N   s   zHosts.__call__Nr    r   r   r   r   r+   A   s    r+   N)typingr   baize.routingr   r   r   baize.typingr   r   r   	responsesr
   r   r   r&   r+   r   r   r   r   <module>   s    