
    Evg                     2   d Z ddlZdZd Zej        dk    rddlZddlmZmZm	Z	m
Z
mZmZmZmZmZ ddlmZmZmZ dZdZd	Z ee           ee          k    reZneZeZ G d
 de          Z G d de	          Z G d de          Z ee          Z e
d          Zej        Zee_        eeeeeege_         ej!        Z!ee!_        eeeeege!_         d Z"d Z#dS 	 ddl$Z$e$j        Ze$j        Ze$j        Zd Z"d Z#dS # e%e&f$ r dxZxZZd Z"d Z#Y dS w xY w)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                 N    t          | d          r|                                 n| S )zCGet a filedescriptor from something which could be a file or an fd.fileno)hasattrr	   fs    T/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/django/core/files/locks.py_fdr      s#     H--4188:::14    nt)	POINTER	StructureUnionWinDLLbyrefc_int64c_ulongc_void_psizeof)BOOLDWORDHANDLE      c                       e Zd ZdefdefgZdS )_OFFSETOffset
OffsetHighN)__name__
__module____qualname__r   _fields_ r   r   r    r    :   s"        u%e'<=r   r    c                   $    e Zd ZdgZdefdefgZdS )_OFFSET_UNION_offsetPointerN)r#   r$   r%   _anonymous_r    PVOIDr&   r'   r   r   r)   r)   =   s)         k(9e*<=r   r)   c                   0    e Zd ZdgZdefdefdefdefgZdS )
OVERLAPPED_offset_unionInternalInternalHighhEventN)r#   r$   r%   r,   	ULONG_PTRr)   r   r&   r'   r   r   r/   r/   A   s=        &'#Y'm,v	
r   r/   kernel32c           
          t          j        t          |                     }t                      }t	          ||dddt          |                    }t          |          S Nr   l      )msvcrtget_osfhandler   r/   
LockFileExr   bool)r   flagshfile
overlappedrets        r   r   r   U   sL    $SVV,,\\
q!Zz9J9JKKCyyr   c           	          t          j        t          |                     }t                      }t	          |dddt          |                    }t          |          S r7   )r8   r9   r   r/   UnlockFileExr   r;   )r   r=   r>   r?   s       r   r   r   [   sJ    $SVV,,\\
5!Q
E*4E4EFFCyyr   c                 n    	 t          j        t          |           |           dS # t          $ r Y dS w xY w)NTF)fcntlflockr   BlockingIOErrorr   r<   s     r   r   r   w   sF    CFFE***t"   uus   "& 
44c                 ^    t          j        t          |           t           j                   dS NT)rC   rD   r   LOCK_UNr   s    r   r   r   ~   s!    KA...4r   c                     dS )NFr'   rF   s     r   r   r   m   s    5r   c                     dS rH   r'   r   s    r   r   r   q   s    4r   )'__doc__os__all__r   namer8   ctypesr   r   r   r   r   r   r   r   r   ctypes.wintypesr   r   r   r   r   r   r4   r-   r    r)   r/   LPOVERLAPPEDr5   r:   restypeargtypesrA   r   r   rC   ImportErrorAttributeErrorr'   r   r   <module>rW      s   & 
			
=5 5 5
 7d??MMM
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 4333333333GGG vg&&****			E> > > > >) > > >> > > > > > > >
 
 
 
 
Y 
 
 
 7:&&L vj!!H$JJ!5%|LJ(LL#UE5,GL      --- 	 	 		 	 	 	 	- (   &''''G	 	 		 	 	 	 	 	s   C? ?DD