
Á«‘_À  ã               @   s    d  Z  Gd d „  d e ƒ 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
c               @   s1   e  Z d  Z d Z d d d „ Z d 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.
    Nc             C   s   | |  _  | p i  |  _ d  S)N)ÚappÚmounts)Úselfr   r   © r   úB/tmp/pip-build-5gj8f0j9/Werkzeug/werkzeug/middleware/dispatcher.pyÚ__init__-   s    	zDispatcherMiddleware.__init__c             C   s¿   | j  d d ƒ } d } xm d | k ro | |  j k rD |  j | } P| j d d ƒ \ } } d | | f } q W|  j j  | |  j ƒ } | j  d d ƒ } | | | d <| | d <| | | ƒ S)NZ	PATH_INFOÚ ú/é   z/%s%sZSCRIPT_NAME)Úgetr   Úrsplitr   )r   ÚenvironZstart_responseÚscriptZ	path_infor   Z	last_itemZoriginal_script_namer   r   r   Ú__call__1   s    
zDispatcherMiddleware.__call__)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   #   s   r   N)r   Úobjectr   r   r   r   r   Ú<module>    s   