Ë
    íéñiîD  ã                   óx  — U d 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
mZmZ e
j                  Z G d„ dej                  «      Z G d„ d	ej                  «      Z G d
„ d«      Zeeeeej&                  f   egef   eeef   eee   f   Zeed<   ej0                  dk(  r›dej2                  deeeej4                  e      ee   f   fd„Zdeej4                  e      dee   ddfd„Z G d„ de«      Z G d„ de«      Z e«       Z eee   ef   ed<   eZ!dej2                  deddfd„Z"dej2                  ddfd„Z#yddl$Z$ddl%Z%eej2                  ej&                  f   Z& G d„ de«      Z' G d„ d e'«      Z( G d!„ d"e'«      Z)e%jT                  Z! e'«       Z+dej2                  deddfd#„Z"dej2                  ddfd$„Z#y)%a  Module portalocker.

This module provides cross-platform file locking functionality.
The Windows implementation now supports two variants:

  1. A default method using the Win32 API (win32file.LockFileEx/UnlockFileEx).
  2. An alternative that uses msvcrt.locking for exclusive locks (shared
     locks still use the Win32 API).

This version uses classes to encapsulate locking logic, while maintaining
the original external API, including the LOCKER constant for specific
backwards compatibility (POSIX) and Windows behavior.
é    N)ÚAnyÚCallableÚOptionalÚUnionÚcasté   )Ú	constantsÚ
exceptionsÚtypesc                   ó4   — e Zd Zdej                  deddfd„Zy)ÚLockCallableÚfile_objÚflagsÚreturnNc                  ó   — y ©N© ©Úselfr   r   s      úY/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/portalocker/portalocker.pyÚ__call__zLockCallable.__call__#   s   € àó    )Ú__name__Ú
__module__Ú__qualname__r   ÚFileArgumentÚ	LockFlagsr   r   r   r   r   r   "   s%   „ ðØ×*Ñ*ðØ3<ðà	ôr   r   c                   ó0   — e Zd Zdej                  ddfd„Zy)ÚUnlockCallabler   r   Nc                  ó   — y r   r   ©r   r   s     r   r   zUnlockCallable.__call__)   s   � r   )r   r   r   r   r   r   r   r   r   r   r   (   s   „ ØA ×!3Ñ!3ÐA¸ÔAr   r   c                   ó\   — e Zd ZdZdej
                  deddfd„Zdej
                  ddfd„Zy)Ú
BaseLockerz&Base class for locker implementations.r   r   r   Nc                 ó   — t         ‚)zLock the file.©ÚNotImplementedErrorr   s      r   ÚlockzBaseLocker.lock/   ó   € ä!Ð!r   c                 ó   — t         ‚)zUnlock the file.r%   r!   s     r   ÚunlockzBaseLocker.unlock3   r(   r   )	r   r   r   Ú__doc__r   r   r   r'   r*   r   r   r   r#   r#   ,   s>   „ Ù0ð"˜U×/Ñ/ð "¸	ð "Àdó "ð"˜u×1Ñ1ð "°dô "r   r#   ÚLOCKERÚntr   r   c                 ó–  — t        | t        «      r| ddfS t        | t        j                  «      rd| j	                  «       }| j                  «       }|dk7  r| j                  d«       |t        j                  t        j                  t           | «      |fS t        j                  t        j                  | «      j	                  «       }|ddfS )z?Prepare file for Windows: get fd, optionally seek and save pos.Nr   )Ú
isinstanceÚintÚioÚIOBaseÚfilenoÚtellÚseekÚtypingr   ÚIOr   r   Ú	HasFileno)r   ÚfdÚoriginal_poss      r   Ú_prepare_windows_filer;   H   s¡   € ô �h¤Ô$à˜T 4Ð'Ð'ô �h¤§	¡	Ô*Ø—o‘oÓ'ˆBØ#Ÿ=™=›?ˆLØ˜qÒ Ø—‘˜aÔ Ø”v—{‘{¤6§9¡9¬S¡>°8Ó<¸lÐJÐJô �[‰[œŸ™¨(Ó3×:Ñ:Ó<ˆØ�4˜ˆ~Ðr   Úfile_io_objr:   c                 ó>   — | r|�|dk7  r| j                  |«       yyyy)z?Restore file position if it was an IO object and pos was saved.Nr   )r5   )r<   r:   s     r   Ú_restore_windows_file_posr>   ]   s,   € ñ
 ˜<Ð3¸ÈÒ8IØ×Ñ˜\Õ*ð 9JÐ3ˆ;r   c                   óŽ   — e Zd ZU dZeed<   dZeed<   dd„Zdedefd	„Z	d
