o
    Õ­j^Q  ã                
   @  sN  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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œZ/de0d< ddddœZ1de0d< dddddœZ2de0d< ddd dœZ3d!e0d"< dd#d$d%dœZ4d&e0d'< g d¢Z5d(e0d)< e	j6Z7d*e0d+< 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?œZ8d@e0dA< e 9dB¡Z:dbdOdP„Z;dcdTdU„Z<dddZd[„Z=ded^d_„Z>G d`da„ daƒZ?dS )fé    )ÚannotationsN)ÚRawConfigParser)ÚPath)ÚIOÚAnyÚ	AwaitableÚCallableÚLiteral)ÚASGIApplication)ÚImportFromStringErrorÚimport_from_string)ÚTRACE_LOG_LEVEL)ÚASGI2Middleware)ÚMessageLoggerMiddleware)ÚProxyHeadersMiddleware)ÚWSGIMiddleware)ÚautoÚh11Ú	httptools)r   ÚnoneÚ
websocketsÚ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[HTTPProtocolType, str]ÚHTTP_PROTOCOLSz8uvicorn.protocols.websockets.auto:AutoWebSocketsProtocolz>uvicorn.protocols.websockets.websockets_impl:WebSocketProtocolz4uvicorn.protocols.websockets.wsproto_impl:WSProtocolz dict[WSProtocolType, str | None]ÚWS_PROTOCOLSzuvicorn.lifespan.on:LifespanOnz uvicorn.lifespan.off:LifespanOffzdict[LifespanType, str]ÚLIFESPANz"uvicorn.loops.auto:auto_loop_setupz#uvicorn.loops.asyncio:asyncio_setupz!uvicorn.loops.uvloop:uvloop_setupzdict[LoopSetupType, str | None]ÚLOOP_SETUPSz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   úK/var/www/html/CropPilot/venv/lib/python3.10/site-packages/uvicorn/config.pyÚ<lambda>p   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_contextf   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   z   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                /   @  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eejdddd	df/djdTdU„ZedkdXdY„ƒZ	edldZd[„ƒZ
edld\d]„ƒZdmd_d`„Zdmdadb„Zdmdcdd„Zdndfdg„Zedldhdi„ƒZdS )oÚConfigú	127.0.0.1i@  Nr   i   é    g      4@TFg      Ð?Ú i   é   é   ÚTLSv1Úappú*ASGIApplication | Callable[..., Any] | strÚhostr‚   Úportr+   ÚudsrG   Úfdú
int | NoneÚloopÚLoopSetupTypeÚhttpú)type[asyncio.Protocol] | HTTPProtocolTypeÚwsú'type[asyncio.Protocol] | WSProtocolTypeÚ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Ú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_sizec1           6   
   C  sø  || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|pBd| _|| _|| _|| _|| _| | _|!| _|"| _|#| _|$| _|%| _|&| _ |'| _!|(| _"|)| _#|*| _$|+| _%|,| _&|-| _'|.p}g | _(g | _)|/| _*|0| _+d| _,|  -¡  g | _.g | _/g | _0g | _1|s¡|s¡|r©| j2s©t3 4d¡ | j2�r+t5|ƒ}t5|ƒ}t5|ƒ}t6||ƒ\| _0| _.t6|g ƒ\| _1| _/| j. 7¡ }1| j/D ]"}2|1D ]}3|2|3ksâ|2|3j8v rôz| j. 9|3¡ W q× t:yó   Y q×w q×qÓ| j1D ]}4|4| j0v �r| j0 9|4¡ qù| j.�s|�rt3 4d|¡ t;t< =¡ ƒg| _.t3 >dt?t@tAtB| j.ƒƒƒ¡ |d u�rAddlCmD}5 t3 >d|¡ |5|d	� |d u �rTd
t<jEv �rTtFt<jEd
 ƒ| _|  |d u �rdt<jE Gdd¡| _Hn|| _H| j�rx| jdk�rzt3 4d¡ 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.)Ir‹   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¿   rH   rÀ   rÁ   rÂ   rÃ   Úencoded_headersrÅ   rÆ   ÚloadedÚconfigure_loggingrª   Úreload_dirs_excludesr­   r®   Úshould_reloadÚloggerr!   rƒ   r~   rn   rt   ÚremoveÚ
ValueErrorr   ÚosÚgetcwdr"   Úsortedrk   rm   r‚   ÚdotenvrÇ   Úenvironr+   Úgetr³   )6Ú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¿   rH   rÀ   rÁ   rÂ   rÃ   rÅ   rÆ   Úreload_dirs_tmpÚ	directoryÚreload_directoryry   rÇ   rO   rO   rQ   Ú__init__°   sÆ   3

ÿ

ÿýÿ
€ýþ


ÿ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_versionT  s
   ý
zConfig.asgi_versionc                 C  s   t | jp| jƒS rN   )r^   r½   r¾   ©rÙ   rO   rO   rQ   Úis_ssl]  s   zConfig.is_sslc                 C  s   t | jp| jdkƒS )Nr-   )r^   r©   r¯   rá   rO   rO   rQ   Úuse_subprocessa  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Í   e  s@   


þ€
þ€

þzConfig.configure_loggingc              
   C  sf  | 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ƒrNtt| j ƒ}|| _n| j| _t| jtƒrct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#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�r.t3| 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&   Úhttp_protocol_classr–   r'   Úws_protocol_classr(   rž   Úlifespan_classr‹   Ú
loaded_appr   rÐ   r    ÚsysÚexitÚ	TypeErrorrÅ   r!   r§   ÚinspectÚisclassÚhasattrÚ
isfunctionr   Ú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 t| j ƒ}|d ur|| jd� d S d S )N)rã   )r   r)   r’   rã   )rÙ   Ú
loop_setuprO   rO   rQ   Úsetup_event_loopÚ  s   ÿzConfig.setup_event_loopú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)`r‹   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½   rG   r¾   rE   r¿   rG   rH   r+   rÀ   r+   rÁ   rG   rÂ   r‚   rÃ   rÄ   rÅ   r^   rÆ   r‘   )rL   rÞ   )rL   r^   )rL   rä   )rL   r  )Ú__name__Ú
__module__Ú__qualname__rA   r,   rS   Ú	CERT_NONErÝ   Úpropertyrà   râ   rã   rÍ   rî   r  r1  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   )@Ú
__future__r   r   r  rí   ræ   Úlogging.configrÓ   r  rS   r  Úconfigparserr   Úpathlibr   Útypingr   r   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Ÿ   r“   r¨   Ú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¦    ú	ýüýüýþúýýúýæ
!


	
$