o
    OÊÆh¿~  ã                
   @   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 mZ d dl	m
Z
 d dlmZ d dlmZ d dlmZmZ d dlmZmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZmZ d dlm Z m!Z!m"Z"m#Z#m$Z$ d dl%m&Z&m'Z' G dd„ de(ƒZ)G dd„ de
ƒZ*dej+de,fdd„Z-dej.de fdd„Z/dej.de fdd„Z0dej.de1fdd„Z2de1dej3e1ef d ej3e1e1f dej4e1e5f fd!d"„Z6e 7d#¡Z8de1dej4ej9e1ej3e1ef f fd$d%„Z:G d&d'„ d'ƒZ;G d(d)„ d)e;ƒZ<G d*d+„ d+e;ƒZ=G d,d-„ d-e;ƒZ>G d.d/„ d/e;ƒZ?e @d0¡ZAG d1d2„ d2ejBeA ƒZCd3ej.ej+gejDf dej.ej+gejBf fd4d5„ZEG d6d7„ d7ƒZFG d8d9„ d9ƒZGdS ):é    N)Úasynccontextmanager)ÚEnum)Úis_async_callable)Úrun_in_threadpool)ÚCONVERTOR_TYPESÚ	Convertor)ÚURLÚHeadersÚURLPath)ÚHTTPException)Ú
Middleware)ÚRequest)ÚPlainTextResponseÚRedirectResponse)ÚASGIAppÚLifespanÚReceiveÚScopeÚSend)Ú	WebSocketÚWebSocketClosec                       s:   e Zd ZdZdedejeejf ddf‡ fdd„Z‡  Z	S )ÚNoMatchFoundz}
    Raised by `.url_for(name, **path_params)` and `.url_path_for(name, **path_params)`
    if no matching route exists.
    ÚnameÚpath_paramsÚreturnNc                    s0   d  t| ¡ ƒ¡}tƒ  d|› d|› d�¡ d S )Nú, zNo route exists for name "z" and params "z".)ÚjoinÚlistÚkeysÚsuperÚ__init__)Úselfr   r   Úparams©Ú	__class__© ú^/var/www/html/HyperOracle/crypto_trader/venv/lib/python3.10/site-packages/starlette/routing.pyr       s   zNoMatchFound.__init__)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚtypingÚDictÚAnyr    Ú__classcell__r%   r%   r#   r&   r      s    .r   c                   @   s   e Zd ZdZdZdZdS )ÚMatchr   é   é   N)r'   r(   r)   ÚNONEÚPARTIALÚFULLr%   r%   r%   r&   r0   #   s    r0   Úobjr   c                 C   s4   t  dt¡ t| tjƒr| j} t| tjƒst | ¡S )z~
    Correctly determines if an object is a coroutine function,
    including those wrapped in functools.partial objects.
    zViscoroutinefunction_or_partial is deprecated, and will be removed in a future release.)	ÚwarningsÚwarnÚDeprecationWarningÚ
isinstanceÚ	functoolsÚpartialÚfuncÚinspectÚiscoroutinefunction)r6   r%   r%   r&   Úiscoroutinefunction_or_partial)   s   ýÿ
r@   r=   c                    s,   t ˆ ƒ‰dtdtdtddf‡ ‡fdd„}|S )zi
    Takes a function or coroutine `func(request) -> response`,
    and returns an ASGI application.
    ÚscopeÚreceiveÚsendr   Nc                 “   sJ   �t | ||d�}ˆrˆ |ƒI d H }ntˆ |ƒI d H }|| ||ƒI d H  d S ©N)rB   rC   )r   r   )rA   rB   rC   ÚrequestÚresponse©r=   Úis_coroutiner%   r&   Úapp?   s   €zrequest_response.<locals>.app)r   r   r   r   ©r=   rI   r%   rG   r&   Úrequest_response8   s    rK   c                    s"   dt dtdtddf‡ fdd„}|S )zM
    Takes a coroutine `func(session)`, and returns an ASGI application.
    rA   rB   rC   r   Nc                 “   s"   �t | ||d�}ˆ |ƒI d H  d S rD   )r   )rA   rB   rC   Úsession©r=   r%   r&   rI   P   s   €zwebsocket_session.<locals>.app)r   r   r   rJ   r%   rM   r&   Úwebsocket_sessionJ   s   rN   Úendpointc                 C   s"   t  | ¡s
