U
    �ÒËd·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k
rÈ   d dlZY nX 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k
�r8   d
d	„ Z%Y nX 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 dZdd„Z2dd„ Z3ne
j4Z3dd „ Z4d!d"„ Z5d[d$d%„Z6d&d'„ Z7d(d)„ Z8d*d+„ Z9zd d,l
m:Z: W n ek
�r   d-d.„ Z:Y nX d/d0„ Z;d\d1d2„Z<d]d3d4„Z=d5d6„ Z>d7d8„ Z?d9d:„ Z@d;d<„ ZAd^d=d>„ZBd?d@„ ZCd_dAdB„ZDdCdD„ ZEdEdF„ ZFd`dHdI„ZGdJdK„ ZHdLdM„ ZIdNdO„ ZJdPdQ„ ZKdadRdS„ZLdTdU„ ZMdVdW„ ZNdS )bé    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	   úF/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/gunicorn/util.pyÚ_setproctitle5   s    r   c                 C   s   d S ©Nr	   r   r	   r	   r
   r   8   s    c                    sB   t  | ¡}‡ ‡fdd„|jD ƒ}|s6t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   Zdist_objZepsr	   r   r
   Úload_entry_point<   s
    
r   ú gunicorn.workers.sync.SyncWorkerúgunicorn.workersc                 C   s†  t  | ¡r| S |  d¡rš|  d¡d }z| dd¡\}}W n tk
rV   |}|}Y nX zt|||ƒW S  tk
r–   t 	¡ }d}t
|| |f ƒ‚Y nX nè|  d¡}t|ƒdk�r&|  d¡rÈ| dd … } | tkrât|   d¡}�q&ztd|| ƒW S  tk
�r"   t 	¡ }d}t
|| |f ƒ‚Y q²X q²| d¡}	zt d |¡¡}
W n2 tk
�rv   t 	¡ }d}t
|| |f ƒ‚Y nX t|
|	ƒS d S )Nzegg:é   ú#z)class uri %r invalid or not found: 

[%s]Ú.Zgunicornéÿÿÿÿ)ÚinspectÚisclassÚ
startswithÚsplitÚrsplitÚ
ValueErrorr   Ú	ExceptionÚ	tracebackÚ
format_excÚRuntimeErrorÚlenr   ÚpopÚ	importlibÚimport_moduleÚjoinÚgetattr)ÚuriÚdefaultÚsectionZ	entry_strÚdistr   ÚexcÚmsgÚ
componentsÚklassÚmodr	   r	   r
   Ú
load_classE   sP    




  ÿ
r8   c                 C   s4   t  | ¡}d}|j ¡ D ]}|jtkr|d7 }q|S )Nr   r   )r   Ú	signatureÚ
parametersÚvaluesÚkindÚpositionals)ÚfÚsigÚarityÚparamr	   r	   r
   Ú	get_arity}   s    


rB   c                 C   s   t  | ¡jS )z get the username for a user id)ÚpwdÚgetpwuidÚpw_name)Úuidr	   r	   r
   Úget_usernameˆ   s    rG   Fc                 C   s€   |rb| r.zt | ƒ}W n tk
r,   d}Y nX t|ƒd@ }|rLt ||¡ n|t ¡ krbt |¡ | r|| t ¡ kr|t | ¡ dS )z) set user and group of workers processes FiÿÿÿN)	rG   ÚKeyErrorÚabsÚosÚ
initgroupsÚgetgidÚsetgidÚgetuidÚsetuid)rF   ÚgidrK   Úusernamer	   r	   r
   Úset_owner_process�   s    

rR   c                 C   s   t  | ||¡ d S r   )rJ   Úchown)ÚpathrF   rP   r	   r	   r
   rS   ¤   s    rS   Úwinc                 C   s‚   | |ƒ |r|}nt j |¡\}}|p(d}d}|dk rjt  |¡}|rJ|sVn||k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)	rJ   rT   r"   ÚlistdirÚtimeÚsleepÚwarningsÚwarnÚRuntimeWarning)ÚfuncÚpathnameZwaitallÚdirnamer   ÚtimeoutÚLr	   r	   r
   Ú_waitfor©   s     



 ÿrd   c                 C   s   t tj| ƒ d S r   )rd   rJ   Úunlink)Úfilenamer	   r	   r
   Ú_unlinkÊ   s    rg   c              
   C   sH   zt | ƒ W n6 tk
rB } z|jtjtjfkr2‚ W 5 d }~X Y nX d S r   )rg   ÚOSErrorÚerrnoÚENOENTÚENOTDIR)rf   Úerrorr	   r	   r
   re   Ð   s
    re   c                 C   sD   zt  t j| ¡ W n, t jk
r*   Y dS  tk
r>   Y dS X dS )NFT)ÚsocketÚ	inet_ptonÚAF_INET6rl   r$   )Úaddrr	   r	   r
   Úis_ipv6Ù   s    rq   Ú8000c                 C   s2  t  d| ¡rt  d| ¡d S |  d¡r`| dd … }z