e
j                  deddfd„Zd
e
j                  ddfd„Zy)ÚWin32Lockerz1Locker using Win32 API (LockFileEx/UnlockFileEx).Ú_overlappedi  ÿÿÚ_lock_bytes_lowr   Nc                 ór   — 	 dd l }|j                  «       | _        y # t        $ r}t        d«      |‚d }~ww xY w)Nr   zMpywintypes is required for Win32Locker but not found. Please install pywin32.)Ú
pywintypesÚImportErrorÚ
OVERLAPPEDrA   )r   rD   Úes      r   Ú__init__zWin32Locker.__init__k   sF   € ðÛ!ð  *×4Ñ4Ó6ˆDÕøô ò Ü!ð5óð ðûðús   ‚ œ	6¥1±6r9   c                 ó„   — 	 dd l }t        t        |j	                  |«      «      S # t        $ r}t        d«      |‚d }~ww xY w)Nr   z?msvcrt is required for _get_os_handle on Windows but not found.)ÚmsvcrtrE   r   r0   Úget_osfhandle)r   r9   rJ   rG   s       r   Ú_get_os_handlezWin32Locker._get_os_handleu   sM   € ðÛô œ˜V×1Ñ1°"Ó5Ó6Ð6øô ò Ü!ð%óð ðûðús   ‚% ¥	?®:º?r   r   c                 óX  — dd l }dd l}dd l}dd l}t	        |«      \  }}}	| j                  |«      }
d}|t        j                  z  r||j                  z  }|t        j                  z  r||j                  z  }	 |j                  |
|d| j                  | j                  «       	 t+        ||	«       y # |j                  $ rZ}|j                  |j                  k(  r;t!        j"                  t         j$                  j&                  |j(                  |¬«      |‚‚ d }~ww xY w# t+        ||	«       w xY w©Nr   ©Úfh)rD   Úwin32conÚ	win32fileÚwinerrorr;   rL   r   ÚNON_BLOCKINGÚLOCKFILE_FAIL_IMMEDIATELYÚ	EXCLUSIVEÚLOCKFILE_EXCLUSIVE_LOCKÚ
LockFileExrB   rA   ÚerrorÚERROR_LOCK_VIOLATIONr
   ÚAlreadyLockedÚLockExceptionÚLOCK_FAILEDÚstrerrorr>   )r   r   r   rD   rQ   rR   rS   r9   Ú
io_obj_ctxÚpos_ctxÚos_fhÚmodeÚ	exc_values                r   r'   zWin32Locker.lock   s  € ÛÛÛÛä&;¸HÓ&EÑ#ˆB�
˜GØ×'Ñ'¨Ó+ˆEàˆDØ”y×-Ñ-Ò-Ø˜×:Ñ:Ñ:�Ø”y×*Ñ*Ò*Ø˜×8Ñ8Ñ8�ð?Ø×$Ñ$Ø˜4  D×$8Ñ$8¸$×:JÑ:Jõô *¨*°gÕ>øð ×#Ñ#ò Ø×%Ñ%¨×)FÑ)FÒFÜ$×2Ñ2Ü"×0Ñ0×<Ñ<Ø!×*Ñ*Ø#ôð %ð	%ð ûðûô *¨*°gÕ>ús%   Á8)B/ Â/DÂ>ADÄDÄD ÄD)c                 óV  — dd l }dd l}dd l}t        |«      \  }}}| j	                  |«      }	 |j                  |d| j                  | j                  «       t        ||«       y # |j                  $ r^}	|	j                  |j                  k7  r;t        j                  t        j                  j                  |	j                  |¬«      |	‚Y d }	~	Œud }	~	wt        $ r@}	t        j                  t        j                  j                  |	j                  |¬«      |	‚d }	~	ww xY w# t        ||«       w xY wrN   )rD   rR   rS   r;   rL   ÚUnlockFileExrB   rA   rY   ÚERROR_NOT_LOCKEDr
   r\   r]   r^   ÚOSErrorr>   )
