Ë
    qûàg#&  ã                   óÜ   — 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mZmZmZmZmZmZmZmZmZmZmZmZ d dlmZmZ d dlmZ d d	l m!Z!  G d
„ d«      Z"y)é    N)Údatetime)Úrandint)ÚSSLError)Úutil)ÚForbiddenProxyRequestÚInvalidHeaderÚInvalidHeaderNameÚInvalidHTTPVersionÚInvalidProxyLineÚInvalidRequestLineÚInvalidRequestMethodÚInvalidSchemeHeadersÚLimitRequestHeadersÚLimitRequestLineÚUnsupportedTransferCodingÚConfigurationProblemÚObsoleteFolding)ÚResponseÚdefault_environ)Úreloader_engines)Ú	WorkerTmpc                   óØ   — e Zd Zdj                  «       D � ���cg c]  }t	        t
        d|z  «      ‘Œ c}}}} Zg 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d„ Zyc c}}}} w )ÚWorkerz+ABRT HUP QUIT INT TERM USR1 USR2 WINCH CHLDzSIG%sc                 óx  — || _         d| _        || _        || _        || _        || _        || _        d| _        d| _        d| _	        d| _
        |j                  dkD  r+t        d|j                  «      }|j                  |z   | _        nt        j                  | _        d| _        || _        t%        |«      | _        y)zÎ        This is called pre-fork so it shouldn't do anything to the
        current process. If there's a need to make process wide
        changes you'll want to do that in ``self.init_process()``.
        z	[booting]FNr   T)ÚageÚpidÚppidÚsocketsÚappÚtimeoutÚcfgÚbootedÚabortedÚreloaderÚnrÚmax_requestsr   Úmax_requests_jitterÚsysÚmaxsizeÚaliveÚlogr   Útmp)	Úselfr   r   r   r   r    r!   r+   Újitters	            úS/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/gunicorn/workers/base.pyÚ__init__zWorker.__init__&   s©   € ð ˆŒØˆŒØˆŒ	ØˆŒØˆŒØˆŒØˆŒØˆŒØˆŒØˆŒàˆŒà×Ñ˜aÒÜ˜Q × 7Ñ 7Ó8ˆFØ #× 0Ñ 0°6Ñ 9ˆDÕä #§¡ˆDÔàˆŒ
ØˆŒÜ˜S“>ˆ�ó    c                 ó    — d| j                   z  S )Nz<Worker %s>)r   ©r-   s    r/   Ú__str__zWorker.__str__C   s   € Ø˜tŸx™xÑ'Ð'r1   c                 ó8   — | j                   j                  «        y)z×        Your worker subclass must arrange to have this method called
        once every ``self.timeout`` seconds. If you fail in accomplishing
        this task, the master process will murder your workers.
        N)r,   Únotifyr3   s    r/   r6   zWorker.notifyF   s   € ð 	�‰�‰Õr1   c                 ó   — t        «       ‚)z¼        This is the mainloop of a worker process. You should override
        this method in a subclass to provide the intended behaviour
        for your particular evil schemes.
        )ÚNotImplementedErrorr3   s    r/   Úrunz
Worker.runN   s   € ô "Ó#Ð#r1   c                 óì  ‡ — ‰ j                   j                  r?‰ j                   j                  j                  «       D ]  \  }}|t        j                  |<   Œ t        j                  ‰ j                   j                  ‰ j                   j                  ‰ j                   j                  ¬«       t        j                  «        t        j                  «       ‰ _        ‰ j                  D ],  }t        j                  |«       t        j                  |«       Œ. ‰ j                  D ]  }t        j                  |«       Œ t        j                  ‰ j                   j#                  «       «       ‰ j                  ‰ j                  d   gz   ‰ _        ‰ j&                  j                  «        ‰ j)                  «        ‰ j                   j*                  rEˆ fd„}t,        ‰ j                   j.                     } |‰ j                   j0                  |¬«      ‰ _        ‰ j5                  «        ‰ j2                  r‰ j2                  j7                  «        ‰ j                   j9                  ‰ «       d‰ _        ‰ j=                  «        y)zÑ        If you override this method in a subclass, the last statement
        in the function should be to call this method with
        super().init_process() so that the ``run()`` loop is initiated.
        )Ú
