a
    c	g                     @  s*  d dl mZ d dlZd dlZd dlZd dlZd dlmZ ejdkrPd dlm	Z	 n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 d d
lmZ e	dZddddddZd&dddddddZG dd deZG dd dZG dd dZG d d! d!ZG d"d# d#eZG d$d% d%eZdS )'    )annotationsN)	urlencode)   
   )	ParamSpec)is_async_callable)HTTPException)HTTPConnectionRequest)RedirectResponse)	WebSocket_Pr	   ztyping.Sequence[str]bool)connscopesreturnc                 C  s    |D ]}|| j jvr dS qdS )NFT)authr   )r   r   Zscope r   [/var/www/html/llm_bihealth/app/venv/lib/python3.9/site-packages/starlette/authentication.pyhas_required_scope   s    r     zstr | typing.Sequence[str]intz
str | NonezStyping.Callable[[typing.Callable[_P, typing.Any]], typing.Callable[_P, typing.Any]])r   status_coderedirectr   c                   s4   t | tr| gnt| ddd fdd}|S )Nztyping.Callable[_P, typing.Any])funcr   c                   s   t  }t|j D ]&\}|jdks4|jdkr|j} qPqtd  d|dkrt dddd fd	d
}|S t	 rt dddd fdd}|S t dddd fdd}|S d S )Nrequest	websocketz2No "request" or "websocket" argument on function ""z_P.argsz	_P.kwargsNone)argskwargsr   c                    s`   | dt| k r|  nd }t|ts.J t|sH| I d H  n | i |I d H  d S )Nr   )getlen
isinstancer   r   close)r   r    r   )r   idxscopes_listr   r   websocket_wrapper6   s    
z6requires.<locals>.decorator.<locals>.websocket_wrapperz
typing.Anyc                    s   | dt| k r|  nd }t|ts.J t|s|d urrtdt|ji}| d| }t	|ddS t
d | i |I d H S Nr   next?i/  )urlr   )r   r!   r"   r#   r
   r   r   strr+   Zurl_forr   r   r   r    r   Zorig_request_qparamZnext_urlr   r%   r   r&   r   r   r   async_wrapperF   s     

z2requires.<locals>.decorator.<locals>.async_wrapperc                    s   | dt| k r|  nd }t|ts.J t|s|d urrtdt|ji}| d| }t	|ddS t
d | i |S r(   r,   r.   r/   r   r   sync_wrapperW   s     

z1requires.<locals>.decorator.<locals>.sync_wrapper)
inspect	signature	enumerate
parametersvaluesname	Exception	functoolswrapsr   )r   sigZ	parametertype_r'   r0   r1   r   r&   r   )r   r%   r   	decorator'   s&    

  zrequires.<locals>.decorator)r#   r-   list)r   r   r   r>   r   r=   r   requires   s    ?r@   c                   @  s   e Zd ZdS )AuthenticationErrorN)__name__
__module____qualname__r   r   r   r   rA   i   s   rA   c                   @  s   e Zd ZdddddZdS )AuthenticationBackendr	   z'tuple[AuthCredentials, BaseUser] | None)r   r   c                   s
   t  d S NNotImplementedError)selfr   r   r   r   authenticaten   s    z"AuthenticationBackend.authenticateN)rB   rC   rD   rJ   r   r   r   r   rE   m   s   rE   c                   @  s   e Zd ZdddddZdS )AuthCredentialsNztyping.Sequence[str] | None)r   c                 C  s   |d u rg nt || _d S rF   )r?   r   )rI   r   r   r   r   __init__u   s    zAuthCredentials.__init__)N)rB   rC   rD   rL   r   r   r   r   rK   t   s   rK   c                   @  sB   e Zd ZeddddZeddddZedddd	Zd
S )BaseUserr   r   c                 C  s
   t  d S rF   rG   rI   r   r   r   is_authenticatedz   s    zBaseUser.is_authenticatedr-   c                 C  s
   t  d S rF   rG   rO   r   r   r   display_name~   s    zBaseUser.display_namec                 C  s
   t  d S rF   rG   rO   r   r   r   identity   s    zBaseUser.identityN)rB   rC   rD   propertyrP   rQ   rR   r   r   r   r   rM   y   s   rM   c                   @  s@   e Zd ZdddddZedddd	Zeddd
dZdS )
SimpleUserr-   r   )usernamer   c                 C  s
   || _ d S rF   rU   )rI   rU   r   r   r   rL      s    zSimpleUser.__init__r   rN   c                 C  s   dS )NTr   rO   r   r   r   rP      s    zSimpleUser.is_authenticatedc                 C  s   | j S rF   rV   rO   r   r   r   rQ      s    zSimpleUser.display_nameN)rB   rC   rD   rL   rS   rP   rQ   r   r   r   r   rT      s
   rT   c                   @  s0   e Zd ZeddddZeddddZdS )	UnauthenticatedUserr   rN   c                 C  s   dS )NFr   rO   r   r   r   rP      s    z$UnauthenticatedUser.is_authenticatedr-   c                 C  s   dS )N r   rO   r   r   r   rQ      s    z UnauthenticatedUser.display_nameN)rB   rC   rD   rS   rP   rQ   r   r   r   r   rW      s   rW   )r   N) 
__future__r   r9   r2   systypingurllib.parser   version_infor   Ztyping_extensionsZstarlette._utilsr   Zstarlette.exceptionsr   Zstarlette.requestsr	   r
   Zstarlette.responsesr   Zstarlette.websocketsr   r   r   r@   r8   rA   rE   rK   rM   rT   rW   r   r   r   r   <module>   s0   
	  K