t  | ¡r| jS | jjS ©N)r>   Ú	isroutineÚisclassr'   r$   )rO   r%   r%   r&   Úget_nameW   s   rS   ÚpathÚparam_convertorsr   c                 C   s^   t | ¡ ƒD ]$\}}d| d | v r*|| }| |¡}|  d| d |¡} | |¡ q| |fS )NÚ{Ú})r   ÚitemsÚ	to_stringÚreplaceÚpop)rT   rU   r   ÚkeyÚvalueÚ	convertorr%   r%   r&   Úreplace_params]   s   

€r_   z4{([a-zA-Z_][a-zA-Z0-9_]*)(:[a-zA-Z_][a-zA-Z0-9_]*)?}c                 C   s†  |   d¡ }d}d}tƒ }d}i }t | ¡D ]X}| d¡\}}	|	 d¡}	|	tv s0J d|	› d�ƒ‚t|	 }
|t | || 	¡ … ¡7 }|d	|› d
|
j
› d�7 }|| || 	¡ … 7 }|d| 7 }||v rf| |¡ |
||< | ¡ }q|r�d t|ƒ¡}t|ƒdkr€dnd}td|› d|› d| › �ƒ‚|r¦| |d…  d¡d }|t |¡d 7 }n|t | |d… ¡d 7 }|| |d… 7 }t |¡||fS )a*  
    Given a path string, like: "/{username:str}",
    or a host string, like: "{subdomain}.mydomain.org", return a three-tuple
    of (regex, format, {param_name:convertor}).

    regex:      "/(?P<username>[^/]+)"
    format:     "/{username}"
    convertors: {"username": StringConvertor()}
    ú/ú^Ú r   r+   ú:zUnknown path convertor 'ú'z(?P<ú>ú)z{%s}r   r1   ÚszDuplicated param nameú z	 at path Nú$)Ú
startswithÚsetÚPARAM_REGEXÚfinditerÚgroupsÚlstripr   ÚreÚescapeÚstartÚregexÚaddÚendr   ÚsortedÚlenÚ
ValueErrorÚsplitÚcompile)rT   Úis_hostÚ
path_regexÚpath_formatÚduplicated_paramsÚidxrU   ÚmatchÚ
param_nameÚconvertor_typer^   ÚnamesÚendingÚhostnamer%   r%   r&   Úcompile_patho   s>   


ÿ

r†   c                   @   st   e Zd Zdedejeef fdd„Zdedej	de
fdd„Zded	ed
eddfdd„Zded	ed
eddfdd„ZdS )Ú	BaseRouterA   r   c                 C   ó   t ƒ ‚rP   ©ÚNotImplementedError)r!   rA   r%   r%   r&   Úmatchesª   ó   zBaseRoute.matchesÚ_BaseRoute__namer   c                 K   rˆ   rP   r‰   )r!   r�   r   r%   r%   r&   Úurl_path_for­   rŒ   zBaseRoute.url_path_forrB   rC   Nc                 Ã   s   �t ƒ ‚rP   r‰   ©r!   rA   rB   rC   r%   r%   r&   Úhandle°   s   €zBaseRoute.handlec                 Ã   s’   �|   |¡\}}|tjkr8|d dkr$tddd�}||||ƒI dH  dS |d dkr6tƒ }||||ƒI dH  dS | |¡ |  |||¡I dH  dS )zé
        A route may be used in isolation as a stand-alone ASGI app.
        This is a somewhat contrived case, as they'll almost always be used
        within a Router, but could be useful for some tooling and minimal apps.
        ÚtypeÚhttpú	Not Foundé”  ©Ústatus_codeNÚ	websocket)r‹   r0   r3   r   r   Úupdater�   )r!   rA   rB   rC   r€   Úchild_scoperF   Úwebsocket_closer%   r%   r&   Ú__call__³   s   €
ý
zBaseRoute.__call__)r'   r(   r)   r   r,   ÚTupler0   r‹   r+   r.   r
   rŽ   r   r   r�   r›   r%   r%   r%   r&   r‡   ©   s
    r‡   c                   @   s¼   e Zd Zddddœdedejdejeje  deje ded	dfd
