o
    |l~i                     @   s   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	 d dl
mZmZmZ d dlmZ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 G dd de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 G dd de Z!G dd de Z"G dd de"Z#dS )    )ImproperlyConfigured)resolve_url)render_to_string)	force_str)Promise)BaseRendererJSONRendererTemplateHTMLRenderer)encodersjson   )redoc_settingsswagger_settings)
VALIDATORSOpenAPICodecJsonOpenAPICodecYaml)Swagger)filter_nonec                   @   s2   e Zd ZdZdZg ZdZedd ZdddZ	dS )	_SpecRendererz?Base class for text renderers. Handles encoding and validation.utf-8Nc                 C   s8   t dd |D sJ ddt t| j| fd|iS )Nc                 s   s    | ]}|t v V  qd S N)r   ).0vld r   Y/var/www/newdalilibackend/backend/venv/lib/python3.10/site-packages/drf_yasg/renderers.py	<genexpr>   s    z0_SpecRenderer.with_validators.<locals>.<genexpr>zallowed validators are z, 
validators)alljoinr   type__name__)clsr   r   r   r   with_validators   s   $z_SpecRenderer.with_validatorsc                 C   s>   | j sJ d|  | j}t|tst |||S ||S )Nzmust override codec_class)codec_classr   
isinstancer   r   renderencode)selfdata
media_typerenderer_contextcodecr   r   r   r%      s
   

z_SpecRenderer.renderNN)
r    
__module____qualname____doc__charsetr   r#   classmethodr"   r%   r   r   r   r   r      s    
r   c                   @      e Zd ZdZdZdZeZdS )OpenAPIRendererz_Renders the schema as a JSON document with the ``application/openapi+json`` specific mime type.zapplication/openapi+jsonopenapiNr    r-   r.   r/   r)   formatr   r#   r   r   r   r   r3   '   
    r3   c                   @   r2   )SwaggerJSONRendererzVRenders the schema as a JSON document with the generic ``application/json`` mime type.zapplication/jsonz.jsonNr5   r   r   r   r   r8   .   r7   r8   c                   @   r2   )SwaggerYAMLRendererz&Renders the schema as a YAML document.zapplication/yamlz.yamlN)r    r-   r.   r/   r)   r6   r   r#   r   r   r   r   r9   5   r7   r9   c                   @   sH   e Zd ZdZdZdZdZdddZddd	Zd
d Z	dd Z
dd ZdS )_UIRendererzbBase class for web UI renderers. Handles loading and passing settings to the appropriate template.z	text/htmlr    Nc                 C   sj   t |ts&z	t |||W S  ty%   |d }d|j|j f  Y S w | || t	| j
||d S )Nresponsez%d %srequest)r$   r   r	   r%   r   status_codestatus_texttitleset_contextr   template)r'   swaggeraccepted_media_typer*   r<   r   r   r   r%   B   s   
z_UIRenderer.renderc                 C   sd   |r|j jpdnd|d< |r|j jpdnd|d< tj|  tjd|d< tj	|d< |
|   d S )Nr;   r@   versionr!   oauth2_configUSE_SESSION_AUTH)infor@   rE   r   dumpsget_oauth2_configr
   JSONEncoderr   rH   updateget_auth_urlsr'   r*   rC   r   r   r   rA   Q   s     
z_UIRenderer.set_contextc                 C   s   t |tr	t|}|d u rd S d\}}t |ts.t|dkr$|\}}}n
t|dkr.|\}}|p1d}|p5i }t|g|R i |S )Nr,      r   )r$   r   strlenr   )r'   toargskwargsr   r   r   r   X   s   

z_UIRenderer.resolve_urlc                 C   s"   |  tj|  tjd}t|S )N)	LOGIN_URL
LOGOUT_URL)r   r   rV   rW   r   )r'   urlsr   r   r   rN   k   s   

