
    <%i/              
          U d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	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 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! d dl"m#Z#m$Z$ d dl%m&Z&m'Z'm(Z(m)Z) d dl*m+Z+m,Z, d dl-m.Z. d dl/m0Z0m1Z1 e,jd                  redde.jf                  iiZ4ee5ef   e6d<   ejn                  rC e0de5e0jp                   e9 e:ejv                        jy                                     ge4d<   nddiZ4e,jz                  e,jz                  Z>nej~                  Z> G d de      Z@ G d d e@      ZA G d! d"e@      ZBd# ZC G d$ d%e      ZD G d& d'eD      ZE G d( d)e      ZF G d* d+e      ZGy),    N)
namedtuple)import_module)AnyDictListOptionalType)settingsstatic)translation)gettext_lazy)RedirectView)TemplateHTMLRenderer)Response)reverse)api_settings)APIView)SchemaGenerator)get_relative_urlset_query_parameters)OpenApiJsonRendererOpenApiJsonRenderer2OpenApiYamlRendererOpenApiYamlRenderer2)patched_settingsspectacular_settings)OpenApiTypes)OpenApiParameterextend_schema	responses   SCHEMA_KWARGSlang)enum
parametersexcludeTc                   2   e Zd ZU  ed      ZeeeegZ	e
j                  ZeZe
j                  Zee   ed<   e
j(                  Zeed<   e
j.                  Zee   ed<   dZee   ed<   dZeeeef      ed<   dZee e      ed<    e!di e"d	        Z#d
 Z$d Z%d Z&y)SpectacularAPIViewz
    OpenApi3 schema for this API. Format can be selected via content negotiation.

    - YAML: application/vnd.oai.openapi
    - JSON: application/vnd.oai.openapi+json
    generator_classserve_publicurlconfNapi_versioncustom_settingspatternsc                 "   t        | j                  t              st        | j                  t              rt	        ddg      }t        d | j                  D              rDg }| j                  D ]  }t        |      }||j                  z  }  |t        |            | _        n  |t        | j                              | _        t        | j                        5  t        j                  rm|j                  j                  d      rRt        j                  |j                  j                  d            5  | j!                  |      cd d d        cd d d        S | j!                  |      cd d d        S # 1 sw Y   nxY w	 d d d        y # 1 sw Y   y xY w)NModuleWrapperurlpatternsc              3   <   K   | ]  }t        |t                y w)N)
isinstancestr).0is     M/usr/local/footviz/venv/lib/python3.12/site-packages/drf_spectacular/views.py	<genexpr>z)SpectacularAPIView.get.<locals>.<genexpr>D   s     <!:a%<s   r$   )r4   r,   listtupler   allr   r2   r   r.   r
   USE_I18NGETgetr   override_get_schema_response)selfrequestargskwargsr1   r/   itemurls           r8   r?   zSpectacularAPIView.get?   s?    dllD)Ze-L&HM<t||<< LL 0D'-C/H0  -U8_=  -U4<<-@Ad223 	:  W[[__V%< ))'++//&*AB >44W=> >	: 	:
 009	: 	:> > >	: 	: 	:s+   AF1E/	FF/E8	4FFc           	      (   | j                   xs |j                  xs | j                  |      }| j                  | j                  || j
                        }t        |j                  || j                        dd| j                  ||       di      S )N)r,   r-   r/   )rC   publiczContent-Dispositionzinline; filename="")dataheaders)
r-   version_get_version_parameterr*   r,   r/   r   
get_schemar+   _get_filename)rB   rC   rM   	generators       r8   rA   z'SpectacularAPIView._get_schema_responseV   s     ""]goo]9T9TU\9]((7]a]j]j(k	%%gd>O>O%P*.@ASAST[]dAe@ffg,hi
 	
    c                     dj                  t        j                  xs d|rd| dnd| j                  |d      d   j                   	      S )
