a
    ΝGd                  	   @   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mZ eeef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)OpenAPIRendererReDocOldRendererReDocRendererSwaggerJSONRendererSwaggerUIRendererSwaggerYAMLRenderer_SpecRenderer)swaggerZ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   J/var/www/html/django/DPS/env/lib/python3.9/site-packages/drf_yasg/views.pycallback(   s    zBdeferred_never_cache.<locals>._wrapped_view_func.<locals>.callback)Z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 r2tjp:t j	pBg 	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   )Zwith_validators).0renderer)
validatorsr   r   	<genexpr>L       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
isinstanceZaccepted_rendererr   generator_classZ
get_schemapublicr   ZPermissionDeniedr	   )selfr   r*   format	generatorschema)infor)   urlurlconfr   r   getW   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_cachec   s    z/get_schema_view.<locals>.SchemaView.apply_cacher   c                 [   sB   |pi }| j f i |}|dkr0| |||}n|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))Zas_viewr<   warningswarn)r8   r:   r;   Z
initkwargsr9   r   r   r   as_cached_viewn   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)r?   )r8   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, r@   )UI_RENDERERSjoinr?   )r8   r$   r:   r;   rA   rB   r   r   with_ui   s    z+get_schema_view.<locals>.SchemaView.with_ui)r(   N)r   N)r   N)r   r   N)__name__
__module____qualname__Z_ignore_model_permissionsr1   r-   r,   authentication_classespermission_classesrA   r5   classmethodr<   r?   rD   rG   r   )	_auth_classes_generator_class_perm_classes_publicrC   r2   r)   r3   r4   r   r   
SchemaViewN   s    

rR   )	r   ZDEFAULT_GENERATOR_CLASSr
   ZDEFAULT_AUTHENTICATION_CLASSESZDEFAULT_PERMISSION_CLASSESZDEFAULT_INFOtupleSPEC_RENDERERSr   )
r2   r3   r)   r4   r-   r%   r,   rK   rL   rR   r   )
rN   rO   rP   rQ   rC   r2   r)   r3   r4   r%   r   get_schema_view2   s    

$OrU   )	NNNNFNNNN) r=   	functoolsr   r   Zdjango.utils.cacher   Zdjango.views.decorators.cacher   Zdjango.views.decorators.varyr   Zrest_frameworkr   Zrest_framework.responser	   Zrest_framework.settingsr
   Zrest_framework.viewsr   Zapp_settingsr   Z	renderersr   r   r   r   r   r   r   rT   rE   r"   rU   r   r   r   r   <module>   s&   $
  