§
    YŠtj  ã                  óŽ  — U d Z ddlmZ ddlZddlZddlZddlZddlZddlm	Z	m
Z
mZmZmZ ddlmZ ddlmZmZ ddlmZ  ej        d	¦  «        Z ed
¦  «        Z ed¦  «        Zej        Zej        Zej        Zej        Zej        Zej        Z de!d<   ej"        d         Z#de!d<   d>d„Z$d>d„Z% G d„ dej&        e         ¦  «        Z& G d„ dej        ¦  «        Z' G d„ dej        ¦  «        Z( G d„ dej&        e         ¦  «        Z)	 	 d?d@d#„Z*	 	 d?dAd&„Z+dd'd(œdBd/„Z,dd'd(œdCd0„Z-dDd4„Z.edEd9„¦   «         Z/edFd;„¦   «         Z/dGd=„Z/dS )Hzø
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Ú	AwaitableÚ	ParamSpecÚ	TypeAliasÚoverload©Úisawaitable)ÚCallableÚ	Coroutineé   )ÚTypeVarzpsycopg.poolÚTÚPr   ÚWorkerÚAWorkerÚreturnÚstrc                 ó2   — t          j        ¦   «         j        S ©N)Ú	threadingÚcurrent_threadÚname© ó    úS/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/psycopg_pool/_acompat.pyÚcurrent_thread_namer   '   s   € ÝÔ#Ñ%Ô%Ô*Ð*r   c                 óX   — t          j        ¦   «         } | r|                      ¦   «         ndS )Nz	<no task>)ÚasyncioÚcurrent_taskÚget_name)Úts    r   Úcurrent_task_namer#   +   s'   € ÝÔÑÔ€AØÐ-ˆ1�:Š:‰<Œ<ˆ< +Ð-r   c                  ó&   ‡ — e Zd ZdZddˆ fd
„Zˆ xZS )ÚQueuez>
    A Queue subclass with an interruptible get() method.
    TNÚblockÚboolÚtimeoutúfloat | Noner   r   c                óP   •— |€d}t          ¦   «                              ||¦  «        S )Ng     õ@)ÚsuperÚget)Úselfr&   r(   Ú	__class__s      €r   r,   z	Queue.get5   s%   ø€ àˆ?Ø(ˆGÝ‰wŒw�{Š{˜5 'Ñ*Ô*Ð*r   )TN)r&   r'   r(   r)   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r,   Ú__classcell__)r.   s   @r   r%   r%   0   sL   ø€ € € € € ðð ð+ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +r   r%   c                  ó   — e Zd ZdZdd„ZdS )	ÚAEventz‘
    Subclass of asyncio.Event adding a wait with timeout like threading.Event.

    wait_timeout() is converted to wait() by async_to_sync.
    r(   Úfloatr   r'   c              ƒ  ó’   K  — 	 t          j        |                      ¦   «         |¦  «        ƒ d {V —† dS # t           j        $ r Y dS w xY w©NTF©r   Úwait_forÚwaitÚTimeoutError©r-   r(   s     r   Úwait_timeoutzAEvent.wait_timeoutC   ób   è è € ð	ÝÔ" 4§9¢9¡;¤;°Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ø�4øÝÔ#ð 	ð 	ð 	Ø�5�5ð	øøøó   „-3 ³AÁAN©r(   r6   r   r'   ©r/   r0   r1   r2   r>   r   r   r   r5   r5   <   ó2   € € € € € ðð ðð ð ð ð ð r   r5   c                  ó   — e Zd ZdZdd„ZdS )	Ú
AConditionz™
    Subclass of asyncio.Condition adding a wait with timeout like threading.Condition.

    wait_timeout() is converted to wait() by async_to_sync.
    r(   r6   r   r'   c              ƒ  ó’   K  — 	 t          j        |                      ¦   «         |¦  «        ƒ d {V —† dS # t           j        $ r Y dS w xY wr8   r9   r=   s     r   r>   zACondition.wait_timeoutR   r?   r@   NrA   rB   r   r   r   rE   rE   K   rC   r   rE   c                  ó   — e Zd ZdS )ÚAQueueN)r/   r0   r1   r   r   r   rH   rH   Z   s   € € € € € Ø€Dr   rH   r   Úfú(Callable[..., Coroutine[Any, Any, None]]Úargsútuple[Any, ...]r   ú
str | Noneúasyncio.Task[None]c                ó4   — t          j         | |Ž |¬¦  «        S )z,
    Equivalent to asyncio.create_task.
    )r   )r   Úcreate_task)rI   rK   r   s      r   ÚaspawnrQ   ^   s    € õ Ô˜q˜q $˜x¨dÐ3Ñ3Ô3Ð3r   úCallable[..., Any]úthreading.Threadc                ó^   — t          j        | ||d¬¦  «        }|                     ¦   «          |S )z=
    Equivalent to creating and running a daemon thread.
    T)ÚtargetrK   r   Údaemon)r   ÚThreadÚstart)rI   rK   r   r"   s       r   ÚspawnrY   i   s/   € õ 	Ô ¨°4ÀÐEÑEÔE€AØ‡G‚G�I„I€IØ€Hr   Ú )r(   Útimeout_hintÚtasksúasyncio.Task[Any]r(   r)   r[   ÚNonec              ‡  ó’  K  — t          j        |Ž }	 | �/t          j        t          j        |¦  «        | ¬¦  «        ƒ d{V —† n|ƒ d{V —† dS # t           j        $ r Y nw xY w|D ]b}|                     ¦   «         rŒt                               d|                     ¦   «         | ¦  «         |rt                               d|¦  «         ŒcdS )ú7
    Equivalent to asyncio.gather or Thread.join()
    N)r(   z'couldn't stop task %r within %s secondsúhint: %s)	r   Úgatherr:   Úshieldr<   ÚdoneÚloggerÚwarningr!   )r(   r[   r\   r;   r"   s        r   Úagatherrg   v   sü   è è € õ Œ>˜5Ð!€DðØÐÝÔ"¥7¤>°$Ñ#7Ô#7ÀÐIÑIÔIÐIÐIÐIÐIÐIÐIÐIÐIàˆJˆJˆJˆJˆJˆJˆJð 	ˆøõ Ôð ð ð Øˆðøøøð
 ð 5ð 5ˆØ�6Š6‰8Œ8ð 	ØÝ�ŠÐ@À!Ç*Â*Á,Ä,ÐPWÑXÔXÐXØð 	5Ý�NŠN˜: |Ñ4Ô4Ð4øð5ð 5s   ’9A ÁAÁAc                ó
  — |D ]}|                      ¦   «         sŒ|                     | ¦  «         |                      ¦   «         sŒAt                               d|j        | ¦  «         |rt                               d|¦  «         Œ€dS )r`   z)couldn't stop thread %r within %s secondsra   N)Úis_aliveÚjoinre   rf   r   )r(   r[   r\   r"   s       r   rb   rb   �   sˆ   € ð ð 5ð 5ˆØ�zŠz‰|Œ|ð 	ØØ	�Šˆw‰ŒˆØ�zŠz‰|Œ|ð 	ØÝ�ŠÐBÀAÄFÈGÑTÔTÐTØð 	5Ý�NŠN˜: |Ñ4Ô4Ð4øð5ð 5r   Úsecondsr6   úCoroutine[Any, Any, None]c                ó*   — t          j        | ¦  «        S )zT
    Equivalent to asyncio.sleep(), converted to time.sleep() by async_to_sync.
    )r   Úsleep)rk   s    r   Úasleepro       s   € õ Œ=˜Ñ!Ô!Ð!r   úCallable[P, Awaitable[T]]úP.argsÚkwargsúP.kwargsc              �  ó
   K  — d S r   r   ©rI   rK   rr   s      r   Úensure_asyncrv   §   s   è è € ð 	ˆr   úCallable[P, T]c              �  ó
   K  — d S r   r   ru   s      r   rv   rv   ­   s   è è € ØSVÐSVr   ú4Callable[P, T] | Callable[P, Coroutine[Any, Any, T]]c              �  óH   K  —  | |i |¤Ž}t          |¦  «        r|ƒ d {V —†}|S r   r	   )rI   rK   rr   Úrvs       r   rv   rv   ±   s@   è è € ð
 
ˆˆDÐ	�FÐ	Ð	€BÝ�2�„ð ØˆXˆXˆXˆXˆXˆXˆØ€Ir   )r   r   )r   N)rI   rJ   rK   rL   r   rM   r   rN   )rI   rR   rK   rL   r   rM   r   rS   )r\   r]   r(   r)   r[   r   r   r^   )r\   rS   r(   r)   r[   r   r   r^   )rk   r6   r   rl   )rI   rp   rK   rq   rr   rs   r   r   )rI   rw   rK   rq   rr   rs   r   r   )rI   ry   rK   rq   rr   rs   r   r   )0r2   Ú
__future__r   ÚtimeÚqueuer   Úloggingr   Útypingr   r   r   r   r   Úinspectr
   Úcollections.abcr   r   Ú_compatr   Ú	getLoggerre   r   r   ÚEventÚ	ConditionÚRLockÚLockÚALockrn   rW   r   Ú__annotations__ÚTaskr   r   r#   r%   r5   rE   rH   rQ   rY   rg   rb   ro   rv   r   r   r   ú<module>rŒ      s  ððð ð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ Ð Ð Ð Ð Ð Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /à Ð Ð Ð Ð Ð à	ˆÔ	˜>Ñ	*Ô	*€Ø€GˆC�L„L€Ø€Iˆc�N„N€ð 	Œ€ØÔ€	Ø„€ØŒ€ØŒ
€àÔ$€Ð $Ð $Ð $Ñ $Ø”\ $Ô'€Ð 'Ð 'Ð 'Ñ 'ð+ð +ð +ð +ð.ð .ð .ð .ð
	+ð 	+ð 	+ð 	+ð 	+ˆEŒK˜ŒNñ 	+ô 	+ð 	+ðð ð ð ð ˆWŒ]ñ ô ð ðð ð ð ð �Ô"ñ ô ð ð	ð 	ð 	ð 	ð 	ˆWŒ]˜1Ôñ 	ô 	ð 	ð Øð4ð 4ð 4ð 4ð 4ð Øð
ð 
ð 
ð 
ð 
ð 8<ÐQSð5ð 5ð 5ð 5ð 5ð 5ð4 7;ÐPRð5ð 5ð 5ð 5ð 5ð 5ð""ð "ð "ð "ð 
ðð ð ñ 
„ðð
 
Ø VÐ VÐ Vñ 
„Ø Vðð ð ð ð ð r   