o
    [ÞhÀU  ã                
   @  sX  U d dl m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mZ d dlmZmZmZmZ d dlZd dlmZ 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% ed Z&ed Z'ed Z(ed Z)ed Z*ej+ej,ej-ej.ej/edœZ0de1d< ddddœZ2de1d< ddddddœZ3de1d < d!d!d"dœZ4de1d#< dd$d%d&dœZ5de1d'< g d¢Z6d(e1d)< e	j7Z8d*e1d+< d,d-d.d/dd0œd1d2d3œd4œd5d6d7d8œd9d6d:d8œd4œd5gd;d-d<œd=d;id9gd;d-d<œd>œd?œZ9d@e1dA< e :dB¡Z;dbdOdP„Z<dcdTdU„Z=dddZd[„Z>ded^d_„Z?G d`da„ daƒZ@dS )fé    )ÚannotationsN)Ú	Awaitable)ÚRawConfigParser)ÚPath)ÚIOÚAnyÚCallableÚLiteral)ÚASGIApplication)ÚImportFromStringErrorÚimport_from_string)ÚTRACE_LOG_LEVEL)ÚASGI2Middleware)ÚMessageLoggerMiddleware)ÚProxyHeadersMiddleware)ÚWSGIMiddleware)ÚautoÚh11Ú	httptools)r   ÚnoneÚ
websocketszwebsockets-sansioÚwsproto)r   ÚonÚoff)r   r   ÚasyncioÚuvloop)r   Úasgi3Úasgi2Úwsgi)ÚcriticalÚerrorÚwarningÚinfoÚdebugÚtracezdict[str, int]Ú
LOG_LEVELSz,uvicorn.protocols.http.auto:AutoHTTPProtocolz+uvicorn.protocols.http.h11_impl:H11Protocolz7uvicorn.protocols.http.httptools_impl:HttpToolsProtocolzdict[str, str]ÚHTTP_PROTOCOLSz8uvicorn.protocols.websockets.auto:AutoWebSocketsProtocolz>uvicorn.protocols.websockets.websockets_impl:WebSocketProtocolzLuvicorn.protocols.websockets.websockets_sansio_impl:WebSocketsSansIOProtocolz4uvicorn.protocols.websockets.wsproto_impl:WSProtocolzdict[str, str | None]ÚWS_PROTOCOLSzuvicorn.lifespan.on:LifespanOnz uvicorn.lifespan.off:LifespanOffÚLIFESPANz$uvicorn.loops.auto:auto_loop_factoryz*uvicorn.loops.asyncio:asyncio_loop_factoryz(uvicorn.loops.uvloop:uvloop_loop_factoryÚLOOP_FACTORIESzlist[InterfaceType]Ú
INTERFACESÚintÚSSL_PROTOCOL_VERSIONé   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Úaccessr1   zlogging.StreamHandlerzext://sys.stderr)Ú	formatterÚclassÚstreamr2   zext://sys.stdoutÚINFO)ÚhandlersÚlevelÚ	propagater8   )Úuvicornúuvicorn.errorúuvicorn.access)ÚversionÚdisable_existing_loggersÚ
formattersr7   Úloggerszdict[str, Any]ÚLOGGING_CONFIGr;   Úcertfileústr | os.PathLike[str]Úkeyfileústr | os.PathLike[str] | NoneÚpasswordú
str | NoneÚssl_versionÚ	cert_reqsÚca_certsÚciphersÚreturnússl.SSLContextc           	        sX   t  |¡}ˆ r‡ fdd„nd }| | ||¡ t  |¡|_|r#| |¡ |r*| |¡ |S )Nc                     s   ˆ S ©N© rO   ©rF   rO   úN/var/www/html/premium_crap/venv/lib/python3.10/site-packages/uvicorn/config.pyÚ<lambda>r   s    z$create_ssl_context.<locals>.<lambda>)ÚsslÚ
SSLContextÚload_cert_chainÚ
VerifyModeÚverify_modeÚload_verify_locationsÚset_ciphers)	rB   rD   rF   rH   rI   rJ   rK   ÚctxÚget_passwordrO   rP   rQ   Úcreate_ssl_contexth   s   
	

r\   Úpathr   Úboolc                 C  s0   z|   ¡ s	|  ¡ } |  ¡ W S  ty   Y dS w )NF)Úis_absoluteÚresolveÚis_dirÚOSError)r]   rO   rO   rQ   ra   |   s   
ÿra   Úpatterns_listú	list[str]Údirectories_listútuple[list[str], list[Path]]c           
      C  sV  t ttt| ¡ ƒƒƒ}|  ¡ }t ¡ }| D ]+}|dkrq| |¡ tt|ƒƒr/| t|ƒ¡ q| |¡D ]}t|ƒr?| |¡ q4qt t|ƒƒ}t tt|ƒƒ}t tdd„ |ƒƒ}t dd„ |D ƒƒ}g }t	t
|ƒƒD ]/}t	|d t
|ƒƒD ]#}	|| ||	 jv r†| ||	 ¡ qs||	 || jv r–| || ¡ qsqht t|ƒ t|ƒ¡ƒ}t t|ƒƒ|fS )Nz.*c                 S  s   |   ¡ S rN   )r`   )ÚxrO   rO   rQ   rR   ™   s    z)resolve_reload_patterns.<locals>.<lambda>c                 S  s   h | ]}t |ƒr|’qS rO   )ra   )Ú.0Úreload_pathrO   rO   rQ   Ú	<setcomp>š   s    z*resolve_reload_patterns.<locals>.<setcomp>r-   )ÚlistÚsetÚmapr   ÚcopyÚcwdÚappendra   ÚglobÚrangeÚlenÚparentsÚ
difference)
rc   re   ÚdirectoriesÚpatternsÚcurrent_working_directoryÚpatternÚmatchÚchildrenÚjÚkrO   rO   rQ   Úresolve_reload_patterns…   s:   

