o
    [h3                  
   @   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	m
Z
mZ d dlZzd dlZW n	 ey?   Y nw d dlmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d	Zejejejej ej!ed
Z"ddddZ#dddddZ$ddddZ%dddddZ&g dZ'e(edej)Z*dddddd d!d"d#d$d%d&d'd(d)d&d*d(d$d%gd+d,d-d+id)gd+dd.d/d0Z+e,d1Z-d2d3 Z.G d4d5 d5Z/dS )6    N)ListTuple)ImportFromStringErrorimport_from_string)ASGI2Middleware)DebugMiddleware)MessageLoggerMiddleware)ProxyHeadersMiddleware)WSGIMiddleware   )criticalerrorwarninginfodebugtracez,uvicorn.protocols.http.auto:AutoHTTPProtocolz+uvicorn.protocols.http.h11_impl:H11Protocolz7uvicorn.protocols.http.httptools_impl:HttpToolsProtocol)autoZh11Z	httptoolsz8uvicorn.protocols.websockets.auto:AutoWebSocketsProtocolz>uvicorn.protocols.websockets.websockets_impl:WebSocketProtocolz4uvicorn.protocols.websockets.wsproto_impl:WSProtocol)r   noneZ
websocketsZwsprotozuvicorn.lifespan.on:LifespanOnz uvicorn.lifespan.off:LifespanOff)r   onoffz"uvicorn.loops.auto:auto_loop_setupz#uvicorn.loops.asyncio:asyncio_setupz!uvicorn.loops.uvloop:uvloop_setup)r   r   asyncioZuvloop)r   asgi3asgi2wsgiPROTOCOL_TLS   Fz uvicorn.logging.DefaultFormatterz%(levelprefix)s %(message)s)()fmt
use_colorszuvicorn.logging.AccessFormatterzD%(levelprefix)s %(client_addr)s - "%(request_line)s" %(status_code)s)r   r   )defaultaccessr   zlogging.StreamHandlerzext://sys.stderr)	formatterclassstreamr    zext://sys.stdoutINFO)handlerslevelr&   )r%   r&   	propagate)Zuvicornuvicorn.erroruvicorn.access)versiondisable_existing_loggers
formattersr%   loggersr(   c           	         sR   t |} r fddnd }|| || ||_|r || |r'|| |S )Nc                      s    S N r/   passwordr/   u/home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-packages/uvicorn/config.py<lambda>l   s    z$create_ssl_context.<locals>.<lambda>)ssl
SSLContextload_cert_chainverify_modeload_verify_locationsset_ciphers)	certfilekeyfiler1   ssl_version	cert_reqsca_certsciphersctxget_passwordr/   r0   r2   create_ssl_contexth   s   


rB   c                %   @   s   e Zd Zdddddddddedddddddddddddddd	d
ddddeejddddf%ddZede	fddZ
edefddZdd Zdd Zdd Zdd Zedd ZdS )Config	127.0.0.1i@  Nr   TF i   r      TLSv1c'           (      C   s  || _ || _|| _|| _|| _|| _|| _|| _|	| _|| _	|| _
|| _|| _|| _|| _|| _|p3d| _|p8d| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _| | _|!| _|"| _|#| _|$| _ |%rk|%ng | _!d | _"|&| _#d| _$| %  |d u rt&' g| _(n|| _(|
d urddl)m*}' t+,d|
 |'|
d |d u rdt&j-v rt.t&j-d | _|d u rt&j-/d	d
| _0d S || _0d S )Ng      ?r   Fr   )load_dotenvzLoading environment from '%s')Zdotenv_pathZWEB_CONCURRENCYZFORWARDED_ALLOW_IPSrD   )1apphostportudsfdloophttpwslifespan
log_config	log_level
access_logr   	interfacer   reloadreload_delayworkersproxy_headers	root_pathlimit_concurrencylimit_max_requestsbacklogtimeout_keep_alivetimeout_notifycallback_notifyssl_keyfilessl_certfilessl_keyfile_passwordr<   ssl_cert_reqsssl_ca_certsssl_ciphersheadersencoded_headersfactoryloadedconfigure_loggingosgetcwdreload_dirsZdotenvrH   loggerr   environintgetforwarded_allow_ips)(selfrI   rJ   rK   rL   rM   rN   rO   rP   rQ   Zenv_filerR   rS   rT   r   rU   r   rV   rn   rW   rX   rY   rs   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   r<   rd   re   rf   rg   ri   rH   r/   r/   r2   __init__w   sh   )