d„Z	de
d	ejee
f fdd„Zdedejd	efdd„Zde
deded	dfdd„Zdejd	efdd„Zd	efdd„ZdS )ÚRouteNT©Úmethodsr   Úinclude_in_schemarT   rO   rŸ   r   r    r   c                C   sÞ   |  d¡s	J dƒ‚|| _|| _|d u rt|ƒn|| _|| _|}t|tjƒr.|j	}t|tjƒs%t
 |¡s8t
 |¡rEt|ƒ| _|d u rDdg}n|| _|d u rPd | _ndd„ |D ƒ| _d| jv rc| j d¡ t|ƒ\| _| _| _d S )Nr`   ú Routed paths must start with '/'ÚGETc                 S   s   h | ]}|  ¡ ’qS r%   )Úupper)Ú.0Úmethodr%   r%   r&   Ú	<setcomp>æ   s    z!Route.__init__.<locals>.<setcomp>ÚHEAD)rj   rT   rO   rS   r   r    r:   r;   r<   r=   r>   Ú
isfunctionÚismethodrK   rI   rŸ   rt   r†   r|   r}   rU   )r!   rT   rO   rŸ   r   r    Úendpoint_handlerr%   r%   r&   r    È   s*   	ÿ
€
zRoute.__init__rA   c                 C   s¦   |d dkrN| j  |d ¡}|rN| ¡ }| ¡ D ]\}}| j|  |¡||< qt| di ¡ƒ}| |¡ | j	|dœ}| j
rI|d | j
vrItj|fS tj|fS tji fS )Nr‘   r’   rT   r   ©rO   r   r¥   )r|   r€   Ú	groupdictrX   rU   ÚconvertÚdictÚgetr˜   rO   rŸ   r0   r4   r5   r3   ©r!   rA   r€   Úmatched_paramsr\   r]   r   r™   r%   r%   r&   r‹   ì   s   



zRoute.matchesÚ_Route__namer   c                 K   ó^   t | ¡ ƒ}t | j ¡ ƒ}|| jks||krt||ƒ‚t| j| j|ƒ\}}|r)J ‚t|dd�S )Nr’   ©rT   Úprotocol©rk   r   rU   r   r   r_   r}   r
   )r!   r²   r   Úseen_paramsÚexpected_paramsrT   Úremaining_paramsr%   r%   r&   rŽ   ü   ó   

ÿzRoute.url_path_forrB   rC   c                 Ã   sv   �| j r/|d | j vr/dd | j ¡i}d|v rtd|d�‚tdd|d�}||||ƒI d H  d S |  |||¡I d H  d S )Nr¥   ÚAllowr   rI   i•  )r–   ÚheaderszMethod Not Allowed)rŸ   r   r   r   rI   )r!   rA   rB   rC   r¼   rF   r%   r%   r&   r�   	  s   €ÿzRoute.handleÚotherc                 C   s.   t |tƒo| j|jko| j|jko| j|jkS rP   )r:   r�   rT   rO   rŸ   ©r!   r½   r%   r%   r&   Ú__eq__  s   

ÿ
þ
üzRoute.__eq__c                 C   s@   | j j}t| jp	g ƒ}| j| j}}|› d|›d|›d|›d�S )Nú(path=ú, name=z
, methods=rf   )r$   r'   rv   rŸ   rT   r   )r!   Ú
class_namerŸ   rT   r   r%   r%   r&   Ú__repr__  s   zRoute.__repr__)r'   r(   r)   r+   r,   ÚCallableÚOptionalÚListÚboolr    r   rœ   r0   r‹   r.   r
   rŽ   r   r   r�   r¿   rÃ   r%   r%   r%   r&   r�   Ç   s,    ùþýûúù
ø$r�   c                	   @   s¤   e Zd Zddœdedejdeje ddfdd„Zd	edej	e
ef fd
d„Zdedejdefdd„Zd	edededdfdd„Zdejdefdd„Zdefdd„ZdS )ÚWebSocketRouteN©r   rT   rO   r   r   c                C   s”   |  d¡s	J dƒ‚|| _|| _|d u rt|ƒn|| _|}t|tjƒr+|j}t|tjƒs"t	 
|¡s5t	 |¡r;t|ƒ| _n|| _t|ƒ\| _| _| _d S )Nr`   r¡   )rj   rT   rO   rS   r   r:   r;   r<   r=   r>   r¨   r©   rN   rI   r†   r|   r}   rU   )r!   rT   rO   r   rª   r%   r%   r&   r    &  s   ÿzWebSocketRoute.__init__rA   c                 C   sˆ   |d dkr?| j  |d ¡}|r?| ¡ }| ¡ D ]\}}| j|  |¡||< qt| di ¡ƒ}| |¡ | j	|dœ}t
j|fS t
ji fS )Nr‘   r—   rT   r   r«   )r|   r€   r¬   rX   rU   r­   r®   r¯   r˜   rO   r0   r5   r3   r°   r%   r%   r&   r‹   :  s   


