o
    dTH                     @   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w 		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rdWddZ.dd Z/ne
j0Z/dd Z0dd  Z1dXd"d#Z2d$d% Z3d&d' Z4d(d) Z5zd d*l
m6Z6 W n e"y   d+d, Z6Y nw d-d. Z7dWd/d0Z8dWd1d2Z9d3d4 Z:d5d6 Z;d7d8 Z<d9d: Z=dYd;d<Z>d=d> Z?dWd?d@Z@dAdB ZAdCdD ZBdZdFdGZCdHdI ZDdJdK ZEdLdM ZFdNdO ZGdYdPdQ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	   A/app/.heroku/python/lib/python3.10/site-packages/gunicorn/util.py_setproctitle2      r   c                 C   s   d S Nr	   r   r	   r	   r
   r   5   s    gunicorn.workers.sync.SyncWorkergunicorn.workersc                 C   s`  t | r| S | drI| dd }z
|dd\}}W n ty*   |}|}Y nw zt|||W S  tyH   t	
 }d}t|| |f w | d}t|dkr	 | dr`| dd  } | tv rlt|  d}nztd|| W S  ty   t	
 }d}t|| |f w |d}	z
td|}
W n   t	
 }d}t|| |f t|
|	S )	Nzegg:   #z)class uri %r invalid or not found: 

[%s].TZ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   sT   





r0   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   

r:   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   sv   |r0| rzt | }W n ty   d}Y nw t|d@ }|r%t|| n|t kr0t| | r9t|  dS dS )z) set user and group of workers processes FiN)r?   KeyErrorabsos
initgroupsgetgidsetgidsetuid)r>   gidrC   usernamer	   r	   r
   set_owner_process   s   
rI   c                 C   s   t | || d S r   )rB   chown)pathr>   rG   r	   r	   r
   rJ         rJ   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)	rB   rK   r   listdirtimesleepwarningswarnRuntimeWarning)funcpathnameZwaitalldirnamer*   timeoutLr	   r	   r
   _waitfor   s$   



r\   c                 C   s   t tj|  d S r   )r\   rB   unlink)filenamer	   r	   r
   _unlink   r   r_   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   )r_   OSErrorerrnoENOENTENOTDIR)r^   errorr	   r	   r
   r]      s   r]   c                 C   s>   z
t t j|  W dS  t jy   Y dS  ty   Y dS w )NFT)socket	inet_ptonAF_INET6rd   r   )addrr	   r	   r
   is_ipv6   s   ri   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]::rN    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   




ry   c                 C   s,   t  | t j}|t jO }t  | t j| d S r   )fcntlF_GETFD
FD_CLOEXECF_SETFDrv   flagsr	   r	   r
   close_on_exec   s   
r   c                 C   s(   t  | t jtjB }t  | t j| d S r   )rz   F_GETFLrB   
O_NONBLOCKF_SETFLr~   r	   r	   r
   set_non_blocking   s   r   c                 C   s&   z|    W d S  tjy   Y d S w r   )closere   rd   )sockr	   r	   r
   r     s
   r   )
closerangec              	   C   s4   t | |D ]}zt| W q ty   Y qw d S r   )rangerB   r   r`   )Zfd_lowZfd_highrv   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   sL   |   }|dkr z| d t| ||W | d S | d w t| ||S )Ng        r   r   )
gettimeoutsetblockingr   )r   r   r   rZ   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   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.
    rN   NFT)sysexc_infotb_framef_code__code__tb_next)r6   tbr	   r	   r
   _called_with_wrong_argsE  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 )Nrn   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>  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.ro   z%Failed to find application object: %rz$Application object must be callable.)'r   r    r"   r#   ImportErrorendswithrB   rK   existsr   r   parsebodySyntaxErrorr   r   NameidCallrW   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_  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 )NZPWD)rB   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)rR   emailutils
formatdate)	timestampsr	   r	   r
   	http_date  s   r   c                 C   s   |    tv S r   )rs   r   hop_headers)headerr	   r	   r
   
is_hoppish  r   r   c                    s   dt jvrpt  rt d t   t  rt d t d | sFtdd t tt j	  dkr8t 
 d t 
 d t 
 d d	S t tt j	  dkr\t d t 
 d  fdd}|tjd |tjd d	S 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   rN   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isattyrB   r   dup2r   )streamZ	fd_expectrv   Zfd_nullr	   r
   redirect  s   
zdaemonize.<locals>.redirectN)rB   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 d S  ty"   t dt t f  Y d S w )N@   z%s.%s)randomseedrB   urandomNotImplementedErrorrR   getpidr	   r	   r	   r
   r     s
    r   c              
   C   sD   zt | d}W n ty } ztd| |f d }~ww |  d S )Nr   zError: '%s' isn't writable [%r])r   IOErrorr   r   )rK   r6   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 dS  tttjfy   Y dS w )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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
   rU   E  s   rU   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rtjd|  }|j|jdd  dS tj| S )Nz//r   r   )rK   )r   urllibr   urlsplit_replacerK   )r&   r   r	   r	   r
   split_request_uri_  s   
r  c                 C   s2   z|d u r|  }|j |ur|||d }d }w 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~  rL   r  )r   r   )F)rj   r   )r   )Kr   email.utilsr   ra   rz   r   r"   r   r   r   rB   r;   r   rp   re   r   r   rR   r   rT   r   Zgunicorn.errorsr   Zgunicorn.workersr   urllib.parser  r%   r   setr   r   r   r   r   r0   	ParameterPOSITIONAL_ONLYPOSITIONAL_OR_KEYWORDr5   r:   r?   rI   rJ   platformr   r\   r_   r]   ri   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  rU   r  r  r  r  r  r	   r	   r	   r
   <module>   s   

3


!	

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

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