a
    !f?	                     @   s,   d dl Z d dlZd dlZG dd deZdS )    Nc                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )Pidfilez    Manage a PID file. If a specific name is provided
    it and '"%s.oldpid" % name' will be used. Otherwise
    we create a temp file using os.mkstemp.
    c                 C   s   || _ d | _d S N)fnamepid)selfr    r   Q/var/www/html/python-backend/venv/lib/python3.9/site-packages/gunicorn/pidfile.py__init__   s    zPidfile.__init__c                 C   s   |   }|r2|t krd S d}t||| jf || _tj| j}|rbtj|sbtd| t	j
|d\}}t|d| j d | jrt|| j n|| _t| t| jd d S )Nz5Already running on PID %s (or pid file '%s' is stale)z'%s doesn't exist. Can't create pidfile.)dirz%s
zutf-8i  )validateosgetpidRuntimeErrorr   r   pathdirnameisdirtempfilemkstempwriteencoderenameclosechmod)r   r   ZoldpidmsgZfdirfdr   r   r   r   create   s"    
zPidfile.createc                 C   s   |    || _| | j d S r   )unlinkr   r   r   )r   r   r   r   r   r   /   s    zPidfile.renamec                 C   sn   zVt | jd }t| pd}W d   n1 s40    Y  || jkrTt| j W n tyh   Y n0 dS )z delete pidfilerr   N)openr   intreadr   r   r   	Exception)r   fZpid1r   r   r   r   4   s    .
zPidfile.unlinkc                 C   sf  | j s
dS zt| j d}zt| }W n" tyN   Y W d   W dS 0 z"t|d |W W  d   W S  ty } zj|jd t	j
kr|W  Y d}~W  d   W S |jd t	jkrW Y d}~W d   W dS  W Y d}~n
d}~0 0 W d   n1 s0    Y  W nH ty` } z.|jd t	jkrJW Y d}~dS  W Y d}~n
d}~0 0 dS )z- Validate pidfile and make it stale if neededNr   r   )r   r   r   r    
ValueErrorr   killOSErrorargserrnoEPERMZESRCHIOErrorENOENT)r   r"   wpider   r   r   r   ?   s*     <zPidfile.validateN)	__name__
__module____qualname____doc__r	   r   r   r   r   r   r   r   r   r      s   r   )r'   r   r   objectr   r   r   r   r   <module>   s   