Viewing File: /usr/lib/python3.6/site-packages/pip/_vendor/lockfile/__pycache__/__init__.cpython-36.pyc

3

�Pf�$�
@s�dZddlmZddlZddlZddlZddlZddlZeed�sJej	e_
eejd�sbejjej_
dddd	d
ddd
dddddg
ZGdd�de�ZGdd�de�ZGdd�de�ZGdd	�d	e�ZGdd
�d
e�ZGdd�de�ZGdd�de�ZGdd
�d
e�ZGdd�de�ZGdd�de�Zdd�Zd d�Zd!d�Zd"d�Zd(d#d�Zeed$��rjd%d&l m!Z"e"j#Z$nd%d'l m%Z&e&j'Z$e$Z(dS))a
lockfile.py - Platform-independent advisory file locks.

Requires Python 2.5 unless you apply 2.4.diff
Locking is done on a per-thread basis instead of a per-process basis.

Usage:

>>> lock = LockFile('somefile')
>>> try:
...     lock.acquire()
... except AlreadyLocked:
...     print 'somefile', 'is locked already.'
... except LockFailed:
...     print 'somefile', 'can\'t be locked.'
... else:
...     print 'got lock'
got lock
>>> print lock.is_locked()
True
>>> lock.release()

>>> lock = LockFile('somefile')
>>> print lock.is_locked()
False
>>> with lock:
...    print lock.is_locked()
True
>>> print lock.is_locked()
False

>>> lock = LockFile('somefile')
>>> # It is okay to lock twice from the same thread...
>>> with lock:
...     lock.acquire()
...
>>> # Though no counter is kept, so you can't unlock multiple times...
>>> print lock.is_locked()
False

Exceptions:

    Error - base class for other exceptions
        LockError - base class for all locking exceptions
            AlreadyLocked - Another thread or process already holds the lock
            LockFailed - Lock failed for some other reason
        UnlockError - base class for all unlocking exceptions
            AlreadyUnlocked - File was not locked.
            NotMyLock - File was locked but not by the current thread/process
�)�absolute_importN�current_thread�get_name�Error�	LockError�LockTimeout�
AlreadyLocked�
LockFailed�UnlockError�	NotLocked�	NotMyLock�LinkFileLock�
MkdirFileLock�SQLiteFileLock�LockBase�lockedc@seZdZdZdS)rzw
    Base class for other exceptions.

    >>> try:
    ...   raise Error
    ... except Exception:
    ...   pass
    N)�__name__�
__module__�__qualname__�__doc__�rr�/usr/lib/python3.6/__init__.pyrJsc@seZdZdZdS)rz�
    Base class for error arising from attempts to acquire the lock.

    >>> try:
    ...   raise LockError
    ... except Error:
    ...   pass
    N)rrrrrrrrrVsc@seZdZdZdS)rz�Raised when lock creation fails within a user-defined period of time.

    >>> try:
    ...   raise LockTimeout
    ... except LockError:
    ...   pass
    N)rrrrrrrrrbsc@seZdZdZdS)rz�Some other thread/process is locking the file.

    >>> try:
    ...   raise AlreadyLocked
    ... except LockError:
    ...   pass
    N)rrrrrrrrrmsc@seZdZdZdS)r	z�Lock file creation failed for some other reason.

    >>> try:
    ...   raise LockFailed
    ... except LockError:
    ...   pass
    N)rrrrrrrrr	xsc@seZdZdZdS)r
z�
    Base class for errors arising from attempts to release the lock.

    >>> try:
    ...   raise UnlockError
    ... except Error:
    ...   pass
    N)rrrrrrrrr
�sc@seZdZdZdS)rz�Raised when an attempt is made to unlock an unlocked file.

    >>> try:
    ...   raise NotLocked
    ... except UnlockError:
    ...   pass
    N)rrrrrrrrr�sc@seZdZdZdS)rz�Raised when an attempt is made to unlock a file someone else locked.

    >>> try:
    ...   raise NotMyLock
    ... except UnlockError:
    ...   pass
    N)rrrrrrrrr�sc@s>eZdZdd�Zddd�Zdd�Zdd	�Zd