initgroupsr   c                 ó  •— ‰j                   j                  d| «       d‰_        t        j                  ‰j
                  d   d«       ‰j                  j                  ‰«       t        j                  d«       t        j                  d«       y )NzWorker reloading: %s modifiedFé   ó   1çš™™™™™¹?r   )r+   Úinfor*   ÚosÚwriteÚPIPEr!   Ú
worker_intÚtimeÚsleepr(   Úexit)Úfnamer-   s    €r/   Úchangedz$Worker.init_process.<locals>.changed{   s[   ø€ Ø—‘—‘Ð=¸uÔEØ"�”
Ü—‘˜Ÿ™ 1™ tÔ,Ø—‘×#Ñ# DÔ)Ü—
‘
˜3”Ü—‘˜•r1   )Úextra_filesÚcallbackTN)r!   ÚenvÚitemsrA   Úenvironr   Úset_owner_processÚuidÚgidr;   ÚseedÚpiperC   Úset_non_blockingÚclose_on_execr   r,   ÚfilenoÚwait_fdsr+   Úinit_signalsÚreloadr   Úreload_engineÚreload_extra_filesr$   Ú	load_wsgiÚstartÚpost_worker_initr"   r9   )r-   ÚkÚvÚpÚsrI   Úreloader_clss   `      r/   Úinit_processzWorker.init_processV   s·  ø€ ð �8‰8�<Š<ØŸ™Ÿ™×*Ñ*Ó,ò "‘��1Ø !”—
‘
˜1’ð"ô 	×Ñ˜tŸx™xŸ|™|¨T¯X©X¯\©\Ø*.¯(©(×*=Ñ*=õ	?ô 	�	‰	Œô —G‘G“IˆŒ	Ø—‘ò 	"ˆAÜ×!Ñ! !Ô$Ü×Ñ˜qÕ!ð	"ð
 —‘ò 	"ˆAÜ×Ñ˜qÕ!ð	"ä×Ñ˜4Ÿ8™8Ÿ?™?Ó,Ô-àŸ™¨¯	©	°!© ~Ñ5ˆŒà�‰×ÑÔ à×ÑÔð �8‰8�?Š?ôô ,¨D¯H©H×,BÑ,BÑCˆLÙ(°T·X±X×5PÑ5PØ29ô;ˆDŒMð 	�‰ÔØ�=Š=Ø�M‰M×ÑÔ!à�‰×!Ñ! $Ô'ð ˆŒØ�‰�
r1   c                 ó  — 	 | j                   j                  «       | _        y # t        $ rÕ}| j                  j                  s‚ | j
                  j                  |«       	 t        j                  «       \  }}}| j                  j                  |j                  «       t        j                  «       }t        j                  ||¬«       t!        j"                  |j%                  «       «      | _        ~n# ~w xY wY d }~y d }~ww xY w)N)Úfile)r   ÚwsgiÚSyntaxErrorr!   rY   r+   Ú	exceptionr(   Úexc_infor$   Úadd_extra_fileÚfilenameÚioÚStringIOÚ	tracebackÚprint_tbr   Úmake_fail_appÚgetvalue)r-   ÚeÚ_Úexc_valÚexc_tbÚ	tb_strings         r/   r\   zWorker.load_wsgi‘   s¶   € ð	ØŸ™Ÿ™›ˆD�IøÜò 	Ø—8‘8—?’?Øà�H‰H×Ñ˜qÔ!ðÜ%(§\¡\£^Ñ"��7˜FØ—‘×,Ñ,¨W×-=Ñ-=Ô>äŸK™K›M�	Ü×"Ñ" 6°	Õ:Ü ×.Ñ.¨y×/AÑ/AÓ/CÓD�”	áø‘Fú”Fûð%	ús-   ‚" ¢	D «2C;ÁBC0Ã.C;Ã0C3Ã3C;Ã;D c                 óŒ  — | j                   D ]&  }t        j                  |t        j                  «       Œ( t        j                  t        j                  | j                  «       t        j                  t        j
                  | j                  «       t        j                  t        j                  | j                  «       t        j                  t        j                  | j                  «       t        j                  t        j                  | j                  «       t        j                  t        j                  | j                  «       t        j                  t        j
                  d«       t        j                  t        j                  d«       t        t        d«      r#t        j                   | j"                  d   «       y y )NFÚset_wakeup_fdr=   )ÚSIGNALSÚsignalÚSIG_DFLÚSIGQUITÚhandle_quitÚSIGTERMÚhandle_exitÚSIGINTÚSIGWINCHÚhandle_winchÚSIGUSR1Úhandle_usr1ÚSIGABRTÚhandle_abortÚsiginterruptÚhasattrry   rC   )r-   rb   s     r/   rX   zWorker.init_signals¨   s  € à—‘ò 	-ˆAÜ�M‰M˜!œVŸ^™^Õ,ð	-ô 	�‰”f—n‘n d×&6Ñ&6Ô7Ü�‰”f—n‘n d×&6Ñ&6Ô7Ü�‰”f—m‘m T×%5Ñ%5Ô6Ü�‰”f—o‘o t×'8Ñ'8Ô9Ü�‰”f—n‘n d×&6Ñ&6Ô7Ü�‰”f—n‘n d×&7Ñ&7Ô8ô 	×ÑœFŸN™N¨EÔ2Ü×ÑœFŸN™N¨EÔ2ä”6˜?Ô+Ü× Ñ  §¡¨1¡Õ.ð ,r1   c                 ó8   — | j                   j                  «        y )N)r+   Úreopen_files©r-   ÚsigÚframes      r/   r…   zWorker.handle_usr1¼   s   € Ø�‰×ÑÕr1   c                 ó   — d| _         y )NF)r*   rŒ   s      r/   r€   zWorker.handle_exit¿   s	   € Øˆ�
