Ë
    qûàgŽ  ã                   óÚ  — d dl Z d dlZd dlmZ d dlmZ d dlZ	 d dlZd dlmZ	  e	ej                  «       e	d«      k  r ed«      ‚d dlmZ d dlmZ d d	lmZmZmZmZ d dlZd d
lmZ d dlmZ d dlmZ dej                  ›dej                  ›�Z G d„ de«      Z G d„ d«      Z G d„ dej>                  «      Z  G d„ dejB                  «      Z" G d„ de«      Z#y# e$ r	  ed«      ‚w xY w)é    N)Údatetime)Úpartial)Úparsez1.4z+gevent worker requires gevent 1.4 or higher)ÚPool)ÚStreamServer)ÚhubÚmonkeyÚsocketÚpywsgi)Úbase_environ)Ússl_context)ÚAsyncWorkerzgevent/z
 gunicorn/c                   ój   ‡ — e Zd ZdZdZd„ Zˆ fd„Zd„ Zd„ Zˆ fd„Z	ˆ fd„Z
ˆ fd„Zˆ fd	„Zˆ fd
„Zˆ xZS )ÚGeventWorkerNc           	      ó  — t        j                  «        g }| j                  D ]Y  }|j                  t	        j                  |j
                  t        j                  |j                  j                  «       ¬«      «       Œ[ || _        y )N)Úfileno)	r	   Ú	patch_allÚsocketsÚappendr
   ÚFAMILYÚSOCK_STREAMÚsockr   )Úselfr   Úss      úV/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/gunicorn/workers/ggevent.pyÚpatchzGeventWorker.patch%   sg   € Ü×ÑÔð ˆØ—‘ò 	BˆAØ�N‰Nœ6Ÿ=™=¨¯©´6×3EÑ3EØ01·±·±³ôAõ Bð	Bð ˆ�ó    c                 óÈ   •— t         ‰| �  «        | j                  t        j                  «       k7  r2| j
                  j                  d| «       t        j                  d«       y y )Nz!Parent changed, shutting down: %sr   )	ÚsuperÚnotifyÚppidÚosÚgetppidÚlogÚinfoÚsysÚexit©r   Ú	__class__s    €r   r    zGeventWorker.notify/   sB   ø€ Ü‰‰ÔØ�9‰9œŸ
™
›Ò$Ø�H‰H�M‰MÐ=¸tÔDÜ�H‰H�Q�Kð %r   c                 óV   — t        j                  | j                  j                  d«      S )NF)ÚgeventÚTimeoutÚcfgÚ	keepalive)r   s    r   Útimeout_ctxzGeventWorker.timeout_ctx5   s   € Ü�~‰~˜dŸh™h×0Ñ0°%Ó8Ð8r   c           
      óÒ  — g }i }| j                   j                  rdt        | j                   «      i}| j                  D �]   }|j	                  d«       t        | j                  «      }| j                  �et        | j                   «      }|j                  dt        dœ«        | j                  |f| j                  || j                  | j                  |dœ|¤Ž}nEt        | j                  |«      }t!        |f||dœ|¤Ž}| j                   j"                  dkD  rd|_        |j'                  «        |j)                  |«       �Œ | j*                  r2| j-                  «        t/        j0                  d«       | j*                  rŒ2	 |D ];  }t3        |d«      r|j5                  «        t3        |d	«      sŒ,|j7                  «        Œ= t9        j8                  «       }t9        j8                  «       |z
  | j                   j:                  k  r—d
}	|D ]9  }|j<                  j?                  «       |j<                  j@                  k7  sŒ5|	dz  }	Œ; |	sy | j-                  «        t/        j0                  d«       t9        j8                  «       |z
  | j                   j:                  k  rŒ—| j                  jC                  d| jD                  «       |D ]  }|jG                  d¬«       Œ y # tH        $ r Y y w xY w)Nr   é   T)zwsgi.multithreadÚSERVER_SOFTWARE)ÚapplicationÚspawnr$   Úhandler_classÚenviron)Úhandler4   g      ð?ÚcloseÚkillr   z Worker graceful timeout (pid:%s))Útimeout)%r-   Úis_sslr   r   Úsetblockingr   Úworker_connectionsÚserver_classr   ÚupdateÚVERSIONÚwsgir$   Úwsgi_handlerr   r7   r   ÚworkersÚ
