
    d
                     ^    d Z ddlZej        rddlmZ ddlmZ ddlmZ  G d d          ZdS )aY  
Application Dispatcher
======================

This middleware creates a single WSGI application that dispatches to
multiple other WSGI applications mounted at different URL paths.

A common example is writing a Single Page Application, where you have a
backend API and a frontend written in JavaScript that does the routing
in the browser rather than requesting different pages from the server.
The frontend is a single HTML and JS file that should be served for any
path besides "/api".

This example dispatches to an API app under "/api", an admin app
under "/admin", and an app that serves frontend files for all other
requests::

    app = DispatcherMiddleware(serve_frontend, {
        '/api': api_app,
        '/admin': admin_app,
    })

In production, you might instead handle this at the HTTP server level,
serving files or proxying to application servers based on location. The
API and admin apps would each be deployed with a separate WSGI server,
and the static files would be served directly by the HTTP server.

.. autoclass:: DispatcherMiddleware

:copyright: 2007 Pallets
:license: BSD-3-Clause
    N)StartResponse)WSGIApplication)WSGIEnvironmentc                       e Zd ZdZ	 ddddej        ej        edf                  ddfdZdd	d
ddej	        e
         fdZdS )DispatcherMiddlewareaJ  Combine multiple applications as a single WSGI application.
    Requests are dispatched to an application based on the path it is
    mounted under.

    :param app: The WSGI application to dispatch to if the request
        doesn't match a mounted path.
    :param mounts: Maps path prefixes to applications for dispatching.
    Nappr   mountsreturnc                 &    || _         |pi | _        d S N)r   r	   )selfr   r	   s      >lib/python3.11/site-packages/werkzeug/middleware/dispatcher.py__init__zDispatcherMiddleware.__init__3   s    
 l    environr   start_responser   c                 N   |                     dd          }d}d|v r;|| j        v r| j        |         }nD|                    dd          \  }}d| | }d|v ;| j                             || j                  }|                     dd          }||z   |d<   ||d<    |||          S )N	PATH_INFO /   SCRIPT_NAME)getr	   rsplitr   )r   r   r   script	path_infor   	last_itemoriginal_script_names           r   __call__zDispatcherMiddleware.__call__;   s     ["--	Vm 	4$ k&) &c1 5 5FI2I2y22I Vm 	4 +//&$(33C&{{="==!5!>(s7N+++r   r   )__name__
__module____qualname____doc__tOptionalDictstrr   Iterablebytesr    r   r   r   r   )   s          >B# ## 
16#'8"89:# 
	# # # #,(,:I,	
E	, , , , , ,r   r   )	r#   typingr$   TYPE_CHECKING_typeshed.wsgir   r   r   r   r*   r   r   <module>r.      s    @    ? /,,,,,,............%, %, %, %, %, %, %, %, %, %,r   