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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   V/var/www/html/magazine_api/magazine_env/lib/python3.10/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 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 accesible 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 tuple authentication_classes: authentication classes for the schema view itself
    :param tuple 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   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
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                 [   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   )Zas_viewr;   warningswarn)r7   r9   r:   Z
initkwargsr8   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>   )r7   r9   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>   )r7   r$   r9   r:   r@   rA   r   r   with_ui   s   z+get_schema_view.<locals>.SchemaView.with_ui)r'   N)r   N)r   r   N)__name__
__module____qualname__Z_ignore_model_permissionsr0   r,   r+   authentication_classespermission_classesr@   r4   classmethodr;   r>   rC   rF   r   )	_auth_classes_generator_class_perm_classes_publicrB   r1   r(   r2   r3   r   r   
SchemaViewN   s"    

rQ   )	r   ZDEFAULT_GENERATOR_CLASSr
   ZDEFAULT_AUTHENTICATION_CLASSESZDEFAULT_PERMISSION_CLASSESZDEFAULT_INFOtupleSPEC_RENDERERSr   )
r1   r2   r(   r3   r,   r%   r+   rJ   rK   rQ   r   )
rM   rN   rO   rP   rB   r1   r(   r2   r3   r%   r   get_schema_view2   s   

$OrT   )	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   rS   rD   r"   rT   r   r   r   r   <module>   s(    $
