Ë
    ­Ó^jf5  ã                  ó8  — 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mZ ddl	m
Z
 ddlmZmZmZ ddlmZmZmZmZmZ dd	lmZmZmZmZmZ dd
lmZ er ddlmZmZ ddl m!Z! ddl"m#Z# ddlm$Z$ ddlm%Z%  ed«      Z& ed«      Z' G d„ d«      Z( G d„ d«      Z)ddgZ*y)zEAsync wrapper around :class:`ReadWriteLock` for use with ``asyncio``.é    )ÚannotationsN)ÚThreadPoolExecutor)Úasynccontextmanager)ÚTYPE_CHECKINGÚ	ParamSpecÚTypeVaré   )Ú_append_exception_contextÚ_ensure_current_processÚ_fork_transitionÚ_raise_chained_errorsÚ_register_fork_object)Ú_BackendOutcomeÚ_capture_callÚ_drain_futureÚ_future_resultÚ_wait_until_done)ÚReadWriteLock)ÚAsyncGeneratorÚCallable)Úfutures)ÚTracebackType)ÚNoReturn)ÚAcquireReturnProxyÚ_PÚ_Rc                  óz  — e Zd ZdZ	 ddddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zed d„«       Zed!d„«       Zed"d„«       Zed#d	„«       Z	ed$d
„«       Z
ed%ddœd&d„«       Zed%ddœd&d„«       Zd'd„Zdddœd(d„Zdddœd(d„Zddœd)d„Zd*d„Zd+d„Zd,d„Z	 	 	 	 	 	 	 	 d-d„Zed.d„«       Zd*d„Zed"d„«       Zd*d„Zd*d„Zd*d„Zy)/ÚAsyncReadWriteLocka  
    Async wrapper around :class:`ReadWriteLock` for use in ``asyncio`` applications.

    This wrapper dispatches every blocking SQLite operation to a thread pool via ``loop.run_in_executor()`` because
    Python's :mod:`sqlite3` module has no async API. It delegates reentrancy, upgrade/downgrade rules, and singleton
    behavior to the underlying :class:`ReadWriteLock`.

    :param lock_file: path to the SQLite database file used as the lock
    :param timeout: maximum wait time in seconds; ``-1`` means block indefinitely
    :param blocking: if ``False``, raise :class:`~filelock.Timeout` immediately when the lock is unavailable
    :param is_singleton: if ``True``, reuse existing :class:`ReadWriteLock` instances for the same resolved path
    :param loop: event loop for ``run_in_executor``; ``None`` uses the running loop
    :param executor: executor for ``run_in_executor``. When ``None`` this lock creates and owns a dedicated
        single-thread executor so every operation runs on the same thread (SQLite affinity requires this) and shuts it
        down in :meth:`close`. This lock uses a caller-supplied executor as-is and never shuts it down, so after passing
        no executor call :meth:`close` to release the owned one.

    .. versionadded:: 3.21.0

    TN)ÚblockingÚis_singletonÚloopÚexecutorc               óf  — t        j                  «       }|| _        d| _        d| _        t        | «       t        «       5  t        ||||¬«      | _        || _	        |d u | _
        |xs t        d¬«      | _        t        j                  «       |k7  rd}t        |«      ‚	 d d d «       y # 1 sw Y   y xY w)NF)r   r    r	   )Úmax_workersz:AsyncReadWriteLock construction cannot continue after fork)ÚosÚgetpidÚ_creator_pidÚ_fork_invalidatedÚ_closedr   r   r   Ú_lockÚ_loopÚ_owns_executorr   Ú	_executorÚRuntimeError)	ÚselfÚ	lock_fileÚtimeoutr   r    r!   r"   Úcreator_pidÚmsgs	            úe/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/filelock/_async_read_write.pyÚ__init__zAsyncReadWriteLock.__init__9   s¥   € ô —i‘i“kˆØ'ˆÔØ!&ˆÔØˆŒÜ˜dÔ#ÜÓñ 	(Ü& y°'ÀHÐ[gÔhˆDŒJØˆDŒJØ"*¨dÐ"2ˆDÔØ%ÒJÔ);ÈÔ)JˆDŒNÜ�y‰y‹{˜kÒ)ØR�Ü" 3Ó'Ð'ð *÷	(÷ 	(ñ 	(ús   ¿AB'Â'B0c                ó.   — | j                   j                  S )zThe path to the lock file.)r*   r0   ©r/   s    r4   r0   zAsyncReadWriteLock.lock_fileQ   s   € ð �z‰z×#Ñ#Ð#ó    c                ó.   — | j                   j                  S )zThe default timeout.)r*   r1   r7   s    r4   r1   zAsyncReadWriteLock.timeoutV   s   € ð �z‰z×!Ñ!Ð!r8   c                ó.   — | j                   j                  S )z'Whether blocking is enabled by default.)r*   r   r7   s    r4   r   zAsyncReadWriteLock.blocking[   s   € ð �z‰z×"Ñ"Ð"r8   c                ó   — | j                   S )z2The event loop (or ``None`` for the running loop).)r+   r7   s    r4   r!   zAsyncReadWriteLock.loop`   s   € ð �z‰zÐr8   c                ó   — | j                   S )z_The executor used for ``run_in_executor`` (a dedicated single-thread one if none was supplied).)r-   r7   s    r4   r"   zAsyncReadWriteLock.executore   s   € ð �~‰~Ðr8   ©r   c              óT  K  — |€| j                   j                  }|€| j                   j                  }| j                  ||¬«      ƒ d{  –—†  d}	 d­–— 	 | j                  |«      ƒ d{  –—†  y7 Œ'# t        $ r}|}‚ d}~ww xY w7 Œ# | j                  |«      ƒ d{  –—†7   w xY w­w)aƒ  
        Async context manager that acquires and releases a shared read lock.

        Falls back to instance defaults for *timeout* and *blocking* when ``None``.

        :param timeout: maximum wait time in seconds, or ``None`` to use the instance default
        :param blocking: if ``False``, raise :class:`~filelock.Timeout` immediately; ``None`` uses the instance default

        Nr=   )r*   r1   r   Úacquire_readÚBaseExceptionÚ_release_in_context©r/   r1   r   Ú
