
    +hh                         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	e      Z G d
 dej"                        Zy)    )datetimeN)http)wsgi)sock)util)basec                       e Zd ZdZy)StopWaitingz3 exception raised to stop waiting for a connection N)__name__
__module____qualname____doc__     H/var/www/html/venv/lib/python3.12/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
y	)

SyncWorkerc                     |j                         \  }}|j                  d       t        j                  |       | j	                  |||       y )N   )acceptsetblockingr   close_on_exechandle)selflistenerclientaddrs       r   r   zSyncWorker.accept   s>    (16"Hfd+r   c                    	 | j                          t        j                  | j                  g g |      }|d   r<| j                  d   |d   v r#t	        j
                  | j                  d   d       |d   S y # t        j                  $ r}}|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    	KKM--r2w?C1v99Q<3q6)GGDIIaL!,1v 
 || 	vvayEKK'||#vvayEKK'77Q;<<'%%	s0   A2A6 6D	+D4D::D4D:DDc                     | j                   t        j                         k7  r| j                  j	                  d|        yy)Nz!Parent changed, shutting down: %sFT)ppidr#   getppidloginfo)r   s    r   is_parent_alivezSyncWorker.is_parent_alive5   s-    99

$HHMM=tDr   c                    | j                   d   }| j                  r$| j                          	 | j                  |       /y y # t        $ rF}|j
                  t
        j                  t
        j                  t
        j                  fvr Y d }~nd }~ww xY w| j                         sy 	 | j                  |       n# t        $ r Y y w xY w| j                  rNr   )r)   aliver   r   EnvironmentErrorr'   EAGAINECONNABORTEDEWOULDBLOCKr5   r/   r
   )r   r,   r   r.   s       r   run_for_onezSyncWorker.run_for_one<   s    <<?jjKKM
H%   $ 775<<1C1C#(#4#4#6 66
 '')		'" 1 jjs)   A 	B
<BB%B7 7	CCc                    | j                   ro| j                          	 | j                  |      }|,|D ]'  }|| j                  d   k(  r	 | j                  |       ) | j                         sy | j                   rny y # t        $ r Y y w xY w# t        $ rF}|j                  t        j                  t        j                  t        j                  fvr Y d }~d }~ww xY wr7   )r8   r   r/   r
   r"   r   r9   r'   r:   r;   r<   r5   )r   r,   readyr   r.   s        r   run_for_multiplezSyncWorker.run_for_multipleY   s    jjKKM		'*   % 	"H499Q</ "H-	" '')+ jj
   , "775<<9K9K+0+<+<+> >!>"s)   A= 
B=	B	B		C<CCc                     | j                   xs d}| j                  D ]  }|j                  d        t        | j                        dkD  r| j	                  |       y | j                  |       y )Ng      ?r   r   )r,   r)   r   lenr@   r=   )r   r,   ss      r   runzSyncWorker.runq   sb     ,,%#  	AMM!	 t||q !!'*W%r   c                    d }	 | j                   j                  r t        j                  || j                         }t	        j
                  | j                   ||      }t        |      }| j                  ||||       t5        j"                  |       y # t        j                  j                  $ r&}| j                  j                  d|       Y d }~Td }~wt        $ r&}| j                  j                  d|       Y d }~d }~wt        j                  $ r}|j                  d   t        j                   k(  r,| j                  j                  d       |j#                          n/| j                  j                  d       | j%                  ||||       Y d }~d }~wt&        $ r}|j(                  t(        j*                  t(        j,                  t(        j.                  fvr| j                  j1                  d       n|j(                  t(        j,                  k(  r| j                  j                  d       nT|j(                  t(        j.                  k(  r| j                  j                  d       n| j                  j                  d	       Y d }~d }~wt2        $ r}| j%                  ||||       Y d }~4d }~ww xY w# t5        j"                  |       w xY 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
NoMoreDatar3   debugStopIterationsslSSLErrorr&   SSL_ERROR_EOFclosehandle_errorr9   r'   EPIPE
ECONNRESETENOTCONN	exception	Exceptionr   )r   r   r   r   reqparserr.   s          r   r   zSyncWorker.handle   s   	xx--fdhh?''&$?Fv,C#vt<2 JJv1 {{%% 	LHHNNGKK 	8HHNN3Q77|| 	8vvayC---67>?!!#vtQ7 		5wwu{{E,<,<ennMM""#EF77e...HHNN#>?WW.HHNN#BCHHNN#34 	4c6433	4 JJvst   A6B J3-C	J6 J3C;6J6 ;J3A;FJ6 J3C$JJ6 J3J.(J6 .J33J6 6Kc                 P   i }d }	 | j                   j                  | |       t        j                         }t	        j
                  ||||j                         | j                         \  }}|j                          | xj                  dz  c_        | j                  | j                  k\  r"| j                  j                  d       d| _        | j	                  ||j                        }	 t        ||d         r|j                  |       n|D ]  }	|j!                  |	        |j#                          t        j                         |z
  }
| j                  j%                  ||||
       t'        |d      r|j#                          	 	 | j                   jA                  | |||       y # t        j                         |z
  }
| j                  j%                  ||||
       t'        |d      r|j#                          w w xY w# t(        $ r' t+        j,                  t/        j0                           Y t2        $ r} |ry|j4                  rm| j                  j7                  d       	 |j9                  t:        j<                         |j#                          t?               # t(        $ r Y t?               w xY w w xY w# t2        $ r | j                  j7                  d       Y y w xY w# 	 | j                   jA                  | |||       w # t2        $ r | j                  j7                  d       Y w w xY wxY w)Nr   z,Autorestarting worker after current request.Fzwsgi.file_wrapperrS   zError handling requestzException in post_request hook)!rF   pre_requestr   nowr   creategetsocknameforce_closer+   max_requestsr3   r4   r8   start_response
isinstance
write_filewriterS   accesshasattrr9   r   reraisesysexc_inforY   headers_sentrX   shutdownsocket	SHUT_RDWRrO   post_request)r   r   rZ   r   r   environresprequest_startrespiteritemrequest_times              r   rK   zSyncWorker.handle_request   s   -	EHH  s+$LLNM KKVT(0(<(<(>JMD'
 GGqLGww$+++LM"
yy$*=*=>H%h0C(DEOOH- ( )

4()

'||~=c7LA8W-NN$"E%%dC$?+  (||~=c7LA8W-NN$ . 	*LL#,,.) 	)) ""#;<OOF$4$45LLN $o% ( #o% 	  E""#CDEE%%dC$? E""#CDEs   C G9 'A	F" 0AG9 J0 "AG66G9 9-J-&K (1J-/J	
J-	J(J-'J((J--K 0$KKL%K;:L%;$L"L%!L""L%N)r   r   r   r   r/   r5   r=   r@   rD   r   rK   r   r   r   r   r      s,    ,&:0& D0Er   r   )r   r'   r#   r    rn   rP   rj   gunicornr   gunicorn.httpr   r   r   gunicorn.workersr   rY   r
   Workerr   r   r   r   <module>r{      sK      	   
 
     !>) >xE xEr   