Ë
    qûàgÔ0  ã                   óò   — 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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 d	d
lmZ d	dlmZ d	dlmZ d	dlmZ  G d„ d«      Z G d„ dej.                  «      Zy)é    )ÚfuturesN)Údeque)Údatetime)Úpartial)ÚRLocké   )Úbaseé   )Úhttp)Úutil)Úsock)Úwsgic                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚTConnc                 óœ   — || _         || _        || _        || _        d | _        d | _        d| _        | j                  j                  d«       y )NF)Úcfgr   ÚclientÚserverÚtimeoutÚparserÚinitializedÚsetblocking)Úselfr   r   r   r   s        úV/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/gunicorn/workers/gthread.pyÚ__init__zTConn.__init__#   sH   € ØˆŒØˆŒ	ØˆŒØˆŒàˆŒØˆŒØ ˆÔð 	�	‰	×Ñ˜eÕ$ó    c                 ó`  — d| _         | j                  j                  d«       | j                  €€| j                  j
                  r/t        j                  | j                  | j                  «      | _        t        j                  | j                  | j                  | j                  «      | _        y y )NT)
r   r   r   r   r   Úis_sslÚssl_wrap_socketr   ÚRequestParserr   ©r   s    r   Úinitz
TConn.init0   sv   € ØˆÔØ�	‰	×Ñ˜dÔ#à�;‰;Ðà�x‰x�ŠÜ ×0Ñ0°·±¸D¿H¹HÓE�”	ô ×,Ñ,¨T¯X©X°t·y±yÀ$Ç+Á+ÓNˆD�Kð r   c                 ód   — t        j                   «       | j                  j                  z   | _        y ©N)Útimer   Ú	keepaliver   r!   s    r   Úset_timeoutzTConn.set_timeout<   s   € ä—y‘y“{ T§X¡X×%7Ñ%7Ñ7ˆ�r   c                 óB   — t        j                  | j                  «       y r$   )r   Úcloser   r!   s    r   r)   zTConn.close@   s   € Ü�
‰
�4—9‘9Õr   N)Ú__name__Ú
__module__Ú__qualname__r   r"   r'   r)   © r   r   r   r   !   s   „ ò%ò
Oò8ór   r   c                   ó€   ‡ — e Zd Zˆ fd„Zed„ «       Zˆ fd„Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZS )ÚThreadWorkerc                 ó2  •— t        ‰| �  |i |¤Ž | j                  j                  | _        | j                  j                  | j                  j                  z
  | _        d | _        d | _        d | _        t        «       | _
        t        «       | _        d| _        y )Nr   )Úsuperr   r   Úworker_connectionsÚthreadsÚmax_keepalivedÚtpoolÚpollerÚ_lockr   r   Ú_keepÚnr_conns)r   ÚargsÚkwargsÚ	__class__s      €r   r   zThreadWorker.__init__F   sv   ø€ Ü‰Ñ˜$Ð) &Ò)Ø"&§(¡(×"=Ñ"=ˆÔØ"Ÿh™h×9Ñ9¸D¿H¹H×<LÑ<LÑLˆÔàˆŒ
ØˆŒØˆŒ
Ü“wˆŒÜ“WˆŒ
Øˆ�r   c                 ó~   — |j                   |j                  z
  }|dk  r|j                  r|j                  d«       y y y )Nr   z]No keepalived connections can be handled. Check the number of worker connections and threads.)r2   r3   r&   Úwarning)Úclsr   Úlogr4   s       r   Úcheck_configzThreadWorker.check_configR   s?   € à×/Ñ/°#·+±+Ñ=ˆà˜QÒ 3§=¢=Ø�K‰Kð Nõ Oð $1Ðr   c                 óœ   •— | j                  «       | _        t        j                  «       | _        t        «       | _        t        ‰| �!  «        y r$   )	Úget_thread_poolr5   Ú	selectorsÚDefaultSelectorr6   r   r7   r1   Úinit_process)r   r<   s    €r   rF   zThreadWorker.init_processZ   s7   ø€ Ø×)Ñ)Ó+ˆŒ
