U
    ‘û<i—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	   úM/var/www/html/mysite/school/venv/lib/python3.8/site-packages/gunicorn/util.pyÚ_setproctitle4   s    r   c                 C   s   d S ©Nr	   r   r	   r	   r
   r   7   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)Ú.0Zepr   r	   r
   Ú
<listcomp>=   s    
 
ÿz$load_entry_point.<locals>.<listcomp>zEntry point %r not foundr   )Úimportlib_metadataÚdistributionZ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]Ú.Úgunicornéÿÿÿÿ)ÚinspectZisclassÚ
startswithÚsplitÚrsplitÚ
ValueErrorr   Ú	ExceptionÚ	tracebackÚ
format_excÚRuntimeErrorÚlenr   ÚpopÚ	importlibÚimport_moduleÚjoinÚgetattr)ÚuriÚdefaultZsectionZ	entry_strZdistr   ÚexcÚmsgZ
componentsÚklassÚmodr	   r	   r
   Ú
load_classD   sP    




  ÿ
r3   c                 C   s4   t  | ¡}d}|j ¡ D ]}|jtkr|d7 }q|S )Nr   r   )r   Z	signatureZ
parametersÚvaluesZkindÚpositionals)ÚfZsigZarityZparamr	   r	   r
   Ú	get_arity|   s    


r7   c                 C   s   t  | ¡jS )z get the username for a user id)ÚpwdÚgetpwuidZpw_name)Úuidr	   r	   r
   Úget_username‡   s    r;   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)	r;   ÚKeyErrorÚabsÚosÚ
initgroupsÚgetgidÚsetgidÚgetuidÚsetuid)r:   Úgidr?   Zusernamer	   r	   r
   Úset_owner_processŒ   s    

rE   c                 C   s   t  | ||¡ d S r   )r>   Úchown)Úpathr:   rD   r	   r	   r
   rF   £   s    rF   Ú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)	r>   rG   r    ÚlistdirÚtimeÚsleepÚwarningsÚwarnÚRuntimeWarning)ÚfuncÚpathnameZwaitallÚdirnamer   ÚtimeoutÚLr	   r	   r
   Ú_waitfor¨   s     



 ÿrW   c                 C   s   t tj| ƒ d S r   )rW   r>   Úunlink)Úfilenamer	   r	   r
   Ú_unlinkÉ   s    rZ   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   )rZ   ÚOSErrorÚerrnoZENOENTZENOTDIR)rY   Úerrorr	   r	   r
   rX   Ï   s
    rX   c                 C   sB   zt  t j| ¡ W n* tk
r(   Y dS  tk
r<   Y dS X dS )NFT)ÚsocketZ	inet_ptonZAF_INET6r[   r"   )Zaddrr	   r	   r
   Úis_ipv6Ø   s    r_   Ú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]:ú:rI   Ú z0.0.0.0z%r is not a valid port number.)ÚreÚmatchr    r   Úintr"   r&   Úlower)ZnetlocZdefault_portÚfdZhostZportr	   r	   r
   Úparse_addressâ   s.    




rk   c                 C   s,   t   | t j¡}|t jO }t   | t j|¡ d S r   )ÚfcntlZF_GETFDZ
FD_CLOEXECZF_SETFD©rj   Úflagsr	   r	   r
   Úclose_on_exec  s    
ro   c                 C   s(   t   | t j¡tjB }t   | t j|¡ d S r   )rl   ZF_GETFLr>   Ú
O_NONBLOCKZF_SETFLrm   r	   r	   r
   Úset_non_blocking  s    rq   c                 C   s&   z|   ¡  W n tk
r    Y nX d S r   )Úcloser[   )Úsockr	   r	   r
   rr     s    rr   )Ú
closerangec              	   C   s8   t | |ƒD ](}zt |¡ W q
 tk
r0   Y q
X q
d S r   )Úranger>   rr   r[   )Zfd_lowZfd_highrj   r	   r	   r
   rt     s
    rt   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)rs   ÚdataZ
chunk_sizeÚchunkr	   r	   r
   Úwrite_chunk  s
    

