o
    `oi                     @   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   Z/var/www/html/kuke-dev/django-kuke/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   r2   '   
    r2   c                   @   r1   )SwaggerJSONRendererzVRenders the schema as a JSON document with the generic ``application/json`` mime type.zapplication/jsonz.jsonNr4   r   r   r   r   r7   .   r6   r7   c                   @   r1   )SwaggerYAMLRendererz&Renders the schema as a YAML document.zapplication/yamlz.yamlN)r   r,   r-   r.   r(   r5   r   r"   r   r   r   r   r8   5   r6   r8   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_codeZstatus_texttitleset_contextr   template)r&   swaggerZ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    Zoauth2_configUSE_SESSION_AUTH)infor>   rB   r   dumpsget_oauth2_configr
   JSONEncoderr   rD   updateget_auth_urlsr&   r)   rA   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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   rR   rS   r   )r&   urlsr   r   r   rJ   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   rG   s   s   z_UIRenderer.get_oauth2_configr+   r   )r   r,   r-   r.   r(   r/   r@   r$   r?   r   rJ   rG   r   r   r   r   r9   <   s    

r9   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.htmlrA   Nc                    sd   t t| || |  }|dd }t|dd}|r&|r&|||d< tj|t	j
d|d< d S )Nr<   oauth2RedirectUrlr:   rC   r   )superrX   r?   get_swagger_ui_settingsgetr   Zbuild_absolute_urir   rF   r
   rH   )r&   r)   rA   Zswagger_ui_settingsr<   Zoauth_redirect_url	__class__r   r   r?   ~   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urlZoperationsSorterZ
tagsSorterZdocExpansionZdeepLinkingZshowExtensionsZdefaultModelRenderingZdefaultModelExpandDepthZdefaultModelsExpandDepthZshowCommonExtensionsrY   ZsupportedSubmitMethodsZdisplayOperationIdZpersistAuthZrefetchWithAuthZrefetchOnLogoutfetchSchemaWithQueryr:   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_URLrV   r   r   r   r[      sN   	

z)SwaggerUIRenderer.get_swagger_ui_settingsr   )	r   r,   r-   r.   r@   r5   r?   r[   __classcell__r   r   r]   r   rX   y   s    rX   c                       rW   )
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 )NrC   r   )rZ   rd   r?   r   rF   get_redoc_settingsr
   rH   rK   r]   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   ra   ZLAZY_RENDERINGZHIDE_HOSTNAMEZEXPAND_RESPONSESZPATH_IN_MIDDLEZNATIVE_SCROLLBARSZREQUIRED_PROPS_FIRSTrb   r   rV   r   r   r   re      s   
z ReDocRenderer.get_redoc_settingsr   )	r   r,   r-   r.   r@   r5   r?   re   rc   r   r   r]   r   rd      s    rd   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   rf      s    rf   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   r3   r   utilsr   r   r2   r7   r8   r9   rX   rd   rf   r   r   r   r   <module>   s&    =,