Ü×/Ñ/Ó1ˆŒÜ“WˆŒ
Ü‰ÑÕr   c                 óV   — t        j                  | j                  j                  ¬«      S )z@Override this method to customize how the thread pool is created)Úmax_workers)r   ÚThreadPoolExecutorr   r3   r!   s    r   rC   zThreadWorker.get_thread_pool`   s   € ä×)Ñ)°d·h±h×6FÑ6FÔGÐGr   c                 óÒ   — d| _         | j                  j                  | «       | j                  j	                  d«       t        j                  d«       t        j                  d«       y )NFgš™™™™™¹?r   )	Úaliver   Ú
worker_intr5   Úshutdownr%   ÚsleepÚsysÚexit)r   ÚsigÚframes      r   Úhandle_quitzThreadWorker.handle_quitd   sC   € ØˆŒ
à�‰×Ñ˜DÔ!Ø�
‰
×Ñ˜EÔ"Ü�
‰
�3ŒÜ�‰��r   c                 ó~   — ||_         | j                  j                  |«       |j                  | j                  «       y r$   )Úconnr   ÚappendÚadd_done_callbackÚfinish_request)r   ÚfsrU   s      r   Ú_wrap_futurezThreadWorker._wrap_futurel   s/   € ØˆŒØ�‰×Ñ˜BÔØ
×Ñ˜T×0Ñ0Õ1r   c                 ó”   — |j                  «        | j                  j                  | j                  |«      }| j	                  ||«       y r$   )r"   r5   ÚsubmitÚhandlerZ   )r   rU   rY   s      r   Úenqueue_reqzThreadWorker.enqueue_reqq   s5   € Ø�	‰	Œà�Z‰Z×Ñ˜tŸ{™{¨DÓ1ˆØ×Ñ˜"˜dÕ#r   c           	      óþ  — 	 |j                  «       \  }}t        | j                  |||«      }| xj                  dz  c_        | j                  5  | j
                  j                  |j                  t        j                  t        | j                  |«      «       d d d «       y # 1 sw Y   y xY w# t        $ rF}|j                  t        j                  t        j                  t        j                   fvr‚ Y d }~y d }~ww xY w)Nr   )Úacceptr   r   r9   r7   r6   Úregisterr   rD   Ú
EVENT_READr   Úon_client_socket_readableÚOSErrorÚerrnoÚEAGAINÚECONNABORTEDÚEWOULDBLOCK)r   r   Úlistenerr   r   rU   Úes          r   r`   zThreadWorker.acceptw   sË   € ð	Ø#Ÿ?™?Ó,‰LˆD�&ä˜Ÿ™ 4¨°Ó8ˆDà�MŠM˜QÑ�Mà—‘ñ TØ—‘×$Ñ$ T§Y¡Y´	×0DÑ0DÜ%,¨T×-KÑ-KÈTÓ%RôT÷T÷ Tñ Tûô ò 	Ø�w‰wœuŸ|™|¬U×-?Ñ-?Ü$×0Ñ0ð2ñ 2àô2ûð	ús7   ‚AB- ÁA
B!ÂB- Â!B*Â&B- Â*B- Â-	C<Â6<C7Ã7C<c                 ó  — | j                   5  | j                  j                  |«       |j                  r	 | j                  j                  |«       d d d «       | j                  |«       y # t        $ r Y d d d «       y w xY w# 1 sw Y   Œ2xY wr$   )r7   r6   Ú
unregisterr   r8   ÚremoveÚ
ValueErrorr^   )r   rU   r   s      r   rc   z&ThreadWorker.on_client_socket_readable‡   s~   € Ø�Z‰Zñ 
	à�K‰K×"Ñ" 6Ô*à×ÒðØ—J‘J×%Ñ% dÔ+÷
	ð 	×Ñ˜Õøô "ò à÷
	ð 
	ðú÷
	ð 
	ús(   �(B¶A+Á+	A?Á4BÁ>A?Á?BÂBc                 óà  — t        j                   «       }	 | j                  5  	 | j                  j                  «       }	 d d d «       j
                  |z
  }|dkD  r1| j                  5  | j                  j                  |«       d d d «       y | xj                  dz  c_        | j                  5  	 | j                  j                  |j                  «       d d d «       |j!                  «        Œ×# t        $ r Y d d d «       y w xY w# 1 sw Y   ŒÆxY w# 1 sw Y   y xY w# t        $ r(}|j                  t        j                  k7  r‚ Y d }~Œtd }~wt        $ r Y Œ‚t        $ r Y ŒŒw xY w# 1 sw Y   Œ‘xY w)Nr   r   )r%   r7   r8   ÚpopleftÚ