t|ƒW S  tk
r^   td| ƒd ‚Y nX |  d¡rx|  d¡d } | | }}d| kr¾d	| kr¾|  d	¡d
 dd … }|  d¡|g d }n8d| krä|  d¡|g d d… \}}n| dkröd| }}zt|ƒ}W n" tk
�r$   td| ƒ‚Y nX | ¡ |fS )Nz
unix:(//)?r   zfd://é   z"%r is not a valid file descriptor.ztcp://r   ú[ú]r   z]:ú:rV   Ú 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.    




r�   c                 C   s,   t   | t j¡}|t jO }t   | t j|¡ d S r   )ÚfcntlZF_GETFDZ
FD_CLOEXECZ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‚   ZF_GETFLrJ   Ú
O_NONBLOCKZF_SETFLrƒ   r	   r	   r
   Úset_non_blocking  s    r‡   c                 C   s(   z|   ¡  W n tjk
r"   Y nX d S r   )Úcloserm   rl   )Úsockr	   r	   r
   rˆ     s    rˆ   )Ú
closerangec              	   C   s8   t | |ƒD ](}zt |¡ W q
 tk
r0   Y q
X q
d S r   )ÚrangerJ   rˆ   rh   )Zfd_lowZ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)   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   sJ   |   ¡ }|dkr:z|  d¡ t| ||ƒW ¢S |  d¡ X nt| ||ƒS d S )Ng        r   r   )Ú
gettimeoutÚsetblockingr–   )r‰   r‘   r•   rb   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k	r4|jj| jkr,W ¢dS |j}qW ¢dS ~X 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.
    rV   NFT)ÚsysÚexc_infoÚtb_frameÚf_codeÚ__code__Útb_next)r>   Útbr	   r	   r
   Ú_called_with_wrong_argsQ  s    rª   c              
   C   sN  |   dd¡}t|ƒdkrd}n|d |d  } }zt | ¡}W nL tk
rŠ   |  d¡r„tj | ¡r„d}t||  	dd¡d |f ƒ‚‚ Y nX zt
j|dd	�j}W n  tk
rÀ   td
| ƒ‚Y nX t|t
jƒrÞ|j}d  }}nˆt|t
jƒ�rZt|jt
jƒ�std| ƒ‚|jj}z$dd„ |jD ƒ}dd„ |jD ƒ}W n" tk
�rV   td| ƒ‚Y nX ntd
| ƒ‚tjjtjk}	zt||ƒ}
W n: tk
�r¼   |	�r¨tjt  ¡ Ž  td|| f ƒ‚Y nX |d k	�r"z|
||Ž}
W nJ t!k
�r  } z*t"|
ƒ�rtd #t $t!|¡¡ %¡ ƒ‚‚ W 5 d }~X Y nX |
d k�r8td| ƒ‚t&|
ƒ�sJtdƒ‚|
S )Nrv   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)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.rw   z%Failed to find application object: %rz$Application object must be callable.)'r"   r)   r+   r,   r   ÚendswithrJ   rT   Úexistsr#   r­   ÚparseÚbodyÚSyntaxErrorr   r�   ÚNameÚidÚCallr_   ÚargsÚkeywordsr$   ÚloggingÚrootÚlevelÚDEBUGr.   ÚAttributeErrorr&   Úprint_exceptionr£   r¤   Ú	TypeErrorrª   r-   Úformat_exception_onlyÚstripÚcallable)ÚmoduleÚpartsÚobjr7   r4   Z
expressionr   r»   ÚkwargsZis_debugÚappÚer	   r	   r
   Ú
import_appk  sn    ÿ

ÿÿ

ÿ