Nz{title}{version}.{suffix}schemaz () T)forcer   )titlerM   suffix)formatr   TITLEperform_content_negotiationrB   rC   rM   s      r8   rP   z SpectacularAPIView._get_filename`   sU    *11&,,8'.b	OB33G43HKRR 2 
 	
rR   c                     |j                   j                  d      }t        j                  r|t        j                  v r|S y )NrM   )r>   r?   r   ALLOWED_VERSIONSr]   s      r8   rN   z)SpectacularAPIView._get_version_parameterg   s2    ++//),,,<;X;X0XNrR    )'__name__
__module____qualname_____doc__r   r   r   r   renderer_classesr   SERVE_PERMISSIONSpermission_classesAUTHENTICATION_CLASSESauthentication_classesDEFAULT_GENERATOR_CLASSr*   r	   r   __annotations__SERVE_PUBLICr+   boolSERVE_URLCONFr,   r   r5   r-   r.   r   r   r/   r   r    r#   r?   rA   rP   rN   r`   rR   r8   r)   r)   ,   s      	G 	13FH\ .??3-A-Y-YOT/*Y-::L$:1??GXc]?!%K#%04OXd38n-4$(HhtCy!(#]#: $:,

rR   r)   c                       e Zd ZeegZy)SpectacularYAMLAPIViewN)ra   rb   rc   r   r   rf   r`   rR   r8   rq   rq   n       +-ABrR   rq   c                       e Zd ZeegZy)SpectacularJSONAPIViewN)ra   rb   rc   r   r   rf   r`   rR   r8   rt   rt   r   rr   rR   rt   c                     t        d|        S )Nzdrf_spectacular_sidecar/r   )filepaths    r8   _get_sidecar_urlrw   v   s    ,XJ788rR   c                       e Zd ZU egZej                  ZeZ	dZ
eed<   dZee   ed<   dZeed<   dZeed<   ej"                  Zeed	<    ed
      d        Zd Zd Zd Zd Zed        Zed        Zy)SpectacularSwaggerViewrT   url_nameNrG   zdrf_spectacular/swagger_ui.htmltemplate_namezdrf_spectacular/swagger_ui.jstemplate_name_jsrX   Tr'   c                    t        | j                  | j                  d      | j                  d      | j                  d      | j                         | j	                  |      | j                  t        j                        | j                  t        j                        | j                  d | j                         | j                  | j                               d| j                  ddi      S )Nswagger-ui.cssswagger-ui-bundle.jsswagger-ui-standalone-preset.js)rX   swagger_ui_cssswagger_ui_bundleswagger_ui_standalonefavicon_href
schema_urlr
   oauth2_configr|   
script_urlcsrf_header_nameschema_auth_nameszCross-Origin-Opener-Policyzunsafe-none)rK   r{   rL   )r   rX   _swagger_ui_resource_swagger_ui_favicon_get_schema_url_dumpr   SWAGGER_UI_SETTINGSSWAGGER_UI_OAUTH2_CONFIGr|   _get_csrf_header_name_get_schema_auth_namesr{   rB   rC   rD   rE   s       r8   r?   zSpectacularSwaggerView.get   s    "&";";<L"M%)%>%>?U%V)-)B)BCd)e $ 8 8 :"227; JJ';'O'OP!%,@,Y,Y!Z$($9$9"$($>$>$@%)ZZ0K0K0M%N ,,,m!
 	
rR   c                 T    t        |t              r|S t        j                  |d      S N   )indentr4   r5   jsondumpsrB   rK   s     r8   r   zSpectacularSwaggerView._dump   s!    !$,tL$**T!2LLrR   c                     | j                   xs  t        t        | j                  |            }t	        ||j
                  j                  d      |j
                  j                  d            S N)rC   r$   rM   )rG   r$   rM   rG   r   r   rz   r   r>   r?   rB   rC   r   s      r8   r   z&SpectacularSwaggerView._get_schema_url   R    XXZ!1'$--QX2Y!Z
#(KKOOI.
 	
rR   c                 r    t         j                  }|j                  d      r|dd  }|j                  dd      S )NHTTP_   rd   -)r
   CSRF_HEADER_NAME
startswithreplace)rB   r   s     r8   r   z,SpectacularSwaggerView._get_csrf_header_name   s<    #44&&w//3''S11rR   c                     ddl m} t        j                  rg S | j                  D cg c]  }|j                  |       }}|D cg c]  }|s|j                   c}S c c}w c c}w )Nr   )OpenApiAuthenticationExtension)drf_spectacular.extensionsr   r   rm   rj   	get_matchname)rB   r   klassauth_extensionsauths        r8   r   z-SpectacularSwaggerView._get_schema_auth_names   sf    M,,I 44
 +44U;
 
 '6>d		>>	
 ?s   AA#A#c                 n    t         j                  dk(  rt        d|        S t         j                   d|  S )NSIDECARzswagger-ui-dist//)r   SWAGGER_UI_DISTrw   )filenames    r8   r   z+SpectacularSwaggerView._swagger_ui_resource   s;    //9<#&6xj$ABB&667q
CCrR   c                  ^    t         j                  dk(  rt        d      S t         j                  S )Nr   z!swagger-ui-dist/favicon-32x32.png)r   SWAGGER_UI_FAVICON_HREFrw   r`   rR   r8   r   z*SpectacularSwaggerView._swagger_ui_favicon   s(    779D#$GHH#;;;rR   )ra   rb   rc   r   rf   r   rg   rh   ri   rj   rz   r5   rl   rG   r   r{   r|   r[   rX   r    r?   r   r   r   r   staticmethodr   r   r`   rR   r8   ry   ry   z   s    ,--??3HcC#:M3:;c;%++E3+4 
 !
,M
2? D D
 < <rR   ry   c                   D    e Zd ZU dZdZee   ed<    ed      d        Z	y)SpectacularSwaggerSplitViewz
    Alternate Swagger UI implementation that separates the html request from the
    javascript request to cater to web servers with stricter CSP policies.
    Nurl_selfTr}   c                    |j                   j                  d      t        | j                  |      | j	                  t
        j                        | j	                  t
        j                        | j                         | j	                  | j                               d| j                  d      S | j                  xs |j                         }t        | j                  | j                  d      | j                  d      | j                  d      | j                         t!        ||j                   j                  d      d	
      d| j"                        S )Nscript)r   r
   r   r   r   zapplication/javascript)rK   r{   content_typer   r   r   r$   rV   )rG   r$   r   )rX   r   r   r   r   r   rK   r{   )r>   r?   r   r   r   r   r   r   r   r   r|   r   get_full_pathrX   r   r   r   r{   )rB   rC   rD   rE   r   s        r8   r?   zSpectacularSwaggerSplitView.get   s   ;;??8$0"&"6"6w"? $

+?+S+S T%)ZZ0D0]0]%^(,(B(B(D)-D4O4O4Q)R #335
 
 A'*?*?*AJ!ZZ&*&?&?@P&Q)-)B)BCY)Z-1-F-FGh-i$($<$<$>"6&$[[__V4!# #00 rR   )
ra   rb   rc   re   r   r   r5   rl   r    r?   r`   rR   r8   r   r      s.     #Hhsm"4  !rR   r   c                       e Zd ZU egZej                  ZeZ	dZ
eed<   dZee   ed<   dZeed<   ej                   Zee   ed<    ed	      d
        Zd Zed        Zd Zy)SpectacularRedocViewrT   rz   NrG   zdrf_spectacular/redoc.htmlr{   rX   Tr}   c                     t        | j                  | j                         | j                  |      | j	                  t
        j                        d| j                        S )N)rX   redoc_standaloner   r
   r   )r   rX   _redoc_standaloner   r   r   REDOC_UI_SETTINGSr{   r   s       r8   r?   zSpectacularRedocView.get   sS    $($:$:$<"227; JJ';'M'MN	 ,,
 	
rR   c                 Z    |sy t        |t              r|S t        j                  |d      S r   r   r   s     r8   r   zSpectacularRedocView._dump   s(    c"K::d1--rR   c                  d    t         j                  dk(  rt        d      S t         j                   dS )Nr   z!redoc/bundles/redoc.standalone.jsz/bundles/redoc.standalone.js)r   
REDOC_DISTrw   r`   rR   r8   r   z&SpectacularRedocView._redoc_standalone  s1    **i7#$GHH&1122NOOrR   c                     | j                   xs  t        t        | j                  |            }t	        ||j
                  j                  d      |j
                  j                  d            S r   r   r   s      r8   r   z$SpectacularRedocView._get_schema_url  r   rR   )ra   rb   rc   r   rf   r   rg   rh   ri   rj   rz   r5   rl   rG   r   r{   r[   rX   r    r?   r   r   r   r   r`   rR   r8   r   r      s    ,--??3HcC#5M35/55E8C=54 	
 !	
. P P

rR   r   c                       e Zd ZdZd Zy)#SpectacularSwaggerOauthRedirectViewa|  
    A view that serves the SwaggerUI oauth2-redirect.html file so that SwaggerUI can authenticate itself using Oauth2

    This view should be served as ``./oauth2-redirect.html`` relative to the SwaggerUI itself.
    If that is not possible, this views absolute url can also be set via the
    ``SPECTACULAR_SETTINGS.SWAGGER_UI_SETTINGS.oauth2RedirectUrl`` django settings.
    c                 h    t        d      dz   | j                  j                  j                         z   S )Nz$swagger-ui-dist/oauth2-redirect.html?)rw   rC   r>   	urlencode)rB   rD   rE   s      r8   get_redirect_urlz4SpectacularSwaggerOauthRedirectView.get_redirect_url  s.     FG#MPTP\P\P`P`PjPjPlllrR   N)ra   rb   rc   re   r   r`   rR   r8   r   r     s    mrR   r   )Hr   collectionsr   	importlibr   typingr   r   r   r   r	   django.confr
   django.templatetags.staticr   django.utilsr   django.utils.translationr   rd   django.views.genericr   rest_framework.renderersr   rest_framework.responser   rest_framework.reverser   rest_framework.settingsr   rest_framework.viewsr   drf_spectacular.generatorsr   drf_spectacular.plumbingr   r   drf_spectacular.renderersr   r   r   r   drf_spectacular.settingsr   r   drf_spectacular.typesr   drf_spectacular.utilsr   r    SERVE_INCLUDE_SCHEMAOBJECTr#   r5   rl   r=   QUERYr:   dict	LANGUAGESkeysSERVE_AUTHENTICATIONri   DEFAULT_AUTHENTICATION_CLASSESr)   rq   rt   rw   ry   r   r   r   r`   rR   r8   <module>r      sW    " # 2 2   - $ 6 - 9 , * 0 ( 6 K  L . A,,%038K8K2L$MM4S>M-33$tHDVDV?W?\?\?^:_'
l# %M,,81FF)HH? ?DC/ CC/ C9F<W F<R%"8 %P)
7 )
X	m, 	mrR   