3
[                 @   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tempfilemkstemposcloseunlinksqlite3connect
connectioncursorexecuteZOperationalErrorcommitatexitregister)
selfpaththreadedtimeoutr   Z_fdr   r   cr    r"   D/tmp/pip-install-65viz3iy/pip/pip/_vendor/lockfile/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  qd S n(|jd| jf |j	 }t
|dkrd 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	   sleep)r   r    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-   r0   r/   r&   r.   r1   r"   r"   r"   r#   r
      s   
"
?r
   )
__future__r   r   r%   r   r   	NameErrorstr r   r   r   r   r	   r
   r"   r"   r"   r#   <module>   s   