zConfig.__init__returnc                 C   s   dddd| j  S )Nz2.0z3.0)r   r   r   )rU   rt   r/   r/   r2   asgi_version   s   zConfig.asgi_versionc                 C   s   t | jp| jS r.   )boolra   rb   rw   r/   r/   r2   is_ssl   s   zConfig.is_sslc                 C   s  t td | jd urt| jtr2| jdv r*| j| jd d d< | j| jd d d< t j| j nW| j	drYt
| j}t|}t j| W d    n1 sSw   Y  n0| j	drt
| j}t|}t j| W d    n1 szw   Y  n	t jj| jd	d
 | jd urt| jtrt| j }n| j}t d| t d| t d| | jd	u rg t d_d	t d_d S d S )NTRACE)TFr,   r   r   r    z.json)z.yamlz.ymlF)r+   r(   r)   zuvicorn.asgi)loggingaddLevelNameTRACE_LOG_LEVELrR   
isinstancedictr   config
dictConfigendswithopenjsonloadyamlZ	safe_load
fileConfigrS   str
LOG_LEVELS	getLoggersetLevelrT   r%   r'   )rt   fileZloaded_configrS   r/   r/   r2   rk      sN   





zConfig.configure_loggingc              
   C   s^  | j rJ | jrt| j| j| j| j| j| j| j	d| _
nd | _
dd | jD }dt|v r/|ndg| | _t| jtrDtt| j | _n| j| _t| jtrWtt| j | _n| j| _tt| j | _zt| j| _W n ty } ztd|  t d W Y d }~nd }~ww z|  | _W n  t!y } z| j"rtd| t d W Y d }~nd }~ww | j"st#d	 | j$d
krt%&| jrt'| jd}nt%(| jrt)*| j}nt+| jdd }t)*|}|rdnd| _$| j$dkrt,| j| _d | _n| j$dkrt-| j| _| j.rt/| j| _tj0t1krt2| j| _| j3r*t4| j| j5d| _d| _ d S )N)r;   r:   r1   r<   r=   r>   r?   c                 S   s(   g | ]\}}|  d |d fqS )latin1)lowerencode).0keyvaluer/   r/   r2   
<listcomp>  s    zConfig.load.<locals>.<listcomp>   server)r   s   uvicornzError loading ASGI app. %sr   z"Error loading ASGI app factory: %sz_ASGI app factory detected. Using it, but please consider setting the --factory flag explicitly.r   	__await____call__r   r   r   )trusted_hostsT)6rj   rz   rB   ra   rb   rc   r<   rd   re   rf   r4   rg   r   rh   r   rO   r   r   HTTP_PROTOCOLSZhttp_protocol_classrP   WS_PROTOCOLSZws_protocol_classLIFESPANrQ   Zlifespan_classrI   Z
loaded_appr   ro   r   sysexit	TypeErrorri   r   rU   inspectisclasshasattr
isfunctionr   iscoroutinefunctiongetattrr
   r   r   r   r&   r~   r   rY   r	   rs   )rt   rh   excZ
use_asgi_3callr/   r/   r2   r     s   







zConfig.loadc                 C   s$   t t| j }|d ur|  d S d S r.   )r   LOOP_SETUPSrN   )rt   Z
loop_setupr/   r/   r2   setup_event_loopa  s   
zConfig.setup_event_loopc              
   C   s   t j}d}| jrd| jv rt j}d}t j |d}|t jt jd z|| j| jf W n t	yH } zt
| td W Y d }~nd }~ww |d d| d}dtj|dd	 d }| jrdd
nd}t
j||| j| jd|id |S )Nz
%s://%s:%d:z%s://[%s]:%d)familyr   TzUvicorn running on z (Press CTRL+C to quit))boldhttpsrO   color_message)extra)socketAF_INETrJ   AF_INET6
setsockopt
SOL_SOCKETSO_REUSEADDRbindrK   OSErrorro   r   r   r   set_inheritableclickstylerz   r   )rt   r   Zaddr_formatsockr   messager   Zprotocol_namer/   r/   r2   bind_socketf  s>   

zConfig.bind_socketc                 C   s   t | jto| jp| jS r.   )r   rI   r   r   rV   rw   r/   r/   r2   should_reload  s   zConfig.should_reload)__name__
__module____qualname__LOGGING_CONFIGSSL_PROTOCOL_VERSIONr4   	CERT_NONEru   propertyr   rx   ry   rz   rk   r   r   r   r   r/   r/   r/   r2   rC   v   sb    
f(T"rC   )0r   r   r   r|   logging.configrl   r   r4   r   typingr   r   r   r   ImportErrorZuvicorn.importerr   r   Zuvicorn.middleware.asgi2r   Zuvicorn.middleware.debugr   Z!uvicorn.middleware.message_loggerr   Z uvicorn.middleware.proxy_headersr	   Zuvicorn.middleware.wsgir
   r~   CRITICALERRORWARNINGr$   DEBUGr   r   r   r   r   Z
INTERFACESr   PROTOCOL_SSLv23r   r   r   ro   rB   rC   r/   r/   r/   r2   <module>   s    	

!