zWebSocketRoute.matchesÚ_WebSocketRoute__namer   c                 K   r³   )Nr—   r´   r¶   )r!   rÊ   r   r·   r¸   rT   r¹   r%   r%   r&   rŽ   G  rº   zWebSocketRoute.url_path_forrB   rC   c                 Ã   ó   �|   |||¡I d H  d S rP   ©rI   r�   r%   r%   r&   r�   T  ó   €zWebSocketRoute.handler½   c                 C   ó"   t |tƒo| j|jko| j|jkS rP   )r:   rÈ   rT   rO   r¾   r%   r%   r&   r¿   W  ó
   

ÿ
ýzWebSocketRoute.__eq__c                 C   s   | j j› d| j›d| j›d�S )NrÀ   rÁ   rf   )r$   r'   rT   r   ©r!   r%   r%   r&   rÃ   ^  s   zWebSocketRoute.__repr__)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È   %  s     ÿÿÿÿ
þrÈ   c                   @   sè   e Zd Z			dddœdedeje dejeje  deje dejeje	  ddfd	d
„Z
edeje fdd„ƒZdedejeef fdd„Zdedejdefdd„Zdedededdfdd„Zdejdefdd„Zdefdd„ZdS )ÚMountN)Ú
middlewarerT   rI   Úroutesr   rÒ   r   c                C   s¶   |dks|  d¡sJ dƒ‚|d us|d usJ dƒ‚| d¡| _|d ur'|| _nt|d�| _| j| _|d urIt|ƒD ]\}}|dd| ji|¤Ž| _q9|| _t| jd ƒ\| _	| _
| _d S )	Nrb   r`   r¡   z0Either 'app=...', or 'routes=' must be specified)rÓ   rI   z/{path:path}r%   )rj   ÚrstriprT   Ú	_base_appÚRouterrI   Úreversedr   r†   r|   r}   rU   )r!   rT   rI   rÓ   r   rÒ   ÚclsÚoptionsr%   r%   r&   r    c  s    	ÿÿzMount.__init__c                 C   ó   t | jdg ƒS ©NrÓ   )ÚgetattrrÕ   rÐ   r%   r%   r&   rÓ   ~  ó   zMount.routesrA   c                 C   sÊ   |d dv r`|d }| j  |¡}|r`| ¡ }| ¡ D ]\}}| j|  |¡||< qd| d¡ }|d t|ƒ … }t| 	di ¡ƒ}	|	 
|¡ | 	dd¡}
|	| 	d|
¡|
| || jd	œ}tj|fS tji fS )
Nr‘   ©r’   r—   rT   r`   r   Ú	root_pathrb   Úapp_root_path)r   rà   rß   rT   rO   )r|   r€   r¬   rX   rU   r­   r[   rw   r®   r¯   r˜   rI   r0   r5   r3   )r!   rA   rT   r€   r±   r\   r]   Úremaining_pathÚmatched_pathr   rß   r™   r%   r%   r&   r‹   ‚  s(   

û

zMount.matchesÚ_Mount__namer   c           
   	   K   s(  | j d ur)|| j kr)d|v r)|d  d¡|d< t| j| j|ƒ\}}|s(t|d�S nf| j d u s6| | j d ¡r�| j d u r>|}n|t| j ƒd d … }| d¡}d|d< t| j| j|ƒ\}}|d urd||d< | j	phg D ]%}z|j