body_errorÚerrors        r4   Ú	read_lockzAsyncReadWriteLock.read_lockj   s¥   è ø€ ð ˆ?Ø—j‘j×(Ñ(ˆGØÐØ—z‘z×*Ñ*ˆHØ×Ñ °(ÐÓ;×;Ð;Ø+/ˆ
ð	7Ýð
 ×*Ñ*¨:Ó6×6Ñ6ð 	<ùô ò 	ØˆJØûð	úð 7ù�$×*Ñ*¨:Ó6×6Ò6üó`   ‚AB(Á	A1Á
B(ÁA3 ÁB(Á+BÁ,B(Á3	BÁ<A?Á?BÂB	 ÂB(Â	B%ÂB!ÂB%Â%B(c              óT  K  — |€| j                   j                  }|€| j                   j                  }| j                  ||¬«      ƒ d{  –—†  d}	 d­–— 	 | j                  |«      ƒ d{  –—†  y7 Œ'# t        $ r}|}‚ d}~ww xY w7 Œ# | j                  |«      ƒ d{  –—†7   w xY w­w)aˆ  
        Async context manager that acquires and releases an exclusive write lock.

        Falls back to instance defaults for *timeout* and *blocking* when ``None``.

        :param timeout: maximum wait time in seconds, or ``None`` to use the instance default
        :param blocking: if ``False``, raise :class:`~filelock.Timeout` immediately; ``None`` uses the instance default

        Nr=   )r*   r1   r   Úacquire_writer@   rA   rB   s        r4   Ú
write_lockzAsyncReadWriteLock.write_lockƒ   s¥   è ø€ ð ˆ?Ø—j‘j×(Ñ(ˆGØÐØ—z‘z×*Ñ*ˆHØ× Ñ  °8Ð Ó<×<Ð<Ø+/ˆ
ð	7Ýð
 ×*Ñ*¨:Ó6×6Ñ6ð 	=ùô ò 	ØˆJØûð	úð 7ù�$×*Ñ*¨:Ó6×6Ò6ürF   c              ƒ  ó‚   K  — 	 | j                  «       ƒ d {  –—†  y 7 Œ# t        $ r}|�t        ||«       ‚ d }~ww xY w­w©N)Úreleaser@   r
   )r/   rC   Úrelease_errors      r4   rA   z&AsyncReadWriteLock._release_in_contextœ   s<   è ø€ ð	Ø—,‘,“.× Ò ùÜò 	ØÐ%Ü)¨-¸ÔDØûð	üs(   ‚?„ —˜ œ?� Ÿ	<¨7·<¼?c             ƒ  óÌ   K  — | j                  «        | j                  t        j                  | j                  j
                  ||¬«      «      ƒ d{  –—†  t        | ¬«      S 7 Œ­w)a7  
        Acquire a shared read lock.

        See :meth:`ReadWriteLock.acquire_read` for full semantics.

        :param timeout: maximum wait time in seconds; ``-1`` means block indefinitely
        :param blocking: if ``False``, raise :class:`~filelock.Timeout` immediately when the lock is unavailable

        :returns: a proxy that can be used as an async context manager to release the lock

        :raises RuntimeError: if a write lock is already held on this instance
        :raises Timeout: if the lock cannot be acquired within *timeout* seconds

        r=   N©Úlock)Ú_raise_if_unusableÚ_run_acquireÚ	functoolsÚpartialr*   r?   Ú AsyncAcquireReadWriteReturnProxy©r/   r1   r   s      r4   r?   zAsyncReadWriteLock.acquire_read¤   sS   è ø€ ð 	×ÑÔ!Ø×Ñ¤	× 1Ñ 1°$·*±*×2IÑ2IÈ7Ð]eÔ fÓg×gÐgÜ/°TÔ:Ð:ð 	húó   ‚AA$ÁA"ÁA$c             ƒ  óÌ   K  — | j                  «        | j                  t        j                  | j                  j
                  ||¬«      «      ƒ d{  –—†  t        | ¬«      S 7 Œ­w)aZ  
        Acquire an exclusive write lock.

        See :meth:`ReadWriteLock.acquire_write` for full semantics.

        :param timeout: maximum wait time in seconds; ``-1`` means block indefinitely
        :param blocking: if ``False``, raise :class:`~filelock.Timeout` immediately when the lock is unavailable

        :returns: a proxy that can be used as an async context manager to release the lock

        :raises RuntimeError: if a read lock is already held, or a write lock is held by a different thread
        :raises Timeout: if the lock cannot be acquired within *timeout* seconds

        r=   NrO   )rQ   rR   rS   rT   r*   rH   rU   rV   s      r4   rH   z AsyncReadWriteLock.acquire_write·   sS   è ø€ ð 	×ÑÔ!Ø×Ñ¤	× 1Ñ 1°$·*±*×2JÑ2JÈGÐ^fÔ gÓh×hÐhÜ/°TÔ:Ð:ð 	iúrW   F©Úforcec             ƒ  óœ   K  — t        «        | j                  ry| j                  | j                  j                  |¬«      ƒ d{  –—†  y7 Œ­w)a2  
        Release one level of the current lock.

        See :meth:`ReadWriteLock.release` for full semantics.

        :param force: if ``True``, release the lock completely regardless of the current lock level

        :raises RuntimeError: if no lock is currently held and *force* is ``False``

        NrY   )r   Ú
_inheritedÚ_runr*   rL   )r/   rZ   s     r4   rL   zAsyncReadWriteLock.releaseÊ   s8   è ø€ ô 	 Ô!Ø�?Š?ØØ�i‰i˜Ÿ
™
×*Ñ*°%ˆiÓ8×8Ò8ús   ‚AAÁA
ÁAc              ƒ  óð  K  — t        «        | j                  ry| j                  ry| j                  | j                  j
                  «      }	 t        |«      ƒ d{  –—†  t        |«       d| _        | j                  «        y7 Œ'# t        j                  $ r[}	 t        |«      ƒ d{  –—†7   n(# t        $ r}| j                  ||«       Y d}~nd}~ww xY wd| _        | j                  «        ‚ d}~ww xY w­w)z¤
        Release the lock (if held) and close the underlying SQLite connection.

        After calling this method, the lock instance is no longer usable.

        NT)r   r\   r)   Ú_submitr*   Úcloser   ÚasyncioÚCancelledErrorr   r@   Ú_raise_cancelled_errorÚ_shutdown_owned_executorr   )r/   Úclose_futureÚcancellationrD   s       r4   r`   zAsyncReadWriteLock.closeÚ   sÓ   è ø€ ô 	 Ô!Ø�?Š?ØØ�<Š<ØØ—|‘| D§J¡J×$4Ñ$4Ó5ˆð		Ü" <Ó0×0Ð0ô 	�|Ô$ØˆŒØ×%Ñ%Õ'ð 1ùÜ×%Ñ%ò 	ðAÜ# LÓ1×1Ò1øÜ ò AØ×+Ñ+¨L¸%×@Ñ@ûðAúàˆDŒLØ×)Ñ)Ô+Øûð	üsl   ‚A
C6ÁB ÁBÁB Á #C6ÂB ÂC3ÂB.Â'B*Â(B.Â-C.Â.	CÂ7CÃ	C.ÃCÃC.Ã.C3Ã3C6c              ƒ  ó>  K  — | j                  |«      }	 t        |«      ƒ d {  –—†  t        |«       y 7 Œ# t        j                  $ rÑ}	 t	        |«      ƒ d {  –—†7   nU# t        j                  $ r}| j                  ||«       Y d }~n+d }~wt        $ r}| j                  ||«       Y d }~nd }~ww xY w	 t	        | j                  | j                  j                  «      «      ƒ d {  –—†7   ‚ # t        $ r}| j                  ||«       Y d }~‚ d }~ww xY wd }~ww xY w­wrK   )
r_   r   ra   rb   r   rc   r@   r*   rL   r   )r/   ÚacquireÚacquire_futurerf   Úacquire_errorrD   s         r4   rR   zAsyncReadWriteLock._run_acquireõ   sü   è ø€ ØŸ™ gÓ.ˆð	Ü" >Ó2×2Ð2ô 	�~Õ&ð 3ùÜ×%Ñ%ò 	ðAÜ# NÓ3×3Ò3øÜ×)Ñ)ò IØ×+Ñ+¨L¸-×HÑHûÜ ò AØ×+Ñ+¨L¸%×@Ñ@ûðAúðAÜ# D§L¡L°·±×1CÑ1CÓ$DÓE×EÑEð øô !ò AØ×+Ñ+¨L¸%×@Ð@ØûðAþð	üs©   ‚D•6 £4¤6 ¨D´6 ¶DÁ
AÁAÁAÁDÁB1Á2B	ÂDÂ	B1ÂB,Â'DÂ,B1Â1DÂ51C-Ã&C)Ã'C-Ã,DÃ-	DÃ6DÄDÄDÄDÄDÄDc              �  ó*  K  —  | j                   |g|¢­i |¤Ž}	 t        |«      ƒ d {  –—†  t        |«      S 7 Œ# t        j                  $ rC}	 t	        |«      ƒ d {  –—†7   ‚ # t
        $ r}| j                  ||«       Y d }~‚ d }~ww xY wd }~ww xY w­wrK   )r_   r   ra   rb   r   r@   rc   r   )r/   ÚfuncÚargsÚkwargsÚfuturerf   rD   s          r4   r]   zAsyncReadWriteLock._run  sœ   è ø€ Ø�—‘˜dÐ4 TÒ4¨VÑ4ˆð	Ü" 6Ó*×*Ð*ô ˜fÓ%Ð%ð +ùÜ×%Ñ%ò 	ðAÜ# FÓ+×+Ñ+ð øô !ò AØ×+Ñ+¨L¸%×@Ð@ØûðAþð	üsa   ‚Bš: ¨8©: ­B¸: ºBÁA#ÁAÁA#Á"BÁ#	BÁ,BÁ>BÂBÂBÂBÂBc           	     ó²   — | j                   xs t        j                  «       j                  | j                  t
        t        j                  |g|¢­i |¤Ž«      S rK   )r+   ra   Úget_running_loopÚrun_in_executorr-   r   rS   rT   )r/   rl   rm   rn   s       r4   r_   zAsyncReadWriteLock._submit  sK   € ð —