r   r   rD   rR   rS   r9   r_   r`   ra   Úexcs
             r   r*   zWin32Locker.unlockž   s	  € ÛÛÛä&;¸HÓ&EÑ#ˆB�
˜GØ×'Ñ'¨Ó+ˆEð?Ø×&Ñ&Ø˜1˜d×2Ñ2°D×4DÑ4Dôô" *¨*°gÕ>øð ×#Ñ#ò Ø—<‘< 8×#<Ñ#<Ò<Ü$×2Ñ2Ü"×0Ñ0×<Ñ<ØŸ™Ø#ôð ð	ô =ûô ò Ü ×.Ñ.Ü×,Ñ,×8Ñ8Ø—L‘LØôð ð	ûðûô *¨*°gÕ>ús6   ®(A# Á#DÁ2ACÃD ÃDÃ;DÄDÄD ÄD(©r   N)r   r   r   r+   r   Ú__annotations__rB   r0   rH   rL   r   r   r   r'   r*   r   r   r   r@   r@   e   sf   … Ù?àÓØ'ˆ˜Ó'ó	7ð	7 Sð 	7¨Só 	7ð	? ×!3Ñ!3ð 	?¸Ið 	?È$ó 	?ð>	? 5×#5Ñ#5ð 	?¸$ô 	?r   r@   c                   óz   — e Zd ZU eed<   dZeed<   dd„Zdej                  de
ddfd	„Zdej                  ddfd
„Zy)ÚMsvcrtLockerÚ_win32_lockeri   Ú_msvcrt_lock_lengthr   Nc                 óÒ   — t        «       | _        	 dd l}g d¢}g d¢}t	        ||«      D ]  \  }}t        ||«      rŒt        |||«       Œ! y # t        $ r}t        d«      |‚d }~ww xY w)Nr   z2msvcrt is required for MsvcrtLocker but not found.)ÚLK_LOCKÚLK_RLCKÚLK_NBLCKÚLK_UNLCKÚ	LK_NBRLCK)r   r   é   é   ru   )r@   rm   rJ   rE   ÚzipÚhasattrÚsetattr)r   rJ   rG   ÚattrsÚdefaultsÚattrÚdefault_vals          r   rH   zMsvcrtLocker.__init__¾   sw   € Ü!,£ˆDÔðÛò PˆEÚ&ˆHÜ%(¨°Ó%9ò 7Ñ!��kÜ˜v tÕ,Ü˜F D¨+Õ6ñ7øô ò Ü!ØHóàðûðús   ‘A Á	A&ÁA!Á!A&r   r   c                 óà  — dd l }|t        j                  z  rNt        d«      }|t        j                  z  r|t        j                  z  }| j                  j                  ||«       y t        |«      \  }}}|t        j                  z  r|j                  n|j                  }	 |j                  ||| j                  «       	 t%        ||«       y # t        $ r‡}	|	j                  dv r:t        j                  t        j                  j                   t#        |	«      |¬«      |	‚t        j                  t        j                  j                   t#        |	«      |¬«      |	‚d }	~	ww xY w# t%        ||«       w xY w)Nr   )é   é   é!   é$   rO   )rJ   r   ÚSHAREDrT   rm   r'   r;   rr   rp   Úlockingrn   rg   Úerrnor
   r[   r\   r]   Ústrr>   )
r   r   r   rJ   Úwin32_api_flagsr9   r_   r`   rb   rc   s
             r   r'   zMsvcrtLocker.lockÍ   sE  € Ûà”y×'Ñ'Ò'Ü"+¨A£,�Øœ9×1Ñ1Ò1Ø#¤y×'=Ñ'=Ñ=�OØ×"Ñ"×'Ñ'¨°/ÔBØä&;¸HÓ&EÑ#ˆB�
˜Gð œ9×1Ñ1Ò1ð —’à—^‘^ð ð?Ø—‘ØØØ×,Ñ,õô$ *¨*°gÕ>øô ò !Ø—?‘?Ð&6Ñ6Ü$×2Ñ2Ü"×0Ñ0×<Ñ<Ü˜I›Ø#ôð %ð	%ô
 !×.Ñ.Ü×,Ñ,×8Ñ8Ü˜	“NØôð !ð	!ûð!ûô *¨*°gÕ>ús%   Â!C Ã	EÃBEÅEÅE ÅE-c           
      óF  — dd l }t        |«      \  }}}d}	 |j                  ||j                  | j                  «       |st        ||«       y y # t
        $ �r4}|j                  dk(  rßd}t        ||«       	 | j                  j                  |«       nï# t        j                  $ rQ}t        j                  t        j                  j                  d|j                  › d|j                  › d�|¬«      |‚d }~wt        $ rF}	t        j                  t        j                  j                  d|j                  › d	|	›�|¬«      |	‚d }	~	ww xY wt        j                  t        j                  j                  |j                  |¬«      |‚Y d }~�ŒId }~ww xY w# |st        ||«       w w xY w)
Nr   Fr   Tzmsvcrt unlock failed (z), and win32 fallback failed (ú)rO   z4), and win32 fallback failed with unexpected error: )rJ   r;   r„   rs   rn   rg   r…   r>   rm   r*   r
   r\   r]   r^   Ú	Exception)
