File: //usr/lib/python3/dist-packages/filelock/__pycache__/_api.cpython-310.pyc
o
;�b� � @ s� d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZm Z d dl
mZ d dlm
Z
d dlmZ ddlmZ e�d �ZG d
d� d�ZG dd
� d
eej�Zd
dgZdS )� )�annotationsN)�ABC�abstractmethod)�Lock)�
TracebackType)�Any� )�Timeout�filelockc @ s. e Zd ZdZddd�Zddd �Zddd�ZdS )�AcquireReturnProxyzDA context aware object that will release the lock file when exiting.�lock�BaseFileLock�return�Nonec C s
|| _ d S �N�r )�selfr � r �//usr/lib/python3/dist-packages/filelock/_api.py�__init__ s
zAcquireReturnProxy.__init__c C � | j S r r �r r r r � __enter__ s zAcquireReturnProxy.__enter__�exc_type�type[BaseException] | None� exc_value�BaseException | None� traceback�TracebackType | Nonec C s | j �� d S r )r �release�r r r r r r r �__exit__ s zAcquireReturnProxy.__exit__N)r r
r r �r r
�r r r r r r r r )�__name__�
__module__�__qualname__�__doc__r r r! r r r r r s
r c @ s� e Zd ZdZd3d4d d
�Zed5dd
��Zed6dd��Zejd7dd��Ze d8dd��Z
e d8dd��Zed9dd��Z d:dd�d;d!d"�Z
d<d=d%d&�Zd>d'd(�Zd?d/d0�Zd8d1d2�ZdS )@r
z+Abstract base class for a file lock object.���� lock_file�str | os.PathLike[Any]�timeout�floatr r c C s* t �|�| _d| _|| _t� | _d| _dS )a�
Create a new lock object.
:param lock_file: path to the file
:param timeout: default timeout when acquiring the lock. It will be used as fallback value in the acquire
method, if no timeout value (``None``) is given. If you want to disable the timeout, set it to a negative value.
A timeout of 0 means, that there is exactly one attempt to acquire the file lock.
Nr )�os�fspath�
_lock_file�
_lock_file_fdr+ r �_thread_lock�
_lock_counter)r r) r+ r r r r * s
zBaseFileLock.__init__�strc C r )z:return: path to the lock file)r/ r r r r r) D s zBaseFileLock.lock_filec C r )zU
:return: the default timeout value
.. versionadded:: 2.0.0
)�_timeoutr r r r r+ I s zBaseFileLock.timeout�value�float | strc C s t |�| _dS )zX
Change the default timeout value.
:param value: the new value
N)r, r4 )r r5 r r r r+ R s c C � t �)zbIf the file lock could be acquired, self._lock_file_fd holds the file descriptor of the lock file.��NotImplementedErrorr r r r �_acquire[ � zBaseFileLock._acquirec C r7 )z6Releases the lock and sets self._lock_file_fd to None.r8 r r r r �_release` r; zBaseFileLock._release�boolc C s
| j duS )z�
:return: A boolean indicating if the lock file is holding the lock currently.
.. versionchanged:: 2.0.0
This was previously a method and is now a property.
N)r0 r r r r � is_lockede s
zBaseFileLock.is_lockedN皙�����?)�poll_intervall�float | None�
poll_intervalr@ r c C s� |du r| j }|durd}tj|tdd� |}| j� | jd7 _W d � n1 s,w Y t| �}| j}t� � }z[ | j� | j
sPt�d||� | �
� W d � n1 sZw Y | j
rjt�d||� n,d | krxt� � | k r�n nt�d
||� t| j��d}t�||||� t�|� q>W n$ ty� | j� td | jd �| _W d � � 1 s�w Y � w t| d�S )
az
Try to acquire the file lock.
:param timeout: maximum wait time for acquiring the lock, ``None`` means use the default :attr:`~timeout` is and
if ``timeout < 0``, there is no timeout and this method will block until the lock could be acquired
:param poll_interval: interval of trying to acquire the lock file
:param poll_intervall: deprecated, kept for backwards compatibility, use ``poll_interval`` instead
:raises Timeout: if fails to acquire lock within the timeout period
:return: a context object that will unlock the file when the context is exited
.. code-block:: python
# You can use this method in the context manager (recommended)
with lock.acquire():
pass
# Or use an equivalent try-finally construct:
lock.acquire()
try:
pass
finally:
lock.release()
.. versionchanged:: 2.0.0
This method returns now a *proxy* object instead of *self*,
so that it can be used in a with statement without side effects.
Nz+use poll_interval instead of poll_intervall� )�
stacklevelr Tz#Attempting to acquire lock %s on %szLock %s acquired on %sr z"Timeout on acquiring lock %s on %sz2Lock %s not acquired on %s, waiting %s seconds ...r )r+ �warnings�warn�DeprecationWarningr1 r2 �idr/ �time� monotonicr>