U
    nËjB  ã                b   @  sz  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m	Z	 d dl
mZmZmZ d dlZd dlZd dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZm Z  d dl!m"Z"m#Z# d dl$m%Z%m&Z& e 'e(e )¡ ƒ¡Z*e 'e(e )¡ ƒ¡Z+e 'e(e )¡ ƒ¡Z,e 'e(e )¡ ƒ¡Z-e 'd	d
„ e )¡ D ƒ¡Z.e 'e¡Z/dZ0e 1d¡Z2dddddœdd„Z3ej4ddid�ej5ddd�ej6de7dddd�ej6de8d d!dd�ej6d"e7dd#d$�ej6d%e8dd&d$�ej6d'dd(d)d*�ej6d+d,dd-ej9dd.�d/�ej6d0d1dd2d3�ej6d4d5dd6d3�ej6d7e:d8dd9d:�ej6d;de8d<d=�ej6d>e.d?d@dd�ej6dAe+d?dBdd�ej6dCe,d?dDdd�ej6dEe8dFdGdd�ej6dHe8dIdJdd�ej6dKe:dLdMdd�ej6dNe:dLdOdd�ej6dPe;ddQdd�ej6dRe-d?dSdd�ej6dTe/d?dUdd�ej6dVej9dd.�ddWdd�ej6dXej9dd.�ddYdd�ej6dZe*dd[dd�ej6d\ddd]d*�ej6d^ddd_d*�ej6d`dddad*�ej6dbdddcd*�ej6ddddded*�ej6dfe7ddgd$�ej6dhe7didjd$�ej6dke8ddld$�ej6dme8dndod$�ej6dpe8ddqd$�ej6dre8dsdtdd�ej6due8ddvd$�ej6dwe7ddxdd�ej6dye7ddzdd�ej6d{e7dd|dd�ej6d}e8e8eƒd~dd�ej6de8e8ej<ƒd€dd�ej6d�e7dd‚dd�ej6dƒe7d„d…dd�ej6d†d‡ddˆd3�ej6d‰de3d(ddŠd‹�ej6dŒdidd�dŽ�ej6d�d�e8dd‘d$�ej6d’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–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ddŸœ0d d¡„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒZ=dd ddd?d?d?dFdIdLdLdd?d?d(dddd8ddedddddddiddnddsddddeej<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¨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­d¤ddždd®œ0d¯d°„Z>e?d±k�rve=ƒ  dS )²é    )ÚannotationsN)ÚRawConfigParser)ÚIOÚAnyÚCallable)ÚASGIApplication)ÚHTTP_PROTOCOLSÚ
INTERFACESÚLIFESPANÚ
LOG_LEVELSÚLOGGING_CONFIGÚLOOP_SETUPSÚSSL_PROTOCOL_VERSIONÚWS_PROTOCOLSÚConfigÚHTTPProtocolTypeÚInterfaceTypeÚLifespanTypeÚLoopSetupTypeÚWSProtocolType)ÚServerÚServerState)ÚChangeReloadÚMultiprocessc                 C  s   g | ]}|d kr|‘qS )Únone© )Ú.0Úkeyr   r   ú0/tmp/pip-unpacked-wheel-8f32qnwz/uvicorn/main.pyÚ
<listcomp>'   s      r   é   úuvicorn.errorzclick.Contextzclick.ParameterÚboolÚNone)ÚctxÚparamÚvalueÚreturnc                 C  s@   |r
| j rd S t djtjt ¡ t ¡ t 	¡ d�¡ |  
¡  d S )NzKRunning uvicorn {version} with {py_implementation} {py_version} on {system})ÚversionZpy_implementationÚ
py_versionÚsystem)Zresilient_parsingÚclickZechoÚformatÚuvicornÚ__version__ÚplatformÚpython_implementationÚpython_versionr*   Úexit)r$   r%   r&   r   r   r   Úprint_version/   s    
üÿr3   Zauto_envvar_prefixZUVICORN)Zcontext_settingsÚappZUVICORN_APP)Zenvvarz--hostz	127.0.0.1zBind socket to this host.T)ÚtypeÚdefaultÚhelpÚshow_defaultz--porti@  zABind socket to this port. If 0, an available port will be picked.z--udszBind to a UNIX domain socket.)r5   r6   r7   z--fdz)Bind to socket from this file descriptor.z--reloadFzEnable auto-reload.)Úis_flagr6   r7   z--reload-dirÚreload_dirszRSet reload directories explicitly, instead of using the current working directory.)Úexists)Úmultipler7   r5   z--reload-includeÚreload_includeszÆSet glob patterns to include while watching for files. Includes '*.py' by default; these defaults can be overridden with `--reload-exclude`. This option has no effect unless watchfiles is installed.)r<   r7   z--reload-excludeÚreload_excludeszÙSet glob patterns to exclude while watching for files. Includes '.*, .py[cod], .sw.*, ~*' by default; these defaults can be overridden with `--reload-include`. This option has no effect unless watchfiles is installed.z--reload-delayg      Ð?zTDelay between previous and next check if application needs to be. Defaults to 0.25s.)r5   r6   r8   r7   z	--workersz~Number of worker processes. Defaults to the $WEB_CONCURRENCY environment variable if available, or 1. Not valid with --reload.)r6   r5   r7   z--loopÚautozEvent loop implementation.z--httpzHTTP protocol implementation.z--wsz"WebSocket protocol implementation.z--ws-max-sizei   z#WebSocket max size message in bytesz--ws-max-queueé    z2The maximum length of the WebSocket message queue.z--ws-ping-intervalg      4@z#WebSocket ping interval in seconds.z--ws-ping-timeoutz"WebSocket ping timeout in seconds.z--ws-per-message-deflatez)WebSocket per-message-deflate compressionz
--lifespanzLifespan implementation.z--interfacez:Select ASGI3, ASGI2, or WSGI as the application interface.z
--env-filezEnvironment configuration file.z--log-configzBLogging configuration file. Supported formats: .ini, .json, .yaml.z--log-levelzLog level. [default: info]z--access-log/--no-access-logzEnable/Disable access log.z--use-colors/--no-use-colorsz!Enable/Disable colorized logging.z"--proxy-headers/--no-proxy-headerszdEnable/Disable X-Forwarded-Proto, X-Forwarded-For, X-Forwarded-Port to populate remote address info.z"--server-header/--no-server-headerz%Enable/Disable default Server header.z--date-header/--no-date-headerz#Enable/Disable default Date header.z--forwarded-allow-ipszóComma separated list of IP Addresses, IP Networks, or literals (e.g. UNIX Socket path) to trust with proxy headers. Defaults to the $FORWARDED_ALLOW_IPS environment variable if available, or '127.0.0.1'. The literal '*' means trust everything.z--root-pathÚ zLSet the ASGI 'root_path' for applications submounted below a given URL path.z--limit-concurrencyz^Maximum number of concurrent connections or tasks to allow, before issuing HTTP 503 responses.z	--backlogi   z0Maximum number of connections to hold in backlogz--limit-max-requestszEMaximum number of requests to service before terminating the process.z--timeout-keep-aliveé   zLClose Keep-Alive connections if no new data is received within this timeout.z--timeout-graceful-shutdownz8Maximum number of seconds to wait for graceful shutdown.z--ssl-keyfilezSSL key filez--ssl-certfilezSSL certificate filez--ssl-keyfile-passwordzSSL keyfile passwordz--ssl-versionz,SSL version to use (see stdlib ssl module's)z--ssl-cert-reqsz@Whether client certificate is required (see stdlib ssl module's)z--ssl-ca-certszCA certificates filez--ssl-ciphersÚTLSv1z(Ciphers to use (see stdlib ssl module's)z--headerÚheaderszASpecify custom default HTTP response headers as a Name:Value pairz	--versionz%Display the uvicorn version and exit.)r9   ÚcallbackZexpose_valueZis_eagerr7   z	--app-dirzuLook for APP in the specified directory, by adding this to the PYTHONPATH. Defaults to the current working directory.)r6   r8   r7   z--h11-max-incomplete-event-sizeÚh11_max_incomplete_event_sizezFFor h11, the maximum number of bytes to buffer of an incomplete event.z	--factoryzFTreat APP as an application factory, i.e. a () -> <ASGI app> callable.)r9   r6   r7   r8   ÚstrÚintr   r   r   Úfloatr   r   z	list[str]z
int | None)0r4   ÚhostÚportÚudsÚfdÚloopÚhttpÚwsÚws_max_sizeÚws_max_queueÚws_ping_intervalÚws_ping_timeoutÚws_per_message_deflateÚlifespanÚ	interfaceÚreloadr:   r=   r>   Úreload_delayÚworkersÚenv_fileÚ
log_configÚ	log_levelÚ
access_logÚproxy_headersÚserver_headerÚdate_headerÚforwarded_allow_ipsÚ	root_pathÚlimit_concurrencyÚbacklogÚlimit_max_requestsÚtimeout_keep_aliveÚtimeout_graceful_shutdownÚssl_keyfileÚssl_certfileÚssl_keyfile_passwordÚssl_versionÚssl_cert_reqsÚssl_ca_certsÚssl_ciphersrD   Ú
use_colorsÚapp_dirrF   Úfactoryr'   c/           /   1   C  sŒ   t | |||||||||	|
|||||d kr,tn||||||p<d |pBd |pHd |||||||||| |!|"|#|$|%|&|'|(|)dd„ |*D ƒ|+|.|,|-d�/ d S )Nc                 S  s   g | ]}|  d d¡‘qS )ú:é   )Úsplit)r   Úheaderr   r   r   r   Ç  s     zmain.<locals>.<listcomp>).rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   r[   r\   r]   r^   rW   rX   r:   r=   r>   rY   rZ   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rD   rp   rr   rq   rF   )Úrunr   )/r4   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   r:   r=   r>   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rD   rp   rq   rF   rr   r   r   r   Úmain=   sf      aÑrx   ).rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   r:   r=   r>   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rD   rp   rq   rr   rF   z*ASGIApplication | Callable[..., Any] | strz
str | Nonez)type[asyncio.Protocol] | HTTPProtocolTypez'type[asyncio.Protocol] | WSProtocolTypezfloat | Nonezlist[str] | str | Nonezstr | os.PathLike[str] | Nonez7dict[str, Any] | str | RawConfigParser | IO[Any] | Nonezstr | int | Nonezlist[tuple[str, str]] | Nonezbool | None)0r4   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   r:   r=   r>   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rD   rp   rq   rr   rF   r'   c       .   3   0   C  sˆ  |,d k	rt j d|,¡ t| |||||||||	|
|||||||||||||||||||||| |!|"|#|$|%|&|'|(|)|*|+|-|.d�.}/t|/d�}0|/js”|/jdkr¼t| tƒs¼t	 
d¡}1|1 d¡ t  d¡ zzz^|/jræ|/ ¡ }2t|/|0j|2gd� ¡  n4|/jdk�r|/ ¡ }2t|/|0j|2gd� ¡  n|0 ¡  W n tk
�r2   Y nX W 5 |/j�r\tj |/j¡�r\t |/j¡ X |0j�s„|/j�s„|/jdk�r„t  t¡ d S )Nr   )-rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   r:   r=   r>   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rD   rp   rr   rF   )Úconfigrt   r!   zRYou must pass the application as an import string to enable 'reload' or 'workers'.)ÚtargetZsockets)ÚsysÚpathÚinsertr   r   rX   rZ   Ú
isinstancerG   ÚloggingÚ	getLoggerÚwarningr2   rL   Úosr;   ÚremoveZshould_reloadZbind_socketr   rw   r   ÚKeyboardInterruptÚstartedÚSTARTUP_FAILURE)3r4   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   r:   r=   r>   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rD   rp   rq   rr   rF   ry   ÚserverÚloggerÚsockr   r   r   rw   Ï  sŠ    2Ò0




rw   Ú__main__)@Ú
__future__r   Zasyncior   r‚   r/   Ússlr{   Úconfigparserr   Útypingr   r   r   r+   r-   Zuvicorn._typesr   Zuvicorn.configr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   Zuvicorn.serverr   r   Zuvicorn.supervisorsr   r   ZChoiceÚlistÚkeysZLEVEL_CHOICESZHTTP_CHOICESZ
WS_CHOICESZLIFESPAN_CHOICESZLOOP_CHOICESZINTERFACE_CHOICESr†   r€   rˆ   r3   ÚcommandÚargumentÚoptionrG   rH   ÚPathrI   r"   Ú	CERT_NONErx   rw   Ú__name__r   r   r   r   Ú<module>   sÚ  @

ûû
ûüü	ûüûûûûûûûûûû
û
ûûüüüüüü	üüüüûüûûûûûûüúüûûÎgÐp
