3 ÝPf ã @ 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 j| |||ƒ tjj| 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 ú#/usr/lib/python3.6/mkdirlockfile.pyr s zMkdirLockFile.__init__c C s |d k r|n| j }tjƒ }|d k r2|dkr2||7 }|d kr@d}ntd|d ƒ}x¼ytj| jƒ W n’ tk rò tjƒ d }|j t j kràtjj| j ƒršd S |d k rÔtjƒ |krÔ|dkrÆtd| j ƒ‚ntd| j ƒ‚tj|ƒ ntd| j ƒ‚Y qPX t| j dƒjƒ d S qPW d 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 Zsleepr ÚopenÚclose)r r Zend_timeÚwaitÚerrr r r Úacquire s2 zMkdirLockFile.acquirec C sP | j ƒ std| j ƒ‚ntjj| jƒs4td| j ƒ‚tj| jƒ tj| 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 jj| jƒS )N)r r r r )r r r r r&