
vÅÏ^>  ã               @   s@   d  d l  Z  d  d l Z d d „  Z d d „  Z d d „  Z d S)é    Nc             C   sr   t  |  d d ƒ r d St  |  d d ƒ r, d St j |  ƒ r? d St |  d ƒ rd t j |  j ƒ rd d St 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-8lau8j11/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   ˆ  |  ƒ } | | | ƒ Id  HS)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   