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mZ d dlm  mZ d dl	m
Z
 d dlm  mZ eƒ ZG dd„ dejƒZdS )é    )ÚdatetimeNc                       s<   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Z‡  ZS )ÚAsyncWorkerc                    s    t ƒ j|i |¤Ž | jj| _d S ©N)ÚsuperÚ__init__ÚcfgÚworker_connections)ÚselfÚargsÚkwargs©Ú	__class__© úQ/var/www/html/gps/gps/lib/python3.10/site-packages/gunicorn/workers/base_async.pyr      s   zAsyncWorker.__init__c                 C   s   t ƒ ‚r   )ÚNotImplementedError)r	   r   r   r   Útimeout_ctx   s   zAsyncWorker.timeout_ctxc                 C   s   |t kS r   )ÚALREADY_HANDLED)r	   Úrespiterr   r   r   Úis_already_handled   s   zAsyncWorker.is_already_handledc           	   
   C   s   d }zvzÀt  | j||¡}zJ| ¡ }| jjs#t|ƒ}|  ||||¡ n3i }	 d }|  ¡  t|ƒ}W d   ƒ n1 s;w   Y  |sCn|jrJ|j}n||_|  ||||¡ q&W nk t j	j
yr } z| j d|¡ W Y d }~nUd }~w tyŠ } z| j d|¡ W Y d }~n=d }~w tjyš   tjt ¡ Ž  Y n) ty©   tjt ¡ Ž  Y n tyÂ } z|  ||||¡ W Y d }~nd }~ww W n• tjyø } z'|jd tjkrà| j d¡ | ¡  n| j d¡ |  ||||¡ W Y d }~nnd }~w ty? } z;|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yY } z|  ||||¡ W Y d }~nd }~ww W t |¡ d S W t |¡ d S W t |¡ d S W t |¡ d S t |¡ w )NTz*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)ÚhttpÚRequestParserr   ÚgetsocknameÚ	keepaliveÚnextÚhandle_requestr   Úproxy_protocol_infoÚerrorsÚ
NoMoreDataÚlogÚdebugÚStopIterationÚsslÚSSLErrorÚutilÚreraiseÚsysÚexc_infoÚEnvironmentErrorÚ	ExceptionÚhandle_errorr
   ÚSSL_ERROR_EOFÚcloseÚerrnoÚEPIPEÚ
ECONNRESETÚENOTCONNÚ	exception)	r	   ÚlistenerÚclientÚaddrÚreqÚparserÚlistener_namer   Úer   r   r   Úhandle!   s‚   

ÿö€€€€ÿ€
€€€ÿ€€ € þzAsyncWorker.handlec                 C   sr  t  ¡ }i }d }zz°| j | |¡ t ||||| j¡\}}d|d< |  jd7  _| j| jkr;| jr;| j	 
d¡ d| _| jrB| jjsF| ¡  |  ||j¡}|  |¡rqW W z| j | |||¡ W dS  typ   | j	 d¡ Y dS w z5t||d ƒr| |¡ n
|D ]}	| |	¡ q| ¡  t  ¡ | }
| j	 ||||
¡ W t|dƒr¦| ¡  nt|dƒr±| ¡  w w | ¡ r¹tƒ ‚W nC tyÂ   ‚  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y8   | j	 d¡ Y w w )
NTzwsgi.multithreadé   z,Autorestarting worker after current request.FzException in post_request hookzwsgi.file_wrapperr+   zError handling request)#r   Únowr   Úpre_requestÚwsgiÚcreateÚnrÚmax_requestsÚaliver   Úinfor   Úforce_closeÚstart_responser   Úpost_requestr(   r0   Ú
isinstanceÚ
write_fileÚwriter+   ÚaccessÚhasattrÚshould_closer    r'   r#   r$   r%   r&   Úheaders_sentÚshutdownÚsocketÚ	SHUT_RDWR)r	   r6   r4   Úsockr3   Úrequest_startÚenvironÚrespr   ÚitemÚrequest_timer   r   r   r   Z   sŽ   
ÿ
"ÿÝ
€
ÿ
ÿÿ

þþõ€þþþÿzAsyncWorker.handle_request)	Ú__name__Ú
__module__Ú__qualname__r   r   r   r8   r   Ú__classcell__r   r   r   r   r      s    9r   )r   r,   rM   r!   r%   Úgunicorn.httpr   Úgunicorn.http.wsgir<   Úgunicorn.utilr#   Úgunicorn.workers.baseÚworkersÚbaseÚobjectr   ÚWorkerr   r   r   r   r   Ú<module>   s   