IndexErrorr   Ú
appendleftr9   r6   rl   r   rd   re   ÚEBADFÚKeyErrorrn   r)   )r   ÚnowrU   Údeltarj   s        r   Úmurder_keepalivedzThreadWorker.murder_keepalived—   s;  € Ü�i‰i‹kˆØØ—‘ñ ðàŸ:™:×-Ñ-Ó/‘D÷ð —L‘L 3Ñ&ˆEØ�qŠyà—Z‘Zñ 0Ø—J‘J×)Ñ)¨$Ô/÷0àà—’ Ñ"•à—Z‘Zñ ð
ØŸ™×.Ñ.¨t¯y©yÔ9÷ð —
‘
”ð? øô
 "ò Ø÷ð ðú÷	ð ú÷0àûô #ò "ØŸ7™7¤e§k¡kÒ1Ø!ô 2ûä#ò áÜ%ò áðú÷ð ús|   ¢D¤C-Á'DÂ-E$Â/%DÃ-	DÃ6DÄ DÄDÄDÄDÄ	E!Ä%EÅE$ÅE!ÅE$ÅE!ÅE$Å E!Å!E$Å$E-c                 ó€   — | j                   t        j                  «       k7  r| j                  j	                  d| «       yy)Nz!Parent changed, shutting down: %sFT)ÚppidÚosÚgetppidr@   Úinfor!   s    r   Úis_parent_alivezThreadWorker.is_parent_aliveº   s-   € à�9‰9œŸ
™
›Ò$Ø�H‰H�M‰MÐ=¸tÔDØØr   c                 ón  — | j                   D ]f  } |j                  d«        |j                  «       }t        | j                  |«      }| j
                  j                  |t        j                  |«       Œh | j                  �r(| j                  «        | j                  | j                  k  rt| j
                  j                  d«      }|D ]#  \  }}|j                  } ||j                  «       Œ% t!        j"                  | j                   dt         j$                  ¬«      }n0t!        j"                  | j                   dt         j$                  ¬«      }|j&                  D ]  }	| j                   j)                  |	«       Œ | j+                  «       sn| j-                  «        | j                  r�Œ(| j.                  j1                  d«       | j
                  j3                  «        | j                   D ]  }
|
j3                  «        Œ t!        j"                  | j                   | j4                  j6                  ¬«       y )NFg      ð?r   )r   Úreturn_when)r   )Úsocketsr   Úgetsocknamer   r`   r6   ra   rD   rb   rK   Únotifyr9   r2   ÚselectÚdataÚfileobjr   ÚwaitÚFIRST_COMPLETEDÚdonerm   r}   rw   r5   rM   r)   r   Úgraceful_timeout)r   r   r   ÚacceptorÚeventsÚkeyÚ_ÚcallbackÚresultÚfutÚss              r   ÚrunzThreadWorker.runÁ   s¸  € à—L‘Lò 	GˆDØˆD×Ñ˜UÔ#ð &�T×%Ñ%Ó'ˆFÜ˜tŸ{™{¨FÓ3ˆHØ�K‰K× Ñ  ¤y×';Ñ';¸XÕFð	Gð �j‹jà�K‰KŒMð �}‰}˜t×6Ñ6Ò6àŸ™×+Ñ+¨CÓ0�Ø$ò *‘F�C˜Ø"Ÿx™x�HÙ˜SŸ[™[Õ)ð*ô
 !Ÿ™ d§l¡l¸AÜ29×2IÑ2IôK‘ô !Ÿ™ d§l¡l¸CÜ29×2IÑ2IôK�ð —{‘{ò )�Ø—‘×#Ñ# CÕ(ð)ð ×'Ñ'Ô)Øð ×"Ñ"Ô$ð9 �jŒjð< 	�
‰
×Ñ˜EÔ"Ø�‰×ÑÔà—‘ò 	ˆAØ�G‰G�Ið	ô 	�‰�T—\‘\¨4¯8©8×+DÑ+DÖEr   c           	      óð  — |j                  «       r0| xj                  dz  c_        |j                  j                  «        y 	 |j	                  «       \  }}|r±| j
                  r¥|j                  j                  d«       |j                  «        | j                  5  | j                  j                  |«       | j                  j                  |j                  t        j                  t!        | j"                  |«      «       d d d «       y | xj                  dz  c_        |j                  «        y # 1 sw Y   y xY w# t$        $ r2 | xj                  dz  c_        |j                  j                  «        Y y w xY w)Nr   F)Ú	cancelledr9   rU   r)   r�   rK   r   r   r'   r7   r8   rV   r6   ra   rD   rb   r   rc   Ú	Exception)r   rY   r&   rU   s       r   rX   zThreadWorker.finish_requestñ   s  € Ø�<‰<Œ>Ø�MŠM˜QÑ�MØ�G‰G�M‰MŒOØð	Ø "§	¡	£ÑˆY˜ñ ˜TŸZšZà—	‘	×%Ñ% eÔ,ð × Ñ Ô"Ø—Z‘Zñ XØ—J‘J×%Ñ% dÔ+ð —K‘K×(Ñ(¨¯©´I×4HÑ4HÜ)0°×1OÑ1OÐQUÓ)VôX÷	Xð Xð —’ Ñ"•Ø—
‘
•÷Xð Xûô ò 	ð �MŠM˜QÑ�MØ�G‰G�M‰MŽOð		ús8   ÁAD: ÂA%D.Ã?D: Ä%D: Ä.D7Ä3D: Ä7D: Ä:8E5Å4E5c                 óD  — d}d }	 t        |j                  «      }|sd|fS | j                  ||«      }|r||fS 	 d|fS # t        j                  j
                  $ r)}| j                  j                  d|«       Y d }~d|fS d }~wt        $ r)}| j                  j                  d|«       Y d }~d|fS d }~wt        j                  $ r¦}|j                  d   t        j                  k(  r6| j                  j                  d«       |j                  j                  «        nC| j                  j                  d«       | j                  ||j                  |j                   |«       Y d }~d|fS d }~wt"        $ rñ}|j$                  t$        j&                  t$        j(                  t$        j*                  fvr| j                  j-                  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|fS d }~wt.        $ r5}| j                  ||j                  |j                   |«       Y d }~d|fS d }~ww xY w)NFz*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 connection epipe)Únextr   Úhandle_requestr   ÚerrorsÚ
