o
    2³cŸ  ã                   @   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  m
Z
 d dlmZ d dlm  mZ G dd„ deƒZG dd„ dejƒZdS )é    )ÚdatetimeNc                   @   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/html/gps/gps/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ÚsetblockingÚutilÚ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jyb } z*|jd tj	krE| j
W  Y d }~S |jd tjkr]| jdk r[| j
W  Y d }~S t‚‚ d }~ww )Nr   r   )ÚnotifyÚselectÚwait_fdsÚPIPEÚosÚreadÚerrorÚ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   ÚEnvironmentErrorr   Ú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+   )r,   r   r%   r   r   r   r-   r   r.   r/   r0   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   Úlenr3   r1   )r   r"   Úsr   r   r	   Úrunp   s   

zSyncWorker.runc              
   C   sH  d }zz'| j jrtj|fddi| j j¤Ž}t | j ||¡}t|ƒ}|  ||||¡ W nÂ tj	j
yF } z| j d|¡ W Y d }~n´d }~w ty^ } z| j d|¡ W Y d }~n¤d }~w tjy‘ } z'|jd tjkry| 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 )NÚserver_sideTz*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_sslÚsslÚwrap_socketÚssl_optionsÚhttpÚRequestParserÚnextÚhandle_requestÚerrorsÚ
NoMoreDatar(   ÚdebugÚStopIterationÚSSLErrorr   ÚSSL_ERROR_EOFÚcloseÚhandle_errorr-   r   ÚEPIPEÚ
ECONNRESETÚENOTCONNÚ	exceptionÚ	Exceptionr   )r   r   r   r   ÚreqÚparserr$   r   r   r	   r      s^   ÿ€€
€€€ÿêéë€ € þ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| ¡  t ¡ | }
| j
 ||||
¡ W t|dƒru| ¡  n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)!r8   Úpre_requestr   ÚnowÚwsgiÚcreateÚgetsocknameÚforce_closer!   Úmax_requestsr(   r)   r,   Ústart_responseÚ
isinstanceÚ
write_fileÚwriterG   ÚaccessÚhasattrr-   r   ÚreraiseÚsysÚexc_inforM   Úheaders_sentrL   ÚshutdownÚsocketÚ	SHUT_RDWRrD   Úpost_request)r   r   rN   r   r   ÚenvironÚrespÚrequest_startÚrespiterÚitemÚrequest_timer   r   r	   r@   £   sn   

ÿ
€
ÿ
ÿ€

þþõ€ÿþÿzSyncWorker.handle_requestN)r   r   r   r   r%   r*   r1   r3   r6   r   r@   r   r   r   r	   r
      s    $r
   )r   r   r   r   rb   r:   r^   Úgunicorn.httpr=   Úgunicorn.http.wsgirR   Úgunicorn.utilr   Úgunicorn.workers.baseÚworkersÚbaserM   r   ÚWorkerr
   r   r   r   r	   Ú<module>   s   