
    +}&i!                     P   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e      Z G d de      Z G d de      Z G d de      Z G d de      Z  G d de       Z! G d de       Z" G d de"      Z#y)    )ImproperlyConfigured)resolve_url)render_to_string)	force_str)Promise)BaseRendererJSONRendererTemplateHTMLRenderer)encodersjson   )redoc_settingsswagger_settings)
VALIDATORSOpenAPICodecJsonOpenAPICodecYaml)Swagger)filter_nonec                   4    e Zd ZdZdZg ZdZed        ZddZ	y)_SpecRendererz?Base class for text renderers. Handles encoding and validation.utf-8Nc                     t        d |D              sJ ddj                  t              z          t        | j                  | fd|i      S )Nc              3   ,   K   | ]  }|t         v   y wN)r   ).0vlds     J/usr/local/footviz/venv/lib/python3.12/site-packages/drf_yasg/renderers.py	<genexpr>z0_SpecRenderer.with_validators.<locals>.<genexpr>   s     ;3*$;s   zallowed validators are z, 
validators)alljoinr   type__name__)clsr   s     r   with_validatorsz_SpecRenderer.with_validators   sJ    ;
;; 	
%		*(==	
; CLL3&<*DEE    c                     | j                   sJ d       | j                  | j                        }t        |t              st	               j                  |||      S |j                  |      S )Nzmust override codec_class)codec_classr   
isinstancer   r	   renderencode)selfdata
media_typerenderer_contextcodecs        r   r*   z_SpecRenderer.render   s^    <!<<  1$(
  >((z;KLL||D!!r&   NN)
r#   
__module____qualname____doc__charsetr   r(   classmethodr%   r*    r&   r   r   r      s-    IGJKF F"r&   r   c                       e Zd ZdZdZdZeZy)OpenAPIRendererzcRenders the schema as a JSON document with the ``application/openapi+json``
    specific mime type.zapplication/openapi+jsonopenapiNr#   r2   r3   r4   r.   formatr   r(   r7   r&   r   r9   r9   +   s     ,JF"Kr&   r9   c                       e Zd ZdZdZdZeZy)SwaggerJSONRendererzZRenders the schema as a JSON document with the generic ``application/json`` mime
    type.zapplication/jsonr   Nr;   r7   r&   r   r>   r>   4   s     $JF"Kr&   r>   c                       e Zd ZdZdZdZeZy)SwaggerYAMLRendererz&Renders the schema as a YAML document.zapplication/yamlyamlN)r#   r2   r3   r4   r.   r<   r   r(   r7   r&   r   r@   r@   =   s    0#JF"Kr&   r@   c                   >    e Zd ZdZdZdZdZddZddZd Z	d	 Z
d
 Zy)_UIRendererzfBase class for web UI renderers. Handles loading and passing settings to the
    appropriate template.z	text/htmlr    Nc                 ,   t        |t              s	 t               j                  |||      S | j                  ||       t        | j                  ||d         S # t        $ r1 |d   }d|j
                  |j                  j                         fz  cY S w xY w)Nresponsez%d %srequest)r)   r   r
   r*   r   status_codestatus_texttitleset_contextr   template)r,   swaggeraccepted_media_typer/   rF   s        r   r*   z_UIRenderer.renderM   s    '7+V
 ,-4402B  	)73MM+-=i-H
 	
 ( V+J7("6"68L8L8R8R8T!UUUVs   A 7BBc                 X   |r|j                   j                  xs dnd|d<   |r|j                   j                  xs dnd|d<   t        j                  | j                         t        j                        |d<   t        j                  |d<   |j                  | j                                y )NrD   rJ   versionr$   oauth2_configUSE_SESSION_AUTH)inforJ   rP   r   dumpsget_oauth2_configr   JSONEncoderr   rS   updateget_auth_urls)r,   r/   rM   s      r   rK   z_UIRenderer.set_contexta   s    @GGLL$6$6$<"R!DKgll&:&:&@bQS#,0JJ""$(*>*>-
) 0@/P/P+, 2 2 45r&   c                     t        |t              rt        |      }|y d\  }}t        |t              s(t        |      dkD  r|\  }}}nt        |      dk(  r|\  }}|xs d}|xs i }t	        |g|i |S )Nr1      r7   )r)   r   strlenr   )r,   toargskwargss       r   r   z_UIRenderer.resolve_urlj   s    b'"RB:!f"c"2w{#% D&RA
Fzr22////r&   c                     | j                  t        j                        | j                  t        j                        d}t	        |      S )N)	LOGIN_URL
LOGOUT_URL)r   r   rb   rc   r   )r,   urlss     r   rY   z_UIRenderer.get_auth_urls}   s@    ))*:*D*DE**+;+F+FG

 4  r&   c                 T    t         j                  }t        |t              sJ d       |S )NzOAUTH2_CONFIG must be a dict)r   OAUTH2_CONFIGr)   dictr,   r-   s     r   rV   z_UIRenderer.get_oauth2_config   s(    --$%E'EE%r&   r1   r   )r#   r2   r3   r4   r.   r5   rL   r*   rK   r   rY   rV   r7   r&   r   rC   rC   E   s1     JGH
(60&!r&   rC   c                   2     e Zd ZdZdZdZd fd	Zd Z xZS )SwaggerUIRendererz7Renders a swagger-ui web interface for schema browsing.zdrf-yasg/swagger-ui.htmlrM   c                 (   t         t        |   ||       | j                         }|j	                  dd       }t        |j	                  dd            }|r|r|j                  |      |d<   t        j                  |t        j                        |d<   y )NrG   oauth2RedirectUrlrD   rQ   r   )superrj   rK   get_swagger_ui_settingsgetr   build_absolute_urir   rU   r   rW   )r,   r/   rM   swagger_ui_settingsrG   oauth_redirect_url	__class__s         r   rK   zSwaggerUIRenderer.set_context   s    23CWM"::<"&&y$7&':'>'>?RTV'WX)7>7Q7Q"8 34 04zzX%9%90
+,r&   c                 R   i d| j                  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  j)                  dd      d}t+        |      }t        j,                  dk7  r"| j                  t        j,                        |d<   |S )NurloperationsSorter
tagsSorterdocExpansiondeepLinkingshowExtensionsdefaultModelRenderingdefaultModelExpandDepthdefaultModelsExpandDepthshowCommonExtensionsrl   supportedSubmitMethodsdisplayOperationIdpersistAuthrefetchWithAuthrefetchOnLogoutfetchSchemaWithQuery   _-)
csrfCookie
csrfHeaderrD   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_URLrh   s     r   rn   z)SwaggerUIRenderer.get_swagger_ui_settings   s   
4##$4$=$=>
 0 B B
 *66
 ,::	

 +88
 .>>
 $%5%M%M
 &'7'K'K
 '(8(L(L
 #$4$K$K
  !1!E!E
 %&6&O&O
 !"2"G"G
 +88
 /HH
  /HH!
