o
    SDi                     @   sD  d dl Z d dlZd dlmZmZ d dlmZ d dlmZ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mZ d dlmZ d dlmZ d d	lmZ G d
d deZeegef Zeg ede	f f Ze
d Ze
d ZG dd dZ G dd dZ!ddddededede	f de	dee dee fddZ"G dd deZ#dS )    N)	AwaitableCallable)
ContextVar)	AnnotatedAnyLiteralOptionalProtocolUnion)Request)BaseHTTPMiddlewareDispatchFunctionRequestResponseEndpoint)ASGIApp)DEFAULT_API_VERSION_VAR)VersionTypec                   @   s&   e Zd Zdedeedf fddZdS )VersionManagerrequestreturnNc                 C   s   d S N selfr   r   r   J/var/www/Datamplify/venv/lib/python3.10/site-packages/cadwyn/middleware.pyget   s    zVersionManager.get)__name__
__module____qualname__r   r
   strr   r   r   r   r   r      s    r   .)custom_headerpath)datestringc                       sD   e Zd ZdZdeddf fddZdedeedf fdd	Z  Z	S )
HeaderVersionManager)api_version_parameter_namer$   r   Nc                   s   t    || _d S r   )super__init__r$   )r   r$   	__class__r   r   r&   !   s   

zHeaderVersionManager.__init__r   c                 C   s   |j | jS r   )headersr   r$   r   r   r   r   r   %   s   zHeaderVersionManager.get)
r   r   r   	__slots__r   r&   r   r
   r   __classcell__r   r   r'   r   r#      s    "r#   c                       sH   e Zd ZdZdee ddf fddZdedeedf fdd	Z	  Z
S )
URLVersionManager)possible_version_valuesurl_version_regexr-   r   Nc                   s8   t    || _tdddd |D  d| _d S )Nz/(|c                 s   s    | ]}t |V  qd S r   )reescape).0vr   r   r   	<genexpr>/   s    z-URLVersionManager.__init__.<locals>.<genexpr>z)/)r%   r&   r-   r0   compilejoinr.   )r   r-   r'   r   r   r&   ,   s   
(zURLVersionManager.__init__r   c                 C   s"   | j |jj }r|dS d S )N   )r.   searchurlr    group)r   r   mr   r   r   r   1   s   
zURLVersionManager.get)r   r   r   r*   setr   r&   r   r
   r   r+   r   r   r'   r   r,   )   s    "r,   )titledescription#api_version_pythonic_parameter_namedefault_valuefastapi_depends_classvalidation_data_typer=   r>   c                 C   s`   dt fdd}tjtj| tjjt||dd|ii||df |tjkr$|ntjjdgd|_	|S )	Nkwargsc                  [   s   t t|  S r   )nextitervalues)rC   r   r   r   api_version_dependency@   s   z@_generate_api_version_dependency.<locals>.api_version_dependencydefaultvalue)openapi_examplesr=   r>   )
annotationrH   )
parameters)
r   inspect	Signature	ParameterKEYWORD_ONLYr   fastapiPathempty__signature__)r?   r@   rA   rB   r=   r>   rG   r   r   r    _generate_api_version_dependency7   s&   	
	rU   c                       s~   e Zd Zdddededeedeegee f f de	ee
df  dedeedf d	df fd
dZdedefddZ  ZS )VersionPickingMiddlewareN)dispatchappr$   api_version_default_valueapi_version_varapi_version_managerrW   r   c                   s*   t  || || _|| _|| _|| _d S r   )r%   r&   r$   _api_version_managerrZ   rY   )r   rX   r$   rY   rZ   r[   rW   r'   r   r   r&   Z   s
   

z!VersionPickingMiddleware.__init__r   	call_nextc                    st   | j |}|d u r!t| jr| |I d H }n| j}t| | j| ||I d H }|d ur8||j| j< |S r   )	r\   r   callablerY   r   r<   rZ   r)   r$   )r   r   r]   api_versionresponser   r   r   rW   k   s   

z!VersionPickingMiddleware.dispatch)r   r   r   r   r   r
   r   r   r   r   r   r   r   r&   r   rW   r+   r   r   r'   r   rV   Y   s,    	
	rV   )$rM   r0   collections.abcr   r   contextvarsr   typingr   r   r   r   r	   r
   rQ   r   starlette.middleware.baser   r   r   starlette.typesr   cadwyn._internal.context_varsr   cadwyn.structure.commonr   r   r   VersionValidatorCVersionDependencyFactoryCAPIVersionLocationAPIVersionFormatr#   r,   rU   rV   r   r   r   r   <module>   sD    

"