<!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  ã               @   sd   d dl mZmZ d dlZd dlZd dlZd dlZddlmZm	Z	m
Z
mZmZmZ G dd„ deƒZdS )é    )Úabsolute_importÚdivisionNé   )ÚLockBaseÚ
LockFailedÚ	NotLockedÚ	NotMyLockÚLockTimeoutÚAlreadyLockedc               @   sD   e 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S )ÚMkdirLockFilez"Lock file by creating a directory.TNc             C   s6   t j| |||ƒ tjj| jd| j| j| jf ƒ| _	dS )zs
        >>> lock = MkdirLockFile('somefile')
        >>> lock = MkdirLockFile('somefile', threaded=False)
        z%s.%s%sN)
r   Ú__init__ÚosÚpathÚjoinÚ	lock_fileZhostnameZtnameÚpidÚunique_name)Úselfr   ZthreadedÚtimeout© r   ú#/usr/lib/python3.6/mkdirlockfile.pyr      s
    
zMkdirLockFile.__init__c             C   s  |d k	r|n| j }tjƒ }|d k	r2|dkr2||7 }|d kr@d}ntd|d ƒ}x¼ytj| jƒ W n’ tk
rò   tjƒ d }|j	t	j
kràtjj| jƒršd S |d k	rÔtjƒ |krÔ|dkrÆtd| j ƒ‚ntd| j ƒ‚tj|ƒ ntd| j ƒ‚Y qPX t| jdƒjƒ  d S qPW d S )	Nr   gš™™™™™¹?é
   r   z&Timeout waiting to acquire lock for %sz%s is already lockedzfailed to create %sÚwb)r   ÚtimeÚmaxr   Úmkdirr   ÚOSErrorÚsysÚexc_infoÚerrnoZEEXISTr   Úexistsr   r	   r
   Zsleepr   ÚopenÚclose)r   r   Zend_timeÚwaitÚerrr   r   r   Úacquire   s2    
zMkdirLockFile.acquirec             C   sP   | j ƒ std| j ƒ‚ntjj| jƒs4td| j ƒ‚tj| jƒ tj| j	ƒ d S )Nz%s is not lockedz%s is locked, but not by me)
Ú	is_lockedr   r   r   r    r   r   ÚunlinkÚrmdirr   )r   r   r   r   ÚreleaseA   s    zMkdirLockFile.releasec             C   s   t jj| jƒS )N)r   r   r    r   )r   r   r   r   r&   I   s    zMkdirLockFile.is_lockedc             C   s   | j ƒ otjj| jƒS )N)r&   r   r   r    r   )r   r   r   r   Úi_am_lockingL   s    zMkdirLockFile.i_am_lockingc             C   sJ   t jj| jƒrFx*t j| jƒD ]}t jt jj| j|ƒƒ qW t j| jƒ d S )N)r   r   r    r   Úlistdirr'   r   r(   )r   Únamer   r   r   Ú
break_lockP   s    zMkdirLockFile.break_lock)TN)N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r%   r)   r&   r*   r-   r   r   r   r   r      s   

&r   )Z
__future__r   r   r   r   r   r   Ú r   r   r   r   r	   r
   r   r   r   r   r   Ú<module>   s    