max_acceptÚstartr   Úaliver    r+   ÚsleepÚhasattrr8   r9   ÚtimeÚgraceful_timeoutÚpoolÚ
free_countÚsizeÚwarningÚpidÚstopÚ	Exception)
r   ÚserversÚssl_argsr   rK   r6   ÚserverÚhfunÚtsÚ	acceptings
             r   ÚrunzGeventWorker.run8   sn  € ØˆØˆà�8‰8�?Š?Ø%¤{°4·8±8Ó'<Ð=ˆHà—‘ó 	#ˆAØ�M‰M˜!ÔÜ˜×/Ñ/Ó0ˆDØ× Ñ Ð,Ü& t§x¡xÓ0�Ø—‘Ø(,Ü'.ñ ô ð +˜×*Ñ*Øð Ø#'§9¡9°D¸d¿h¹hØ"&×"3Ñ"3¸Wñ ð ñ ‘ô
 ˜tŸ{™{¨AÓ.�Ü% aÐM°¸DÑMÀHÑM�Ø—8‘8×#Ñ# aÒ'Ø()�FÔ%à�L‰LŒNØ�N‰N˜6Ö"ð)	#ð, �jŠjØ�K‰KŒMÜ�L‰L˜Ôð �j‹jð	à!ò "�Ü˜6 7Ô+Ø—L‘L”NÜ˜6 6Õ*Ø—K‘K•Mð	"ô —‘“ˆBÜ—)‘)“+ Ñ" d§h¡h×&?Ñ&?Ò?Ø�	Ø%ò '�FØ—{‘{×-Ñ-Ó/°6·;±;×3CÑ3CÓCØ! Q™™	ð'ñ
 !Øà—‘”Ü—‘˜SÔ!ô —)‘)“+ Ñ" d§h¡h×&?Ñ&?Ó?ð �H‰H×ÑÐ?ÀÇÁÔJØ!ò '�Ø—‘ A�Õ&ñ'øäò 	Ùð	ús,   Æ-K Æ/BK È<	K ÉAK Ê?K Ë	K&Ë%K&c                 óJ   •— |j                  d«       t        ‰| �	  |||«       y )Nr1   )r<   r   r7   )r   ÚlistenerÚclientÚaddrr)   s       €r   r7   zGeventWorker.handlew   s#   ø€ ð 	×Ñ˜1ÔÜ‰‰�x ¨Õ.r   c                 ór   •— 	 t         ‰| �  ||||«       y # t        j                  $ r Y y t        $ r Y y w xY w©N)r   Úhandle_requestr+   ÚGreenletExitÚ
SystemExit)r   Úlistener_nameÚreqr   r\   r)   s        €r   r_   zGeventWorker.handle_request}   s>   ø€ ð	Ü‰GÑ" =°#°t¸TÕBøÜ×"Ñ"ò 	ÙÜò 	Ùð	ús   ƒ –6«6µ6c                 óD   •— t        j                  t        ‰| �  ||«       y r^   )r+   r4   r   Úhandle_quit©r   ÚsigÚframer)   s      €r   re   zGeventWorker.handle_quit…   ó   ø€ ô 	�‰”U‘WÑ(¨#¨uÕ5r   c                 óD   •— t        j                  t        ‰| �  ||«       y r^   )r+   r4   r   Úhandle_usr1rf   s      €r   rk   zGeventWorker.handle_usr1Š   ri   r   c                 ój   •— | j                  «        t        j                  «        t        ‰| �  «        y r^   )r   r   Úreinitr   Úinit_processr(   s    €r   rn   zGeventWorker.init_process�   s    ø€ Ø�
‰
ŒÜ�
‰
ŒÜ‰ÑÕr   )Ú__name__Ú
__module__Ú__qualname__r>   rB   r   r    r/   rX   r7   r_   re   rk   rn   Ú__classcell__©r)   s   @r   r   r       s@   ø„ à€LØ€Lòôò9ò=ô~/ôô6ô
6÷
ð r   r   c                   ó   — e Zd ZdZdZdZd„ Zy)ÚGeventResponseNc                 ó.   — || _         || _        || _        y r^   )ÚstatusÚheadersÚsent)r   rw   rx   Úclengths       r   Ú__init__zGeventResponse.__init__›   s   € ØˆŒØˆŒØˆ�	r   )ro   rp   rq   rw   rx   ry   r{   © r   r   ru   ru   •   s   „ à€FØ€GØ€Dór   ru   c                   ó$   ‡ — e Zd Zd„ Zˆ fd„Zˆ xZS )ÚPyWSGIHandlerc                 ó  — t        j                  | j                  «      }t        j                  | j                  «      }||z
  }t	        | di «      }t        | j                  t        «      r| j                  j                  «       n| j                  }t        ||| j                  «      }t        | d«      r| j                  j                  «       }ng }| j                  j                  j!                  ||| j"                  |«       y )NÚresponse_headersrx   )r   ÚfromtimestampÚ
