
    O=d                         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c m
Z
 d dlmZ d dlmc mZ  G d de          Z G d dej                  ZdS )    )datetimeNc                       e Zd ZdZdS )StopWaitingz3 exception raised to stop waiting for a connection N)__name__
__module____qualname____doc__     ?D:\Sites\api_v1\venv\Lib\site-packages\gunicorn/workers/sync.pyr   r      s        ====r   r   c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )

SyncWorkerc                     |                                 \  }}|                    d           t          j        |           |                     |||           d S )N   )acceptsetblockingutilclose_on_exechandle)selflistenerclientaddrs       r   r   zSyncWorker.accept   sV    ((16"""Hfd+++++r   c                    	 |                                   t          j        | j        g g |          }|d         r=| j        d         |d         v r t	          j        | j        d         d           |d         S d S # t          j        $ rf}|j        d         t          j	        k    r| j
        cY d }~S |j        d         t          j        k    r| j        dk     r| j
        cY d }~S t           d }~ww xY w)Nr   r   )notifyselectwait_fdsPIPEosreaderrorargserrnoEINTRsocketsEBADFnrr   )r   timeoutretes       r   waitzSyncWorker.wait!   s   	KKMMM-r2w??C1v 9Q<3q6))GDIaL!,,,1v 
 | 	 	 	vayEK''|######vayEK''7Q;;<''''''%%	s0   A4A9 9C.!C))C./,C)C.!C))C.c                 x    | j         t          j                    k    r| j                            d|            dS dS )Nz!Parent changed, shutting down: %sFT)ppidr   getppidloginfo)r   s    r   is_parent_alivezSyncWorker.is_parent_alive4   s6    9
$$HMM=tDDD5tr   c                    | j         d         }| j        r|                                  	 |                     |           2# t          $ r5}|j        t
          j        t
          j        t
          j        fvr Y d }~nd }~ww xY w| 	                                sd S 	 | 
                    |           n# t          $ r Y d S w xY w| j        d S d S Nr   )r%   aliver   r   EnvironmentErrorr#   EAGAINECONNABORTEDEWOULDBLOCKr1   r+   r   )r   r(   r   r*   s       r   run_for_onezSyncWorker.run_for_one;   s   <?j 	KKMMM
H%%% #   75<1C#(#4#6 6 66 6 6 6 6
 '')) 		'""""   1 j 	 	 	 	 	s)   A   
A?
+A::A?B/ /
B=<B=c                    | j         r|                                  	 |                     |          }n# t          $ r Y d S w xY w|o|D ]l}|| j        d         k    r	 |                     |           +# t          $ r5}|j        t          j        t          j	        t          j
        fvr Y d }~ed }~ww xY w|                                 sd S | j         d S d S r3   )r4   r   r+   r   r   r   r5   r#   r6   r7   r8   r1   )r   r(   readyr   r*   s        r   run_for_multiplezSyncWorker.run_for_multipleX   s1   j 	KKMMM		'**      % 	" 	"H49Q<// "H----+ " " "75<9K+0+<+> > >!> > > > >"
 '')) + j 	 	 	 	 	s'   3 
A AA33
B2=+B--B2c                     | j         pd}| j        D ]}|                    d           t          | j                  dk    r|                     |           d S |                     |           d S )Ng      ?r   r   )r(   r%   r   lenr<   r9   )r   r(   ss      r   runzSyncWorker.runp   s     ,%#  	 	AMM!t|q  !!'*****W%%%%%r   c                 6   d }	 | j         j        rt          j        |fddi| j         j        }t          j        | j         ||          }t          |          }|                     ||||           n# t
          j	        j
        $ r&}| j                            d|           Y d }~nd }~wt          $ r&}| j                            d|           Y d }~nd }~wt          j        $ r}|j        d         t          j        k    r/| j                            d           |                                 n2| j                            d           |                     ||||           Y d }~nd }~wt&          $ r}|j        t(          j        t(          j        t(          j        fvr| j                            d           nz|j        t(          j        k    r| j                            d	           nJ|j        t(          j        k    r| j                            d
           n| j                            d           Y d }~n2d }~wt2          $ r"}|                     ||||           Y d }~nd }~ww xY wt5          j        |           d S # t5          j        |           w xY 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_errorr5   r#   EPIPE
ECONNRESETENOTCONN	exception	Exceptionr   )r   r   r   r   reqparserr*   s          r   r   zSyncWorker.handle   s    	x A A AT A+/8+?A A '&$??Fv,,C#vt<<<<{% 	L 	L 	LHNNGKKKKKKKK 	8 	8 	8HNN3Q77777777| 	8 	8 	8vayC---6777>???!!#vtQ777 		5 		5 		5wu{E,<enMMM""#EFFFF7e...HNN#>????W..HNN#BCCCCHNN#3444 	4 	4 	4c6433333333	4 JvDJvsz   A,A2 0J 2I)B'!J 'I)4CJ I)'A<E)#J )I)6B?H:5J :I)I$J $I))J Jc                    i }d }	 | j                             | |           t          j                    }t	          j        ||||                                | j                   \  }}|                                 | xj        dz  c_        | j        | j	        k    r!| j
                            d           d| _        |                     ||j                  }	 t          ||d                   r|                    |           n|D ]}	|                    |	           |                                 t          j                    |z
  }
| j
                            ||||
           t'          |d          r|                                 n*# t'          |d          r|                                 w w xY wn# t(          $ r" t+          j        t/          j                      Y nt2          $ rx |rt|j        rm| j
                            d           	 |                    t:          j                   |                                 n# t(          $ r Y nw xY wt?                       w xY w	 | j                              | |||           d S # t2          $ r | j
                            d           Y d S w xY w# 	 | j                              | |||           w # t2          $ r | j
                            d           Y w w xY wxY w)Nr   z,Autorestarting worker after current request.Fzwsgi.file_wrapperrR   zError handling requestzException in post_request hook)!rC   pre_requestr   nowwsgicreategetsocknameforce_closer'   max_requestsr/   r0   r4   start_response
isinstance
write_filewriterR   accesshasattrr5   r   reraisesysexc_inforX   headers_sentrW   shutdownsocket	SHUT_RDWRrO   post_request)r   r   rY   r   r   environresprequest_startrespiteritemrequest_times              r   rK   zSyncWorker.handle_request   s>   -	EH  s+++$LNNM KVT(0(<(<(>(>J JMD'
 GGqLGGw$+++LMMM"
yy$*=>>H%h0C(DEE )OOH---- ( ) )

4((((

'|~~=c7LAAA8W-- %NN$$$ 8W-- %NN$$$$% 	* 	* 	*L#,..)))) 	 	 	 	&) 	& ""#;<<<OOF$4555LLNNNN'   D#oo%	E%%dC$????? E E E""#CDDDDDDEE%%dC$???? E E E""#CDDDDDEs   CF4 BF	 $%F4 	'F00F4 3J. 4)I J. ,I 3I ?I  
I
I II  J. $J $J+*J+.K80KK8$K52K84K55K8N)r   r   r   r   r+   r1   r9   r<   r@   r   rK   r
   r   r   r   r      s        , , ,  &    :  0& & &" " "H0E 0E 0E 0E 0Er   r   )r   r#   r   r   rn   rE   rj   gunicorn.httprH   gunicorn.http.wsgir^   gunicorn.utilr   gunicorn.workers.baseworkersbaserX   r   Workerr   r
   r   r   <module>r~      s          				   



 



       ! ! ! ! ! ! ! ! !       $ $ $ $ $ $ $ $ $> > > > >) > > >zE zE zE zE zE zE zE zE zE zEr   