o
    )Wåg$  ã                   @   sž   d dl m Z  d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ G dd	„ d	eƒZG d
d„ dejƒZdS )é    )ÚdatetimeN)Úhttp)Úwsgi)Úsock)Úutil)Úbasec                   @   s   e Zd ZdZdS )ÚStopWaitingz3 exception raised to stop waiting for a connection N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   úT/var/www/html/audio_editor/env/lib/python3.10/site-packages/gunicorn/workers/sync.pyr      s    r   c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )Ú
SyncWorkerc                 C   s2   |  ¡ \}}| d¡ t |¡ |  |||¡ d S )Né   )ÚacceptÚsetblockingr   Úclose_on_execÚhandle)ÚselfÚlistenerÚclientÚaddrr   r   r   r      s   

zSyncWorker.acceptc              
   C   sÄ   z+|   ¡  t | jg g |¡}|d r)| jd |d v r$t | jd d¡ |d W S W d S  tya } z*|jd tj	krD| j
W  Y d }~S |jd tjkr\| jdk rZ| j
W  Y d }~S t‚‚ d }~ww )Nr   r   )ÚnotifyÚselectÚwait_fdsÚPIPEÚosÚreadÚOSErrorÚargsÚerrnoÚEINTRÚsocketsÚEBADFÚnrr   )r   ÚtimeoutÚretÚer   r   r   Úwait!   s$   
ý
€øzSyncWorker.waitc                 C   s$   | j t ¡ kr| j d| ¡ dS dS )Nz!Parent changed, shutting down: %sFT)Úppidr   ÚgetppidÚlogÚinfo)r   r   r   r   Úis_parent_alive4   s   zSyncWorker.is_parent_alivec              
   C   s¢   | j d }| jrO|  ¡  z|  |¡ W q ty1 } z|jtjtjtjfvr'‚ W Y d }~nd }~ww |  	¡ s8d S z|  
|¡ W n
 tyI   Y d S w | jsd S d S ©Nr   )r#   Úaliver   r   r   r!   ÚEAGAINÚECONNABORTEDÚEWOULDBLOCKr.   r)   r   )r   r&   r   r(   r   r   r   Úrun_for_one;   s,   

ÿþ€ÿÿèzSyncWorker.run_for_onec                 C   s¸   | j rZ|  ¡  z|  |¡}W n
 ty   Y d S w |d urO|D ]/}|| jd kr)qz|  |¡ W q tyN } z|jtjtj	tj
fvrD‚ W Y d }~qd }~ww |  ¡ sUd S | j sd S d S r/   )r0   r   r)   r   r   r   r   r!   r1   r2   r3   r.   )r   r&   Úreadyr   r(   r   r   r   Úrun_for_multipleX   s0   ÿÿþ€ÿëzSyncWorker.run_for_multiplec                 C   sJ   | j pd}| jD ]}| d¡ qt| jƒdkr|  |¡ d S |  |¡ d S )Ng      à?r   r   )r&   r#   r   Úlenr6   r4   )r   r&   Úsr   r   r   Úrunp   s   

zSyncWorker.runc              
   C   s<  d }zz!| j jrt || j ¡}t | j ||¡}t|ƒ}|  ||||¡ W nÂ tjj	y@ } z| j
 d|¡ W Y d }~n´d }~w tyX } z| j
 d|¡ W Y d }~n¤d }~w tjy‹ } z'|jd tjkrs| j
 d¡ | ¡  n| j
 d¡ |  ||||¡ W Y d }~nyd }~w tyÎ } z8|jtjtjtjfvr¤| j
 d¡ n |jtjkr±| j
 d¡ n|jtjkr¾| j
 d¡ n| j
 d	¡ W Y d }~n>d }~w tyç } z|  ||||¡ W Y d }~n-d }~ww W t |¡ d S W t |¡ d S W t |¡ d S W t |¡ d S W t |¡ d S W t |¡ d S t |¡ w )
Nz*Ignored premature client disconnection. %szClosing connection. %sr   zssl connection closedzError processing SSL request.z Socket error processing request.zIgnoring connection resetzIgnoring socket not connectedzIgnoring EPIPE)ÚcfgÚis_sslr   Ússl_wrap_socketr   ÚRequestParserÚnextÚhandle_requestÚerrorsÚ
NoMoreDatar,   ÚdebugÚStopIterationÚsslÚSSLErrorr    ÚSSL_ERROR_EOFÚcloseÚhandle_errorr   r!   ÚEPIPEÚ
ECONNRESETÚENOTCONNÚ	exceptionÚBaseExceptionr   )r   r   r   r   ÚreqÚparserr(   r   r   r   r      sZ   €€
€€€ÿêéë€ € þzSyncWorker.handlec                 C   s  i }d }zçzŒ| j  | |¡ t ¡ }t |||| ¡ | j ¡\}}| ¡  |  jd7  _| j| j	kr9| j
 d¡ d| _|  ||j¡}z5t||d ƒrN| |¡ n
|D ]}	| |	¡ qP| ¡  W t ¡ | }
| j
 ||||
¡ t|dƒru| ¡  nt ¡ | }
| j
 ||||
¡ t|dƒr| ¡  w w W n< ty¡   tjt ¡ Ž  Y n- tyÍ   |rÌ|jrÌ| j
 d¡ z| tj¡ | ¡  W tƒ ‚ tyË   Y tƒ ‚w ‚ w W z| j   | |||¡ W d S  tyë   | j
 d¡ Y d S w z| j   | |||¡ W w  ty   | j
 d¡ Y w w )Nr   z,Autorestarting worker after current request.Fzwsgi.file_wrapperrG   zError handling requestzException in post_request hook)!r:   Úpre_requestr   Únowr   ÚcreateÚgetsocknameÚforce_closer%   Úmax_requestsr,   r-   r0   Ústart_responseÚ
isinstanceÚ
write_fileÚwriterG   ÚaccessÚhasattrr   r   ÚreraiseÚsysÚexc_infoÚ	ExceptionÚheaders_sentrL   ÚshutdownÚsocketÚ	SHUT_RDWRrC   Úpost_request)r   r   rN   r   r   ÚenvironÚrespÚrequest_startÚrespiterÚitemÚrequest_timer   r   r   r?   ¡   sr   

ÿ

€ý

ÿ€

þþõ€ÿþÿzSyncWorker.handle_requestN)r	   r
   r   r   r)   r.   r4   r6   r9   r   r?   r   r   r   r   r      s    "r   )r   r!   r   r   rb   rD   r]   Úgunicornr   Úgunicorn.httpr   r   r   Úgunicorn.workersr   r_   r   ÚWorkerr   r   r   r   r   Ú<module>   s   