o
    iK                  	   @   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#ej$dkrdd	 Z%nzd d
l&m&Z&m'Z' e'  dd	 Z%W n ey   dd	 Z%Y nw dd Z(		dZddZ)ej*j+ej*j,fZ-dd Z.dd Z/d[ddZ0dd Z1ej$2drd[ddZ3dd  Z4ne
j5Z4d!d" Z5d#d$ Z6d\d&d'Z7d(d) Z8d*d+ Z9d,d- Z:zd d.l
m;Z; W n ey   d/d0 Z;Y nw d1d2 Z<d[d3d4Z=d[d5d6Z>d7d8 Z?d9d: Z@d;d< ZAd=d> ZBd]d?d@ZCdAdB ZDd[dCdDZEdEdF ZFdGdH ZGd^dJdKZHdLdM ZIdNdO ZJdPdQ ZKdRdS ZLd]dTdUZMdVdW ZNdXdY ZOdS )_    N)AppImportError)SUPPORTED_WORKERSdevnullz	/dev/nullz
    connection keep-alive proxy-authenticate proxy-authorization
    te trailers transfer-encoding upgrade
    server date
    darwinc                 C      d S N titler   r   A/home/ubuntu/.local/lib/python3.10/site-packages/gunicorn/util.py_setproctitle4      r   )setproctitlegetproctitlec                 C   s   t d|   d S )Nzgunicorn: %s)r   r	   r   r   r   r   ?      c                 C   r   r   r   r	   r   r   r   r   B   r   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>H   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_pointF   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_classO   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   

rJ   c                 C   s   t | jS )z get the username for a user id)pwdgetpwuidpw_name)uidr   r   r   get_username   s   rO   Fc                 C   sz   |r*| rzt | }W n ty   d}Y nw |rt|| n|t kr*t| | r9| t kr;t|  dS dS dS )z) set user and group of workers processes FN)rO   KeyErroros
initgroupsgetgidsetgidgetuidsetuid)rN   gidrR   usernamer   r   r   set_owner_process   s   
rY   c                 C   s   t | || d S r   )rQ   chown)pathrN   rW   r   r   r   rZ         rZ   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#   gMbP?g      ?   z)tests may fail, delete still pending for    )
stacklevel)	rQ   r[   r)   listdirtimesleepwarningswarnRuntimeWarning)funcpathnamewaitalldirnamer   timeoutLr   r   r   _waitfor   s$   



rm   c                 C   s   t tj|  d S r   )rm   rQ   unlink)filenamer   r   r   _unlink   r   rp   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   )rp   OSErrorerrnoENOENTENOTDIR)ro   errorr   r   r   rn      s   rn   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_INET6rq   r+   )addrr   r   r   is_ipv6   s   rz   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_GETFLrQ   
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   )closerq   )sockr   r   r   r     s
   r   )
closerangec              	   C   s4   t | |D ]}zt| W q ty   Y qw d S r   )rangerQ   r   rq   )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encoder0   r4   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   rk   r   r   r   write_nonblock4  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   r0   r   r   )r   
status_intr   r   
html_errorhttpr   r   r   write_error@  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 )zCheck 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)rF   tbr   r   r   _called_with_wrong_argsW  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rt|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   |	rtjt    td|| f w |d urz	|
|i |}
W n t!y } zt"|
rt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)   r0   r2   r3   r   endswithrQ   r[   existsr*   r   parsebodySyntaxErrorr   r   NameidCallrg   argskeywordsr+   loggingrootlevelDEBUGr5   AttributeErrorr-   print_exceptionr   r   	TypeErrorr   r4   format_exception_onlystripcallable)modulepartsobjr?   r<   
expressionr   r   kwargsis_debugapper   r   r   
import_appq  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)rQ   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)rb   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isattyrQ   r   dup2r   )stream	fd_expectr   fd_nullr   r   redirect'  s   
zdaemonize.<locals>.redirectN)rQ   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seedrQ   urandomNotImplementedErrorrb   getpidr   r   r   r   r  4  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   rq   r/   )r[   rF   r   r   r   r   check_is_writable;  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_bytestringC  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   rq   ioUnsupportedOperation)r   r   r   r   
has_filenoM  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)r<   linesiliner   r   r   re   Z  s   re   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   r0   )r   start_responser<   r   r   r   j  s
   zmake_fail_app.<locals>.app)r  )r<   r   r   r&  r   make_fail_appg  s   r'  c                 C   s<   |  drtjd|  }|j|jdd  dS tj| S )Nz//r#   r!   )r[   )r(   urllibr   urlsplit_replacer[   )r6   r   r   r   r   split_request_urit  s   
r+  c                 C   s2   z|d u r|  }|j |ur|||d }d }w 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   

r0  c                 C   s   t j| dS )Nzlatin-1)r(  r   unquote_to_bytesdecode)stringr   r   r   unquote_to_wsgi_str  r\   r4  )r   r    )F)r{   r   )r  )Pr   email.utilsr   rr   r   r   r2   r&   r  r   rQ   rK   r  r   rv   r   r   rb   r-   rd   importlib.metadatametadatar   ModuleNotFoundErrorr   gunicorn.errorsr   gunicorn.workersr   urllib.parser(  r5   r  setr)   r   platformr   r   r   r   r@   	ParameterPOSITIONAL_ONLYPOSITIONAL_OR_KEYWORDrE   rJ   rO   rY   rZ   r(   rm   rp   rn   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  re   r'  r+  r/  r0  r4  r   r   r   r   <module>   s   


	
3


!	



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