o UV@spddlmZmZddlZddlZzeWn eyeZYnwddlm Z m Z m Z m Z m Z Gddde ZdS))absolute_importdivisionN)LockBase NotLocked NotMyLock LockTimeout AlreadyLockedc@sPeZdZdZdZdddZdddZdd Zd d Zd d Z ddZ ddZ dS)SQLiteLockFilezDemonstrate SQL-based locking.NTc Cst||||t|j|_t|j|_tjdur2ddl}|\}}t |t |~~|t_ddl }| tj|_|j}z|dWn |jyTYdSw|jddl} | t j tjdS)zu >>> lock = SQLiteLockFile('somefile') >>> lock = SQLiteLockFile('somefile', threaded=False) NrzGcreate table locks( lock_file varchar(32), unique_name varchar(32)))r__init__unicode lock_file unique_namer testdbtempfilemkstemposcloseunlinksqlite3connect connectioncursorexecuteOperationalErrorcommitatexitregister) selfpaththreadedtimeoutr_fdrrcrr$9/usr/lib/python3/dist-packages/lockfile/sqlitelockfile.pyr s*        zSQLiteLockFile.__init__cCs8|dur|n|j}t}|dur|dkr||7}|dur d}n |dkr'd}n|d}|j} |sf|d|j|jf|j|d|jf| }t |dkrd|d|jf|jndS|d|jf| }t |dkrzdS|durt|kr|dkrt d |j t d |j t|q1) Nrg? Tz;insert into locks (lock_file, unique_name) values (?, ?)z*select * from locks where unique_name = ?r(delete from locks where unique_name = ?z&Timeout waiting to acquire lock for %sz%s is already locked)r!timerr is_lockedrr rrfetchalllenrrr sleep)rr!end_timewaitrrowsr$r$r%acquire5sP       zSQLiteLockFile.acquirecCs\|s td|j|std|j|f|j}| d|jf|j dS)Nz%s is not lockedz#%s is locked, but not by me (by %s)r') r)rr i_am_lockingrr_who_is_lockingrrrrrrr$r$r%releasets  zSQLiteLockFile.releasecCs&|j}|d|jf|dS)Nz2select unique_name from locks where lock_file = ?r)rrrr fetchoner3r$r$r%r2s  zSQLiteLockFile._who_is_lockingcCs*|j}|d|jf|}| S)Nz(select * from locks where lock_file = ?)rrrr r*)rrr/r$r$r%r)s zSQLiteLockFile.is_lockedcCs*|j}|d|j|jf| S)Nz?select * from locks where lock_file = ? and unique_name = ?)rrrr rr*r3r$r$r%r1s   zSQLiteLockFile.i_am_lockingcCs(|j}|d|jf|jdS)Nz&delete from locks where lock_file = ?)rrrr rr3r$r$r% break_locks zSQLiteLockFile.break_lock)TN)N) __name__ __module__ __qualname____doc__rr r0r4r2r)r1r6r$r$r$r%r s  "?  r ) __future__rrr(rr NameErrorstrrrrrr r r$r$r$r%s