r   r   rJ   r9   r_   r`   Útook_fallback_pathrh   Ú	win32_excÚ	final_excs
             r   r*   zMsvcrtLocker.unlockó   sª  € Ûä&;¸HÓ&EÑ#ˆB�
˜GØ!&Ðð'CØ—‘ØØ—O‘OØ×,Ñ,ôñJ *Ü-¨j¸'ÕBð *øôA ó Ø—9‘9 ’?Ø)-Ð&ô .¨j¸'ÔBð)Ø×*Ñ*×1Ñ1Ø$õøô &×3Ñ3ò )Ü(×6Ñ6Ü&×4Ñ4×@Ñ@Ø4°S·\±\°Nð C6Ø6?×6HÑ6HÐ5IÈðLà'ô	ð
  )ð)ûô %ò )Ü(×6Ñ6Ü&×4Ñ4×@Ñ@Ø4°S·\±\°Nð CLà(˜mð-ð  (ôð  )ð)ûð)úô %×2Ñ2Ü"×0Ñ0×<Ñ<ØŸ™Ø#ôð ð	õ'ûðûñ@ *Ü-¨j¸'ÕBð *ús[   —'A Á
FÁFÁ6BÂFÂEÂ%AC1Ã1EÃ=AD>Ä>EÅ>FÆF ÆFÆF ÆF ri   )r   r   r   r@   rj   rn   r0   rH   r   r   r   r'   r*   r   r   r   rl   rl   º   sU   … Ø"Ó"Ø#*Ð˜SÓ*ó	7ð$	? ×!3Ñ!3ð $	?¸Ið $	?È$ó $	?ðL-	C 5×#5Ñ#5ð -	C¸$ô -	Cr   rl   Ú_locker_instancesÚfiler   c                 óz  — t        t        t        «      rt        j                  }n�t        t        t        «      r
t        d   }not        t        t        «      r?t        j                  t        «      }|€t        «       xt        t        <   }|j                  }nt        dt        t        «      › d�«      ‚ || |«       y )Nr   úmLOCKER must be a BaseLocker instance, a tuple of lock and unlock functions, or a subclass of BaseLocker, got ú.)
r/   r,   r#   r'   ÚtupleÚ
issubclassrŽ   ÚgetÚ	TypeErrorÚtype)r�   r   ÚlockerÚlocker_instances       r   r'   r'   &  sš   € Ü”fœjÔ)ô —‘ñ ô œ¤Ô&Ü˜A‘Y‰FÜœ¤
Ô+Ü/×3Ñ3´FÓ;ˆOØÐ&ä>D»hÐFÔ!¤&Ñ)¨Oà$×)Ñ)‰FäðäœF“|�n Að'óð ñ 	ˆt�UÕr   c                 óx  — t        t        t        «      rt        j                  }n�t        t        t        «      r
t        d   }not        t        t        «      r?t        j                  t        «      }|€t        «       xt        t        <   }|j                  }nt        dt        t        «      › d�«      ‚ || «       y )Nr   r‘   r’   )
r/   r,   r#   r*   r“   r”   rŽ   r•   r–   r—   )r�   Úunlockerr™   s      r   r*   r*   >  s�   € Ü”fœjÔ)ä=C¿]¹]‰HÜœ¤Ô&Ü˜a‘y‰Häœ¤
Ô+Ü/×3Ñ3´FÓ;ˆOØÐ&ä>D»hÐFÔ!¤&Ñ)¨Oà&×-Ñ-‰HäðäœF“|�n Að'óð ñ 	��r   c                   óÈ   — e Zd ZU dZdZeeeee	j                  f   egef      ed<   edeeee	j                  f   egef   fd„«       Zdedefd„Zdededdfd	„Zdeddfd
„Zy)ÚPosixLockerz1Locker implementation using the `LOCKER` constantNÚ_lockerr   c                 óÊ   — | j                   €>t        t        t        t        t
        j                  f   t        gt        f   t        «      S | j                   €J ‚| j                   S r   )	rž   r   r   r   r0   r   r8   r   r,   )r   s    r   r˜   zPosixLocker.lockerc  sY   € à�|‰|Ð#ô
 Üœe¤C¬¯©Ð$8Ñ9¼3Ð?ÄÐDÑEÄvóð ð —<‘<Ð+Ð+Ð+Ø—<‘<Ðr   r   c                 óž   — t        |t        «      r|S t        |d«      r%t        |j                  «      r|j	                  «       S t        d«      ‚)Nr3   zWArgument 'file_obj' must be an int, an IO object with fileno(), or implement HasFileno.)r/   r0   rx   Úcallabler3   r–   r!   s     r   Ú_get_fdzPosixLocker._get_fds  sG   € Ü˜(¤CÔ(Ø�ä˜ 8Ô,´¸(¿/¹/Ô1JØ—‘Ó(Ð(ô  ð=óð r   r   c                 ó.  — |t         j                  z  r/|t         j                  t         j                  z  z  st	        d«      ‚| j                  |«      }	 | j                  ||«       y # t        $ ru}|j                  t        j                  t        j                  fv r"t        j                  |t        |«      |¬«      |‚t        j                  |t        |«      |¬«      |‚d }~wt        $ r'}t        j                  |t        |«      |¬«      |‚d }~ww xY w)NzcWhen locking in non-blocking mode on POSIX, the SHARED or EXCLUSIVE flag must be specified as well.)r^   rP   )r   rT   rƒ   rV   ÚRuntimeErrorr¢   r˜   rg   r…   ÚEACCESÚEAGAINr
   r[   r†   r\   ÚEOFError)r   r   r   r9   rc   s        r   r'   zPosixLocker.lockƒ  s  € Øœ	×.Ñ.Ò.¸Ü× Ñ ¤9×#6Ñ#6Ñ6ò9ô #ðNóð ð
 —‘˜hÓ'ˆBð!Ø—‘˜B Õ&øÜò %Ø—?‘?¤u§|¡|´U·\±\Ð&BÑBÜ$×2Ñ2Ø!Ü!$ Y£Ø#ôð %ð	%ô %×2Ñ2Ø!Ü!$ Y£Ø#ôð %ð	%ûô
 ò !Ü ×.Ñ.ØÜ  ›^Øôð !ð	!ûð!ús%   ÁA( Á(	DÁ1A0C!Ã!DÃ-"DÄDc                 óf   — | j                  |«      }| j                  |t        j                  «       y r   )r¢   r˜   r   ÚUNBLOCK)r   r   r9   s      r   r*   zPosixLocker.unlock£  s$   € Ø—‘˜hÓ'ˆBØ�K‰K˜œI×-Ñ-Õ.r   )r   r   r   r+   rž   r   r   r   r0   r   r8   r   rj   Úpropertyr˜   ÚPosixFileArgumentr¢   r   r'   r*   r   r   r   r�   r�   \  s·   … Ù?ð ð 	�Ø�e˜C §¡Ð0Ñ1°3Ð7¸Ð<Ñ=ñ
ó 	ð 
ð	 ˜H e¨C°·±Ð,@Ñ&AÀ3Ð%GÈÐ%LÑMò 	 ó 
ð	 ð	Ð$5ð 	¸#ó 	ð 	!Ð!2ð 	!¸9ð 	!Èó 	!ð@	/Ð#4ð 	/¸ô 	/r   r�   c                   ó(   — e Zd ZdZej
                  Zy)ÚFlockLockerz>FlockLocker is a PosixLocker implementation using fcntl.flock.N)r   r   r   r+   ÚfcntlÚflockr,   r   r   r   r­   r­   §  ó   „ ÙLà—‘‰r   r­   c                   ó(   — e Zd ZdZej
                  Zy)ÚLockfLockerz>LockfLocker is a PosixLocker implementation using fcntl.lockf.N)r   r   r   r+   r®   Úlockfr,   r   r   r   r²   r²   ¬  r°   r   r²   c                 ó0   — t         j                  | |«       y r   )Ú_posix_locker_instancer'   )r�   r   s     r   r'   r'   ¸  s   € Ü×#Ñ# D¨%Õ0r   c                 ó.   — t         j                  | «       y r   )rµ   r*   )r�   s    r   r*   r*   »  s   € Ü×%Ñ% dÕ+r   ),r+   r1   Úosr6   r   r   r   r   r   Ú r	   r
   r   r   ÚProtocolr   r   r#   r0   r8   r“   r—   Ú
LockerTyperj   Únamer   r7   r;   r>   r@   rl   ÚdictrŽ   r,   r'   r*   r…   r®   r«   r�   r­   r²   r¯   rµ   r   r   r   ú<module>r½      s8  ðòó 
Û 	Û ÷õ ÷ +Ñ *ð ×Ñ€	ô�6—?‘?ô ôB�V—_‘_ô B÷	"ñ 	"ð àˆe�C˜Ÿ™Ð(Ñ)¨3Ð/°Ð4Ñ5à	ˆ,˜Ð
&Ñ'ààˆÑðñ	€
ð 	Ó à‡7�7ˆd‚?ðØ×$Ñ$ðà	ˆs�H˜VŸY™Y s™^Ñ,¨h°s©mÐ;Ñ	<óð*+Ø˜fŸi™i¨™nÑ-ð+à˜s‘mð+ð 
ó+ôS?�jô S?ôjfC�zô fCñP =A»FÐ�t˜D Ñ,¨jÐ8Ñ9ÓBà€Fð�5×%Ñ%ð ¨ið ¸Dó ð0�U×'Ñ'ð ¨Dô ó0 Ûð ˜e×0Ñ0°%·/±/ÐAÑBÐôI/�jô I/ôV�kô ô
�kô ð �[‰[€Fá(›]Ðð1�5×%Ñ%ð 1¨ið 1¸Dó 1ð,�U×'Ñ'ð ,¨Dô ,r   