‘
Ò8œg×6Ñ6Ó8×IÑIØ�N‰NÜÜ×Ñ˜dÐ4 TÒ4¨VÑ4ó
ð 	
r8   c                óŽ   — |j                   x}�%|| ur!| j                   x}�t        ||«       || _         | |_         t        |«       y rK   )Ú__context__r
   r   )rf   rD   ÚcontextÚcancellation_contexts       r4   rc   z)AsyncReadWriteLock._raise_cancelled_error  sO   € à×(Ñ(Ð(ˆGÐ5¸'ÈÑ:UØ(4×(@Ñ(@Ð@Ð$ÐMÜ)¨'Ð3GÔHØ'.ˆLÔ$Ø(ˆÔÜ˜eÕ$r8   c                óV   — | j                   r| j                  j                  d¬«       y y )NF©Úwait)r,   r-   Úshutdownr7   s    r4   rd   z+AsyncReadWriteLock._shutdown_owned_executor%  s%   € Ø×ÒØ�N‰N×#Ñ#¨Ð#Õ/ð r8   c                ó`   — | j                   xs! t        j                  «       | j                  k7  S rK   )r(   r%   r&   r'   r7   s    r4   r\   zAsyncReadWriteLock._inherited)  s$   € à×%Ñ%ÒI¬¯©«¸×8IÑ8IÑ)IÐIr8   c                ó¬   — t        «        | j                  rd| j                  › d�}t        |«      ‚| j                  rd}t        j                  |«      ‚y )NzAsyncReadWriteLock on z4 was invalidated by fork(); construct a new instancez$Cannot operate on a closed database.)r   r\   r0   r.   r)   Úsqlite3ÚProgrammingError)r/   r3   s     r4   rQ   z%AsyncReadWriteLock._raise_if_unusable-  sP   € ÜÔ!Ø�?Š?Ø*¨4¯>©>Ð*:Ð:nÐoˆCÜ˜sÓ#Ð#Ø�<Š<Ø8ˆCÜ×*Ñ*¨3Ó/Ð/ð r8   c                ó   — d| _         y )NT)r(   r7   s    r4   Ú_reset_after_fork_in_childz-AsyncReadWriteLock._reset_after_fork_in_child6  s
   € Ø!%ˆÕr8   c                óž   — t        j                  «       t        | dd «      k(  r+t        | dd«      r| j                  j	                  d¬«       y y y )Nr'   r,   Frx   )r%   r&   Úgetattrr-   rz   r7   s    r4   Ú__del__zAsyncReadWriteLock.__del__9  sG   € ô �9‰9‹;œ' $¨¸Ó=Ò=Ä'È$ÐP`ÐbgÔBhØ�N‰N×#Ñ#¨Ð#Õ/ð CiÐ=r8   )éÿÿÿÿ)r0   zstr | os.PathLike[str]r1   Úfloatr   Úboolr    r†   r!   ú asyncio.AbstractEventLoop | Noner"   zfutures.Executor | NoneÚreturnÚNone)rˆ   Ústr)rˆ   r…   )rˆ   r†   )rˆ   r‡   )rˆ   zfutures.ExecutorrK   )r1   zfloat | Noner   zbool | Nonerˆ   zAsyncGenerator[None])rC   úBaseException | Nonerˆ   r‰   )r1   r…   r   r†   rˆ   rU   )rZ   r†   rˆ   r‰   )rˆ   r‰   )rh   z Callable[[], AcquireReturnProxy]rˆ   r‰   )rl   úCallable[_P, _R]rm   ú_P.argsrn   ú	_P.kwargsrˆ   r   )rl   rŒ   rm   r�   rn   rŽ   rˆ   z#asyncio.Future[_BackendOutcome[_R]])rf   zasyncio.CancelledErrorrD   r@   rˆ   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r5   Úpropertyr0   r1   r   r!   r"   r   rE   rI   rA   r?   rH   rL   r`   rR   r]   r_   Ústaticmethodrc   rd   r\   rQ   r€   rƒ   © r8   r4   r   r   #   s�  „ ñð0 ð(ð
 Ø!Ø15Ø,0ñ(à)ð(ð ð(ð
 ð(ð ð(ð /ð(ð *ð(ð 
ó(ð0 ò$ó ð$ð ò"ó ð"ð ò#ó ð#ð òó ðð òó ðð ð7ÐW[ô 7ó ð7ð0 ð7ÐX\ô 7ó ð7ó0ð;È$õ ;ð&;È4õ ;ð& .3õ 9ó (ó6'ó$
&ð
Ø$ð
Ø-4ð
Ø@Ið
à	,ó
ð ò%ó ð%ó0ð òJó ðJó0ó&ô0r8   r   c                  ó8   — e Zd ZdZdd„Zdd„Z	 	 	 	 	 	 	 	 dd„Zy)	rU   zEContext-aware object that releases the async read/write lock on exit.c                ó   — || _         y rK   rO   )r/   rP   s     r4   r5   z)AsyncAcquireReadWriteReturnProxy.__init__C  s	   € Øˆ�	r8   c              ƒ  ó"   K  — | j                   S ­wrK   rO   r7   s    r4   Ú
__aenter__z+AsyncAcquireReadWriteReturnProxy.__aenter__F  s   è ø€ Ø�y‰yÐùs   ‚c              ƒ  óT   K  — | j                   j                  «       ƒ d {  –—†  y 7 Œ­wrK   )rP   rL   )r/   Úexc_typeÚ	exc_valueÚ	tracebacks       r4   Ú	__aexit__z*AsyncAcquireReadWriteReturnProxy.__aexit__I  s   è ø€ ð �i‰i×ÑÓ!×!Ò!ús   ‚( &¡(N)rP   r   rˆ   r‰   )rˆ   r   )r›   ztype[BaseException] | Nonerœ   r‹   r�   zTracebackType | Nonerˆ   r‰   )r�   r�   r‘   r’   r5   r™   rž   r•   r8   r4   rU   rU   @  s:   „ ÙOóóð"à,ð"ð (ð"ð (ð	"ð
 
ô"r8   rU   )+r’   Ú
__future__r   ra   rS   r%   r}   Úconcurrent.futuresr   Ú
contextlibr   Útypingr   r   r   Ú_apir
   r   r   r   r   Ú_asyncr   r   r   r   r   Ú_read_writer   Úcollections.abcr   r   Ú
concurrentr   Útypesr   r   r   r   r   r   rU   Ú__all__r•   r8   r4   ú<module>rª      sƒ   ðÙ Kå "ã Û Û 	Û Ý 1Ý *ß 4Ñ 4÷õ ÷ dÕ cÝ &áß8Ý"Ý#Ýå(áˆtƒ_€ÙˆTƒ]€÷Z0ñ Z0÷z"ñ "ð& 'Øð�r8   