o
    |l~i                     @   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 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SwaggerUIRenderer_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   U/var/www/newdalilibackend/backend/venv/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 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>N   s    z"get_schema_view.<locals>.<genexpr>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   r)   format	generatorschema)infor(   urlurlconfr   r   getY   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!   )clsviewcache_timeoutcache_kwargsr   r   r   apply_cachee   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_viewr>   warningswarn)r:   r<   r=   
initkwargsr;   r   r   r   as_cached_viewp   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)rC   )r:   r<   r=   _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, rD   )UI_RENDERERSjoinrC   )r:   r$   r<   r=   rE   rF   r   r   with_ui   s   z+get_schema_view.<locals>.SchemaView.with_ui)r'   N)r   N)r   r   N)__name__
__module____qualname___ignore_model_permissionsr3   r.   r,   authentication_classespermission_classesrE   r7   classmethodr>   rC   rH   rK   r   )	_auth_classes_generator_class_perm_classes_publicrG   r4   r(   r5   r6   r   r   
SchemaViewP   s"    

rW   )	r   DEFAULT_GENERATOR_CLASSr
   DEFAULT_AUTHENTICATION_CLASSESDEFAULT_PERMISSION_CLASSESDEFAULT_INFOtupleSPEC_RENDERERSr   )
r4   r5   r(   r6   r.   r%   r,   rP   rQ   rW   r   )
rS   rT   rU   rV   rG   r4   r(   r5   r6   r%   r   get_schema_view4   s   

$Or^   )	NNNNFNNNN)r@   	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   DEFAULT_SPEC_RENDERERSr]   rI   r!   r^   r   r   r   r   <module>   s(    