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/html/premium_crap/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/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&    =/