o
    ˷e>                     @   s,   d dl Z d dlZdd Zdd Zdd ZdS )    Nc                 C   sT   t | ddrdS t | ddrdS t| rdS t| dr$t| jr$dS t|  S )zY
    Tests to see if an application is a legacy-style (double-callable) application.
    _asgi_single_callableF_asgi_double_callableT__call__)getattrinspectisclasshasattrasyncioiscoroutinefunctionr   application r   L/var/www/ideatree/venv/lib/python3.10/site-packages/asgiref/compatibility.pyis_double_callable   s   

r   c                    s    fdd}|S )zS
    Transforms a double-callable ASGI application into a single-callable one.
    c                    s    | }|||I d H S )Nr   )scopereceivesendinstancer   r   r   new_application    s   z2double_to_single_callable.<locals>.new_applicationr   )r   r   r   r   r   double_to_single_callable   s   r   c                 C   s   t | rt| } | S )z
    Takes either a single- or double-callable application and always returns it
    in single-callable style. Use this to add backwards compatibility for ASGI
    2.0 applications to your server/test harness/etc.
    )r   r   r   r   r   r   guarantee_single_callable'   s   r   )r	   r   r   r   r   r   r   r   r   <module>   s
    