a
    ΝGd                     @   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   ).0Zvld r   N/var/www/html/django/DPS/env/lib/python3.9/site-packages/drf_yasg/renderers.py	<genexpr>       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s4t |||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                   @   s   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   r0   '   s   r0   c                   @   s   e Zd ZdZdZdZeZdS )SwaggerJSONRendererzVRenders the schema as a JSON document with the generic ``application/json`` mime type.zapplication/jsonz.jsonNr2   r   r   r   r   r4   .   s   r4   c                   @   s   e Zd ZdZdZdZeZdS )SwaggerYAMLRendererz&Renders the schema as a YAML document.zapplication/yamlz.yamlN)r   r+   r,   r-   r(   r3   r   r"   r   r   r   r   r5   5   s   r5   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sLzt |||W S  tyJ   |d }d|j|j f  Y S 0 | || t	| j
||d S )Nresponsez%d %srequest)r#   r   r	   r$   r   status_codeZstatus_texttitleset_contextr   template)r&   swaggerZaccepted_media_typer)   r8   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 )Nr7   r;   versionr    Zoauth2_configUSE_SESSION_AUTH)infor;   r?   r   dumpsget_oauth2_configr
   JSONEncoderr   rA   updateget_auth_urlsr&   r)   r>   r   r   r   r<   Q   s
    
z_UIRenderer.set_contextc                 C   s   t |trt|}|d u rd S d\}}t |ts\t|dkrH|\}}}nt|dkr\|\}}|pbd}|pji }t|g|R i |S )N)NN   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   rO   rP   r   )r&   urlsr   r   r   rG   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   ZOAUTH2_CONFIGr#   dictr&   r'   r   r   r   rD   s   s    z_UIRenderer.get_oauth2_config)NN)N)r   r+   r,   r-   r(   r.   r=   r$   r<   r   rG   rD   r   r   r   r   r6   <   s   

r6   c                       s2   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.htmlr>   Nc                    sd   t t| || |  }|dd }t|dd}|rL|rL|||d< tj|t	j
d|d< d S )Nr9   oauth2RedirectUrlr7   r@   r   )superrT   r<   get_swagger_ui_settingsgetr   Zbuild_absolute_urir   rC   r
   rE   )r&   r)   r>   Zswagger_ui_settingsr9   Zoauth_redirect_url	__class__r   r   r<   ~   s    zSwaggerUIRenderer.set_contextc                 C   sv   |  tjtjtjtjtjtjtjtj	tj	tj
tjtjtjtjtjtjtjd}t|}tjdkrr|  tj|d< |S )N)urlZoperationsSorterZ
tagsSorterZdocExpansionZdeepLinkingZshowExtensionsZdefaultModelRenderingZdefaultModelExpandDepthZdefaultModelsExpandDepthZshowCommonExtensionsrU   ZsupportedSubmitMethodsZdisplayOperationIdZpersistAuthZrefetchWithAuthZrefetchOnLogoutfetchSchemaWithQueryr7   ZvalidatorUrl)r   r   SPEC_URLZOPERATIONS_SORTERZTAGS_SORTERZDOC_EXPANSIONZDEEP_LINKINGZSHOW_EXTENSIONSZDEFAULT_MODEL_RENDERINGZDEFAULT_MODEL_DEPTHZSHOW_COMMON_EXTENSIONSZOAUTH2_REDIRECT_URLZSUPPORTED_SUBMIT_METHODSZDISPLAY_OPERATION_IDZPERSIST_AUTHZREFETCH_SCHEMA_WITH_AUTHZREFETCH_SCHEMA_ON_LOGOUTFETCH_SCHEMA_WITH_QUERYr   ZVALIDATOR_URLrS   r   r   r   rW      s,    

z)SwaggerUIRenderer.get_swagger_ui_settings)N)	r   r+   r,   r-   r=   r3   r<   rW   __classcell__r   r   rY   r   rT   y   s
   rT   c                       s2   e Zd ZdZdZdZd	 fdd	Zdd Z  ZS )
ReDocRendererz2Renders a ReDoc web interface for schema browsing.zdrf-yasg/redoc.htmlZredocNc                    s.   t t| || tj|  tjd|d< d S )Nr@   r   )rV   r`   r<   r   rC   get_redoc_settingsr
   rE   rH   rY   r   r   r<      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)r[   ZlazyRenderingZhideHostnameZexpandResponsesZpathInMiddlePanelZnativeScrollbarsZrequiredPropsFirstr\   )r   r   r]   ZLAZY_RENDERINGZHIDE_HOSTNAMEZEXPAND_RESPONSESZPATH_IN_MIDDLEZNATIVE_SCROLLBARSZREQUIRED_PROPS_FIRSTr^   r   rS   r   r   r   ra      s    
z ReDocRenderer.get_redoc_settings)N)	r   r+   r,   r-   r=   r3   r<   ra   r_   r   r   rY   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-   r=   r   r   r   r   rb      s   rb   N)$Zdjango.core.exceptionsr   Zdjango.shortcutsr   Zdjango.template.loaderr   Zdjango.utils.encodingr   Zdjango.utils.functionalr   Zrest_framework.renderersr   r   r	   Zrest_framework.utilsr
   r   Zapp_settingsr   r   codecsr   r   r   r1   r   utilsr   r   r0   r4   r5   r6   rT   r`   rb   r   r   r   r   <module>   s$   =,