o
    [Þh—J  ã                	   @   s°  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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Zd dlZd dlZd dlZzd dlmZ W n eefyc   d dlZY nw d dlmZ d dlmZ d dlZee
ddƒZ e!d "¡ ƒZ#zd dl$m$Z$ dd	„ Z%W n ey™   d
d	„ Z%Y nw dd„ Z&		dXdd„Z'ej(j)ej(j*fZ+dd„ Z,dd„ Z-dYdd„Z.dd„ Z/ej0 1d¡rÎdYdd„Z2dd„ Z3ne
j4Z3dd „ Z4d!d"„ Z5dZd$d%„Z6d&d'„ Z7d(d)„ Z8d*d+„ Z9zd d,l
m:Z: W n eyÿ   d-d.„ Z:Y nw d/d0„ Z;dYd1d2„Z<dYd3d4„Z=d5d6„ Z>d7d8„ Z?d9d:„ Z@d;d<„ ZAd[d=d>„ZBd?d@„ ZCdYdAdB„ZDdCdD„ ZEdEdF„ ZFd\dHdI„ZGdJdK„ ZHdLdM„ ZIdNdO„ ZJdPdQ„ ZKd[dRdS„ZLdTdU„ ZMdVdW„ ZNdS )]é    N)ÚAppImportError)ÚSUPPORTED_WORKERSÚdevnullz	/dev/nullz€
    connection keep-alive proxy-authenticate proxy-authorization
    te trailers transfer-encoding upgrade
    server date
    ©Úsetproctitlec                 C   s   t d|  ƒ d S )Nzgunicorn: %sr   ©Útitle© r	   úM/var/www/html/premium_crap/venv/lib/python3.10/site-packages/gunicorn/util.pyÚ_setproctitle4   ó   r   c                 C   s   d S ©Nr	   r   r	   r	   r
   r   7   s   c                    sB   t  | ¡}‡ ‡fdd„|jD ƒ}|stdˆ ˆff ƒ‚|d  ¡ S )Nc                    s$   g | ]}|j ˆ kr|jˆkr|‘qS r	   ©ÚgroupÚname)Ú.0Úepr   r	   r
   Ú
<listcomp>=   s    ÿz$load_entry_point.<locals>.<listcomp>zEntry point %r not foundr   )Úimportlib_metadataÚdistributionÚentry_pointsÚImportErrorÚload)r   r   r   Údist_objÚepsr	   r   r
   Úload_entry_point;   s
   
r   ú gunicorn.workers.sync.SyncWorkerúgunicorn.workersc                 C   sd  t  | ¡r| S |  d¡rH|  d¡d }z
| dd¡\}}W n ty*   |}|}Y nw zt|||ƒW S  tyG   t 	¡ }d}t
|| |f ƒ‚w |  d¡}t|ƒdkrˆ	 |  d¡r_| dd … } | tv rkt|   d¡}nztd|| ƒW S  ty‡   t 	¡ }d}t
|| |f ƒ‚w | d¡}	z
t d |¡¡}
W n ty¬   t 	¡ }d}t
|| |f ƒ‚w t|
|	ƒS )	Nzegg:é   ú#z)class uri %r invalid or not found: 

[%s]Ú.TÚgunicornéÿÿÿÿ)ÚinspectÚisclassÚ
startswithÚsplitÚrsplitÚ
ValueErrorr   Ú	ExceptionÚ	tracebackÚ
format_excÚRuntimeErrorÚlenr   ÚpopÚ	importlibÚimport_moduleÚjoinÚgetattr)ÚuriÚdefaultÚsectionÚ	entry_strÚdistr   ÚexcÚmsgÚ
componentsÚklassÚmodr	   r	   r
   Ú
load_classD   sV   

þý

ÿý
ý
r=   c                 C   s4   t  | ¡}d}|j ¡ D ]}|jtv r|d7 }q|S )Nr   r   )r#   Ú	signatureÚ
parametersÚvaluesÚkindÚpositionals)ÚfÚsigÚarityÚparamr	   r	   r
   Ú	get_arity|   s   

€rG   c                 C   s   t  | ¡jS )z get the username for a user id)ÚpwdÚgetpwuidÚpw_name)Úuidr	   r	   r
   Úget_username‡   s   rL   Fc                 C   s†   |r0| rzt | ƒ}W n ty   d}Y nw t|ƒd@ }|r%t ||¡ n|t ¡ kr0t |¡ | r?| t ¡ krAt | ¡ dS dS dS )z) set user and group of workers processes FiÿÿÿN)	rL   ÚKeyErrorÚabsÚosÚ
initgroupsÚgetgidÚsetgidÚgetuidÚsetuid)rK   ÚgidrP   Úusernamer	   r	   r
   Úset_owner_processŒ   s   ÿ
