o
    "i/                     @   s  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,j2rdde.j3iiZ4ee5ef e6d< ej7re0de5e0j8e9e:ej;< dge4d< nddiZ4e,j=dure,j=Z>nej?Z>G dd deZ@G dd  d e@ZAG d!d" d"e@ZBd#d$ ZCG d%d& d&eZDG d'd( d(eDZEG d)d* d*eZFG d+d, d,eZGdS )-    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                   @   s   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	d
 Z#dd Z$dd Z%dd Z&dS )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              	   O   s   t | jtst | jtr=tddg}tdd | jD r5g }| jD ]}t|}||j7 }q!|t|| _n|t| j| _t| j	D t
jrr|jdrrt|jd | |W  d    W  d    S 1 slw   Y  n| |W  d    S W d    d S 1 sw   Y  d S )NModuleWrapperurlpatternsc                 s   s    | ]}t |tV  qd S )N)
isinstancestr).0i r4   Z/var/www/html/crm_dreinet/venv_linux/lib/python3.10/site-packages/drf_spectacular/views.py	<genexpr>D   s    z)SpectacularAPIView.get.<locals>.<genexpr>r#   )r0   r*   listtupler   allr   r/   r   r,   r	   USE_I18NGETgetr   override_get_schema_response)selfrequestargskwargsr.   r-   itemurlr4   r4   r5   r<   ?   s(   
"zSpectacularAPIView.getc                 C   sV   | j p
|jp
| |}| j| j|| jd}t|j|| jddd| 	|| didS )N)r*   r+   r-   )r@   publiczContent-Dispositionzinline; filename="")dataheaders)
r+   version_get_version_parameterr(   r*   r-   r   
get_schemar)   _get_filename)r?   r@   rI   	generatorr4   r4   r5   r>   V   s   z'SpectacularAPIView._get_schema_responsec                 C   s6   dj tjpd|rd| dnd| j|ddd j d	S )
Nz{title}{version}.{suffix}schemaz () T)forcer   )titlerI   suffix)formatr   TITLEperform_content_negotiationr?   r@   rI   r4   r4   r5   rL   `   s
   z SpectacularAPIView._get_filenamec                 C   s$   |j d}tjr|tjv r|S d S )NrI   )r;   r<   r   ALLOWED_VERSIONSrW   r4   r4   r5   rJ   g   s   z)SpectacularAPIView._get_version_parameterr4   )'__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   r1   r+   r,   r   r   r-   r   r   r"   r<   r>   rL   rJ   r4   r4   r4   r5   r'   ,   s"   
 

r'   c                   @      e Zd ZeegZdS )SpectacularYAMLAPIViewN)rY   rZ   r[   r   r   r^   r4   r4   r4   r5   ri   n       ri   c                   @   rh   )SpectacularJSONAPIViewN)rY   rZ   r[   r   r   r^   r4   r4   r4   r5   rk   r   rj   rk   c                 C   s   t d|  S )Nzdrf_spectacular_sidecar/r
   )filepathr4   r4   r5   _get_sidecar_urlv   s   rm   c                   @   s   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dd Zdd Zdd Zdd Zdd Zedd Zedd ZdS )SpectacularSwaggerViewrN   url_nameNrD   zdrf_spectacular/swagger_ui.htmltemplate_namezdrf_spectacular/swagger_ui.jstemplate_name_jsrR   Tr&   c                 O   sl   t | j| d| d| d|  | || tj| tj| j	d | 
 | |  d| jddidS )Nswagger-ui.cssswagger-ui-bundle.jsswagger-ui-standalone-preset.js)rR   swagger_ui_cssswagger_ui_bundleswagger_ui_standalonefavicon_href
schema_urlr	   oauth2_configrq   
script_urlcsrf_header_nameschema_auth_nameszCross-Origin-Opener-Policyzunsafe-none)rG   rp   rH   )r   rR   _swagger_ui_resource_swagger_ui_favicon_get_schema_url_dumpr   SWAGGER_UI_SETTINGSSWAGGER_UI_OAUTH2_CONFIGrq   _get_csrf_header_name_get_schema_auth_namesrp   r?   r@   rA   rB   r4   r4   r5   r<      s$   

zSpectacularSwaggerView.getc                 C   s   t |tr|S tj|ddS N   )indentr0   r1   jsondumpsr?   rG   r4   r4   r5   r      s   zSpectacularSwaggerView._dumpc                 C   6   | j ptt| j|d}t||jd|jddS N)r@   r#   rI   )rD   r#   rI   rD   r   r   ro   r   r;   r<   r?   r@   rz   r4   r4   r5   r         

z&SpectacularSwaggerView._get_schema_urlc                 C   s(   t j}|dr|dd  }|ddS )NHTTP_   r\   -)r	   CSRF_HEADER_NAME
startswithreplace)r?   r}   r4   r4   r5   r      s   
z,SpectacularSwaggerView._get_csrf_header_namec                    s8   ddl m  tjrg S  fdd| jD }dd |D S )Nr   OpenApiAuthenticationExtensionc                    s   g | ]}  |qS r4   )	get_match)r2   klassr   r4   r5   
<listcomp>   s    zASpectacularSwaggerView._get_schema_auth_names.<locals>.<listcomp>c                 S   s   g | ]}|r|j qS r4   )name)r2   authr4   r4   r5   r      s    )drf_spectacular.extensionsr   r   re   rb   )r?   auth_extensionsr4   r   r5   r      s   
z-SpectacularSwaggerView._get_schema_auth_namesc                 C   s(   t jdkrtd|  S t j d|  S )NSIDECARzswagger-ui-dist//)r   SWAGGER_UI_DISTrm   )filenamer4   r4   r5   r      s   
z+SpectacularSwaggerView._swagger_ui_resourcec                   C   s   t jdkr	tdS t jS )Nr   z!swagger-ui-dist/favicon-32x32.png)r   SWAGGER_UI_FAVICON_HREFrm   r4   r4   r4   r5   r      s   
z*SpectacularSwaggerView._swagger_ui_favicon)rY   rZ   r[   r   r^   r   r_   r`   ra   rb   ro   r1   rd   rD   r   rp   rq   rU   rR   r   r<   r   r   r   r   staticmethodr   r   r4   r4   r4   r5   rn   z   s&   
 