NoMoreDatar@   ÚdebugÚStopIterationÚsslÚSSLErrorr:   ÚSSL_ERROR_EOFr   r)   Úhandle_errorr   rd   re   ÚEPIPEÚ
ECONNRESETÚENOTCONNÚ	exceptionr•   )r   rU   r&   Úreqrj   s        r   r]   zThreadWorker.handle  s   € Øˆ	Øˆð!	>Ü�t—{‘{Ó#ˆCÙØ˜t�}Ð$ð ×+Ñ+¨C°Ó6ˆIÙØ! 4Ð(Ð(ð ð8 �tˆ}Ðøô5 �{‰{×%Ñ%ò 	LØ�H‰H�N‰NÐGÈ×KÐKð2 �tˆ}Ðûô/ ò 	8Ø�H‰H�N‰NÐ3°Q×7Ð7ð, �tˆ}Ðûô+ �|‰|ò 	BØ�v‰v�a‰yœC×-Ñ-Ò-Ø—‘—‘Ð6Ô7Ø—	‘	—‘Õ!à—‘—‘Ð>Ô?Ø×!Ñ! # t§y¡y°$·+±+¸qÔAûð �tˆ}Ðûô ò 		@Ø�w‰wœuŸ{™{¬E×,<Ñ,<¼e¿n¹nÐMÑMØ—‘×"Ñ"Ð#EÕFà—7‘7œe×.Ñ.Ò.Ø—H‘H—N‘NÐ#>Õ?Ø—W‘W¤§¡Ò.Ø—H‘H—N‘NÐ#BÕCà—H‘H—N‘NÐ#>Ô?ûð �tˆ}Ðûô ò 	>Ø×Ñ˜c 4§9¡9¨d¯k©k¸1×=Ð=à�tˆ}Ðûð	>úsK   †> ¡> ¾JÁA?Á?JÂB/Â/JÃBE&Å&JÅ2C$IÉJÉ*(JÊJc                 ór  — i }d }	 | j                   j                  | |«       t        j                  «       }t	        j
                  ||j                  |j                  |j                  | j                   «      \  }}d|d<   | xj                  dz  c_	        | j                  | j                  k\  r>| j                  r"| j                  j                  d«       d| _        |j                  «        | j                  r| j                   j                  s|j                  «        n2t!        | j"                  «      | j$                  k\  r|j                  «        | j	                  ||j&                  «      }	 t)        ||d   «      r|j+                  |«       n|D ]  }|j-                  |«       Œ |j/                  «        t        j                  «       |z
  }| j                  j1                  ||||«       t3        |d«      r|j/                  «        	 |j5                  «       r<| j                  j7                  d«       	 	 | j                   j9                  | |||«       y	 	 | j                   j9                  | |||«       y# t        j                  «       |z
  }| j                  j1                  ||||«       t3        |d«      r|j/                  «        w w xY w# t:        $ r | j                  j=                  d	«       Y yw xY w# t>        $ r' tA        jB                  tE        jF                  «       Ž  Y ŒÐt:        $ r‘ |r�|jH                  r�| j                  j=                  d
