U UV8 @sLddlmZddlZddlZddlmZmZmZmZm Z GdddeZ dS))absolute_importN)LockBase NotLocked NotMyLock LockTimeout AlreadyLockedc@sDeZdZdZdddZdddZdd Zd d Zd d ZddZ dS)SymlinkLockFilez'Lock access to a file using symlink(2).TNcCs(t||||tj|jd|_dS)Nr)r__init__ospathsplit unique_name)selfr Zthreadedtimeoutr/symlinklockfile.pyr szSymlinkLockFile.__init__cCs|dk r |n|j}t}|dk r2|dkr2||7}zt|j|jWnvtk r|rdYdS|dk rt|kr|dkrtd|j nt d|j t |dk r|dndYq2XdSq2dS)Nrz&Timeout waiting to acquire lock for %sz%s is already locked g?) rtimer symlinkr lock_fileOSError i_am_lockingrr rsleep)rrZend_timerrracquires& zSymlinkLockFile.acquirecCs>|std|jn|s.td|jt|jdS)Nz%s is not lockedz%s is locked, but not by me) is_lockedrr rrr unlinkrrrrrrelease6s zSymlinkLockFile.releasecCstj|jSN)r r islinkrrrrrr=szSymlinkLockFile.is_lockedcCs tj|jot|j|jkSr)r r r rreadlinkrrrrrr@szSymlinkLockFile.i_am_lockingcCstj|jrt|jdSr)r r r rrrrrr break_lockDszSymlinkLockFile.break_lock)TN)N) __name__ __module__ __qualname____doc__r rrrrr"rrrrr s  #r ) Z __future__rr rrrrrrr rrrrs