3
Pf\
@ sP d dl mZ d dlZd dlZddlmZmZmZmZm Z m
Z
G dd deZdS ) )absolute_importN )LockBase
LockFailed NotLocked NotMyLockLockTimeout
AlreadyLockedc @ s: e Zd ZdZd
ddZdd Zdd Zd d
Zdd ZdS )LinkLockFilezLock access to a file using atomic property of link(2).
>>> lock = LinkLockFile('somefile')
>>> lock = LinkLockFile('somefile', threaded=False)
Nc C s" yt | jdj W n" tk
r6 td| j Y nX |d k rD|n| j}tj }|d k rj|dkrj||7 }xytj| j| j W n t
k
r tj| jj}|dkrd S |d k rtj |krtj
| j |dkrtd| j ntd| j tj|d k r
|d pd Y qlX d S qlW d S ) Nwbzfailed to create %sr z&Timeout waiting to acquire lock for %sz%s is already locked
g?)openunique_namecloseIOErrorr timeouttimeoslink lock_fileOSErrorstatst_nlinkunlinkr pathr Zsleep)selfr Zend_timeZnlinks r "/usr/lib/python3.6/linklockfile.pyacquire s0
$zLinkLockFile.acquirec C sP | j std| j ntjj| js4td| j tj| j tj| j d S )Nz%s is not lockedz%s is locked, but not by me) is_lockedr r r existsr r r r )r r r r release7 s zLinkLockFile.releasec C s t jj| jS )N)r r r! r )r r r r r ? s zLinkLockFile.is_lockedc C s( | j o&tjj| jo&tj| jjdkS )Nr )r r r r! r r r )r r r r i_am_lockingB s zLinkLockFile.i_am_lockingc C s t jj| jrt j| j d S )N)r r r! r r )r r r r
break_lockG s zLinkLockFile.break_lock)N) __name__
__module____qualname____doc__r r" r r# r$ r r r r r
s
&r
)Z
__future__r r r r r r r r r r
r r r r