«       	 |j                  jK                  tL        jN                  «       |j                  j/                  «        tQ        «       ‚# t>        $ r Y tQ        «       ‚w xY w‚ w xY w# t:        $ r | j                  j=                  d	«       Y yw xY w# 	 | j                   j9                  | |||«       w # t:        $ r | j                  j=                  d	«       Y w w xY wxY w)NTzwsgi.multithreadr   z,Autorestarting worker after current request.Fzwsgi.file_wrapperr)   zClosing connection.zException in post_request hookzError handling request))r   Úpre_requestr   ru   r   Úcreater   r   r   ÚnrÚmax_requestsrK   r@   r|   Úforce_closer&   Úlenr8   r4   Ústart_responseÚ
isinstanceÚ
write_fileÚwriter)   ÚaccessÚhasattrÚshould_closer›   Úpost_requestr•   r¤   rd   r   ÚreraiserO   Úexc_infoÚheaders_sentrM   ÚsocketÚ	SHUT_RDWRrœ   )	r   r¥   rU   ÚenvironÚrespÚrequest_startÚrespiterÚitemÚrequest_times	            r   r˜   zThreadWorker.handle_request8  sc  € ØˆØˆð7	EØ�H‰H× Ñ   sÔ+Ü$ŸL™L›NˆMÜ ŸK™K¨¨T¯Y©Y¸¿¹Ø(,¯©°T·X±Xó?‰MˆD�'à*.ˆGÐ&Ñ'Ø�GŠG�q‰L�GØ�w‰w˜$×+Ñ+Ò+Ø—:’:Ø—H‘H—M‘MÐ"PÔQØ!&�D”JØ× Ñ Ô"à—:’: T§X¡X×%7Ò%7Ø× Ñ Õ"Ü�T—Z‘Z“ D×$7Ñ$7Ò7Ø× Ñ Ô"à—y‘y ¨$×*=Ñ*=Ó>ˆHð%Ü˜h¨Ð0CÑ(DÔEØ—O‘O HÕ-à (ò )˜ØŸ
™
 4Õ(ð)ð —
‘
”ä'Ÿ|™|›~°Ñ=�Ø—‘—‘  c¨7°LÔAÜ˜8 WÔ-Ø—N‘NÕ$à× Ñ Ô"Ø—‘—‘Ð4Ô5Øð"EØ—‘×%Ñ% d¨C°¸$Õ?ð) #ð&EØ—‘×%Ñ% d¨C°¸$Ô?ð øô;  (Ÿ|™|›~°Ñ=�Ø—‘—‘  c¨7°LÔAÜ˜8 WÔ-Ø—N‘NÕ$ð .ûô0 ò EØ—‘×"Ñ"Ð#CÖDðEûô% ò 	*ä�L‰Lœ#Ÿ,™,›.Ó)Üò 	Ù˜×)Ò)ð —‘×"Ñ"Ð#;Ô<ðØ—I‘I×&Ñ&¤v×'7Ñ'7Ô8Ø—I‘I—O‘OÔ%ô $“oÐ%øô ò ØÜ#“oÐ%ðúð ð	ûô ò EØ—‘×"Ñ"Ð#CÕDàðEûðEØ—‘×%Ñ% d¨C°¸$Õ?øÜò EØ—‘×"Ñ"Ð#CÖDðEýs²   †E&K6 Å-A	I5 Æ6A=K6 È5K ÉO+ ÉO É5AK	Ë	K6 Ë$K3Ë2K3Ë6-N>Ì#O+ Ì%1N>ÍAN$Î
N>Î$	N9Î-N>Î8N9Î9N>Î>O+ Ï$O(Ï'O(Ï+P6Ï-PÐP6Ð$P3Ð0P6Ð2P3Ð3P6)r*   r+   r,   r   ÚclassmethodrA   rF   rC   rS   rZ   r^   r`   rc   rw   r}   r’   rX   r]   r˜   Ú__classcell__)r<   s   @r   r/   r/   D   sd   ø„ ô
ð ñOó ðOôòHòò2ò
$òò ò !òFò.Fò`ò>&öP<r   r/   )Ú
concurrentr   re   rz   rD   r¸   r�   rO   r%   Úcollectionsr   r   Ú	functoolsr   Ú	threadingr   Ú r	   r   r   r   r   r   ÚWorkerr/   r-   r   r   ú<module>rÈ      sW   ðõ Û Û 	Û Û Û 
Û 
Û Ý Ý Ý Ý å Ý Ý Ý Ý ÷ ñ  ôFp�4—;‘;õ pr   