d�Zdd
�ZdS)�_SharedBasecCs
||_dS)N)�path)�selfrrrr�__init__�sz_SharedBase.__init__NcCstd��dS)a�
        Acquire the lock.

        * If timeout is omitted (or None), wait forever trying to lock the
          file.

        * If timeout > 0, try to acquire the lock for that many seconds.  If
          the lock period expires and the file is still locked, raise
          LockTimeout.

        * If timeout <= 0, raise AlreadyLocked immediately if the file is
          already locked.
        zimplement in subclassN)�NotImplemented)r�timeoutrrr�acquire�sz_SharedBase.acquirecCstd��dS)zX
        Release the lock.

        If the file is not locked, raise NotLocked.
        zimplement in subclassN)r)rrrr�release�sz_SharedBase.releasecCs|j�|S)z*
        Context manager support.
        )r)rrrr�	__enter__�sz_SharedBase.__enter__cGs|j�dS)z*
        Context manager support.
        N)r)rZ_excrrr�__exit__�sz_SharedBase.__exit__cCsd|jj|jfS)Nz<%s: %r>)�	__class__rr)rrrr�__repr__�sz_SharedBase.__repr__)N)	rrrrrrr r!r#rrrrr�s
rcsBeZdZdZd�fdd�	Zdd�Zdd	�Zd
d�Zdd
�Z�Z	S)rz.Base class for platform-specific lock classes.TNcs�tt|�j|�tjj|�d|_tj�|_	tj
�|_|rbtj
�}t|dt|��}d|d@|_nd|_tjj|j�}tjj|d|j	|j|jt|j�f�|_||_dS)zi
        >>> lock = LockBase('somefile')
        >>> lock = LockBase('somefile', threaded=False)
        z.lock�identz-%xl���z	%s%s.%s%sN)�superrr�osr�abspathZ	lock_file�socketZgethostnameZhostname�getpid�pid�	threadingr�getattr�hashZtname�dirname�join�unique_namer)rr�threadedr�tr$r/)r"rrr�s 

	zLockBase.__init__cCstd��dS)z9
        Tell whether or not the file is locked.
        zimplement in subclassN)r)rrrr�	is_locked�szLockBase.is_lockedcCstd��dS)zA
        Return True if this object is locking the file.
        zimplement in subclassN)r)rrrr�i_am_locking�szLockBase.i_am_lockingcCstd��dS)zN
        Remove a lock.  Useful if a locking thread failed to unlock.
        zimplement in subclassN)r)rrrr�
break_lockszLockBase.break_lockcCsd|jj|j|jfS)Nz<%s: %r -- %r>)r"rr1r)rrrrr#szLockBase.__repr__)TN)
rrrrrr4r5r6r#�
__classcell__rr)r"rr�s!cOsRtjd|tdd�t|dt�s.|dd�}t|�dkrH|rHd|d<|||�S)Nz1Import from %s module instead of lockfile package�)�
stacklevelr�Tr2)�warnings�warn�DeprecationWarning�
isinstance�str�len)�cls�mod�args�kwdsrrr�
_fl_helpers

rEcOs ddlm}t|jdf|�|�S)z�Factory function provided for backwards compatibility.

    Do not use in new code.  Instead, import LinkLockFile from the
    lockfile.linklockfile module.
    r:)�linklockfilezlockfile.linklockfile)r%rFrE�LinkLockFile)rCrDrFrrrr
s
cOs ddlm}t|jdf|�|�S)z�Factory function provided for backwards compatibility.

    Do not use in new code.  Instead, import MkdirLockFile from the
    lockfile.mkdirlockfile module.
    r:)�
mkdirlockfilezlockfile.mkdirlockfile)r%rHrE�
MkdirLockFile)rCrDrHrrrr%s
cOs ddlm}t|jdf|�|�S)z�Factory function provided for backwards compatibility.

    Do not use in new code.  Instead, import SQLiteLockFile from the
    lockfile.mkdirlockfile module.
    r:)�sqlitelockfilezlockfile.sqlitelockfile)r%rJrEZSQLiteLockFile)rCrDrJrrrr0s
cs��fdd�}|S)aDecorator which enables locks for decorated function.

    Arguments:
     - path: path for lockfile.
     - timeout (optional): Timeout for acquiring lock.

     Usage:
         @locked('/var/run/myname', timeout=0)
         def myname(...):
             ...
    cstj�����fdd��}|S)Nc
s.t��d�}|j�z
�||�S|j�XdS)N)r)�FileLockrr)rC�kwargs�lock)�funcrrrr�wrapperHs

z&locked.<locals>.decor.<locals>.wrapper)�	functools�wraps)rNrO)rr)rNr�decorGszlocked.<locals>.decorr)rrrRr)rrrr;s
�linkr:)rF)rH)N))rZ
__future__rrPr'r)r,r;�hasattrZ
currentThreadrZThreadZgetNamer�__all__�	Exceptionrrrrr	r
rr�objectrrrEr
rrrr%rFZ_llfrGZLockFilerHZ_mlfrIrKrrrr�<module>4sF
-:

Back to Directory File Manager
<