|fi |¤Ž}	t| d¡t|	ƒ |	jd�W   S  tyŽ   Y qiw t||ƒ‚)NrT   r`   )rT   rc   r1   rb   r´   )r   ro   r_   r}   rU   r
   rj   rw   r¯   rÓ   rŽ   rÔ   r+   rµ   r   )
r!   rã   r   rT   r¹   Úremaining_nameÚ
path_kwargÚpath_prefixÚrouteÚurlr%   r%   r&   rŽ   ™  s:   
ÿ
ÿ


ÿÿÿ
zMount.url_path_forrB   rC   c                 Ã   rË   rP   rÌ   r�   r%   r%   r&   r�   º  rÍ   zMount.handler½   c                 C   rÎ   rP   )r:   rÑ   rT   rI   r¾   r%   r%   r&   r¿   ½  rÏ   zMount.__eq__c                 C   ó2   | j j}| jpd}|› d| j›d|›d| j›d�S )Nrb   rÀ   rÁ   ú, app=rf   )r$   r'   r   rT   rI   ©r!   rÂ   r   r%   r%   r&   rÃ   Ä  ó   
 zMount.__repr__)NNN)r'   r(   r)   r+   r,   rÅ   r   ÚSequencer‡   r   r    ÚpropertyrÆ   rÓ   r   rœ   r0   r‹   r.   r
   rŽ   r   r   r�   rÇ   r¿   rÃ   r%   r%   r%   r&   rÑ   b  s4    ûùþýüûù
ø!rÑ   c                	   @   s¸   e Zd Z	ddededeje ddfdd„Zedej	e
 fdd	„ƒZd
edejeef fdd„Zdedejdefdd„Zd
edededdfdd„Zdejdefdd„Zdefdd„ZdS )ÚHostNÚhostrI   r   r   c                 C   s<   |  d¡r	J dƒ‚|| _|| _|| _t|ƒ\| _| _| _d S )Nr`   zHost must not start with '/')rj   rð   rI   r   r†   Ú
host_regexÚhost_formatrU   )r!   rð   rI   r   r%   r%   r&   r    Ë  s
   zHost.__init__c                 C   rÚ   rÛ   )rÜ   rI   rÐ   r%   r%   r&   rÓ   Ô  rÝ   zHost.routesrA   c           
      C   s¤   |d dv rMt |d�}| dd¡ d¡d }| j |¡}|rM| ¡ }| ¡ D ]\}}| j|  |¡||< q&t	| di ¡ƒ}| 
|¡ || jd	œ}	tj|	fS tji fS )
Nr‘   rÞ   ©rA   rð   rb   rc   r   r   )r   rO   )r	   r¯   ry   rñ   r€   r¬   rX   rU   r­   r®   r˜   rI   r0   r5   r3   )
r!   rA   r¼   rð   r€   r±   r\   r]   r   r™   r%   r%   r&   r‹   Ø  s   



zHost.matchesÚ_Host__namer   c           	   	   K   sø   | j d ur&|| j kr&d|v r&| d¡}t| j| j|ƒ\}}|s%t||d�S nQ| j d u s3| | j d ¡rw| j d u r;|}n|t| j ƒd d … }t| j| j|ƒ\}}| jpTg D ]!}z|j	|fi |¤Ž}tt
|ƒ|j|d�W   S  tyv   Y qUw t||ƒ‚)NrT   )rT   rð   rc   r1   )rT   rµ   rð   )r   r[   r_   rò   rU   r
   rj   rw   rÓ   rŽ   r+   rµ   r   )	r!   rô   r   rT   rð   r¹   rä   rç   rè   r%   r%   r&   rŽ   ç  s.   

ÿÿ

ÿÿ
zHost.url_path_forrB   rC   c                 Ã   rË   rP   rÌ   r�   r%   r%   r&   r�     rÍ   zHost.handler½   c                 C   rÎ   rP   )r:   rï   rð   rI   r¾   r%   r%   r&   r¿     rÏ   zHost.__eq__c                 C   ré   )Nrb   z(host=rÁ   rê   rf   )r$   r'   r   rð   rI   rë   r%   r%   r&   rÃ     rì   zHost.__repr__rP   )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ï   Ê  s$    ÿÿÿÿ
þ	rï   Ú_Tc                	   @   sh   e Zd Zdeje fdd„Zdefdd„Zdejej	e
  deje
 d	ejej deje fd
