
^V                 @   s   d  d l  m Z m Z d  d l Z d  d l Z y e Wn e k
 rP e Z Yn Xd d l m	 Z	 m
 Z
 m Z m Z m Z Gd d   d e	  Z d S)    )absolute_importdivisionN   )LockBase	NotLocked	NotMyLockLockTimeoutAlreadyLockedc               @   sy   e  Z d  Z d Z d Z d 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 r d d l } | j   \ } } t	 j
 |  t	 j |  ~ ~ | t _ n  d d l } | j t j  |  _ |  j j   } y | j d  Wn | j k
 r Yn0 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"   B/tmp/pip-build-9m6vxulb/pip/pip/_vendor/lockfile/sqlitelockfile.pyr      s(    zSQLiteLockFile.__init__c             C   s  | d  k	 r | n |  j  } t j   } | d  k	 rL | d k rL | | 7} n  | d  k ra d } n | d k rv d } n
 | d } |  j j   } x5|  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  Sn8 | j d |  j f  | j	   } t
 |  d k r`d  S| d  k	 rt j   | k r| d k rt d |  j   qt d	 |  j   n  t j |  q Wd  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   n  |  j   sP t d |  j |  j   f   n  |  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   s3   |  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   s7   |  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   s7   |  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   s6   |  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)__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   (