ó
    EñiÛ;  ã                  ój  • % S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	J
r
Jr  S SKJrJr  S SKJr  SSKJr  SSKJr  \(       a  S S	KJr  \R.                  " S
5      r\" 5       rS\S'   \R8                  " 5       rSS jr\R>                  " \5        Sr SS jr! " S S\"5      r# " S S\#S9r$g)é    )ÚannotationsN)ÚcontextmanagerÚsuppress)ÚTYPE_CHECKINGÚLiteral)ÚWeakValueDictionaryé   )ÚAcquireReturnProxy)ÚTimeout)Ú	GeneratorÚfilelockzset[sqlite3.Connection]Ú_all_connectionsc                 ó  • [            [        [        5       H+  n [        [        5         U R                  5         S S S 5        M-     [        R                  5         S S S 5        g ! , (       d  f       M[  = f! , (       d  f       g = f©N)Ú_all_connections_lockÚlistr   r   Ú	ExceptionÚcloseÚclear)Úcons    ÚQ/home/mande/repo/quber/.venv/lib/python3.13/site-packages/filelock/_read_write.pyÚ_cleanup_connectionsr      sT   € Þ	ÜÔ(Ö)ˆCÜœ)Õ$Ø—	‘	”÷ %Ñ$ñ *ô 	×ÑÔ ÷	 
Ð	ç$Ö$ú÷ 
Õ	ús!   ‡"A5©A#º A5Á#
A2Á-A5Á5
Biÿ“5wc               óú   • USL a  gU S:X  a  [         $ U S:  a  Sn[        U5      eU S:”  a  [        X-
  S5      OU n[        US-  5      nU[         :”  d  US:  a!  [        R                  SU [         5        [         $ U$ )NFr   éÿÿÿÿz+timeout must be a non-negative number or -1iè  z7timeout %s is too large for SQLite, using %s ms instead)Ú_MAX_SQLITE_TIMEOUT_MSÚ
ValueErrorÚmaxÚintÚ_LOGGERÚwarning)ÚtimeoutÚblockingÚalready_waitedÚmsgÚ	remainingÚ
timeout_mss         r   Útimeout_for_sqliter'   (   s„   € Ø�5ÒØà�"ƒ}Ü%Ð%à�ƒ{Ø;ˆÜ˜‹oÐà4;¸a³K”�GÑ,¨aÔ0ÀW€IÜ�Y Ñ%Ó&€JØÔ*Ó*¨j¸1«nÜ�‰ÐQÐSZÔ\rÔsÜ%Ð%ØÐó    c                  óh   ^ • \ rS rSr% SrS\S'   S\S'    SSSS.         SU 4S	 jjjjrS
rU =r$ )Ú_ReadWriteLockMetaé;   a  
Metaclass that handles singleton resolution when is_singleton=True.

Singleton logic lives here rather than in ReadWriteLock.get_lock so that ``ReadWriteLock(path)`` transparently
returns cached instances without a 2-arg ``super()`` call that type checkers cannot verify.

ú0WeakValueDictionary[pathlib.Path, ReadWriteLock]Ú
_instanceszthreading.LockÚ_instances_lockT©r"   Úis_singletonc          	     óØ  >• U(       d  [         TU ]  XX4S9$ [        R                  " U5      R	                  5       nU R
                     XPR                  ;  a  [         TU ]  XX4S9nX`R                  U'   OU R                  U   nUR                  U:w  d  UR                  U:w  a-  SUR                   SUR                   SU SU 3n[        U5      eUsS S S 5        $ ! , (       d  f       g = f)Nr/   z$Singleton lock created with timeout=z, blocking=z, cannot be changed to timeout=)
ÚsuperÚ__call__ÚpathlibÚPathÚresolver.   r-   r!   r"   r   )	ÚclsÚ	lock_filer!   r"   r0   Ú
normalizedÚinstancer$   Ú	__class__s	           €r   r3   Ú_ReadWriteLockMeta.__call__G   sã   ø€ ö Ü‘7Ñ# IÀÐ#ÐeÐeä—\’\ )Ó,×4Ñ4Ó6ˆ
Ø× Ó Ø§¡Ó/Ü ™7Ñ+¨IÈÐ+Ðm�Ø-5—‘˜zÒ*àŸ>™>¨*Ñ5�à×Ñ 7Ó*¨h×.?Ñ.?À8Ó.Kà:¸8×;KÑ;KÐ:LÈKÐX`×XiÑXiÐWjð k5Ø5<°I¸[ÈÈ
ðTð ô ! “oÐ%Ø÷ !× × ús   ÁB
CÃ
C)© ©r   )
r8   ústr | os.PathLike[str]r!   Úfloatr"   Úboolr0   rA   ÚreturnÚReadWriteLock)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__r3   Ú__static_attributes__Ú__classcell__)r;   s   @r   r*   r*   ;   sc   ø‡ ñð AÓ@Ø#Ó#ð
 ðð
 Ø!ñà)ðð ðð
 ðð ðð 
÷÷ r(   r*   c                  ót  • \ rS rSr% Sr\" 5       rS\S'   \R                  " 5       r
\ SSS.       SS jjj5       r SSSS.         SS	 jjjrSS
 jrSS jr          SS jrSS jrSSS.SS jjjrSSS.SS jjjrSS.S S jjr\S!SS.S"S jjj5       r\S!SS.S"S jjj5       rS#S jrSrg)$rC   éc   aÁ  
Cross-process read-write lock backed by SQLite.

Allows concurrent shared readers or a single exclusive writer. The lock is reentrant within the same mode (multiple
``acquire_read`` calls nest, as do multiple ``acquire_write`` calls from the same thread), but upgrading from read
to write or downgrading from write to read raises :class:`RuntimeError`. Write locks are pinned to the thread that
acquired them.

By default, ``is_singleton=True``: calling ``ReadWriteLock(path)`` with the same resolved path returns the same
instance. The lock file must use a ``.db`` extension (SQLite database).

: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 instances for the same resolved path

.. versionadded:: 3.21.0

r,   r-   T©r"   c               ó   • U " XUS9$ )aÑ  
Return the singleton :class:`ReadWriteLock` for *lock_file*.

: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

:returns: the singleton lock instance

:raises ValueError: if an instance already exists for this path with different *timeout* or *blocking* values

rN   r=   )r7   r8   r!   r"   s       r   Úget_lockÚReadWriteLock.get_lock{   s   € ñ  �9°Ñ9Ð9r(   r/   c               óª  • [         R                  " U5      U l        X l        X0l        [
        R                  " 5       U l        [
        R                  " 5       U l        SU l	        S U l
        S U l        [        R                  " U R                  SS9U l        [           [         R#                  U R                  5        S S S 5        g ! , (       d  f       g = f)Nr   F)Úcheck_same_thread)ÚosÚfspathr8   r!   r"   Ú	threadingÚLockÚ_transaction_lockÚ_internal_lockÚ_lock_levelÚ_current_modeÚ_write_thread_idÚsqlite3ÚconnectÚ_conr   r   Úadd)Úselfr8   r!   r"   r0   s        r   Ú__init__ÚReadWriteLock.__init__�   s‹   € ô Ÿš 9Ó-ˆŒØŒØ ŒÜ!*§¢Ó!1ˆÔÜ'ŸnšnÓ.ˆÔØˆÔØ>BˆÔØ,0ˆÔÜ—O’O D§N¡NÀeÑLˆŒ	Þ"Ü× Ñ  §¡Ô+÷ #×"Ö"ús   Â CÃ
Cc               óô   • U(       d  U R                   R                  SS9nO:US:X  a  U R                   R                  SS9nOU R                   R                  SUS9nU(       d  [        U R                  5      S eg )NFrN   r   T©r"   r!   )rX   Úacquirer   r8   )ra   r"   r!   Úacquireds       r   Ú_acquire_transaction_lockÚ'ReadWriteLock._acquire_transaction_lock¡   sr   € ÞØ×-Ñ-×5Ñ5¸uÐ5ÐE‰HØ˜‹]Ø×-Ñ-×5Ñ5¸tÐ5ÐD‰Hà×-Ñ-×5Ñ5¸tÈWÐ5ÐUˆHÞÜ˜$Ÿ.™.Ó)¨tÐ3ð r(   c                ó~  • U R                   U:w  a0  SU SU R                   S[        U 5       SU SU S3n[        U5      eUS:X  aZ  [        R
                  " 5       =oPR                  :w  a6  SU R                   S[        U 5       S	U S
U R                   3n[        U5      eU =R                  S-  sl        [        U S9$ )NzCannot acquire z	 lock on ú (lock id: z): already holding a z lock (z not allowed)ÚwritezCannot acquire write lock on z) from thread z while it is held by thread r	   ©Úlock)	r[   r8   ÚidÚRuntimeErrorrV   Ú	get_identr\   rZ   r
   )ra   ÚmodeÚoppositeÚ	directionr$   Úcurs         r   Ú_validate_reentrantÚ!ReadWriteLock._validate_reentrant«   sÚ   € Ø×Ñ Ó%à! $  y°·±Ð0@ÀÌBÈtËHÈ:ð V%Ø%- J¨g°i°[ÀðOð ô ˜sÓ#Ð#Ø�7‹?¤y×':Ò':Ó'<Ð < ×AVÑAVÓVà/°·±Ð/?¸{Ì2ÈdË8È*ð UØ"˜eÐ#?À×@UÑ@UÐ?VðXð ô ˜sÓ#Ð#Ø×Ò˜AÑÕÜ! tÑ,Ð,r(   c               ób  • [         R                  " 5       U-
  n[        X#US9nU R                  R	                  SU S35      R                  5         U R                  R	                  S5      R                  5         [         R                  " 5       U-
  n[        X#US9=ov:w  a-  U R                  R	                  SU S35      R                  5         US:X  a  SOSnU R                  R	                  U5      R                  5         US:X  a*  U R                  R	                  S	5      R                  5         g g )
N)r"   r#   zPRAGMA busy_timeout=Ú;zPRAGMA journal_mode=MEMORY;rl   zBEGIN EXCLUSIVE TRANSACTION;zBEGIN TRANSACTION;Úreadz'SELECT name FROM sqlite_schema LIMIT 1;)ÚtimeÚperf_counterr'   r_   Úexecuter   )	ra   rr   r!   r"   Ú
start_timeÚwaitedr&   Ú
recomputedÚstmts	            r   Ú_configure_and_beginÚ"ReadWriteLock._configure_and_begin»   s  € ô ×"Ò"Ó$ zÑ1ˆÜ'¨ÐSYÑZˆ
Ø�	‰	×ÑÐ0°°¸AÐ>Ó?×EÑEÔGð 	�	‰	×ÑÐ7Ó8×>Ñ>Ô@ä×"Ò"Ó$ zÑ1ˆÜ,¨WÐX^Ñ_Ð_ˆJÓnØ�I‰I×ÑÐ 4°Z°LÀÐBÓC×IÑIÔKØ15¸³Ñ-ÐFZˆØ�	‰	×Ñ˜$Ó×%Ñ%Ô'Ø�6‹>ð �I‰I×ÑÐGÓH×NÑNÕPð r(   c               óÀ  • US:X  a  SOSnUS:X  a  SOSnU R                      U R                  S:”  a  U R                  XU5      sS S S 5        $  S S S 5        [        R                  " 5       nU R                  X2S9   U R                      U R                  S:”  a5  U R                  XU5      sS S S 5        U R                  R                  5         $  S S S 5        U R                  XX6S9  U R                      Xl	        SU l        US:X  a  [        R                  " 5       U l        S S S 5        [        U S	9U R                  R                  5         $ ! , (       d  f       GN= f! , (       d  f       N•= f! , (       d  f       NT= f! [        R                   a+  nS
[!        U5      ;  a  e [#        U R$                  5      S eS nAff = f! U R                  R                  5         f = f)Nrz   rl   Ú	downgradeÚupgrader   re   )r"   r~   r	   rm   zdatabase is locked)rY   rZ   rv   r{   r|   rh   rX   Úreleaser‚   r[   rV   rq   r\   r
   r]   ÚOperationalErrorÚstrr   r8   )ra   rr   r!   r"   rs   rt   r~   Úexcs           r   Ú_acquireÚReadWriteLock._acquireÔ   s”  € Ø" f›n‘7°&ˆØ#'¨6£>‘K°yˆ	à× Ó Ø×Ñ !Ó#Ø×/Ñ/°À	ÓJ÷ !Ñ Ø#÷ !ô ×&Ò&Ó(ˆ
Ø×&Ñ&°Ð&ÑJð	-à×$Ó$Ø×#Ñ# aÓ'Ø×3Ñ3°DÀIÓN÷ %Ð$ð& ×"Ñ"×*Ñ*Õ,ð% (÷ %ð ×%Ñ% d¸hÐ%Ñ^à×$Ó$Ø%)Ô"Ø#$�Ô Ø˜7“?Ü,5×,?Ò,?Ó,A�DÔ)÷	 %ô &¨4Ñ0ð ×"Ñ"×*Ñ*Õ,÷7 !Ö ú÷ %Õ$ú÷ %Õ$ûô ×'Ñ'ó 	4Ø#¬3¨s«8Ó3ØÜ˜$Ÿ.™.Ó)¨tÐ3ûð	4ûð
 ×"Ñ"×*Ñ*Õ,úse   ¡"EÁ;E? Â"EÂ)	E? Ã$E? Ã2.E.Ä E? Å
EÅ
E+Å'E? Å.
E<Å8E? Å?F>Æ&F9Æ9F>Æ>G ÇGc               ó"   • U R                  SXS9$ )a  
Acquire a shared read lock.

If this instance already holds a read lock, the lock level is incremented (reentrant). Attempting to acquire a
read lock while holding a write lock raises :class:`RuntimeError` (downgrade not allowed).

: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 a 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

rz   rN   ©r‹   ©ra   r!   r"   s      r   Úacquire_readÚReadWriteLock.acquire_readõ   s   € ð  �}‰}˜V Wˆ}Ð@Ð@r(   c               ó"   • U R                  SXS9$ )a.  
Acquire an exclusive write lock.

If this instance already holds a write lock from the same thread, the lock level is incremented (reentrant).
Attempting to acquire a write lock while holding a read lock raises :class:`RuntimeError` (upgrade not allowed).
Write locks are pinned to the acquiring thread: a different thread trying to re-enter also raises
:class:`RuntimeError`.

: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 a 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

rl   rN   rŽ   r�   s      r   Úacquire_writeÚReadWriteLock.acquire_write  s   € ð$ �}‰}˜W gˆ}ÐAÐAr(   F©Úforcec               ó°  • SnU R                      U R                  S:X  a8  U(       a
   SSS5        gSU R                   S[        U 5       S3n[	        U5      eU(       a  SU l        OU =R                  S-  sl        U R                  S:X  a  SU l        SU l        SnSSS5        U(       a  U R                  R                  5         gg! , (       d  f       N1= f)	aD  
Release one level of the current lock.

When the lock level reaches zero the underlying SQLite transaction is rolled back, releasing the database lock.

: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``

Fr   NzCannot release a lock on rk   z) that is not heldr	   T)	rY   rZ   r8   ro   rp   r[   r\   r_   Úrollback)ra   r–   Úshould_rollbackr$   s       r   r‡   ÚReadWriteLock.release  sÁ   € ð  ˆØ× Ó Ø×Ñ 1Ó$ÞØ÷ !Ð ð 2°$·.±.Ð1AÀÌRÐPTËXÈJÐVhÐi�Ü" 3Ó'Ð'ÞØ#$�Õ à× Ò  AÑ%Õ Ø×Ñ 1Ó$Ø%)�Ô"Ø(,�Ô%Ø"&�÷ !ö Ø�I‰I×ÑÕ ð ÷ !Õ ús   �C±A+CÃ
CNc             #  óº   #   • Uc  U R                   nUc  U R                  nU R                  XS9   Sv •  U R                  5         g! U R                  5         f = f7f)aU  
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

NrN   )r!   r"   r�   r‡   r�   s      r   Ú	read_lockÚReadWriteLock.read_lock8  sO   é € ð ‰?Ø—l‘lˆGØÑØ—}‘}ˆHØ×Ñ˜'ÐÑ5ð	Ûà�L‰L�NøˆD�L‰L�Nüó   ‚.A±A µAÁAÁAc             #  óº   #   • Uc  U R                   nUc  U R                  nU R                  XS9   Sv •  U R                  5         g! U R                  5         f = f7f)aZ  
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

NrN   )r!   r"   r“   r‡   r�   s      r   Ú
write_lockÚReadWriteLock.write_lockM  sO   é € ð ‰?Ø—l‘lˆGØÑØ—}‘}ˆHØ×Ñ˜7ÐÑ6ð	Ûà�L‰L�NøˆD�L‰L�Nürž   c                óÔ   • U R                  SS9  U R                  R                  5         [           [        R                  U R                  5        SSS5        g! , (       d  f       g= f)zŒ
Release the lock (if held) and close the underlying SQLite connection.

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

Tr•   N)r‡   r_   r   r   r   Údiscard)ra   s    r   r   ÚReadWriteLock.closeb  sA   € ð 	�‰˜4ˆÑ Ø�	‰	�‰ÔÞ"Ü×$Ñ$ T§Y¡YÔ/÷ #×"Ö"ús   ° AÁ
A')	r_   r[   rY   rZ   rX   r\   r"   r8   r!   r>   )r8   r?   r!   r@   r"   rA   rB   rC   )
r8   r?   r!   r@   r"   rA   r0   rA   rB   ÚNone)r"   rA   r!   r@   rB   r¥   )rr   úLiteral['read', 'write']rs   r‰   rt   r‰   rB   r
   )
