U
    UV8
                     @   sL   d dl mZ d dlZd dlZddlmZmZmZmZm	Z	 G dd deZ
dS )    )absolute_importN   )LockBase	NotLocked	NotMyLockLockTimeoutAlreadyLockedc                   @   sD   e Zd ZdZdddZdddZdd	 Zd
d Zdd Zdd Z	dS )SymlinkLockFilez'Lock access to a file using symlink(2).TNc                 C   s(   t | ||| tj| jd | _d S )Nr   )r   __init__ospathsplitunique_name)selfr   Zthreadedtimeout r   7lib/python3.8/site-packages/lockfile/symlinklockfile.pyr
      s    zSymlinkLockFile.__init__c                 C   s   |d k	r|n| j }t }|d k	r2|dkr2||7 }zt| j| j W nv tk
r   |  rdY d S |d k	rt |kr|dkrtd| j	 nt
d| j	 t|d k	r|d nd Y q2X d S q2d S )Nr   z&Timeout waiting to acquire lock for %sz%s is already locked
   g?)r   timer   symlinkr   	lock_fileOSErrori_am_lockingr   r   r   sleep)r   r   Zend_timer   r   r   acquire   s&     zSymlinkLockFile.acquirec                 C   s>   |   std| j n|  s.td| j t| j d S )Nz%s is not lockedz%s is locked, but not by me)	is_lockedr   r   r   r   r   unlinkr   r   r   r   r   release6   s
    zSymlinkLockFile.releasec                 C   s   t j| jS N)r   r   islinkr   r   r   r   r   r   =   s    zSymlinkLockFile.is_lockedc                 C   s    t j| jot | j| jkS r   )r   r   r    r   readlinkr   r   r   r   r   r   @   s    zSymlinkLockFile.i_am_lockingc                 C   s   t j| jrt | j d S r   )r   r   r    r   r   r   r   r   r   
break_lockD   s    zSymlinkLockFile.break_lock)TN)N)
__name__
__module____qualname____doc__r
   r   r   r   r   r"   r   r   r   r   r	   
   s   

#r	   )Z
__future__r   r   r    r   r   r   r   r   r	   r   r   r   r   <module>   s   