a
    ù!fTH  ã                   @   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d dlZ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0 dVdd„Z#ej$j%ej$j&fZ'dd„ Z(dd„ Z)dWdd„Z*dd„ Z+ej, -d¡rldXdd„Z.dd„ Z/ne
j0Z/dd„ Z0dd „ Z1dYd"d#„Z2d$d%„ Z3d&d'„ Z4d(d)„ Z5zd d*l
m6Z6 W n e"yÐ   d+d,„ Z6Y n0 d-d.„ Z7dZd/d0„Z8d[d1d2„Z9d3d4„ Z:d5d6„ Z;d7d8„ Z<d9d:„ Z=d\d;d<„Z>d=d>„ Z?d]d?d@„Z@dAdB„ ZAdCdD„ ZBd^dFdG„ZCdHdI„ ZDdJdK„ ZEdLdM„ ZFdNdO„ ZGd_dPdQ„ZHdRdS„ ZIdTdU„ ZJd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	   úN/var/www/html/python-backend/venv/lib/python3.9/site-packages/gunicorn/util.pyÚ_setproctitle2   s    r   c                 C   s   d S ©Nr	   r   r	   r	   r
   r   5   s    ú gunicorn.workers.sync.SyncWorkerúgunicorn.workersc                 C   sz  t  | ¡r| S |  d¡r˜|  d¡d }z| dd¡\}}W n tyT   |}|}Y n0 zt |||¡W S  ty”   t	 
¡ }d}t|| |f ƒ‚Y n0 nÞ|  d¡}t|ƒdkr$|  d¡rÆ| dd … } | tv ràt|   d¡}q$zt d|| ¡W S  ty    t	 
¡ }d}t|| |f ƒ‚Y q°0 q°| d¡}	zt d |¡¡}
W n(   t	 
¡ }d}t|| |f ƒ‚Y n0 t|
|	ƒS d S )Nzegg:é   ú#z)class uri %r invalid or not found: 

[%s]Ú.Zgunicornéÿÿÿÿ)ÚinspectÚisclassÚ
startswithÚsplitÚrsplitÚ
ValueErrorÚpkg_resourcesÚload_entry_pointÚ	ExceptionÚ	tracebackÚ
format_excÚRuntimeErrorÚlenr   ÚpopÚ	importlibÚimport_moduleÚjoinÚgetattr)ÚuriÚdefaultÚsectionZ	entry_strÚdistÚnameÚexcÚmsgÚ
componentsÚklassÚmodr	   r	   r
   Ú
load_class9   sL    




ÿ
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_arityq   s    


r9   c                 C   s   t  | ¡jS )z get the username for a user id)ÚpwdÚgetpwuidÚpw_name)Úuidr	   r	   r
   Úget_username|   s    r>   Fc                 C   sr   |r`| r,zt | ƒ}W n ty*   d}Y n0 t|ƒd@ }|rJt ||¡ n|t ¡ kr`t |¡ | rnt | ¡ dS )z) set user and group of workers processes FiÿÿÿN)r>   ÚKeyErrorÚabsÚosÚ
initgroupsÚgetgidÚsetgidÚsetuid)r=   ÚgidrB   Úusernamer	   r	   r
   Úset_owner_process   s    

rH   c                 C   s   t  | ||¡ d S r   )rA   Úchown)Úpathr=   rF   r	   r	   r
   rI   ˜   s    rI   Úwinc                 C   s‚   | |ƒ |r|}nt j |¡\}}|p(d}d}|dk rjt  |¡}|rJ|sVn||v rVd S t |¡ |d9 }q.tjd| tdd d S )Nr   gü©ñÒMbP?g      ð?é   z)tests may fail, delete still pending for é   )Ú
stacklevel)	rA   rJ   r   ÚlistdirÚtimeÚsleepÚwarningsÚwarnÚRuntimeWarning)ÚfuncÚpathnameZwaitallÚdirnamer)   ÚtimeoutÚLr	   r	   r
   Ú_waitfor   s    



ÿrZ   c                 C   s   t tj| ƒ d S r   )rZ   rA   Úunlink)Úfilenamer	   r	   r
   Ú_unlink¾   s    r]   c              
   C   sJ   zt | ƒ W n8 tyD } z |jtjtjfvr0‚ W Y d }~n
d }~0 0 d S r   )r]   ÚOSErrorÚerrnoÚENOENTÚENOTDIR)r\   Úerrorr	   r	   r
   r[   Ä   s
    r[   c                 C   s@   zt  t j| ¡ W n( t jy(   Y dS  ty:   Y dS 0 dS )NFT)ÚsocketÚ	inet_ptonÚAF_INET6rb   r   )Úaddrr	   r	   r
   Úis_ipv6Í   s    rg   Ú8000c                 C   s.  t  d| ¡rt  d| ¡d S |  d¡r^| dd … }z