ÿrW   c                 C   s   t  | ||¡ d S r   )rO   Úchown)ÚpathrK   rU   r	   r	   r
   rX   £   ó   rX   Úwinc                 C   sŠ   | |ƒ |r	|}nt j |¡\}}|pd}d}|dk r9t  |¡}|r&|s,d S ||v r,d S t |¡ |d9 }|dk stjd| tdd� d S )Nr    gü©ñÒMbP?g      ð?é   z)tests may fail, delete still pending for é   )Ú
stacklevel)	rO   rY   r&   ÚlistdirÚtimeÚsleepÚwarningsÚwarnÚRuntimeWarning)ÚfuncÚpathnameÚwaitallÚdirnamer   ÚtimeoutÚLr	   r	   r
   Ú_waitfor¨   s$   
ÿ
ó

ÿrk   c                 C   s   t tj| ƒ d S r   )rk   rO   Úunlink)Úfilenamer	   r	   r
   Ú_unlinkÉ   r   rn   c              
   C   sJ   zt | ƒ W d S  ty$ } z|jtjtjfvr‚ W Y d }~d S d }~ww r   )rn   ÚOSErrorÚerrnoÚENOENTÚENOTDIR)rm   Úerrorr	   r	   r
   rl   Ï   s   ÿ€þrl   c                 C   s<   z
t  t j| ¡ W dS  ty   Y dS  ty   Y dS w )NFT)ÚsocketÚ	inet_ptonÚAF_INET6ro   r(   )Úaddrr	   r	   r
   Úis_ipv6Ø   s   üÿrx   Ú8000c                 C   s$  t  d| ¡rt  d| ¡d S |  d¡r-| dd … }zt|ƒW S  ty,   td| ƒd ‚w |  d¡r9|  d¡d } | |}}d| v r\d	| v r\|  d	¡d
 dd … }|  d¡|g d }nd| v ro|  d¡|g d d… \}}n	| dkrxd|}}zt|ƒ}W n ty‹   td| ƒ‚w | ¡ |fS )Nz
unix:(//)?r"   zfd://é   z"%r is not a valid file descriptor.ztcp://r   ú[ú]r   z]:ú:r\   Ú z0.0.0.0z%r is not a valid port number.)ÚreÚmatchr&   r%   Úintr(   r,   Úlower)ÚnetlocÚdefault_portÚfdÚhostÚportr	   r	   r
   Úparse_addressâ   s2   

ÿ


ÿrˆ   c                 C   s,   t   | t j¡}|t jO }t   | t j|¡ d S r   )ÚfcntlÚF_GETFDÚ
FD_CLOEXECÚF_SETFD©r…   Úflagsr	   r	   r
   Úclose_on_exec  s   
r�   c                 C   s(   t   | t j¡tjB }t   | t j|¡ d S r   )r‰   ÚF_GETFLrO   Ú
O_NONBLOCKÚF_SETFLr�   r	   r	   r
   Úset_non_blocking  s   r“   c                 C   s$   z|   ¡  W d S  ty   Y d S w r   )Úclosero   )Úsockr	   r	   r
   r”     s
   ÿr”   )Ú
closerangec              	   C   s4   t | |ƒD ]}zt |¡ W q ty   Y qw d S r   )ÚrangerO   r”   ro   )Úfd_lowÚfd_highr…   r	   r	   r
   r–     s   ÿýr–   c                 C   sD   t |tƒr
| d¡}dt|ƒ }d | d¡|dg¡}|  |¡ d S )Nzutf-8z%X
ó    s   
)Ú
isinstanceÚstrÚencoder-   r1   Úsendall)r•   ÚdataÚ
chunk_sizeÚchunkr	   r	   r
   Úwrite_chunk  s
   

r¢   c                 C   s   |rt | |ƒS |  |¡ d S r   )r¢   rž   )r•   rŸ   Úchunkedr	   r	   r
   Úwrite'  s   
r¤   c              	   C   sL   |   ¡ }|dkr z|  d¡ t| ||ƒW |  d¡ S |  d¡ w t| ||ƒS )Ng        r   r   )Ú
gettimeoutÚsetblockingr¤   )r•   rŸ   r£   ri   r	   r	   r
   Úwrite_nonblock-  s   
r§   c                 C   sL   t  d¡|t |¡dœ }t  d¡t|ƒ|t|ƒ|f }t| | d¡ƒ d S )Nz§    <html>
      <head>
        <title>%(reason)s</title>
      </head>
      <body>
        <h1><p>%(reason)s</p></h1>
        %(mesg)s
      </body>
    </html>
    )ÚreasonÚmesgzl    HTTP/1.1 %s %s
    Connection: close
    Content-Type: text/html
    Content-Length: %d
    
    %sÚlatin1)ÚtextwrapÚdedentÚhtmlÚescaperœ   r-   r§   r�   )r•   Ú