" #$4$L$L#
$ +;;*;;AB?GGSQ)
. 4 ))R/#'#3#34D4R4R#SD r&   r   )	r#   r2   r3   r4   rL   r<   rK   rn   __classcell__rs   s   @r   rj   rj      s    A)HF
r&   rj   c                   2     e Zd ZdZdZdZd fd	Zd Z xZS )ReDocRendererz2Renders a ReDoc web interface for schema browsing.zdrf-yasg/redoc.htmlredocc                     t         t        |   ||       t        j                  | j                         t        j                        |d<   y )NrQ   r   )rm   r   rK   r   rU   get_redoc_settingsr   rW   )r,   r/   rM   rs   s      r   rK   zReDocRenderer.set_context   s>    mT./?I-1ZZ##%8+?+?.
)*r&   c           
      J   | j                  t        j                        t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  d	}t        |      S )N)	ru   lazyRenderinghideHostnameexpandResponsespathInMiddlePanelnativeScrollbarsrequiredPropsFirstr   hideDownloadButton)r   r   r   LAZY_RENDERINGHIDE_HOSTNAMEEXPAND_RESPONSESPATH_IN_MIDDLENATIVE_SCROLLBARSREQUIRED_PROPS_FIRSTr   HIDE_DOWNLOAD_BUTTONr   rh   s     r   r   z ReDocRenderer.get_redoc_settings   sr    ##N$;$;<+::*88->>!/!>!> . @ @"0"E"E$2$J$J"0"E"E

 4  r&   r   )	r#   r2   r3   r4   rL   r<   rK   r   r   r   s   @r   r   r      s    <$HF
!r&   r   c                       e Zd ZdZdZy)ReDocOldRendererz8Renders a ReDoc 1.x.x web interface for schema browsing.zdrf-yasg/redoc-old.htmlN)r#   r2   r3   r4   rL   r7   r&   r   r   r      s
    B(Hr&   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   r:   r   utilsr   r   r9   r>   r@   rC   rj   r   r   r7   r&   r   <module>r      s    7 ( 3 + + U U / : B B  "L "8#m ##- ##- #C, CL1 1h!K !8)} )r&   