U
    UV                     @   sr   d dl mZmZ d dlZd dlZz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 | ||| t| j| _t| j| _tjdkrdddl}| \}}t	
| t	| ~~|t_ddl}|tj| _| j }z|d W n |jk
r   Y n$X | j  ddl}	|	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   6lib/python3.8/site-packages/lockfile/sqlitelockfile.pyr      s(    




zSQLiteLockFile.__init__c                 C   sD  |d k	r|n| j }t }|d k	r2|dkr2||7 }|d kr@d}n|dkrNd}n|d }| j }|  s|d| j| jf | j  |d| jf |	 }t
|dkr|d| jf | j  qd S n(|d| jf |	 }t
|dkrd S |d k	r4t |kr4|dkr&td| j ntd	| j t| q`d S )
Nr   g?
   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)r   timer   r   	is_lockedr   r   r   r   fetchalllenr   r   r	   sleep)r   r   Zend_timewaitr   rowsr   r   r    acquire5   sL    



zSQLiteLockFile.acquirec                 C   s\   |   std| j |  s4td| j|  f | j }|	d| jf | j
  d S )Nz%s is not lockedz#%s is locked, but not by me (by %s)r"   )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  }|d| jf | d S )Nz2select unique_name from locks  where lock_file = ?r   )r   r   r   r   Zfetchoner-   r   r   r    r,      s
    
zSQLiteLockFile._who_is_lockingc                 C   s*   | j  }|d| jf | }|  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  }|d| j| jf |   S )Nz?select * from locks  where lock_file = ?    and unique_name = ?)r   r   r   r   r   r%   r-   r   r   r    r+      s
    

zSQLiteLockFile.i_am_lockingc                 C   s(   | j  }|d| jf | j   d S )Nz&delete from locks  where lock_file = ?)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   