t|ƒW S  ty\   td| ƒd ‚Y n0 |  d¡rv|  d¡d } | | }}d| v r¼d	| v r¼|  d	¡d
 dd … }|  d¡|g d }n8d| v râ|  d¡|g d d… \}}n| dkrôd| }}zt|ƒ}W n  ty    td| ƒ‚Y n0 | ¡ |fS )Nz
unix:(//)?r   zfd://é   z"%r is not a valid file descriptor.ztcp://r   ú[ú]r   z]:ú:rL   Ú 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×   s.    




rw   c                 C   s,   t   | t j¡}|t jO }t   | t j|¡ d S r   )ÚfcntlZF_GETFDZ
FD_CLOEXECZF_SETFD©rt   Úflagsr	   r	   r
   Úclose_on_execö   s    
r{   c                 C   s(   t   | t j¡tjB }t   | t j|¡ d S r   )rx   ZF_GETFLrA   Ú
O_NONBLOCKZF_SETFLry   r	   r	   r
   Úset_non_blockingü   s    r}   c                 C   s&   z|   ¡  W n tjy    Y n0 d S r   )Úcloserc   rb   )Úsockr	   r	   r
   r~     s    r~   )Ú
closerangec              	   C   s6   t | |ƒD ]&}zt |¡ W q
 ty.   Y q
0 q
d S r   )ÚrangerA   r~   r^   )Zfd_lowZfd_highrt   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   r#   Ú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   sR   |   ¡ }|dkrBz"|  d¡ t| ||ƒW |  d¡ S |  d¡ 0 nt| ||ƒS d S )Ng        r   r   )Ú
gettimeoutÚsetblockingrŒ   )r   r‡   r‹   rX   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   Z
status_intr   r‘   Z
html_errorÚhttpr	   r	   r
   Úwrite_error.  s    
öúr˜   c                 C   sD   t  ¡ d }z.|dur4|jj| ju r,W ~dS |j}qW ~dS ~0 dS )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.
    rL   NFT)ÚsysÚexc_infoÚtb_frameÚf_codeÚ__code__Útb_next)r5   Útbr	   r	   r
   Ú_called_with_wrong_argsE  s    	÷ür    c              
   C   sL  |   dd¡}t|ƒdkrd}n|d |d  } }zt | ¡}W nJ tyˆ   |  d¡r‚tj | ¡r‚d}t||  	dd¡d |f ƒ‚‚ Y n0 zt
j|dd	j}W n ty¼   td
| ƒ‚Y n0 t|t
jƒrÚ|j}d  }}n†t|t
jƒrTt|jt
jƒstd| ƒ‚|jj}z$dd„ |jD ƒ}dd„ |jD ƒ}W n  tyP   td| ƒ‚Y n0 ntd
| ƒ‚tjjtjk}	zt||ƒ}
W n8 ty´   |	r tjt  ¡ Ž  td|| f ƒ‚Y n0 |d ur z|
|i |¤Ž}
W nL t!y } z2t"|
ƒrtd #t $t!|¡¡ %¡ ƒ‚‚ W Y d }~n
d }~0 0 |
d u r6td| ƒ‚t&|
ƒsHtdƒ‚|
S )Nrl   r   Z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)Ú.0Úargr	   r	   r
   Ú
<listcomp>ƒ  r‚   zimport_app.<locals>.<listcomp>c                 S   s   i | ]}|j t |j¡“qS r	   )r¦   r£   r¤   Úvalue)r¥   Úkwr	   r	   r
   Ú
<dictcomp>„  r‚   zimport_app.<locals>.<dictcomp>z/Failed to parse arguments as literal values: %rz"Failed to find attribute %r in %r.rm   z%Failed to find application object: %rz$Application object must be callable.)'r   r   r!   r"   ÚImportErrorÚendswithrA   rJ   Úexistsr   r£   ÚparseÚbodyÚSyntaxErrorr   rƒ   ÚNameÚidÚCallrU   ÚargsÚkeywordsr   ÚloggingÚrootÚlevelÚDEBUGr$   ÚAttributeErrorr   Úprint_exceptionr™   rš   Ú	TypeErrorr    r#   Úformat_exception_onlyÚstripÚcallable)ÚmoduleÚpartsÚobjr.   r+   Z
expressionr)   r´   ÚkwargsZis_debugÚappÚer	   r	   r
   Ú
import_app_  sn    ÿ

ÿÿ

ÿ