time_startÚtime_finishÚgetattrÚ
isinstancerw   ÚbytesÚdecoderu   Úresponse_lengthrH   rx   ÚitemsrT   r$   Úaccessr6   )r   rE   ÚfinishÚresponse_timeÚresp_headersrw   ÚrespÚreq_headerss           r   Úlog_requestzPyWSGIHandler.log_request£   sÀ   € Ü×&Ñ& t§¡Ó7ˆÜ×'Ñ'¨×(8Ñ(8Ó9ˆØ ™ˆÜ˜tÐ%7¸Ó<ˆô *4°D·K±KÄÔ)G�—‘×#Ñ#Ô%ÈTÏ[É[ˆÜ˜f l°D×4HÑ4HÓIˆÜ�4˜Ô#ØŸ,™,×,Ñ,Ó.‰KàˆKØ�‰�‰×Ñ˜t [°$·,±,ÀÕNr   c                 ó`   •— t         ‰| �  «       }| j                  |d<   | j                  |d<   |S )Nzgunicorn.sockÚRAW_URI)r   Úget_environr
   Úpath)r   Úenvr)   s     €r   r“   zPyWSGIHandler.get_environ³   s0   ø€ Ü‰gÑ!Ó#ˆØ#Ÿ{™{ˆˆOÑØŸ™ˆˆI‰Øˆ
r   )ro   rp   rq   r�   r“   rr   rs   s   @r   r~   r~   ¡   s   ø„ òO÷ ð r   r~   c                   ó   — e Zd Zy)ÚPyWSGIServerN)ro   rp   rq   r|   r   r   r—   r—   º   s   „ Ør   r—   c                   ó   — e Zd ZdZeZeZy)ÚGeventPyWSGIWorkerz&The Gevent StreamServer based workers.N)ro   rp   rq   Ú__doc__r—   r>   r~   rB   r|   r   r   r™   r™   ¾   s   „ Ù,Ø€LØ �Lr   r™   )$r"   r&   r   Ú	functoolsr   rI   r+   Úpackaging.versionr   Úparse_versionÚ__version__ÚRuntimeErrorÚImportErrorÚgevent.poolr   Úgevent.serverr   r   r	   r
   r   ÚgunicornÚgunicorn.http.wsgir   Úgunicorn.sockr   Úgunicorn.workers.base_asyncr   r@   r   ru   ÚWSGIHandlerr~   Ú
WSGIServerr—   r™   r|   r   r   ú<module>r©      sß   ðó
 
Û 
Ý Ý Û ðJÛõ 9Ù�V×'Ñ'Ó(©=¸Ó+?Ò?ÙÐHÓIÐIå Ý &ß .Ó .ã Ý +Ý %Þ 3à%+×%7Ó%7¸×9MÒ9MÐ
N€ôr�;ô r÷j	ñ 	ô�F×&Ñ&ô ô2	�6×$Ñ$ô 	ô!˜õ !øðc ò FÙ
ÐDÓ
EÐEðFús   šC ÃC*