d„ZdS )Ú_AsyncLiftContextManagerÚcmc                 C   ó
   || _ d S rP   )Ú_cm)r!   r÷   r%   r%   r&   r      ó   
z!_AsyncLiftContextManager.__init__r   c                 Ã   s   �| j  ¡ S rP   )rù   Ú	__enter__rÐ   r%   r%   r&   Ú
__aenter__  s   €
z#_AsyncLiftContextManager.__aenter__Úexc_typeÚ	exc_valueÚ	tracebackc                 Ã   s   �| j  |||¡S rP   )rù   Ú__exit__)r!   rý   rþ   rÿ   r%   r%   r&   Ú	__aexit__  s   €z"_AsyncLiftContextManager.__aexit__N)r'   r(   r)   r,   ÚContextManagerrõ   r    rü   rÅ   ÚTypeÚBaseExceptionÚtypesÚTracebackTyperÇ   r  r%   r%   r%   r&   rö     s    þý
üûrö   Úlifespan_contextc                    s0   t  | ¡‰ t ˆ ¡dtjdtf‡ fdd„ƒ}|S )NrI   r   c                    s   t ˆ | ƒƒS rP   )rö   rÌ   ©Úcmgrr%   r&   Úwrapper*  s   z+_wrap_gen_lifespan_context.<locals>.wrapper)Ú
contextlibÚcontextmanagerr;   Úwrapsr,   r.   rö   )r  r
  r%   r  r&   Ú_wrap_gen_lifespan_context%  s   
r  c                   @   sH   e Zd Zddd„Zddd„Zd	eddfd
d„Zdededefdd„ZdS )Ú_DefaultLifespanÚrouterrÖ   c                 C   rø   rP   )Ú_router)r!   r  r%   r%   r&   r    2  rú   z_DefaultLifespan.__init__r   Nc                 Ã   ó   �| j  ¡ I d H  d S rP   )r  ÚstartuprÐ   r%   r%   r&   rü   5  ó   €z_DefaultLifespan.__aenter__Úexc_infoc                 Ç   r  rP   )r  Úshutdown)r!   r  r%   r%   r&   r  8  r  z_DefaultLifespan.__aexit__r!   rI   c                 C   s   | S rP   r%   )r!   rI   r%   r%   r&   r›   ;  s   z_DefaultLifespan.__call__)r  rÖ   ©r   N)	r'   r(   r)   r    rü   Úobjectr  rõ   r›   r%   r%   r%   r&   r  1  s
    

r  c                   @   s<  e Zd Z						d9dejeje  dedeje dejejej	  dejejej	  deje
ej  d	dfd
d„Zdededed	dfdd„Zdedejd	efdd„Zd:dd„Zd:dd„Zdededed	dfdd„Zdededed	dfdd„Zdejd	efdd„Z	d;d ed!ed"eje d	dfd#d$„Z	d;d%ed!ed"eje d	dfd&d'„Z			d<d ed(ej	d)ejeje  d"eje d*ed	dfd+d,„Z	d;d ed(ej	d"eje d	dfd-d.„Z			d<d ed)ejeje  d"eje d*ed	ej	f
d/d0„Z	d;d ed"eje d	ej	fd1d2„Zd3ed4ej	d	dfd5d6„Z d3ed	ej	fd7d8„Z!dS )=rÖ   NTrÓ   Úredirect_slashesÚdefaultÚ
on_startupÚon_shutdownÚlifespanr   c                 C   sØ   |d u rg nt |ƒ| _|| _|d u r| jn|| _|d u rg nt |ƒ| _|d u r)g nt |ƒ| _|s2|r8t dt	¡ |d u rCt
| ƒ| _d S t |¡rUt dt	¡ t|ƒ| _d S t |¡rgt dt	¡ t|ƒ| _d S || _d S )Nz¿The on_startup and on_shutdown parameters are deprecated, and they will be removed on version 1.0. Use the lifespan parameter instead. See more about it on https://www.starlette.io/lifespan/.zjasync generator function lifespans are deprecated, use an @contextlib.asynccontextmanager function insteadzdgenerator function lifespans are deprecated, use an @contextlib.asynccontextmanager function instead)r   rÓ   r  Ú	not_foundr  r  r  r7   r8   r9   r  r  r>   Úisasyncgenfunctionr   Úisgeneratorfunctionr  )r!   rÓ   r  r  r  r  r  r%   r%   r&   r    @  s:   ü
ý
ÿ
ý
ÿ
zRouter.__init__rA   rB   rC   c                 Ã   s^   �|d dkrt ƒ }||||ƒI d H  d S d|v rtdd�‚tddd�}||||ƒI d H  d S )Nr‘   r—   rI   r”   r•   r“   )r   r   r   )r!   rA   rB   rC   rš   rF   r%   r%   r&   r  q  s   €
zRouter.not_foundÚ_Router__namer   c              	   K   s@   | j D ]}z|j|fi |¤ŽW   S  ty   Y qw t||ƒ‚rP   )rÓ   rŽ   r   )r!   r!  r   rç   r%   r%   r&   rŽ   €  s   
ÿ
zRouter.url_path_forc                 Ã   ó.   �| j D ]}t|ƒr|ƒ I dH  q|ƒ  qdS )z7
        Run any `.on_startup` event handlers.
        N)r  r   ©r!   Úhandlerr%   r%   r&   r  ˆ  ó   €