status_intr¨   r©   Ú
html_errorÚhttpr	   r	   r
   Úwrite_error9  s   
öúr²   c                 C   sF   t  ¡ d }z|dur|jj| ju rW ~dS |j}|dusW ~dS ~w )zêCheck whether calling a function raised a ``TypeError`` because
    the call failed or because something in the function raised the
    error.

    :param f: The function that was called.
    :return: ``True`` if the call failed.
    r\   NFT)ÚsysÚexc_infoÚtb_frameÚf_codeÚ__code__Útb_next)rC   Útbr	   r	   r
   Ú_called_with_wrong_argsP  s   	ùû
rº   c              
   C   s  |   dd¡}t|ƒdkrd}n	|d |d } }zt | ¡}W n# tyB   |  d¡rAtj | ¡rAd}t||  	dd¡d |f ƒ‚‚ w z
t
j|dd	�j}W n tyZ   td
| ƒ‚w t|t
jƒri|j}d  }}n=t|t
jƒr t|jt
jƒs|td| ƒ‚|jj}zdd„ |jD ƒ}dd„ |jD ƒ}W n tyŸ   td| ƒ‚w td
| ƒ‚tjjtjk}	zt||ƒ}
W n tyÌ   |	rÄtjt  ¡ Ž  td|| f ƒ‚w |d urùz	|
|i |¤Ž}
W n t!yø } zt"|
ƒrótd #t $t!|¡¡ %¡ ƒ‚‚ d }~ww |
d u �rtd| ƒ‚t&|
ƒ�stdƒ‚|
S )Nr}   r   Úapplicationr   z.pyz1Failed to find application, did you mean '%s:%s'?r    Úeval)Úmodez9Failed to parse %r as an attribute name or function call.z,Function reference must be a simple name: %rc                 S   s   g | ]}t  |¡‘qS r	   )ÚastÚliteral_eval)r   Úargr	   r	   r
   r   Ž  s    zimport_app.<locals>.<listcomp>c                 S   s   i | ]
}|j t |j¡“qS r	   )rÀ   r¾   r¿   Úvalue)r   Úkwr	   r	   r
   Ú
<dictcomp>�  s    zimport_app.<locals>.<dictcomp>z/Failed to parse arguments as literal values: %rz"Failed to find attribute %r in %r.r~   z%Failed to find application object: %rz$Application object must be callable.)'r&   r-   r/   r0   r   ÚendswithrO   rY   Úexistsr'   r¾   ÚparseÚbodyÚSyntaxErrorr   r›   ÚNameÚidÚCallre   ÚargsÚkeywordsr(   ÚloggingÚrootÚlevelÚDEBUGr2   ÚAttributeErrorr*   Úprint_exceptionr³   r´   Ú	TypeErrorrº   r1   Úformat_exception_onlyÚstripÚcallable)ÚmoduleÚpartsÚobjr<   r9   Ú
expressionr   rÌ   ÚkwargsÚis_debugÚappÚer	   r	   r
   Ú
import_appj  sz   üÿÿ
ÿýÿýÿ€õ

rà   c                  C   sr   z*t  t jd ¡} t  t  ¡ ¡}| j|jkr$| j|jkr$t jd }W |S t  ¡ }W |S  ty8   t  ¡ }Y |S w )NÚPWD)rO   ÚstatÚenvironÚgetcwdÚst_inoÚst_devr)   )ÚaÚbÚcwdr	   r	   r
   rä   ½  s   
