
     i<                        S SK r \ R                  " S\SS9   S SKrS SKJr  \" \R                  5      \" S5      :  a  \" S5      e \R                  " 5         S SKJr  S SKrS S	KJrJr  S S
KJr  S SKrS SKrS SKJr  S SKJr  \" \R2                  SS5      r\" \R2                  SS5      rSS jrS rS rS r " S S\5      r g! \	 a	    \" S5      ef = f)    NzThe eventlet worker is deprecated and will be removed in Gunicorn 26.0. Please migrate to gevent, gthread, or another supported worker type. See: https://docs.gunicorn.org/en/stable/design.html#choosing-a-worker-type   )
stacklevel)parsez0.40.3z2eventlet worker requires eventlet 0.40.3 or higher)partial)hubsgreenthread)GreenSocket)AsyncWorker)ssl_wrap_socket
WSGI_LOCALALREADY_HANDLEDc                 j   U R                  5       S:X  a  [        S5      eU(       a  UR                  U5        U(       a  [        US5      OSnSnUR                  nU R
                  n  U(       a  [        X5-
  U5      nUS::  a  O@[        U" U5      5      nU(       d  O'  U" U5      n	XY-  nU	[        U5      :  a  XS  nOOM$  M\  UUS:  a&  [        US5      (       a  UR                  X%-   5        $ $ $ ! [         a     Mb  f = f! US:  a&  [        US5      (       a  UR                  X%-   5        f f f = f)Nr   z&non-blocking sockets are not supportedi    seek)

gettimeout
ValueErrorr   minreadsend
memoryviewlenBlockingIOErrorhasattr)
selffileoffsetcount	blocksize
total_sent	file_read	sock_senddatasents
             L/var/www/ias/venv/lib/python3.13/site-packages/gunicorn/workers/geventlet.py_eventlet_socket_sendfiler$   7   s9    AABB		&$)E4 tIJ		I		I+ 2I>	>i	23D	$T?D &Jc$i'#E{  & >gdF33IIf)* 4> '  >gdF33IIf)* 4>s0   (7D  C3 (D 3
D=D  DD .D2c                 v   [         R                  R                  U5      n[         R                  R	                  5       n  U R                  5       u  pVUR                  XU5      nUR                  [        XE5        Su  pVnMB  ! [         R                   a#    U R                  5         UR                  5          gf = f)z
Serve requests forever.

This code is nearly identical to ``eventlet.convenience.serve`` except
that it attempts to join the pool at the end, which allows for gunicorn
graceful shutdowns.
)NNNN)eventlet	greenpool	GreenPoolr   
getcurrentacceptspawnlink_eventlet_stop	StopServeclosewaitall)sockhandleconcurrencypool	server_gtconnaddrgts           r#   _eventlet_server9   ]   s     ''4D$$//1I
	JDF$/BGGNI4-ND  !! 	JJLLLN	s    ?B 4B87B8c                      U R                  5         UR                  5         g! UR                  5         f = f! [        R                   a     g[         a-    [
        R                  " U/[        R                  " 5       Q76    gf = f)z
Stop a greenlet handling a request and close its connection.

This code is lifted from eventlet so as not to depend on undocumented
functions in the library.
N)	waitr/   greenletGreenletExit	Exceptionr   killsysexc_info)clientserverr6   s      r#   r-   r-   t   s`    2	KKMJJLDJJL    21#,,.12s!   $ 9 69 B3BBc                  N    [        [        S5      (       d  [        [        l        g g )Nsendfile)r   r	   r$   rE        r#   patch_sendfilerH      s     ;
++8 ,rG   c                   j   ^  \ rS rSrS rU 4S jrU 4S jrU 4S jrU 4S jrS r	U 4S jr
S	 rS
rU =r$ )EventletWorker   c                 B    [         R                  " 5         [        5         g N)r   use_hubrH   r   s    r#   patchEventletWorker.patch   s    
 	rG   c                    > [        [        SS 5      (       a
  [        5       eU[        :X  a
  [        5       e[        TU ]  U5      $ )Nalready_handled)getattrEVENTLET_WSGI_LOCALStopIterationEVENTLET_ALREADY_HANDLEDsuperis_already_handled)r   respiter	__class__s     r#   rY   !EventletWorker.is_already_handled   s=    &(94@@/!///!w)(33rG   c                 x   > U R                   R                  S5        U R                  5         [        TU ]  5         g )NzThe eventlet worker is DEPRECATED and will be removed in Gunicorn 26.0. Please migrate to gevent, gthread, or another supported worker type.)logwarningrP   rX   init_process)r   r[   s    r#   r`   EventletWorker.init_process   s1    S	
 	

rG   c                 D   > [         R                  " [        TU ]  X5        g rM   )r&   r+   rX   handle_quitr   sigframer[   s      r#   rc   EventletWorker.handle_quit       uw*C7rG   c                 D   > [         R                  " [        TU ]  X5        g rM   )r&   r+   rX   handle_usr1rd   s      r#   rj   EventletWorker.handle_usr1   rh   rG   c                 j    [         R                  " U R                  R                  =(       d    S S5      $ )NF)r&   Timeoutcfg	keepaliverO   s    r#   timeout_ctxEventletWorker.timeout_ctx   s$     2 2 :dEBBrG   c                    > U R                   R                  (       a  [        X R                   5      n[        TU ]  XU5        g rM   )rn   is_sslr   rX   r2   )r   listenerrB   r7   r[   s       r#   r2   EventletWorker.handle   s*    88??$VXX6Fx.rG   c                 z   / nU R                    H  n[        U5      nUR                  S5        [        U R                  U5      n[
        R                  " [        X4U R                  5      nUR                  U5        [
        R                  " S5        M     U R                  (       a9  U R                  5         [
        R                  " S5        U R                  (       a  M9  U R                  5         S n [
        R                  " U R                  R                  5       nU H'  nUR!                  [
        R"                  " 5       5        M)     U H  nUR%                  5         M     S S S 5        g ! , (       d  f       g = f! [
        R                   a)  nX:w  a  e U H  nUR!                  5         M      S nAg S nAff = f)N   g        g      ?)socketsr	   setblockingr   r2   r&   r+   r9   worker_connectionsappendsleepalivenotifyrm   rn   graceful_timeoutr?   r.   r;   )	r   	acceptorsr1   gsockhfunacceptortates	            r#   runEventletWorker.run   s<   	LLD%Ea 4;;.D~~ou&*&=&=?H X&NN3 ! jjKKMNN3 jjj 	
	!!$((";";<"AFF8--/0 #"AFFH # =<<
  	w 	s7   2*E= AE,#E= ,
E:6E= :E= =F:F55F:rF   )__name__
__module____qualname____firstlineno__rP   rY   r`   rc   rj   rp   r2   r   __static_attributes____classcell__)r[   s   @r#   rJ   rJ      s1    488C/
 rG   rJ   )r   N)!warningswarnDeprecationWarningr&   packaging.versionr   parse_version__version__RuntimeErrorImportErrormonkey_patch	functoolsr   r@   r   r   eventlet.greenior	   eventlet.wsgir<   gunicorn.workers.base_asyncr
   gunicorn.sockr   rT   wsgirU   rW   r$   r9   r-   rH   rJ   rF   rG   r#   <module>r      s     R Q 9X))*]8-DDOPP E 	     
 & (   3 ) hmm\4@ "8==2CTJ #+L.2$9E[ Ey  M
K
LLMs   C C