o
    >h                     @   s   d dl Z d dl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mZmZmZmZmZ ejZeefeefeeefdZdd Z		dddZdS )    N)WRAPPER_ASSIGNMENTSwrapsadd_never_cache_headers)
cache_page)vary_on_headers)
exceptions)Response)api_settings)APIView   )swagger_settings)ReDocOldRendererReDocRendererSwaggerJSONRendererSwaggerUIRendererSwaggerYAMLRenderer_SpecRenderer)swaggerredocz	redoc-oldc                    s   t  td fdd}|S )zX
    Decorator that adds headers to a response so that it will
    never be cached.
    )assignedc                    s,    | g|R i |}dd }| | |S )Nc                 S   s   t |  | S Nr   )response r   n/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/drf_yasg/views.pycallback,   s   zBdeferred_never_cache.<locals>._wrapped_view_func.<locals>.callback)add_post_render_callback)requestargskwargsr   r   	view_funcr   r   _wrapped_view_func$   s   
z0deferred_never_cache.<locals>._wrapped_view_func)r   r   )r!   r"   r   r    r   deferred_never_cache   s   
r#   Fc	           
   
      s   ||pt j|  du rtj |du rtjpt j	p!g 	t	fddtD t jrAt	
dt tdd D 7 G  f	dddt}	|	S )a  Create a SchemaView class with default renderers and generators.

    :param Info info: information about the API; if omitted, defaults to :ref:`DEFAULT_INFO <default-swagger-settings>`
    :param str url: same as :class:`.OpenAPISchemaGenerator`
    :param patterns: same as :class:`.OpenAPISchemaGenerator`
    :param urlconf: same as :class:`.OpenAPISchemaGenerator`
    :param bool public: if False, includes only the endpoints that are accessible by the user viewing the schema
    :param list validators: a list of validator names to apply; the only allowed value is ``ssv``, for now
    :param type generator_class: schema generator class to use; should be a subclass of :class:`.OpenAPISchemaGenerator`
    :param list authentication_classes: authentication classes for the schema view itself
    :param list permission_classes: permission classes for the schema view itself
    :return: SchemaView class
    :rtype: type[drf_yasg.views.SchemaView]
    Nc                 3   s    | ]}|  V  qd S r   )with_validators).0renderer)
validatorsr   r   	<genexpr>P   s    z"get_schema_view.<locals>.<genexpr>a  SwaggerJSONRenderer & SwaggerYAMLRenderer's `format` has changed to not include a `.` prefix, please silence this warning by setting `SWAGGER_USE_COMPAT_RENDERERS = False` in your Django settings and ensure your application works (check your URLCONF and swagger/redoc URLs).c                 s   s8    | ]}t |ttfrt|j|fd d|j iV  qdS )format.N)
issubclassr   r   type__name__r)   )r%   clsr   r   r   r(   Z   s    
c                       sz   e Zd ZdZdZZZ ZZZ	dfdd	Z
edd Zedd	d
Zedfdd	Zedfdd	ZdS )z#get_schema_view.<locals>.SchemaViewTN c                    sf   |j p|pd}t|jtr|  |}n	| j |g d}||| j}|d u r/t t	|S )Nr/   )patterns)
version
isinstanceaccepted_rendererr   generator_class
get_schemapublicr   PermissionDeniedr	   )selfr   r1   r)   	generatorschema)infor0   urlurlconfr   r   geti   s   z'get_schema_view.<locals>.SchemaView.getc                 S   s.   t dd|}t|fi ||}t|}|S )zOverride this method to customize how caching is applied to the view.

            Arguments described in :meth:`.as_cached_view`.
            CookieAuthorization)r   r   r#   )r.   viewcache_timeoutcache_kwargsr   r   r   apply_cacheu   s   z/get_schema_view.<locals>.SchemaView.apply_cacher   c                 [   sD   |pi }| j di |}|dkr| |||}|S |r td |S )a  
            Calls .as_view() and wraps the result in a cache_page decorator.
            See https://docs.djangoproject.com/en/dev/topics/cache/

            :param int cache_timeout: same as cache_page; set to 0 for no cache
            :param dict cache_kwargs: dictionary of kwargs to be passed to cache_page
            :param initkwargs: kwargs for .as_view()
            :return: a view instance
            r   z:cache_kwargs ignored because cache_timeout is 0 (disabled)Nr   )as_viewrD   warningswarn)r.   rB   rC   
initkwargsrA   r   r   r   as_cached_view   s   
z2get_schema_view.<locals>.SchemaView.as_cached_viewc                    s   | j || dS )a  
            Instantiate this view with just JSON and YAML renderers, optionally wrapped with cache_page.
            See https://docs.djangoproject.com/en/dev/topics/cache/.

            :param int cache_timeout: same as cache_page; set to 0 for no cache
            :param dict cache_kwargs: dictionary of kwargs to be passed to cache_page
            :return: a view instance
            renderer_classes)rI   )r.   rB   rC   _spec_renderersr   r   
without_ui   s   
z.get_schema_view.<locals>.SchemaView.without_uir   c                    s6   |t v sJ ddt  t |   }| j|||dS )a  
            Instantiate this view with a Web UI renderer, optionally wrapped with cache_page.
            See https://docs.djangoproject.com/en/dev/topics/cache/.

            :param str renderer: UI renderer; allowed values are ``swagger``, ``redoc``
            :param int cache_timeout: same as cache_page; set to 0 for no cache
            :param dict cache_kwargs: dictionary of kwargs to be passed to cache_page
            :return: a view instance
            z supported default renderers are z, rJ   )UI_RENDERERSjoinrI   )r.   r&   rB   rC   rK   rL   r   r   with_ui   s   z+get_schema_view.<locals>.SchemaView.with_ui)r/   N)r   N)r   r   N)r-   
__module____qualname___ignore_model_permissionsr:   r6   r4   authentication_classespermission_classesrK   r>   classmethodrD   rI   rN   rQ   r   )	_auth_classes_generator_class_perm_classes_publicrM   r;   r0   r<   r=   r   r   
SchemaView`   s"    

r\   )r   DEFAULT_GENERATOR_CLASSr
   DEFAULT_AUTHENTICATION_CLASSESDEFAULT_PERMISSION_CLASSESDEFAULT_INFOtupleSPEC_RENDERERSUSE_COMPAT_RENDERERSrF   rG   DeprecationWarningr   )
r;   r<   r0   r=   r6   r'   r4   rU   rV   r\   r   )
rX   rY   rZ   r[   rM   r;   r0   r<   r=   r'   r   get_schema_view6   s*   



$Ore   )	NNNNFNNNN) rF   	functoolsr   r   django.utils.cacher   django.views.decorators.cacher   django.views.decorators.varyr   rest_frameworkr   rest_framework.responser	   rest_framework.settingsr
   rest_framework.viewsr   app_settingsr   	renderersr   r   r   r   r   r   DEFAULT_SPEC_RENDERERSrb   rO   r#   re   r   r   r   r   <module>   s(     	