r}   c                 C   s   |rt | |ƒS |  |¡ d S r   )r}   rz   )rs   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   )Z
gettimeoutZsetblockingr   )rs   r{   r~   rU   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Úescaperx   r'   r€   ry   )rs   Z
status_intr�   r‚   Z
html_errorZhttpr	   r	   r
   Úwrite_error9  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.
    rI   NFT)ÚsysÚexc_infoÚtb_frameÚf_codeÚ__code__Útb_next)r6   Útbr	   r	   r
   Ú_called_with_wrong_argsP  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 )Nrd   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.re   z%Failed to find application object: %rz$Application object must be callable.)'r    r'   r)   r*   r   Úendswithr>   rG   Úexistsr!   r“   ÚparseZbodyÚSyntaxErrorr   rw   ÚNameÚidZCallrR   ÚargsÚkeywordsr"   ÚloggingÚrootÚlevelÚDEBUGr,   ÚAttributeErrorr$   Úprint_exceptionr‰   rŠ   Ú	TypeErrorr�   r+   Úformat_exception_onlyÚstripÚcallable)ÚmoduleÚpartsÚobjr2   r0   Z
expressionr   rŸ   ÚkwargsZis_debugÚappÚer	   r	   r
   Ú
import_appj  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)r>   Ú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)Ú	localtimeZusegmt)rM   ÚemailZutilsZ
formatdate)Z	timestampÚsr	   r	   r
   Ú	http_dateË  s    r½   c                 C   s   |   ¡  ¡ tkS r   )ri   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   rI   c                    sL   z2|   ¡ }||kr0|  ¡ r0t |¡ t ˆ |¡ W n tk
rF   Y nX d S r   )ÚfilenoÚisattyr>   rr   Údup2r¥   )ÚstreamZ	fd_expectrj   ©Zfd_nullr	   r
   Úredirect   s    
zdaemonize.<locals>.redirectN)r>   r³   ÚforkÚ_exitÚsetsidÚumaskrt   ÚopenÚREDIRECT_TOÚO_RDWRÚset_inheritablerÅ   rr   r‰   ÚstdoutÚstderr)Ú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Úseedr>   ÚurandomÚNotImplementedErrorrM   Ú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Í   rr   r[   r&   )rG   r6   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)rw   Úbytesrx   r§   ry   )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_filenoF  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)r0   ÚlinesÚiÚliner	   r	   r
   rP   S  s    rP   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)rx   r'   )r³   Zstart_response©r0   r	   r
   r¯   c  s
    þzmake_fail_app.<locals>.app)rß   )r0   r¯   r	   rì   r
   Úmake_fail_app`  s    rí   c                 C   s<   |   d¡r0tj d|  ¡}|j|jdd … d�S tj | ¡S )Nz//r   r   )rG   )r   Úurllibr›   ZurlsplitÚ_replacerG   )r-   r¬   r	   r	   r
   Úsplit_request_urim  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
   Úreraisez  s    

rô   c                 C   s   t | tƒr| S t| dƒS )Nrƒ   )rw   rx   )r¸   r	   r	   r
   Úbytes_to_str†  s    
rõ   c                 C   s   t j | ¡ d¡S )Nzlatin-1)rî   r›   Zunquote_to_bytesÚdecode)Ústringr	   r	   r
   Úunquote_to_wsgi_strŒ  s    rø   )r   r   )F)F)r`   )F)F)N)F)rÜ   )N)Or“   Zemail.utilsr»   r\   rl   r†   r)   r   rá   r¡   r>   r8   rÖ   rf   r^   r‰   r„   rM   r$   rO   Úimportlib.metadataZmetadatar   ÚModuleNotFoundErrorr   Úgunicorn.errorsr   Zgunicorn.workersr   Zurllib.parserî   r,   rÎ   Úsetr    r¾   r   r   r   r3   Z	ParameterZPOSITIONAL_ONLYZPOSITIONAL_OR_KEYWORDr5   r7   r;   rE   rF   Úplatformr   rW   rZ   rX   r_   rk   ro   rq   rr   rt   r}   r   r€   rˆ   r�   r±   r´   r½   rÀ   rÔ   r×   rÛ   rß   rã   rP   rí   rð   rô   rõ   rø   r	   r	   r	   r
   Ú<module>   sš   
	  ÿ
3þ

!
	

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


