B
    CVvg$  ã               @   sN   d dl Z d dlZd dlZd dlmZ d dlmZ er<e jZne jZdd„ Z	dS )é    N)ÚSynchronousOnlyOperation)ÚPY37c                s,   ‡ fdd„}t ˆ ƒr$ˆ }d‰ ||ƒS |S dS )z•
    Decorator to mark functions as async-unsafe. Someone trying to access
    the function while in an async context will get an error message.
    c                s   t  ˆ ¡‡ ‡fdd„ƒ}|S )Nc                 sJ   t j d¡s@y
tƒ }W n tk
r*   Y nX ts8| ¡ r@tˆƒ‚ˆ | |ŽS )NZDJANGO_ALLOW_ASYNC_UNSAFE)ÚosÚenvironÚgetÚget_running_loopÚRuntimeErrorr   Z
is_runningr   )ÚargsÚkwargsZ
event_loop)ÚfuncÚmessage© ú8/tmp/pip-install-o3oxmrkh/Django/django/utils/asyncio.pyÚinner   s    
z.async_unsafe.<locals>.decorator.<locals>.inner)Ú	functoolsÚwraps)r   r   )r   )r   r   Ú	decorator   s    zasync_unsafe.<locals>.decoratorzKYou cannot call this from an async context - use a thread or sync_to_async.N)Úcallable)r   r   r   r   )r   r   Úasync_unsafe   s    r   )
Zasyncior   r   Zdjango.core.exceptionsr   Zdjango.utils.versionr   r   Zget_event_loopr   r   r   r   r   Ú<module>   s   