z_UIRenderer.get_auth_urlsc                 C   s   t j}t|tsJ d|S )NzOAUTH2_CONFIG must be a dict)r   OAUTH2_CONFIGr$   dictr'   r(   r   r   r   rK   s   s   z_UIRenderer.get_oauth2_configr,   r   )r    r-   r.   r/   r)   r0   rB   r%   rA   r   rN   rK   r   r   r   r   r:   <   s    

r:   c                       2   e Zd ZdZdZdZd	 fdd	Zdd Z  ZS )
SwaggerUIRendererz7Renders a swagger-ui web interface for schema browsing.zdrf-yasg/swagger-ui.htmlrC   Nc                    sd   t t| || |  }|dd }t|dd}|r&|r&|||d< tj|t	j
d|d< d S )Nr=   oauth2RedirectUrlr;   rF   r   )superr]   rA   get_swagger_ui_settingsgetr   build_absolute_urir   rJ   r
   rL   )r'   r*   rC   swagger_ui_settingsr=   oauth_redirect_url	__class__r   r   rA   ~   s   zSwaggerUIRenderer.set_contextc                 C   s   i d|  tjdtjdtjdtjdtjdtjdtjdtj	d	tj	d
tj
dtjdtjdtjdtjdtjdtjdtj}t|}tjdkrZ|  tj|d< |S )NurloperationsSorter
tagsSorterdocExpansiondeepLinkingshowExtensionsdefaultModelRenderingdefaultModelExpandDepthdefaultModelsExpandDepthshowCommonExtensionsr^   supportedSubmitMethodsdisplayOperationIdpersistAuthrefetchWithAuthrefetchOnLogoutfetchSchemaWithQueryr;   validatorUrl)r   r   SPEC_URLOPERATIONS_SORTERTAGS_SORTERDOC_EXPANSIONDEEP_LINKINGSHOW_EXTENSIONSDEFAULT_MODEL_RENDERINGDEFAULT_MODEL_DEPTHSHOW_COMMON_EXTENSIONSOAUTH2_REDIRECT_URLSUPPORTED_SUBMIT_METHODSDISPLAY_OPERATION_IDPERSIST_AUTHREFETCH_SCHEMA_WITH_AUTHREFETCH_SCHEMA_ON_LOGOUTFETCH_SCHEMA_WITH_QUERYr   VALIDATOR_URLr[   r   r   r   r`      sN   	

z)SwaggerUIRenderer.get_swagger_ui_settingsr   )	r    r-   r.   r/   rB   r6   rA   r`   __classcell__r   r   re   r   r]   y   s    r]   c                       r\   )
ReDocRendererz2Renders a ReDoc web interface for schema browsing.zdrf-yasg/redoc.htmlredocNc                    s.   t t| || tj|  tjd|d< d S )NrF   r   )r_   r   rA   r   rJ   get_redoc_settingsr
   rL   rO   re   r   r   rA      s   zReDocRenderer.set_contextc              	   C   s4   |  tjtjtjtjtjtjtjtj	d}t
|S )N)rg   lazyRenderinghideHostnameexpandResponsespathInMiddlePanelnativeScrollbarsrequiredPropsFirstrv   )r   r   rx   LAZY_RENDERINGHIDE_HOSTNAMEEXPAND_RESPONSESPATH_IN_MIDDLENATIVE_SCROLLBARSREQUIRED_PROPS_FIRSTr   r   r[   r   r   r   r      s   
z ReDocRenderer.get_redoc_settingsr   )	r    r-   r.   r/   rB   r6   rA   r   r   r   r   re   r   r      s    r   c                   @   s   e Zd ZdZdZdS )ReDocOldRendererz8Renders a ReDoc 1.x.x web interface for schema browsing.zdrf-yasg/redoc-old.htmlN)r    r-   r.   r/   rB   r   r   r   r   r      s    r   N)$django.core.exceptionsr   django.shortcutsr   django.template.loaderr   django.utils.encodingr   django.utils.functionalr   rest_framework.renderersr   r   r	   rest_framework.utilsr
   r   app_settingsr   r   codecsr   r   r   r4   r   utilsr   r   r3   r8   r9   r:   r]   r   r   r   r   r   r   <module>   s&    =,