ýþ
þrä   c                 C   s&   | du rt   ¡ } tjj| ddd�}|S )z@Return the current date and time formatted for a message header.NFT)Ú	localtimeÚusegmt)r`   ÚemailÚutilsÚ
formatdate)Ú	timestampÚsr	   r	   r
   Ú	http_dateË  s   rñ   c                 C   s   |   ¡  ¡ tv S r   )r‚   rÖ   Úhop_headers)Úheaderr	   r	   r
   Ú
is_hoppishÓ  r   rô   c                    sð   dt jvrvt  ¡ rt  d¡ t  ¡  t  ¡ rt  d¡ t  d¡ | sLtddƒ t  tt j	¡‰ t  
ˆ d¡ ˆ dkr>t  ˆ d¡ t  ˆ d¡ t  ˆ d¡ d
S t  tt j	¡‰ ˆ dkrbt  d¡ t  ˆ d¡ ‡ fdd	„}|tjdƒ |tjdƒ d
S d
S )zo    Standard daemonization of a process.
    http://www.faqs.org/faqs/unix-faq/programmer/faq/ section 1.7
    ÚGUNICORN_FDr   é   é   Tr   r\   c                    sV   z |   ¡ }||kr|  ¡ rt |¡ t ˆ |¡ W d S W d S W d S  ty*   Y d S w r   )ÚfilenoÚisattyrO   r”   Údup2rÒ   )ÚstreamÚ	fd_expectr…   ©Úfd_nullr	   r
   Úredirect   s   
þÿzdaemonize.<locals>.redirectN)rO   rã   ÚforkÚ_exitÚsetsidÚumaskr–   ÚopenÚREDIRECT_TOÚO_RDWRÚset_inheritablerú   r”   r³   ÚstdoutÚstderr)Úenable_stdio_inheritancerÿ   r	   rý   r
   Ú	daemonize×  s.   





	²r  c                	   C   sF   zt  t d¡¡ W d S  ty"   t  dt ¡ t ¡ f ¡ Y d S w )Né@   z%s.%s)ÚrandomÚseedrO   ÚurandomÚNotImplementedErrorr`   Úgetpidr	   r	   r	   r
   r  -  s
    ÿr  c              
   C   sf   zt | dƒ�}| ¡  W d   ƒ W d S 1 sw   Y  W d S  ty2 } ztd| |f ƒ‚d }~ww )Nrç   zError: '%s' isn't writable [%r])r  r”   ro   r,   )rY   rC   rß   r	   r	   r
   Úcheck_is_writable4  s   
&ÿ€ÿr  Úutf8c                 C   s.   t | tƒr| S t | tƒstd|  ƒ‚|  |¡S )z+Converts a string argument to a byte stringz%r is not a string)r›   Úbytesrœ   rÔ   r�   )rÁ   Úencodingr	   r	   r
   Úto_bytestring<  s
   


r  c              
   C   s:   t | dƒsdS z|  ¡  W dS  tttjfy   Y dS w )Nrø   FT)Úhasattrrø   rÒ   ro   ÚioÚUnsupportedOperation)rÚ   r	   r	   r
   Ú
has_filenoF  s   

ýÿr  c                 C   sf   t dtjd� |  ¡ }t|ƒD ]\}}|dkrd| }t d| tjd� qt dtjd� tj ¡  d S )Nz!!!)Úfiler   zWARNING: %sz!!! %sz!!!
)Úprintr³   r	  Ú
splitlinesÚ	enumerateÚflush)r9   ÚlinesÚiÚliner	   r	   r
   rc   S  s   rc   c                    s   t ˆ ƒ‰ ‡ fdd„}|S )Nc                    s    |dddt tˆ ƒƒfgƒ ˆ gS )Nz500 Internal Server Error)zContent-Typez
text/plainzContent-Length)rœ   r-   )rã   Ústart_response©r9   r	   r
   rÞ   c  s
   þzmake_fail_app.<locals>.app)r  )r9   rÞ   r	   r$  r
   Úmake_fail_app`  s   r%  c                 C   s<   |   d¡rtj d|  ¡}|j|jdd … d�S tj | ¡S )Nz//r    r   )rY   )r%   ÚurllibrÆ   ÚurlsplitÚ_replacerY   )r3   rÙ   r	   r	   r
   Úsplit_request_urim  s   
r)  c                 C   s2   z|d u r| ƒ }|j |ur| |¡‚|‚d }d }w r   )Ú__traceback__Úwith_traceback)ÚtprÁ   r¹   r	   r	   r
   Úreraisez  s   

r-  c                 C   s   t | tƒr| S t| dƒS )Nrª   )r›   rœ   )rè   r	   r	   r
   Úbytes_to_str†  s   

r.  c                 C   s   t j | ¡ d¡S )Nzlatin-1)r&  rÆ   Úunquote_to_bytesÚdecode)Ústringr	   r	   r
   Úunquote_to_wsgi_strŒ  rZ   r2  )r   r   )F)ry   r   )r  )Or¾   Úemail.utilsrì   rp   r‰   r­   r/   r#   r  rÎ   rO   rH   r  r   rt   r³   r«   r`   r*   rb   Úimportlib.metadataÚmetadatar   ÚModuleNotFoundErrorr   Úgunicorn.errorsr   Úgunicorn.workersr   Úurllib.parser&  r2   r  Úsetr&   rò   r   r   r   r=   Ú	ParameterÚPOSITIONAL_ONLYÚPOSITIONAL_OR_KEYWORDrB   rG   rL   rW   rX   Úplatformr%   rk   rn   rl   rx   rˆ   r�   r“   r”   r–   r¢   r¤   r§   r²   rº   rà   rä   rñ   rô   r  r  r  r  r  rc   r%  r)  r-  r.  r2  r	   r	   r	   r
   Ú<module>   s¦   ÿ
üÿ	
ÿ3þ


!	

ÿ


S

V


