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/html/premium_crap/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 ƒƒ‰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 )z�Override 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(     	ýÿ