��UV\ � @ sp 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 m Z Gd d � d e � Z d S)� )�absolute_importN� )�LockBase� LockFailed� NotLocked� NotMyLock�LockTimeout� AlreadyLockedc @ sU e Z d Z d Z d d d � Z d d � Z d d � Z d d � Z d d � Z d S) �LinkLockFilez�Lock access to a file using atomic property of link(2). >>> lock = LinkLockFile('somefile') >>> lock = LinkLockFile('somefile', threaded=False) Nc C st y t | j d � j � Wn% t k rA t d | j � � Yn X| d k rT | n | j } t j � } | d k r� | d k r� | | 7} x� y t j | j | j � Wn� t k rgt j | j � j } | d k r� d S| d k r@t j � | k r@t j | j � | d k r-t d | j � � n t d | j � � t j | d k r\| d p_d � Yq� Xd Sq� Wd 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 �end_timeZnlinks� r �/linklockfile.py�acquire s0 (zLinkLockFile.acquirec C sn | j � s"