üzRouter.startupc                 Ã   r"  )z8
        Run any `.on_shutdown` event handlers.
        N)r  r   r#  r%   r%   r&   r  ’  r%  zRouter.shutdownc              	   Ã   s  �d}|  d¡}|ƒ I dH  zE|  |¡4 I dH š/}|dur,d|vr%tdƒ‚|d  |¡ |ddiƒI dH  d}|ƒ I dH  W d  ƒI dH  n1 I dH sMw   Y  W n# tyv   t ¡ }|rk|d	|d
œƒI dH  ‚ |d|d
œƒI dH  ‚ w |ddiƒI dH  dS )z{
        Handle ASGI lifespan messages, which allows us to manage application
        startup and shutdown events.
        FrI   NÚstatez:The server does not support "state" in the lifespan scope.r‘   zlifespan.startup.completeTzlifespan.shutdown.failed)r‘   Úmessagezlifespan.startup.failedzlifespan.shutdown.complete)r¯   r  ÚRuntimeErrorr˜   r  rÿ   Ú
format_exc)r!   rA   rB   rC   ÚstartedrI   Úmaybe_stateÚexc_textr%   r%   r&   r  œ  s4   €
ÿ(÷€
ÿúzRouter.lifespanc                 Ã   sš  �|d dv s	J ‚d|vr| |d< |d dkr#|   |||¡I dH  dS d}| jD ]-}| |¡\}}|tjkrH| |¡ | |||¡I dH   dS |tjkrU|du rU|}|}q(|durk| |¡ | |||¡I dH  dS |d dkrÁ| jrÁ|d dkrÁt	|ƒ}	|d  
d¡r�|	d  d¡|	d< n|	d d |	d< | jD ]&}| |	¡\}}|tjkrÀt|	d	�}
tt|
ƒd
�}||||ƒI dH   dS qš|  |||¡I dH  dS )z;
        The main entry point to the Router class.
        r‘   )r’   r—   r  r  r  Nr’   rT   r`   ró   )rè   )r  rÓ   r‹   r0   r5   r˜   r�   r4   r  r®   ÚendswithrÔ   r3   r   r   r+   r  )r!   rA   rB   rC   r<   rç   r€   r™   Úpartial_scopeÚredirect_scopeÚredirect_urlrF   r%   r%   r&   r›   ¹  sH   €


€



üzRouter.__call__r½   c                 C   s   t |tƒo
| j|jkS rP   )r:   rÖ   rÓ   r¾   r%   r%   r&   r¿   í  s   zRouter.__eq__rT   rI   r   c                 C   ó   t |||d�}| j |¡ d S ©N)rI   r   )rÑ   rÓ   Úappend)r!   rT   rI   r   rç   r%   r%   r&   Úmountð  ó   zRouter.mountrð   c                 C   r1  r2  )rï   rÓ   r3  )r!   rð   rI   r   rç   r%   r%   r&   rð   ö  r5  zRouter.hostrO   rŸ   r    c                 C   s"   t |||||d�}| j |¡ d S )N)rO   rŸ   r   r    )r�   rÓ   r3  )r!   rT   rO   rŸ   r   r    rç   r%   r%   r&   Ú	add_routeü  s   ûzRouter.add_routec                 C   r1  )N)rO   r   )rÈ   rÓ   r3  )r!   rT   rO   r   rç   r%   r%   r&   Úadd_websocket_route  r5  zRouter.add_websocket_routec                    s2   t  dt¡ dtjdtjf‡ ‡‡‡‡fdd„}|S )zø
        We no longer document this decorator style API, and its usage is discouraged.
        Instead you should use the following approach:

        >>> routes = [Route(path, endpoint=...), ...]
        >>> app = Starlette(routes=routes)
        zŸThe `route` decorator is deprecated, and will be removed in version 1.0.0.Refer to https://www.starlette.io/routing/#http-routing for the recommended approach.r=   r   c                    s   ˆj ˆ| ˆˆˆ d� | S )Nrž   )r6  rM   ©r    rŸ   r   rT   r!   r%   r&   Ú	decorator'  s   ûzRouter.route.<locals>.decorator©r7   r8   r9   r,   rÄ   )r!   rT   rŸ   r   r    r9  r%   r8  r&   rç     s   ý"
zRouter.routec                    s.   t  dt¡ dtjdtjf‡ ‡‡fdd„}|S )a  
        We no longer document this decorator style API, and its usage is discouraged.
        Instead you should use the following approach:

        >>> routes = [WebSocketRoute(path, endpoint=...), ...]
        >>> app = Starlette(routes=routes)
        z¯The `websocket_route` decorator is deprecated, and will be removed in version 1.0.0. Refer to https://www.starlette.io/routing/#websocket-routing for the recommended approach.r=   r   c                    s   ˆj ˆ| ˆ d� | S )NrÉ   )r7  rM   ©r   rT   r!   r%   r&   r9  C  s   z)Router.websocket_route.<locals>.decoratorr:  )r!   rT   r   r9  r%   r;  r&   Úwebsocket_route3  s   
ýzRouter.websocket_routeÚ
event_typer=   c                 C   s4   |dv sJ ‚|dkr| j  |¡ d S | j |¡ d S )N)r  r  r  )r  r3  r  )r!   r=  r=   r%   r%   r&   Úadd_event_handlerI  s   zRouter.add_event_handlerc                    s,   t  dt¡ dtjdtjf‡ ‡fdd„}|S )Nz“The `on_event` decorator is deprecated, and will be removed in version 1.0.0. Refer to https://www.starlette.io/lifespan/ for recommended approach.r=   r   c                    s   ˆ  ˆ | ¡ | S rP   )r>  rM   ©r=  r!   r%   r&   r9  Z  s   z"Router.on_event.<locals>.decoratorr:  )r!   r=  r9  r%   r?  r&   Úon_eventS  s   ýzRouter.on_event)NTNNNNr  rP   )NNT)"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¿   r4  rð   rÆ   r6  r7  rç   r<  r>  r@  r%   r%   r%   r&   rÖ   ?  sÒ    ÷þýüûú	÷

ö1



4ÿÿÿÿ
þÿÿÿÿ
þ
úþýüûú
ùÿÿÿÿ
þ	ûþýüû
ú!ÿÿÿ
þÿÿ
þ
rÖ   )Hr  r;   r>   rp   rÿ   r  r,   r7   r   Úenumr   Ústarlette._utilsr   Ústarlette.concurrencyr   Ústarlette.convertorsr   r   Ústarlette.datastructuresr   r	   r
   Ústarlette.exceptionsr   Ústarlette.middlewarer   Ústarlette.requestsr   Ústarlette.responsesr   r   Ústarlette.typesr   r   r   r   r   Ústarlette.websocketsr   r   Ú	Exceptionr   r0   r.   rÇ   r@   rÄ   rK   rN   r+   rS   r-   rœ   r®   r_   rz   rl   ÚPatternr†   r‡   r�   rÈ   rÑ   rï   ÚTypeVarrõ   ÚAsyncContextManagerrö   Ú	Generatorr  r  rÖ   r%   r%   r%   r&   Ú<module>   sn    ÿþý
ü
ÿ
þ:^=h
Hÿ
þ