��UV � @ s� d d l m Z m Z d d l Z d d l 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_import�divisionN� )�LockBase� LockFailed� NotLocked� NotMyLock�LockTimeout� AlreadyLockedc @ sg e Z d Z d Z d d d d � Z d d d � Z d d � Z d d � Z d d � Z d d � Z d S)� MkdirLockFilez"Lock file by creating a directory.TNc C sK t j | | | | � t j j | j d | j | j | j f � | _ d S)zs >>> lock = MkdirLockFile('somefile') >>> lock = MkdirLockFile('somefile', threaded=False) z%s.%s%sN) r �__init__�os�path�join� lock_file�hostnameZtname�pid�unique_name)�selfr Zthreaded�timeout� r �/mkdirlockfile.pyr s zMkdirLockFile.__init__c C sp | d k r | n | j } t j � } | d k rI | d k rI | | 7} | d k r^ d } n t d | d � } x� y t j | j � Wn� t k rMt j � d } | j t j k r6t j j | j � r� d S| d k r&t j � | k r&| d k rt d | j � � n t d | j � � t j | � n t d | j � � Yqt Xt | j d � j � d Sqt Wd 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�errno�EEXISTr �existsr r r �sleepr �open�close)r r �end_time�wait�errr r r �acquire s2 zMkdirLockFile.acquirec C sn | j � s"