
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
ÝPf‚  ã               @   sr   d dl mZmZ d dlZd dlZye W n ek
r@   eZY nX ddlm	Z	m
Z
mZmZmZ G dd„ de	ƒZdS )é    )Úabsolute_importÚdivisionNé   )ÚLockBaseÚ	NotLockedÚ	NotMyLockÚLockTimeoutÚAlreadyLockedc               @   sP   e Zd ZdZdZddd„Zddd„Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚSQLiteLockFilezDemonstrate SQL-based locking.NTc       
      C   sÐ   t j| |||ƒ t| jƒ| _t| jƒ| _tjdkrdddl}|jƒ \}}t	j
|ƒ t	j|ƒ ~~|t_ddl}|jtjƒ| _| jjƒ }y|jdƒ W n |jk
r¨   Y n$X | jjƒ  ddl}	|	jt	jtjƒ dS )zu
        >>> lock = SQLiteLockFile('somefile')
        >>> lock = SQLiteLockFile('somefile', threaded=False)
        Nr   zGcreate table locks(   lock_file varchar(32),   unique_name varchar(32)))r   Ú__init__ÚunicodeÚ	lock_fileÚunique_namer
   ÚtestdbÚtempfileZmkstempÚosÚcloseÚunlinkÚsqlite3ZconnectÚ
connectionÚcursorÚexecuteZOperationalErrorÚcommitÚatexitÚregister)
ÚselfÚpathZthreadedÚtimeoutr   Z_fdr   r   Úcr   © r   ú$/usr/lib/python3.6/sqlitelockfile.pyr      s(    




zSQLiteLockFile.__init__c             C   sH  |d k	r|n| j }tjƒ }|d k	r2|dkr2||7 }|d kr@d}n|dkrNd}n|d }| jjƒ }xâ| jƒ sÎ|jd| j| jfƒ | jjƒ  |jd| jfƒ |j	ƒ }t
|ƒdkrÈ|jd| jfƒ | jjƒ  qöd S n(|jd| jfƒ |j	ƒ }t
|ƒdkröd S |d k	�r6tjƒ |k�r6|dk�r(td| j ƒ‚ntd	| j ƒ‚tj|ƒ qbW d S )
Nr   gš™™™™™¹?é
   z;insert into locks  (lock_file, unique_name)  values  (?, ?)z*select * from locks  where unique_name = ?r   z(delete from locks  where unique_name = ?z&Timeout waiting to acquire lock for %sz%s is already locked)r   Útimer   r   Ú	is_lockedr   r   r   r   ÚfetchallÚlenr   r   r	   Zsleep)r   r   Zend_timeÚwaitr   Úrowsr   r   r    Úacquire5   sD    





zSQLiteLockFile.acquirec             C   s\   | j ƒ std| j ƒ‚| jƒ s4td| j| jƒ f ƒ‚| jjƒ }|j	d| jfƒ | jj
ƒ  d S )Nz%s is not lockedz#%s is locked, but not by me (by %s)z(delete from locks  where unique_name = ?)r#   r   r   Úi_am_lockingr   r   Ú_who_is_lockingr   r   r   r   )r   r   r   r   r    Úreleaset   s    

zSQLiteLockFile.releasec             C   s&   | j jƒ }|jd| jfƒ |jƒ d S )Nz2select unique_name from locks  where lock_file = ?r   )r   r   r   r   Zfetchone)r   r   r   r   r    r*   €   s    

zSQLiteLockFile._who_is_lockingc             C   s*   | j jƒ }|jd| jfƒ |jƒ }|  S )Nz(select * from locks  where lock_file = ?)r   r   r   r   r$   )r   r   r'   r   r   r    r#   ‡   s
    

zSQLiteLockFile.is_lockedc             C   s*   | j jƒ }|jd| j| jfƒ |jƒ   S )Nz?select * from locks  where lock_file = ?    and unique_name = ?)r   r   r   r   r   r$   )r   r   r   r   r    r)   �   s    
zSQLiteLockFile.i_am_lockingc             C   s(   | j jƒ }|jd| jfƒ | j jƒ  d S )Nz&delete from locks  where lock_file = ?)r   r   r   r   r   )r   r   r   r   r    Ú
break_lock—   s    

zSQLiteLockFile.break_lock)TN)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r(   r+   r*   r#   r)   r,   r   r   r   r    r
      s   
"
?r
   )Z
__future__r   r   r"   r   r   Ú	NameErrorÚstrÚ r   r   r   r   r	   r
   r   r   r   r    Ú<module>   s   
