U
    òŸÂi$  ã                   @   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   úK/var/www/SKSBV.IN/venv/lib/python3.8/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   Zclose_on_execÚhandle)ÚselfÚlistenerÚclientÚaddrr   r   r   r      s    

zSyncWorker.acceptc              
   C   sÈ   zT|   ¡  t | jg g |¡}|d rR| jd |d krHt | jd d¡ |d W S W nn tk
rÂ } zP|jd tj	kr„| j
 W Y ¢4S |jd tjkr°| jdk r¬| j
 W Y ¢S t‚‚ W 5 d }~X Y nX d S )Nr   r   )ÚnotifyÚselectZwait_fdsÚPIPEÚosÚreadÚOSErrorÚargsÚerrnoZ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)Zppidr   ÚgetppidÚlogÚinfo)r   r   r   r   Úis_parent_alive4   s    zSyncWorker.is_parent_alivec              
   C   sž   | j d }| jrš|  ¡  z|  |¡ W q
W n: tk
rd } z|jtjtjtjfkrT‚ W 5 d }~X Y nX |  	¡ srd S z|  
|¡ W q
 tk
r–   Y d S X q
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 r®|  ¡  z|  |¡}W n tk
r2   Y d S X |d k	r |D ]^}|| jd krTq@z|  |¡ W q@ tk
rœ } z|jtjtj	tj
fkrŒ‚ W 5 d }~X Y q@X q@|  ¡ s d S q d S r+   )r,   r   r&   r   r   r   r   r   r-   r.   r/   r*   )r   r#   Úreadyr   r%   r   r   r   Úrun_for_multipleX   s&    ÿzSyncWorker.run_for_multiplec                 C   sH   | j pd}| jD ]}| d¡ qt| jƒdkr:|  |¡ n
|  |¡ d S )Ng      à?r   r   )r#   r    r   Úlenr2   r0   )r   r#   Úsr   r   r   Úrunp   s    

zSyncWorker.runc              
   C   sì  d }zÔzD| jjr t || j¡}t | j||¡}t|ƒ}|  	||||¡ W nŠ tj
jk
r‚ } z| j d|¡ W 5 d }~X Y nV tk
r² } z| j d|¡ W 5 d }~X Y n& tjk
r } zF|jd tjkrì| j d¡ | ¡  n| j d¡ |  ||||¡ W 5 d }~X Y nÀ tk
r¤ } zn|jtjtjtjfkrP| j d¡ nD|jtjkrl| j d¡ n(|jtjkrˆ| j d¡ n| j d	¡ W 5 d }~X Y n4 tk
rÖ } z|  ||||¡ W 5 d }~X Y nX W 5 t  |¡ X d S )
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)r   ÚcloseÚcfgZis_sslr   Ússl_wrap_socketr   ZRequestParserÚnextÚhandle_requestÚerrorsZ
NoMoreDatar(   ÚdebugÚStopIterationÚsslÚSSLErrorr   ÚSSL_ERROR_EOFÚhandle_errorr   r   ÚEPIPEÚ
ECONNRESETÚENOTCONNÚ	exceptionÚBaseException)r   r   r   r   ÚreqÚparserr%   r   r   r   r      s8      
 &zSyncWorker.handlec                 C   sÂ  i }d }zvzæ| j  | |¡ t ¡ }t 	|||| 
¡ | j ¡\}}| ¡  |  jd7  _| j| jkrt| j d¡ d| _|  ||j¡}z:t||d ƒrž| |¡ n|D ]}
| |
¡ q¢| ¡  W 5 t ¡ | }	| j ||||	¡ t|dƒrî| ¡  X W nŠ tk
r   tjt ¡ Ž  Y nh tk
r|   |rv|jrv| j d¡ z| tj¡ | ¡  W n tk
rn   Y nX t ƒ ‚‚ Y nX W 5 z| j  | |||¡ W n" tk
rº   | j d¡ Y nX X d S )NzException in post_request hookr   z,Autorestarting worker after current request.Fr6   zwsgi.file_wrapperzError handling request)!r7   Zpost_requestÚ	Exceptionr(   rE   Zpre_requestr   Únowr   ÚcreateÚgetsocknameZforce_closer"   Zmax_requestsr)   r,   Zstart_responseÚaccessÚhasattrr6   Ú
isinstanceÚ
write_fileÚwriter   r   ÚreraiseÚsysÚexc_infoZheaders_sentÚshutdownÚsocketÚ	SHUT_RDWRr=   )r   r   rG   r   r   ÚenvironÚrespZrequest_startZrespiterZrequest_timeÚitemr   r   r   r:   ¡   sR    
 ÿ
zSyncWorker.handle_requestN)r	   r
   r   r   r&   r*   r0   r2   r5   r   r:   r   r   r   r   r      s   "r   )r   r   r   r   rV   r>   rS   Zgunicornr   Zgunicorn.httpr   r   r   Zgunicorn.workersr   rI   r   ZWorkerr   r   r   r   r   Ú<module>   s   