3 Pf @srddlmZmZddlZddlZyeWnek 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 Cstj||||t|j|_t|j|_tjdkrdddl}|j\}}t j |t j |~~|t_ddl }|j tj|_|jj}y|jdWn|jk rYn$X|jjddl} | jt 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$/usr/lib/python3.6/sqlitelockfile.pyr s(        zSQLiteLockFile.__init__cCsH|dk r |n|j}tj}|dk r2|dkr2||7}|dkr@d}n|dkrNd}n|d}|jj}x|js|jd|j|jf|jj|jd|jf|j }t |dkr|jd|jf|jjqdSn(|jd|jf|j }t |dkrdS|dk r6tj|kr6|dkr(t d|j nt d |j tj|qbWdS) Nrg? z;insert into locks (lock_file, unique_name) values (?, ?)z*select * from locks where unique_name = ?rz(delete from locks where unique_name = ?z&Timeout waiting to acquire lock for %sz%s is already locked)rtimerr is_lockedrr rrfetchalllenrrr Zsleep)rrZend_timewaitrrowsrrr acquire5sD          zSQLiteLockFile.acquirecCs\|jstd|j|js4td|j|jf|jj}|j d|jf|jj dS)Nz%s is not lockedz#%s is locked, but not by me (by %s)z(delete from locks where unique_name = ?) r#rr i_am_lockingrr_who_is_lockingrrrr)rrrrr releasets  zSQLiteLockFile.releasecCs&|jj}|jd|jf|jdS)Nz2select unique_name from locks where lock_file = ?r)rrrr Zfetchone)rrrrr r*s  zSQLiteLockFile._who_is_lockingcCs*|jj}|jd|jf|j}| S)Nz(select * from locks where lock_file = ?)rrrr r$)rrr'rrr r#s   zSQLiteLockFile.is_lockedcCs*|jj}|jd|j|jf|j S)Nz?select * from locks where lock_file = ? and unique_name = ?)rrrr rr$)rrrrr r)s zSQLiteLockFile.i_am_lockingcCs(|jj}|jd|jf|jjdS)Nz&delete from locks where lock_file = ?)rrrr r)rrrrr 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