€þ€ür~   Údirsúlist[str] | str | Nonec                 C  s(   | d u rg S t | tƒr| gS tt| ƒƒS rN   )Ú
isinstanceÚstrrk   rl   )r   rO   rO   rQ   Ú_normalize_dirs©   s
   
rƒ   c                0   @  sä   e Zd Zddddd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dddddeejdddd	df0dndUdV„ZedodYdZ„ƒZ	edpd[d\„ƒZ
edpd]d^„ƒZdqd`da„Zdqdbdc„Zdqddde„Zdrdgdh„Zdsdjdk„Zedpdldm„ƒZdS )tÚConfigú	127.0.0.1i@  Nr   i   é    g      4@TFg      Ð?Ú i   é   é   ÚTLSv1Úappú*ASGIApplication | Callable[..., Any] | strÚhostr‚   Úportr+   ÚudsrG   Úfdú
int | NoneÚloopúLoopFactoryType | strÚhttpú/type[asyncio.Protocol] | HTTPProtocolType | strÚwsú-type[asyncio.Protocol] | WSProtocolType | strÚws_max_sizeÚws_max_queueÚws_ping_intervalúfloat | NoneÚws_ping_timeoutÚws_per_message_deflater^   ÚlifespanÚLifespanTypeÚenv_filerE   Ú
log_configú7dict[str, Any] | str | RawConfigParser | IO[Any] | NoneÚ	log_levelústr | int | NoneÚ
access_logr0   úbool | NoneÚ	interfaceÚInterfaceTypeÚreloadÚreload_dirsr€   Úreload_delayÚfloatÚreload_includesÚreload_excludesÚworkersÚproxy_headersÚserver_headerÚdate_headerÚforwarded_allow_ipsÚ	root_pathÚlimit_concurrencyÚlimit_max_requestsÚbacklogÚtimeout_keep_aliveÚtimeout_notifyÚtimeout_graceful_shutdownÚtimeout_worker_healthcheckÚcallback_notifyú%Callable[..., Awaitable[None]] | NoneÚssl_keyfileÚssl_certfileÚssl_keyfile_passwordrH   Ússl_cert_reqsÚssl_ca_certsÚssl_ciphersÚheadersúlist[tuple[str, str]] | NoneÚfactoryÚh11_max_incomplete_event_sizec2           7   
   C  sú  || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|pBd| _|| _|| _|| _|| _| | _|!| _|"| _|#| _|$| _|%| _|&| _ |'| _!|(| _"|)| _#|*| _$|+| _%|,| _&|-| _'|.| _(|/p€g | _)g | _*|0| _+|1| _,d| _-|  .¡  g | _/g | _0g | _1g | _2|s¤|s¤|r¬| j3s¬t4 5d¡ | j3�r,t6|ƒ}t6|ƒ}t6|ƒ}t7||ƒ\| _1| _/t7|g ƒ\| _2| _0| j/ 8¡ }2| j0D ]"}3|2D ]}4|3|4kså|3|4j9v r÷z| j/ :|4¡ W qÚ t;yö   Y qÚw qÚqÖ| j2D ]}5|5| j1v �r
| j1 :|5¡ qü| j/�s|�rt4 5d|¡ t< =¡ g| _/t4 >dt?t@tAtB| j/ƒƒƒ¡ |d u�rBddlCmD}6 t4 >d|¡ |6|d	� |d u �rUd
tEjFv �rUtGtEjFd
 ƒ| _|  |d u �retEjF Hdd¡| _In|| _I| j�ry| jdk�r{t4 5d¡ d S d S d S )Nr-   FzcCurrent configuration will not reload as not all conditions are met, please refer to documentation.zeProvided reload directories %s did not contain valid directories, watching current working directory.z/Will watch for changes in these directories: %sr   )Úload_dotenvzLoading environment from '%s')Údotenv_pathÚWEB_CONCURRENCYÚFORWARDED_ALLOW_IPSr…   z4"workers" flag is ignored when reloading is enabled.)Jr‹   r�   rŽ   r�   r�   r’   r”   r–   r˜   r™   rš   rœ   r�   rž   r¡   r£   r¥   r0   r§   r©   r«   r¯   r°   r±   r²   r´   rµ   r¶   r·   r¸   r¹   rº   r»   r¼   r¾   r¿   rÀ   rH   rÁ   rÂ   rÃ   rÄ   Úencoded_headersrÆ   rÇ   ÚloadedÚconfigure_loggingrª   Úreload_dirs_excludesr­   r®   Úshould_reloadÚloggerr!   rƒ   r~   rn   rt   ÚremoveÚ
ValueErrorr   ro   r"   Úsortedrk   rm   r‚   ÚdotenvrÈ   ÚosÚenvironr+   Úgetr³   )7Úselfr‹   r�   rŽ   r�   r�   r’   r”   r–   r˜   r™   rš   rœ   r�   rž   r    r¡   r£   r¥   r0   r§   r©   rª   r«   r­   r®   r¯   r°   r±   r²   r³   r´   rµ   r¶   r·   r¸   r¹   rº   r»   r¼   r¾   r¿   rÀ   rH   rÁ   rÂ   rÃ   rÄ   rÆ   rÇ   Úreload_dirs_tmpÚ	directoryÚreload_directoryry   rÈ   rO   rO   rQ   Ú__init__²   sÈ   4

ÿ

ÿýÿ
€ýþ


ÿzConfig.__init__rL   úLiteral['2.0', '3.0']c                 C  s   ddddœ}|| j  S )Nz2.0z3.0)r   r   r   )r§   )rÙ   ÚmappingrO   rO   rQ   Úasgi_versionX  s
   ý
zConfig.asgi_versionc                 C  s   t | jp| jƒS rN   )r^   r¾   r¿   ©rÙ   rO   rO   rQ   Úis_ssla  s   zConfig.is_sslc                 C  s   t | jp| jdkƒS )Nr-   )r^   r©   r¯   rá   rO   rO   rQ   Úuse_subprocesse  s   zConfig.use_subprocessÚNonec                 C  s´  t  td¡ | jd ur™t| jtƒr2| jdv r*| j| jd d d< | j| jd d d< t j | j¡ ngt| jt	ƒr_| j 
d¡r_t| jƒ�}t |¡}t j |¡ W d   ƒ n1 sYw   Y  n:t| jt	ƒr�| j 
d¡r�d	d l}t| jƒ�}| |¡}t j |¡ W d   ƒ n1 sŠw   Y  n	t jj| jd
d� | jd urÅt| jt	ƒrªt| j }n| j}t  d¡ |¡ t  d¡ |¡ t  d¡ |¡ | jd
u rØg t  d¡_d
t  d¡_d S d S )NÚTRACE)TFr?   r1   r0   r2   z.json)z.yamlz.ymlr   F)r>   r;   r<   zuvicorn.asgi)ÚloggingÚaddLevelNamer   r¡   r�   Údictr0   ÚconfigÚ
dictConfigr‚   ÚendswithÚopenÚjsonÚloadÚyamlÚ	safe_loadÚ
fileConfigr£   r%   Ú	getLoggerÚsetLevelr¥   r7   r9   )rÙ   ÚfileÚloaded_configrï   r£   rO   rO   rQ   rÎ   i  s@   


þ€
þ€

þzConfig.configure_loggingc              
   C  sr  | j rJ ‚| jr!| jsJ ‚t| j| j| j| j| j| j| j	d�| _
nd | _
dd„ | jD ƒ}dt|ƒvr:| jr:dg| n|| _t| jtƒrQtt | j| j¡ƒ}|| _n| j| _t| jtƒritt | j| 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$r¹t  d|¡ t! "d¡ W Y d }~nd }~ww | j$sÌt %d	¡ | j&d
krþt' (| j¡rÞt)| jdƒ}nt' *| j¡rët' +| j¡}nt,| jdd ƒ}t' +|¡}|rûdnd| _&| j&dk�rt-| jƒ| _d | _n| j&dk�rt.| jƒ| _t /¡ t0k�r't1| jƒ| _| j2�r4t3| j| j4d�| _d| _ d S )N)rD   rB   rF   rH   rI   rJ   rK   c                 S  s(   g | ]\}}|  ¡  d ¡| d ¡f‘qS )Úlatin1)ÚlowerÚencode)rh   ÚkeyÚvaluerO   rO   rQ   Ú
<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)5rÍ   râ   r¿   r\   r¾   rÀ   rH   rÁ   rÂ   rÃ   rS   rÄ   rè   r±   rÌ   r�   r”   r‚   r   r&   rØ   Úhttp_protocol_classr–   r'   Úws_protocol_classr(   rž   Úlifespan_classr‹   Ú
loaded_appr   rÑ   r    ÚsysÚexitÚ	TypeErrorrÆ   r!   r§   ÚinspectÚisclassÚhasattrÚ
isfunctionÚiscoroutinefunctionÚgetattrr   r   ÚgetEffectiveLevelr   r   r°   r   r³   )rÙ   rÌ   r   r  ÚexcÚ
use_asgi_3ÚcallrO   rO   rQ   rî   �  s€   


ù

ÿý€þ
€ýÿ


zConfig.loadc                 C  s   t dƒ‚)Na  The `setup_event_loop` method was replaced by `get_loop_factory` in uvicorn 0.36.0.
None of those methods are supposed to be used directly. If you are doing it, please let me know here: https://github.com/Kludex/uvicorn/discussions/2706. Thank you, and sorry for the inconvenience.)ÚAttributeErrorrá   rO   rO   rQ   Úsetup_event_loopÞ  s   ÿzConfig.setup_event_loopú.Callable[[], asyncio.AbstractEventLoop] | Nonec              
   C  s|   | j tv rtt| j  ƒ}n%zt| j ƒW S  ty1 } zt d| ¡ t d¡ W Y d }~nd }~ww |d u r8d S || jd�S )Nz,Error loading custom loop setup function. %sr-   )rã   )	r’   r)   r   r   rÑ   r    r  r  rã   )rÙ   Úloop_factoryr  rO   rO   rQ   Úget_loop_factoryå  s   
€þzConfig.get_loop_factoryúsocket.socketc              
   C  sâ  | j rO| j }t tjtj¡}z| |¡ d}t | j |¡ W n ty: } zt 	|¡ t
 d¡ W Y d }~nd }~ww d}d}dtj|dd� d }| j g}n�| jrqt | jtjtj¡}d	}d}	dtj|	dd� d }| ¡ g}nkt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y¹ } zt 	|¡ t
 d¡ W Y d }~nd }~ww d|› d�}dtj|dd� d }| jrÐdnd}|| j| ¡ d g}tj|g|¢R dd|iiŽ | d¡ |S )Ni¶  r-   z8Uvicorn running on unix socket %s (Press CTRL+C to quit)z%szUvicorn running on T)Úboldz (Press CTRL+C to quit)z3Uvicorn running on socket %s (Press CTRL+C to quit)z
%s://%s:%dú:z%s://[%s]:%d)ÚfamilyÚhttpsr”   ÚextraÚcolor_message)r�   ÚsocketÚAF_UNIXÚSOCK_STREAMÚbindrÖ   Úchmodrb   rÑ   r    r  r  ÚclickÚstyler�   ÚfromfdÚgetsocknameÚAF_INETr�   ÚAF_INET6Ú
setsockoptÚ
SOL_SOCKETÚSO_REUSEADDRrŽ   râ   r"   Úset_inheritable)rÙ   r]   ÚsockÚ	uds_permsr  ÚmessageÚsock_name_formatr  Úlogger_argsÚfd_name_formatr  Úaddr_formatÚprotocol_namerO   rO   rQ   Úbind_socketò  sV   

€þ

€þ
zConfig.bind_socketc                 C  s   t | jtƒo| jS rN   )r�   r‹   r‚   r©   rá   rO   rO   rQ   rÐ   "  s   zConfig.should_reload)br‹   rŒ   r�   r‚   rŽ   r+   r�   rG   r�   r‘   r’   r“   r”   r•   r–   r—   r˜   r+   r™   r+   rš   r›   rœ   r›   r�   r^   rž   rŸ   r    rE   r¡   r¢   r£   r¤   r¥   r^   r0   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‘   r·   r+   r¸   r+   r¹   r+   rº   r‘   r»   r+   r¼   r½   r¾   rE   r¿   rE   rÀ   rG   rH   r+   rÁ   r+   rÂ   rE   rÃ   r‚   rÄ   rÅ   rÆ   r^   rÇ   r‘   )rL   rÞ   )rL   r^   )rL   rä   )rL   r  )rL   r  )Ú__name__Ú
__module__Ú__qualname__rA   r,   rS   Ú	CERT_NONErÝ   Úpropertyrà   râ   rã   rÎ   rî   r  r  r4  rÐ   rO   rO   rO   rQ   r„   ±   s€    Î '

&
O

0r„   )rB   rC   rD   rE   rF   rG   rH   r+   rI   r+   rJ   rE   rK   rG   rL   rM   )r]   r   rL   r^   )rc   rd   re   rd   rL   rf   )r   r€   rL   rd   )AÚ
__future__r   r   r  rí   ræ   Úlogging.configrÖ   r  rS   r  Úcollections.abcr   Úconfigparserr   Úpathlibr   Útypingr   r   r   r	   r"  Úuvicorn._typesr
   Úuvicorn.importerr   r   Úuvicorn.loggingr   Úuvicorn.middleware.asgi2r   Ú!uvicorn.middleware.message_loggerr   Ú uvicorn.middleware.proxy_headersr   Úuvicorn.middleware.wsgir   ÚHTTPProtocolTypeÚWSProtocolTyperŸ   ÚLoopFactoryTyper¨   ÚCRITICALÚERRORÚWARNINGr6   ÚDEBUGr%   Ú__annotations__r&   r'   r(   r)   r*   ÚPROTOCOL_TLS_SERVERr,   rA   rò   rÑ   r\   ra   r~   rƒ   r„   rO   rO   rO   rQ   Ú<module>   sª    ú	ýûýüýþúýýúýæ
!


	
$