rr   r¦   r!   r@   r"   rA   r~   r@   rB   r¥   )rr   r¦   r!   r@   r"   rA   rB   r
   )r!   r@   r"   rA   rB   r
   )r–   rA   rB   r¥   r   )r!   zfloat | Noner"   zbool | NonerB   zGenerator[None]©rB   r¥   )rD   rE   rF   rG   rH   r   r-   rI   rV   rW   r.   ÚclassmethodrP   rb   rh   rv   r‚   r‹   r�   r“   r‡   r   rœ   r    r   rJ   r=   r(   r   rC   rC   c   s[  ‡ ññ( DWÓCX€JÐ@ÓXØ—n’nÓ&€OààACð:ØY]ñ:Ø.ð:Ø9>ð:ØRVð:à	õ:ó ð:ð( ð,ð
 Ø!ñ,à)ð,ð ð,ð
 ð,ð ð,ð 
ö,ô(4ô-ð QØ,ðQØ7<ðQØKOðQØ]bðQà	ôQô2-ðBAÀD÷ Að Að$BÀT÷ Bð Bð( (-÷ !ð: ðÐQU÷ ó ðð( ðÐRV÷ ó ð÷(
0r(   rC   )Ú	metaclassr§   )r!   r@   r"   rA   r#   r@   rB   r   )%Ú
__future__r   ÚatexitÚloggingrT   r4   r]   rV   r{   Ú
contextlibr   r   Útypingr   r   Úweakrefr   Ú_apir
   Ú_errorr   Úcollections.abcr   Ú	getLoggerr   Úsetr   rI   rW   r   r   Úregisterr   r'   Útyper*   rC   r=   r(   r   Ú<module>r·      sš   ðÞ "ã Û Û 	Û Û Û Û ß /ß )Ý 'å $Ý æÝ)à
×
Ò
˜JÓ
'€á,/«EÐ Ð)Ó 1Ø!ŸšÓ(Ð ô!ð ‡‚Ð$Ô %ð +Ð ôô&%˜ô %ôPI0Ð0ó I0r(   