o
    hc                     @   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	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 )    )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/magazine_api/magazine_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   r1   &   
    r1   c                   @   r0   )SwaggerJSONRendererzVRenders the schema as a JSON document with the generic ``application/json`` mime type.zapplication/jsonz.jsonNr3   r   r   r   r   r6   -   r5   r6   c                   @   r0   )SwaggerYAMLRendererz&Renders the schema as a YAML document.zapplication/yamlz.yamlN)r   r+   r,   r-   r'   r4   r   r!   r   r   r   r   r7   4   r5   r7   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   s8   t |tst |||S | || t| j||d S )Nrequest)r"   r   r   r#   set_contextr   template)r%   swaggerZaccepted_media_typer(   r   r   r   r#   A   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 )Nr9   title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;   K   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   R   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   e   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   m   s   z_UIRenderer.get_oauth2_configr*   r   )r   r+   r,   r-   r'   r.   r<   r#   r;   r   rG   rD   r   r   r   r   r8   ;   s    


r8   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 browisng.zdrf-yasg/swagger-ui.htmlr=   Nc                    sd   t t| || |  }|dd }t|dd}|r&|r&|||d< tj|t	j
d|d< d S )Nr:   oauth2RedirectUrlr9   r@   r   )superrU   r;   get_swagger_ui_settingsgetr   Zbuild_absolute_urir
   rC   r	   rE   )r%   r(   r=   Zswagger_ui_settingsr:   Zoauth_redirect_url	__class__r   r   r;   x   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showCommonExtensionsrV   ZsupportedSubmitMethodsZdisplayOperationIdZpersistAuthZrefetchWithAuthZrefetchOnLogoutfetchSchemaWithQueryr9   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   rX      sN   	

z)SwaggerUIRenderer.get_swagger_ui_settingsr   )	r   r+   r,   r-   r<   r4   r;   rX   __classcell__r   r   rZ   r   rU   s   s    rU   c                       rT   )
ReDocRendererz2Renders a ReDoc web interface for schema browisng.zdrf-yasg/redoc.htmlZredocNc                    s.   t t| || tj|  tjd|d< d S )Nr@   r   )rW   ra   r;   r
   rC   get_redoc_settingsr	   rE   rH   rZ   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   rb      s   
z ReDocRenderer.get_redoc_settingsr   )	r   r+   r,   r-   r<   r4   r;   rb   r`   r   r   rZ   r   ra      s    ra   c                   @   s   e Zd ZdZdZdS )ReDocOldRendererz8Renders a ReDoc 1.x.x web interface for schema browisng.zdrf-yasg/redoc-old.htmlN)r   r+   r,   r-   r<   r   r   r   r   rc      s    rc   N)"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   r2   r   utilsr   r   r1   r6   r7   r8   rU   ra   rc   r   r   r   r   <module>   s$    8,