o
    >hv                      @   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   r/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/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/jsonr   Nr5   r   r   r   r   r8   .   r7   r8   c                   @   r2   )SwaggerYAMLRendererz&Renders the schema as a YAML document.zapplication/yaml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<   rA   versionr!   oauth2_configUSE_SESSION_AUTH)inforA   rF   r   dumpsget_oauth2_configr
   JSONEncoderr   rI   updateget_auth_urlsr'   r*   rD   r   r   r   rB   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   rW   rX   r   )r'   urlsr   r   r   rO   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   rL   s   s   z_UIRenderer.get_oauth2_configr,   r   )r    r-   r.   r/   r)   r0   rC   r%   rB   r   rO   rL   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.htmlrD   Nc                    sd   t t| || |  }|dd }t|dd}|r&|r&|||d< tj|t	j
d|d< d S )Nr>   oauth2RedirectUrlr<   rG   r   )superr^   rB   get_swagger_ui_settingsgetr   build_absolute_urir   rK   r
   rM   )r'   r*   rD   swagger_ui_settingsr>   oauth_redirect_url	__class__r   r   rB   ~   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jtjdd  ddd}t|}tjdkri|  tj|d< |S )NurloperationsSorter
tagsSorterdocExpansiondeepLinkingshowExtensionsdefaultModelRenderingdefaultModelExpandDepthdefaultModelsExpandDepthshowCommonExtensionsr_   supportedSubmitMethodsdisplayOperationIdpersistAuthrefetchWithAuthrefetchOnLogoutfetchSchemaWithQuery   _-)
csrfCookie
csrfHeaderr<   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_QUERYCSRF_COOKIE_NAMECSRF_HEADER_NAMEreplacer   VALIDATOR_URLr\   r   r   r   ra      sT   	

z)SwaggerUIRenderer.get_swagger_ui_settingsr   )	r    r-   r.   r/   rC   r6   rB   ra   __classcell__r   r   rf   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 )NrG   r   )r`   r   rB   r   rK   get_redoc_settingsr
   rM   rP   rf   r   r   rB      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)rh   lazyRenderinghideHostnameexpandResponsespathInMiddlePanelnativeScrollbarsrequiredPropsFirstrw   )r   r   r~   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/   rC   r6   rB   r   r   r   r   rf   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/   rC   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&    =/