3
'h`>  ã               @   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j| ƒr.dS t| dƒrHtj| jƒrHdS tj| ƒ S )zY
    Tests to see if an application is a legacy-style (double-callable) application.
    Z_asgi_single_callableFZ_asgi_double_callableTÚ__call__)ÚgetattrÚinspectZisclassÚhasattrÚasyncioZiscoroutinefunctionr   )Úapplication© r   ú8/tmp/pip-build-wz6naw8h/asgiref/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   )ZscopeZreceiveÚsendÚinstance)r   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   