r1   c                 óœ   — d| _         | j                  j                  | «       t        j                  d«       t        j                  d«       y )NFr?   r   )r*   r!   rD   rE   rF   r(   rG   rŒ   s      r/   r~   zWorker.handle_quitÂ   s1   € ØˆŒ
à�‰×Ñ˜DÔ!Ü�
‰
�3ŒÜ�‰��r1   c                 ór   — d| _         | j                  j                  | «       t        j                  d«       y )NFr=   )r*   r!   Úworker_abortr(   rG   rŒ   s      r/   r‡   zWorker.handle_abortÉ   s&   € ØˆŒ
Ø�‰×Ñ˜dÔ#Ü�‰��r1   c                 ó4  — t        j                  «       }|xs d}t        |t        t        t
        t        t        t        t        t        t        t        t        t        t        t         f«      �rúd}d}t        |t        «      rdt#        |«      z  }�n›t        |t        «      rdt#        |«      z  }�n{t        |t
        «      rdt#        |«      z  }�n[t        |t        «      rdt#        |«      z  }d}�n9t        |t        «      rdt#        |«      z  }d	}�nt        |t        «      rdt#        |«      z  }nøt        |t        t        f«      r)dt#        |«      z  }|sÒt%        |d
«      rÆ|j&                  }n¹t        |t        «      rdt#        |«      z  }nšt        |t        «      rd}dt#        |«      z  }d}nwt        |t        «      rdt#        |«      z  }nXt        |t        «      rd}d}d}nAt        |t        «      rdt#        |«      z  }n"t        |t         «      rd}dt#        |«      z  }d}d}	| j(                  j+                  |	j-                  |d   t#        |«      ¬«      «       nTt%        |d«      r'| j(                  j/                  d|j0                  «       n| j(                  j/                  d«       d	}d}d}|�˜t        j                  «       |z
  }
t3        ||| j4                  «      }|d   |d<   t#        |d   «      |d<   t7        ||| j4                  «      }|›d|›�|_        t;        «      |_        | j(                  j?                  ||||
«       	 tA        jB                  |||«       y # tD        $ r | j(                  jG                  d«       Y y w xY w)N)Ú éÿÿÿÿi�  zBad RequestzInvalid Request Line '%s'zInvalid Method '%s'zInvalid HTTP Version '%s'z%siõ  iô  ÚreqzRequest Header Fields Too LargezError parsing headers: '%s'i¯  z'%s'Ú	ForbiddenzRequest forbiddeni“  z%Invalid request from ip={ip}: {error}r   )ÚipÚerrorÚurizError handling request %sz$Error handling request (no URI read)zInternal Server Errorr”   ÚREMOTE_ADDRr=   ÚREMOTE_PORTú zFailed to send error message.)$r   ÚnowÚ
isinstancer   r   r
   r   r	   r   r   r   r   r   r   r   r   r   Ústrr‰   r–   r+   ÚwarningÚformatri   rš   r   r!   r   ÚstatusÚlenÚresponse_lengthÚaccessr   Úwrite_errorÚ	ExceptionÚdebug)r-   r–   ÚclientÚaddrÚexcÚrequest_startÚ
