U UV@srddlmZmZddlZddlZzeWnek r@eZYnXddlm 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|_tjdkrdddl}|\}}t |t |~~|t_ddl }| tj|_|j}z|dWn|jk rYn$X|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 testdbtempfileZmkstemposcloseunlinksqlite3Zconnect connectioncursorexecuteZOperationalErrorcommitatexitregister) selfpathZthreadedtimeoutrZ_fdrrcrr/sqlitelockfile.pyr s(        zSQLiteLockFile.__init__cCsD|dk r |n|j}t}|dk r2|dkr2||7}|dkr@d}n|dkrNd}n|d}|j}|s|d|j|jf|j|d|jf| }t |dkr|d|jf|jqdSn(|d|jf| }t |dkrdS|dk r4t|kr4|dkr&t d|j nt d |j t|q`dS) Nrg? z;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)rtimerr is_lockedrr rrfetchalllenrrr sleep)rrZend_timewaitrrowsrrr acquire5sL       zSQLiteLockFile.acquirecCs\|std|j|s4td|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_lockingrrrrrrrrr releasets  zSQLiteLockFile.releasecCs&|j}|d|jf|dS)Nz2select unique_name from locks where lock_file = ?r)rrrr Zfetchoner-rrr r,s  zSQLiteLockFile._who_is_lockingcCs*|j}|d|jf|}| S)Nz(select * from locks where lock_file = ?)rrrr r%)rrr)rrr r$s  zSQLiteLockFile.is_lockedcCs*|j}|d|j|jf| S)Nz?select * from locks where lock_file = ? and unique_name = ?)rrrr rr%r-rrr r+s   zSQLiteLockFile.i_am_lockingcCs(|j}|d|jf|jdS)Nz&delete from locks where lock_file = ?)rrrr rr-rrr break_locks  zSQLiteLockFile.break_lock)TN)N) __name__ __module__ __qualname____doc__rr r*r.r,r$r+r/rrrr r s " ? r )Z __future__rrr#rr NameErrorstrrrrrr r rrrr s