rn   c                   @   s4   e Zd ZU dZdZee ed< edddd Z	dS )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_selfTrr   c                 O   s   |j dd ur(t| || tj| tj|  | | 	 d| j
ddS | jp.| }t| j| d| d| d|  t||j dd	d
d| jdS )Nscript)rz   r	   r{   r}   r~   zapplication/javascript)rG   rp   content_typers   rt   ru   r#   rP   )rD   r#   r   )rR   rv   rw   rx   ry   r|   rG   rp   )r;   r<   r   r   r   r   r   r   r   r   rq   r   get_full_pathrR   r   r   r   rp   )r?   r@   rA   rB   r|   r4   r4   r5   r<      s4   


zSpectacularSwaggerSplitView.get)
rY   rZ   r[   r]   r   r   r1   rd   r   r<   r4   r4   r4   r5   r      s
   
 r   c                   @   s   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	d
d Zdd Zedd Zdd ZdS )SpectacularRedocViewrN   ro   NrD   zdrf_spectacular/redoc.htmlrp   rR   Trr   c                 O   s,   t | j|  | || tjd| jdS )N)rR   redoc_standalonerz   r	   r   )r   rR   _redoc_standaloner   r   r   REDOC_UI_SETTINGSrp   r   r4   r4   r5   r<      s   
zSpectacularRedocView.getc                 C   s$   |sd S t |tr|S tj|ddS r   r   r   r4   r4   r5   r      s
   
zSpectacularRedocView._dumpc                   C   s   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_DISTrm   r4   r4   r4   r5   r     s   
z&SpectacularRedocView._redoc_standalonec                 C   r   r   r   r   r4   r4   r5   r     r   z$SpectacularRedocView._get_schema_url)rY   rZ   r[   r   r^   r   r_   r`   ra   rb   ro   r1   rd   rD   r   rp   rU   rR   r   r<   r   r   r   r   r4   r4   r4   r5   r      s   
 

r   c                   @   s   e Zd ZdZdd ZdS )#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                 O   s   t dd | jj  S )Nz$swagger-ui-dist/oauth2-redirect.html?)rm   r@   r;   	urlencode)r?   rA   rB   r4   r4   r5   get_redirect_url  s   z4SpectacularSwaggerOauthRedirectView.get_redirect_urlN)rY   rZ   r[   r]   r   r4   r4   r4   r5   r     s    r   )Hr   collectionsr   	importlibr   typingr   r   r   r   r   django.confr	   django.templatetags.staticr   django.utilsr   django.utils.translationr   r\   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"   r1   rd   r:   QUERYr7   dict	LANGUAGESkeysSERVE_AUTHENTICATIONra   DEFAULT_AUTHENTICATION_CLASSESr'   ri   rk   rm   rn   r   r   r   r4   r4   r4   r5   <module>   sP   
 
BI(,