U ��UV � @ sd d dl mZmZ d dlZd dlZd dlZd dlZddlmZm Z m Z mZmZm Z G dd� de�ZdS )� )�absolute_import�divisionN� )�LockBase� LockFailed� NotLocked� NotMyLock�LockTimeout� AlreadyLockedc @ sD e Zd ZdZddd�Zddd�Zdd � Zd d� Zdd � Zdd� Z dS )� MkdirLockFilez"Lock file by creating a directory.TNc C s6 t �| |||� tj�| jd| j| j| jf �| _ dS )zs >>> lock = MkdirLockFile('somefile') >>> lock = MkdirLockFile('somefile', threaded=False) z%s.%s%sN) r �__init__�os�path�join� lock_fileZhostnameZtname�pid�unique_name)�selfr Zthreaded�timeout� r �/mkdirlockfile.pyr s ��zMkdirLockFile.__init__c C s |d k r|n| j }t�� }|d k r2|dkr2||7 }|d kr@d}ntd|d �}zt�| j� W n� tk r� t�� d }|j t j kr�tj�| j �r�Y d S |d k r�t�� |kr�|dkr�td| j ��ntd| j ��t�|� ntd| j ��Y qNX t| j d��� d S qNd S ) Nr g�������?� r z&Timeout waiting to acquire lock for %sz%s is already lockedzfailed to create %s�wb)r �time�maxr �mkdirr �OSError�sys�exc_info�errnoZEEXISTr �existsr r r �sleepr �open�close)r r Zend_time�wait�errr r r �acquire s4 ��zMkdirLockFile.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 r r r �unlink�rmdirr �r r r r �releaseA s zMkdirLockFile.releasec C s t j�| j�S �N)r r r r r* r r r r'