<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</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  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	   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   