rÍ   c                  C   sp   zNt  t jd ¡} t  t  ¡ ¡}| j|jkrD| j|jkrDt jd }nt  ¡ }W n tk
rj   t  ¡ }Y nX |S )NZPWD)rJ   ÚstatÚenvironÚgetcwdÚst_inoÚst_devr%   )ÚaÚbÚcwdr	   r	   r
   rÐ   ¾  s    rÐ   c                 C   s&   | dkrt   ¡ } tjj| ddd�}|S )z@Return the current date and time formatted for a message header.NFT)Ú	localtimeÚusegmt)rZ   ÚemailÚutilsÚ
formatdate)Ú	timestampÚsr	   r	   r
   Ú	http_dateÌ  s    rÝ   c                 C   s   |   ¡  ¡ tkS r   )r{   rÅ   Úhop_headers)Úheaderr	   r	   r
   Ú
is_hoppishÔ  s    rà   c                    sê   dt jkræt  ¡ rt  d¡ t  ¡  t  ¡ r6t  d¡ t  d¡ | s–tddƒ t  tt j	¡‰ t  
ˆ d¡ ˆ dkr|t  ˆ 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 )zo    Standard daemonization of a process.
    http://www.faqs.org/faqs/unix-faq/programmer/faq/ section 1.7
    ZGUNICORN_FDr   é   é   Tr   rV   c                    sL   z2|   ¡ }||kr0|  ¡ r0t |¡ t ˆ |¡ W n tk
rF   Y nX d S r   )ÚfilenoÚisattyrJ   rˆ   Údup2rÁ   )ÚstreamZ	fd_expectr~   ©Zfd_nullr	   r
   Úredirect!  s    
zdaemonize.<locals>.redirectN)rJ   rÏ   ÚforkÚ_exitÚsetsidÚumaskrŠ   ÚopenÚREDIRECT_TOÚO_RDWRÚset_inheritablerå   rˆ   r£   ÚstdoutÚstderr)Zenable_stdio_inheritancerè   r	   rç   r
   Ú	daemonizeØ  s,    





	ró   c                	   C   sH   zt  t d¡¡ W n. tk
rB   t  dt ¡ t ¡ f ¡ Y nX d S )Né@   z%s.%s)ÚrandomÚseedrJ   ÚurandomÚNotImplementedErrorrZ   Úgetpidr	   r	   r	   r
   rö   .  s    rö   c              
   C   sZ   z"t | dƒ�}| ¡  W 5 Q R X W n2 tk
rT } ztd| |f ƒ‚W 5 d }~X Y nX d S )NrÓ   zError: '%s' isn't writable [%r])rí   rˆ   ÚIOErrorr(   )rT   r>   rÌ   r	   r	   r
   Úcheck_is_writable5  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k
r8   Y dS X dS )Nrã   FT)Úhasattrrã   rÁ   rú   ÚioÚUnsupportedOperation)rÉ   r	   r	   r
   Ú
has_filenoG  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)r4   ÚlinesÚiÚliner	   r	   r
   r]   T  s    r]   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©r4   r	   r
   rË   d  s
    þzmake_fail_app.<locals>.app)rÿ   )r4   rË   r	   r  r
   Úmake_fail_appa  s    r  c                 C   s<   |   d¡r0tj d|  ¡}|j|jdd … d�S tj | ¡S )Nz//r   r   )rT   )r!   Úurllibrµ   ÚurlsplitÚ_replacerT   )r/   rÈ   r	   r	   r
   Úsplit_request_urin  s    
r  c                 C   s:   z*|d kr| ƒ }|j |k	r$| |¡‚|‚W 5 d }d }X d S r   )Ú__traceback__Úwith_traceback)Útpr°   r©   r	   r	   r
   Úreraise{  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�  s    r  )r   r   )F)F)rr   )F)F)N)F)rü   )N)Or­   Úemail.utilsrØ   ri   r‚   rŸ   r+   r   r  r½   rJ   rC   rõ   rx   rm   r£   r�   rZ   r&   r\   Úimportlib.metadataÚmetadatar   ÚModuleNotFoundErrorr   Zgunicorn.errorsr   Zgunicorn.workersr   Úurllib.parser  r.   rî   Úsetr"   rÞ   r   r   r   r8   Ú	ParameterÚPOSITIONAL_ONLYÚPOSITIONAL_OR_KEYWORDr=   rB   rG   rR   rS   Úplatformr!   rd   rg   re   rq   r�   r…   r‡   rˆ   rŠ   r”   r–   r™   r¢   rª   rÍ   rÐ   rÝ   rà   ró   rö   rû   rÿ   r  r]   r  r  r  r  r  r	   r	   r	   r
   Ú<module>   sš   
	  ÿ
3þ

!
	

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


