U ùýUV ã@sdddlmZmZddlZddlZddlZddlZddlmZm Z m Z m Z m Z m Z Gdd„deƒZdS)é)Úabsolute_importÚdivisionNé)ÚLockBaseÚ LockFailedÚ NotLockedÚ NotMyLockÚ LockTimeoutÚ AlreadyLockedc@sDeZdZdZddd„Zddd„Zdd „Zd d „Zd d „Zdd„Z dS)Ú MkdirLockFilez"Lock file by creating a directory.TNcCs6t ||||¡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)ÚselfrZthreadedÚtimeout©rú/mkdirlockfile.pyr s þÿzMkdirLockFile.__init__cCs|dk r |n|j}t ¡}|dk r2|dkr2||7}|dkr@d}ntd|dƒ}zt |j¡Wn”tk ròt ¡d}|j t j kràtj   |j ¡ršYdS|dk rÔt ¡|krÔ|dkrÆtd|j ƒ‚ntd|j ƒ‚t |¡ntd|jƒ‚YqNXt|j dƒ ¡dSqNdS) Nrgš™™™™™¹?é rz&Timeout waiting to acquire lock for %sz%s is already lockedzfailed to create %sÚwb)rÚtimeÚmaxr ÚmkdirrÚOSErrorÚsysÚexc_infoÚerrnoZEEXISTrÚexistsrr r ÚsleeprÚopenÚclose)rrZend_timeÚwaitÚerrrrrÚacquires4  þÿ zMkdirLockFile.acquirecCsP| ¡std|jƒ‚ntj |j¡s4td|jƒ‚t |j¡t |j ¡dS)Nz%s is not lockedz%s is locked, but not by me) Ú is_lockedrrr r rrÚunlinkÚrmdirr©rrrrÚreleaseAs  zMkdirLockFile.releasecCstj |j¡S©N)r rr rr*rrrr'IszMkdirLockFile.is_lockedcCs| ¡otj |j¡Sr,)r'r rr rr*rrrÚ i_am_lockingLs ÿzMkdirLockFile.i_am_lockingcCsFtj |j¡rBt |j¡D]}t tj |j|¡¡qt |j¡dSr,)r rr rÚlistdirr(rr))rÚnamerrrÚ break_lockPszMkdirLockFile.break_lock)TN)N) Ú__name__Ú __module__Ú __qualname__Ú__doc__r r&r+r'r-r0rrrrr s &r )Z __future__rrrr rrÚrrrrr r r rrrrÚs