rÆ   c                  C   sn   zNt  t jd ¡} t  t  ¡ ¡}| j|jkrD| j|jkrDt jd }nt  ¡ }W n tyh   t  ¡ }Y n0 |S )NZPWD)rA   Ú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)rP   ÚemailÚutilsÚ
formatdate)Ú	timestampÚsr	   r	   r
   Ú	http_dateÀ  s    rÖ   c                 C   s   |   ¡  ¡ tv S r   )rq   r¾   Úhop_headers)Úheaderr	   r	   r
   Ú
is_hoppishÈ  s    rÙ   c                    sÞ   dt jvrÚt  ¡ rt  d¡ t  ¡  t  ¡ r6t  d¡ t  d¡ | sŠtddƒ t  tt j	¡‰ ˆ dkrpt  
ˆ d¡ t  
ˆ d¡ t  
ˆ d¡ nPt  tt j	¡‰ ˆ dkr¶t  d¡ t  
ˆ d¡ ‡ fdd„}|tjdƒ |tjdƒ d	S )
z~    Standard daemonization of a process.
    http://www.svbug.com/documentation/comp.unix.programmer-FAQ/faq_2.html#SEC16
    ZGUNICORN_FDr   é   é   r   rL   c                    sJ   z2|   ¡ }||kr0|  ¡ r0t |¡ t ˆ |¡ W n tyD   Y n0 d S r   )ÚfilenoÚisattyrA   r~   Údup2rº   )ÚstreamZ	fd_expectrt   ©Zfd_nullr	   r
   Úredirect  s    
zdaemonize.<locals>.redirectN)rA   rÈ   ÚforkÚ_exitÚsetsidÚumaskr€   ÚopenÚREDIRECT_TOÚO_RDWRrÞ   r~   r™   ÚstdoutÚstderr)Zenable_stdio_inheritancerá   r	   rà   r
   Ú	daemonizeÌ  s*    





	rë   c                	   C   sF   zt  t d¡¡ W n, ty@   t  dt ¡ t ¡ f ¡ Y n0 d S )Né@   z%s.%s)ÚrandomÚseedrA   ÚurandomÚNotImplementedErrorrP   Úgetpidr	   r	   r	   r
   rî     s    rî   c              
   C   sP   zt | dƒ}W n4 tyB } ztd| |f ƒ‚W Y d }~n
d }~0 0 | ¡  d S )NrÌ   zError: '%s' isn't writable [%r])ræ   ÚIOErrorr   r~   )rJ   r5   rÅ   r	   r	   r
   Úcheck_is_writeable&  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 n tttjfy6   Y dS 0 dS )NrÜ   FT)ÚhasattrrÜ   rº   rò   ÚioÚUnsupportedOperation)rÂ   r	   r	   r
   Ú
has_fileno8  s    
rû   c                 C   sf   t dtjd |  ¡ }t|ƒD ]*\}}|dkr6d| }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)r+   ÚlinesÚiÚliner	   r	   r
   rS   E  s    rS   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È   Zstart_response©r+   r	   r
   rÄ   U  s
    þzmake_fail_app.<locals>.app)r÷   )r+   rÄ   r	   r  r
   Úmake_fail_appR  s    r  c                 C   s<   |   d¡r0tj d|  ¡}|j|jdd … dS tj | ¡S )Nz//r   r   )rJ   )r   Úurllibr®   ÚurlsplitÚ_replacerJ   )r%   rÁ   r	   r	   r
   Úsplit_request_uri_  s    
r	  c                 C   sB   z2|d u r| ƒ }|j |ur$| |¡‚|‚W d }d }n
d }d }0 d S r   )Ú__traceback__Úwith_traceback)Útpr¨   rŸ   r	   r	   r
   Úreraisel  s    

ÿr  c                 C   s   t | tƒr| S t| dƒS )Nr’   )rƒ   r„   )rÍ   r	   r	   r
   Úbytes_to_strx  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~  s    r  )r   r   )F)F)rh   )F)F)N)F)rô   )N)Kr£   Úemail.utilsrÑ   r_   rx   r•   r!   r   rù   r¶   rA   r:   rí   rn   rc   r™   r“   rP   r   rR   r   Zgunicorn.errorsr   Zgunicorn.workersr   Úurllib.parser  r$   rç   Úsetr   r×   r   r   r«   r/   Ú	ParameterÚPOSITIONAL_ONLYÚPOSITIONAL_OR_KEYWORDr4   r9   r>   rH   rI   Úplatformr   rZ   r]   r[   rg   rw   r{   r}   r~   r€   rŠ   rŒ   r   r˜   r    rÆ   rÉ   rÖ   rÙ   rë   rî   ró   r÷   rû   rS   r  r	  r  r  r  r	   r	   r	   r
   Ú<module>   s’   
  ÿ
3þ

!
	

	

S

S


