
    h                     @   S r SSKrSrS r\R                  S:X  a  SSKrSSKJrJrJ	r	J
r
JrJrJrJrJr  SSKJrJrJr  SrSrS	r\" \5      \" \5      :w  a  \rO\r\r " S
 S\5      r " S S\	5      r " S S\5      r\" \5      r\
" S5      r\R<                  r\\l        \\\\\\/\l         \RB                  r!\\!l        \\\\\/\!l         S r"S r#g SSK$r$\$R(                  r\$R*                  r\$R,                  rS r"S r#g! \%\&4 a    S=r=rrS r"S r# gf = f)am  
Portable file locking utilities.

Based partially on an example by Jonathan Feignberg in the Python
Cookbook [1] (licensed under the Python Software License) and a ctypes port by
Anatoly Techtonik for Roundup [2] (license [3]).

[1] https://code.activestate.com/recipes/65203/
[2] https://sourceforge.net/p/roundup/code/ci/default/tree/roundup/backends/portalocker.py  # NOQA
[3] https://sourceforge.net/p/roundup/code/ci/default/tree/COPYING.txt

Example Usage::

    >>> from django.core.files import locks
    >>> with open('./file', 'wb') as f:
    ...     locks.lock(f, locks.LOCK_EX)
    ...     f.write('Django')
    N)LOCK_EXLOCK_SHLOCK_NBlockunlockc                 H    [        U S5      (       a  U R                  5       $ U $ )zCGet a filedescriptor from something which could be a file or an fd.fileno)hasattrr	   fs    I/var/www/html/env/lib/python3.13/site-packages/django/core/files/locks.py_fdr      s     H--188:414    nt)	POINTER	StructureUnionWinDLLbyrefc_int64c_ulongc_void_psizeof)BOOLDWORDHANDLE      c                   $    \ rS rSrS\4S\4/rSrg)_OFFSET:   Offset
OffsetHigh N)__name__
__module____qualname____firstlineno__r   _fields___static_attributes__r$   r   r   r    r    :   s    u%e'<=r   r    c                   *    \ rS rSrS/rS\4S\4/rSrg)_OFFSET_UNION=   _offsetPointerr$   N)	r%   r&   r'   r(   _anonymous_r    PVOIDr)   r*   r$   r   r   r,   r,   =   s     k(9e*<=r   r,   c                   6    \ rS rSrS/rS\4S\4S\4S\4/rSr	g)
OVERLAPPEDA   _offset_unionInternalInternalHighhEventr$   N)
r%   r&   r'   r(   r0   	ULONG_PTRr,   r   r)   r*   r$   r   r   r3   r3   A   s1    &'#Y'm,v	
r   r3   kernel32c           
          [         R                  " [        U 5      5      n[        5       n[	        X!SSS[        U5      5      n[        U5      $ Nr   l      )msvcrtget_osfhandler   r3   
LockFileExr   bool)r   flagshfile
overlappedrets        r   r   r   U   s>    $$SV,\
q!Zz9JKCyr   c           	          [         R                  " [        U 5      5      n[        5       n[	        USSS[        U5      5      n[        U5      $ r<   )r=   r>   r   r3   UnlockFileExr   r@   )r   rB   rC   rD   s       r   r   r   [   s>    $$SV,\
5!Q
E*4EFCyr   c                 f     [         R                  " [        U 5      U5        g! [         a     gf = f)NTF)fcntlflockr   BlockingIOErrorr   rA   s     r   r   r   w   s.    CFE*" s    # 
00c                 `    [         R                  " [        U 5      [         R                  5        gNT)rH   rI   r   LOCK_UNr   s    r   r   r   ~   s    KKA.r   c                     g)NFr$   rK   s     r   r   r   m   s    r   c                     grM   r$   r   s    r   r   r   q   s    r   )'__doc__os__all__r   namer=   ctypesr   r   r   r   r   r   r   r   r   ctypes.wintypesr   r   r   r   r   r   r9   r1   r    r,   r3   LPOVERLAPPEDr:   r?   restypeargtypesrF   r   r   rH   ImportErrorAttributeErrorr$   r   r   <module>r\      sa  & 

=5
 77d?
 
 
 43GGG g&**		E>) >> >
Y 
 :&L j!H$$JJ!5%|LJ((LL#UE5,GL------ 		- ( &''''G		s   (D DD