U
    ƽb                     @   s   d dl Z d dlmZ d dlmZmZ d dlmZ d dl	m
Z
 d dlmZmZ d dlmZ d dlZdd	lmZ G d
d deZG dd deZG dd deZdS )    N)force_bytes)renderresolve_url)OpenAPICodec)generate_swagger_object)BaseRendererJSONRenderer)status   )swagger_settingsc                   @   s   e Zd Zdd ZdS )r   c                 K   s6   t |tjstdt|}|jf | tt|S )Nz&Expected a `coreapi.Document` instance)	
isinstancecoreapiDocument	TypeErrorr   updater   jsondumps)selfdocumentoptionsdata r   D/tmp/pip-unpacked-wheel-sh0jdej0/rest_framework_swagger/renderers.pyencode   s
    zOpenAPICodec.encodeN)__name__
__module____qualname__r   r   r   r   r   r      s   r   c                   @   s*   e Zd ZdZdZdZdddZdd ZdS )	OpenAPIRendererzapplication/openapi+jsonNZopenapic                 C   s4   |d j tjkrt |S |  }t j|f|S )Nresponse)status_coder	   ZHTTP_200_OKr   r   get_customizationsr   r   )r   r   accepted_media_typerenderer_contextr   r   r   r   r      s    zOpenAPIRenderer.renderc                 C   s   i }t jrt j|d< |S )zF
        Adds settings, overrides, etc. to the specification.
        ZsecurityDefinitions)settingsZSECURITY_DEFINITIONSr   r   r   r   r   r    $   s    
z"OpenAPIRenderer.get_customizations)NN)r   r   r   
media_typecharsetformatr   r    r   r   r   r   r      s
   
r   c                   @   s>   e Zd ZdZdZdZdZdddZdd	 Zd
d Z	dd Z
dS )SwaggerUIRendererz	text/htmlZswaggerz!rest_framework_swagger/index.htmlzutf-8Nc                 C   s   |  || t|d | j|S )Nrequest)set_contextr   template)r   r   r!   r"   r   r   r   r   5   s    zSwaggerUIRenderer.renderc                 C   sJ   t j|d< ||   |  }t||d< t j||d	 |d< d S )NUSE_SESSION_AUTHdrs_settings)r   r"   spec)
r#   r,   r   get_auth_urlsget_ui_settingsr   r   r   r   decode)r   r   r"   r-   r   r   r   r*   =   s    zSwaggerUIRenderer.set_contextc                 C   s8   i }t jd k	rtt j|d< t jd k	r4tt j|d< |S )N	LOGIN_URL
LOGOUT_URL)r#   r2   r   r3   )r   urlsr   r   r   r/   I   s    

zSwaggerUIRenderer.get_auth_urlsc              	   C   s>   t jt jt jt jt jt jt jt jd}t j	dkr:t j	|d< |S )N)Z
apisSorterZdocExpansionZ
jsonEditorZoperationsSorterZshowRequestHeadersZsupportedSubmitMethodsZacceptHeaderVersionZcustomHeaders ZvalidatorUrl)
r#   ZAPIS_SORTERZDOC_EXPANSIONZJSON_EDITORZOPERATIONS_SORTERZSHOW_REQUEST_HEADERSZSUPPORTED_SUBMIT_METHODSZACCEPT_HEADER_VERSIONZCUSTOM_HEADERSZVALIDATOR_URLr$   r   r   r   r0   R   s    


z!SwaggerUIRenderer.get_ui_settings)NN)r   r   r   r%   r'   r+   r&   r   r*   r/   r0   r   r   r   r   r(   /   s   
	r(   )r   Zcoreapi.compatr   Zdjango.shortcutsr   r   Zopenapi_codecr   Z_OpenAPICodecZopenapi_codec.encoder   Zrest_framework.renderersr   r   Zrest_frameworkr	   Z
simplejsonr   r#   r   r   r(   r   r   r   r   <module>   s   