status_intÚreasonÚmesgÚmsgÚrequest_timerN   Úresps                r/   Úhandle_errorzWorker.handle_errorÎ   s  € Ü Ÿ™›ˆØÒ�xˆÜ�cÜÔ 4Ü¤Ô/@ÜÔ1ÜÔ3Ü Ô";Ü ¤/Üð
õ ð ˆJØ"ˆFä˜#Ô1Ô2Ø2´S¸³XÑ=’Ü˜CÔ!5Ô6Ø,¬s°3«xÑ7’Ü˜CÔ!3Ô4Ø2´S¸³XÑ=’Ü˜CÔ!:Ô;Øœc #›h‘�Ø ’
Ü˜CÔ!5Ô6Øœc #›h‘�Ø ’
Ü˜C¤Ô1Øœc #›h‘‘Ü˜CÔ"3´]Ð!DÔEØœc #›h‘�Ùœw s¨EÔ2ØŸ'™'‘CÜ˜CÔ!1Ô2Øœc #›h‘‘Ü˜CÔ!4Ô5Ø:�Ø4´s¸3³xÑ?�Ø ‘
Ü˜CÔ!1Ô2Ø¤ C£Ñ(‘Ü˜CÔ!6Ô7Ø$�Ø*�Ø ‘
Ü˜CÔ!5Ô6Øœc #›h‘‘Ü˜C¤Ô*Ø$�Ø¤ C£Ñ(�Ø �
à9ˆCØ�H‰H×Ñ˜SŸZ™Z¨4°©7¼#¸c»(˜ZÓCÕDä�s˜EÔ"Ø—‘×"Ñ"Ð#>ÀÇÁÕHà—‘×"Ñ"Ð#IÔJØˆJØ,ˆFØˆDàˆ?Ü#Ÿ<™<›>¨MÑ9ˆLÜ% c¨6°4·8±8Ó<ˆGØ%)¨!¡WˆG�MÑ"Ü%(¨¨a©£\ˆG�MÑ"Ü˜C ¨¯©Ó2ˆDÚ%/±Ð8ˆDŒKÜ#& t£9ˆDÔ Ø�H‰H�O‰O˜D # w°Ô=ð	<Ü×Ñ˜V Z°¸Õ>øÜò 	<Ø�H‰H�N‰NÐ:Ö;ð	<ús   ÍM0 Í0$NÎNc                 ó:   — | j                   j                  d«       y )Nzworker: SIGWINCH ignored.)r+   r©   )r-   r�   rH   s      r/   rƒ   zWorker.handle_winch  s   € à�‰�‰Ð2Õ3r1   N)Ú__name__Ú
__module__Ú__qualname__ÚsplitÚgetattrr{   rz   rC   r0   r4   r6   r9   rd   r\   rX   r…   r€   r~   r‡   r´   rƒ   )Ú.0Úxrº   r{   s   0000r/   r   r      s‚   „ ð 	6×;Ñ;Ó=÷ñ °Œw”v˜w¨™{Õ+õ €Gð €Dò"ò:(òò$ò9òvò./ò( òòòò
M<ó^4ùõ{s   šA$
r   )#rm   rA   r{   r(   rE   ro   r   Úrandomr   Ússlr   Úgunicornr   Úgunicorn.http.errorsr   r   r	   r
   r   r   r   r   r   r   r   r   r   Úgunicorn.http.wsgir   r   Úgunicorn.reloaderr   Úgunicorn.workers.workertmpr   r   © r1   r/   ú<module>rÅ      sP   ðó
 
Û 	Û Û 
Û Û Ý Ý Ý å ÷÷ ÷ õ ÷ 9Ý .Ý 0÷A4ò A4r1   