o
    DDi                     @  s   U d Z ddlmZ ddlZddlZddlZddlmZmZ ddl	m
Z
mZ ddlmZ ejZded	< ejd Zded
< ejZejZedZG dd deje ZG dd deje Z		d)d*ddZ		d)d+ddZddd,d%d&Zddd-d'd(ZdS ).z
Utilities to ease the differences between async and sync code.

These object offer a similar interface between sync and async versions; the
script async_to_sync.py will replace the async names with the sync names
when generating the sync version.
    )annotationsN)Any	TypeAlias)Callable	Coroutine   )TypeVarr   WorkerAWorkerTc                      s$   e Zd ZdZdd fd
dZ  ZS )Queuez>
    A Queue subclass with an interruptible get() method.
    TNblockbooltimeoutfloat | Nonereturnr   c                   s   |d u rd}t  j||dS )Ng     @)r   r   )superget)selfr   r   	__class__ I/var/www/Datamplify/venv/lib/python3.10/site-packages/psycopg/_acompat.pyr   "   s   z	Queue.get)TN)r   r   r   r   r   r   )__name__
__module____qualname____doc__r   __classcell__r   r   r   r   r      s    r   c                   @  s   e Zd ZdS )AQueueN)r   r   r   r   r   r   r   r   )   s    r   r   f(Callable[..., Coroutine[Any, Any, None]]argstuple[Any, ...]name
str | Noner   asyncio.Task[None]c                 C  s   t j| | |dS )z,
    Equivalent to asyncio.create_task.
    )r#   )asynciocreate_task)r   r!   r#   r   r   r   aspawn-   s   r(   Callable[..., Any]threading.Threadc                 C  s   t j| ||dd}|  |S )z=
    Equivalent to creating and running a daemon thread.
    T)targetr!   r#   daemon)	threadingThreadstart)r   r!   r#   tr   r   r   spawn8   s   r1   r   tasksasyncio.Task[Any]r   r   Nonec                   s\   t j| }z| durt jt || dI dH  W dS |I dH  W dS  t jy-   Y dS w )7
    Equivalent to asyncio.gather or Thread.join()
    Nr2   )r&   gatherwait_forshieldTimeoutError)r   r3   waitr   r   r   agatherE   s   
r<   c                 G  s"   |D ]}|  s	q||  qdS )r6   N)is_alivejoin)r   r3   r0   r   r   r   r7   U   s
   r7   )r   N)r   r    r!   r"   r#   r$   r   r%   )r   r)   r!   r"   r#   r$   r   r*   )r3   r4   r   r   r   r5   )r3   r*   r   r   r   r5   )r   
__future__r   queuer&   r-   typingr   r   collections.abcr   r   _compatr   r.   r	   __annotations__Taskr
   LockALockr   r   r   r(   r1   r<   r7   r   r   r   r   <module>   s.    
