3 ÝPf ã@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.TNcCs6tj||||ƒ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)ÚselfrZthreadedÚtimeout©rú#/usr/lib/python3.6/mkdirlockfile.pyr s  zMkdirLockFile.__init__c Cs|dk r |n|j}tjƒ}|dk r2|dkr2||7}|dkr@d}ntd|dƒ}x¼ytj|jƒWn’tk ròtjƒd}|j t j kràtj j |j ƒršdS|dk rÔtjƒ|krÔ|dkrÆtd|j ƒ‚ntd|j ƒ‚tj|ƒntd|jƒ‚YqPXt|j dƒjƒdSqPWdS) 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 ZsleeprÚopenÚclose)rrZend_timeÚwaitÚerrrrrÚacquires2     zMkdirLockFile.acquirecCsP|jƒstd|jƒ‚ntjj|jƒs4td|jƒ‚tj|jƒtj|j ƒdS)Nz%s is not lockedz%s is locked, but not by me) Ú is_lockedrrr r rrÚunlinkÚrmdirr)rrrrÚreleaseAs  zMkdirLockFile.releasecCstjj|jƒS)N)r rr r)rrrrr&IszMkdirLockFile.is_lockedcCs|jƒotjj|jƒS)N)r&r rr r)rrrrÚ i_am_lockingLszMkdirLockFile.i_am_lockingcCsJtjj|jƒrFx*tj|jƒD]}tjtjj|j|ƒƒqWtj|jƒdS)N)r rr rÚlistdirr'rr()rÚnamerrrÚ break_lockPszMkdirLockFile.break_lock)TN)N) Ú__name__Ú __module__Ú __qualname__Ú__doc__r r%r)r&r*r-rrrrr s &r )Z __future__rrrr rrÚrrrrr r r rrrrÚs