U ��UV\ � @ sP d dl mZ d dlZd dlZddlmZmZmZmZm Z m Z G dd� de�ZdS )� )�absolute_importN� )�LockBase� LockFailed� NotLocked� NotMyLock�LockTimeout� AlreadyLockedc @ s: e Zd ZdZd dd�Zdd� Zdd� Zd d � Zdd� ZdS )�LinkLockFilez�Lock access to a file using atomic property of link(2). >>> lock = LinkLockFile('somefile') >>> lock = LinkLockFile('somefile', threaded=False) Nc C s zt | jd��� W n" tk r6 td| j ��Y nX |d k rD|n| j}t�� }|d k rj|dkrj||7 }zt�| j| j � W n� t k �r t�| j�j}|dkr�Y d S |d k r�t�� |kr�t� | j� |dkr�td| j ��ntd| j ��t�|d k �r |d �pd� Y qjX d S qjd S ) N�wbzfailed to create %sr � z&Timeout waiting to acquire lock for %sz%s is already locked� g�������?)�open�unique_name�close�IOErrorr �timeout�time�os�link� lock_file�OSError�stat�st_nlink�unlinkr �pathr �sleep)�selfr Zend_timeZnlinks� r �/linklockfile.py�acquire s2 ��$zLinkLockFile.acquirec C sP | � � std| j ��ntj�| j�s4td| j ��t�| j� t�| j� d S )Nz%s is not lockedz%s is locked, but not by me) � is_lockedr r r �existsr r r r �r r r r �release7 s zLinkLockFile.releasec C s t j�| j�S �N)r r r"