U
    Ú²g  ã                /   @   s*  d Z ddlmZ ddlmZ ddlmZ ddlmZ ddgdd	d
gddgdgg ddddg ddddœdddddddddddddddgddddeegeegeegdddddd d!dd"d#d$œd%œ-Z	d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6gZ
d7d8d9gZd:d;„ Zd<d=„ ZG d>d?„ d?ƒZede	e
ƒZd@dA„ Ze e¡ dS )Ba”  
Settings for REST framework are all namespaced in the REST_FRAMEWORK setting.
For example your project's `settings.py` file might look like this:

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': [
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.TemplateHTMLRenderer',
    ],
    'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.JSONParser',
        'rest_framework.parsers.FormParser',
        'rest_framework.parsers.MultiPartParser',
    ],
}

This module provides the `api_setting` object, that is used to access
REST framework settings, checking for user settings first, then falling
back to the defaults.
é    )Úsettings)Úsetting_changed)Úimport_string)ÚISO_8601z%rest_framework.renderers.JSONRendererz-rest_framework.renderers.BrowsableAPIRendererz!rest_framework.parsers.JSONParserz!rest_framework.parsers.FormParserz&rest_framework.parsers.MultiPartParserz3rest_framework.authentication.SessionAuthenticationz1rest_framework.authentication.BasicAuthenticationz#rest_framework.permissions.AllowAnyz4rest_framework.negotiation.DefaultContentNegotiationz&rest_framework.metadata.SimpleMetadataNz)rest_framework.schemas.openapi.AutoSchema)ÚuserZanonÚsearchZorderingÚversionz(django.contrib.auth.models.AnonymousUserz"rest_framework.views.get_view_namez)rest_framework.views.get_view_descriptionz&rest_framework.views.exception_handlerZnon_field_errorsz*rest_framework.renderers.MultiPartRendererÚ	multipartÚformatÚurlTiè  zMore than {count} items...ÚreadÚdelete)ÚretrieveÚdestroy)-ÚDEFAULT_RENDERER_CLASSESÚDEFAULT_PARSER_CLASSESÚDEFAULT_AUTHENTICATION_CLASSESÚDEFAULT_PERMISSION_CLASSESÚDEFAULT_THROTTLE_CLASSESÚ!DEFAULT_CONTENT_NEGOTIATION_CLASSÚDEFAULT_METADATA_CLASSÚDEFAULT_VERSIONING_CLASSÚDEFAULT_PAGINATION_CLASSÚDEFAULT_FILTER_BACKENDSÚDEFAULT_SCHEMA_CLASSZDEFAULT_THROTTLE_RATESZNUM_PROXIESZ	PAGE_SIZEZSEARCH_PARAMZORDERING_PARAMÚDEFAULT_VERSIONZALLOWED_VERSIONSZVERSION_PARAMÚUNAUTHENTICATED_USERÚUNAUTHENTICATED_TOKENÚVIEW_NAME_FUNCTIONÚVIEW_DESCRIPTION_FUNCTIONÚEXCEPTION_HANDLERZNON_FIELD_ERRORS_KEYÚTEST_REQUEST_RENDERER_CLASSESZTEST_REQUEST_DEFAULT_FORMATZURL_FORMAT_OVERRIDEZFORMAT_SUFFIX_KWARGZURL_FIELD_NAMEZDATE_FORMATZDATE_INPUT_FORMATSZDATETIME_FORMATZDATETIME_INPUT_FORMATSZTIME_FORMATZTIME_INPUT_FORMATSZUNICODE_JSONZCOMPACT_JSONZSTRICT_JSONZCOERCE_DECIMAL_TO_STRINGZUPLOADED_FILES_USE_URLZHTML_SELECT_CUTOFFZHTML_SELECT_CUTOFF_TEXTZSCHEMA_COERCE_PATH_PKZSCHEMA_COERCE_METHOD_NAMESr   r   r   r   r   r   r   r   r   r   r   r    r!   r   r   r   r   ZPAGINATE_BYZPAGINATE_BY_PARAMZMAX_PAGINATE_BYc                    sD   | dkrdS t | tƒr t| ˆ ƒS t | ttfƒr@‡ fdd„| D ƒS | S )zm
    If the given setting is a string import notation,
    then perform the necessary import or imports.
    Nc                    s   g | ]}t |ˆ ƒ‘qS © )Úimport_from_string)Ú.0Úitem©Úsetting_namer"   ú;/tmp/pip-unpacked-wheel-11h17kvo/rest_framework/settings.pyÚ
<listcomp>ª   s     z"perform_import.<locals>.<listcomp>)Ú
isinstanceÚstrr#   ÚlistÚtuple)Úvalr'   r"   r&   r(   Úperform_import    s    

r/   c              
   C   sN   z
t | ƒW S  tk
rH } z d| ||jj|f }t|ƒ‚W 5 d}~X Y nX dS )zA
    Attempt to import a class from a string representation.
    z3Could not import '%s' for API setting '%s'. %s: %s.N)r   ÚImportErrorÚ	__class__Ú__name__)r.   r'   ÚeÚmsgr"   r"   r(   r#   ®   s
    
r#   c                   @   s>   e Zd ZdZddd„Zedd„ ƒZdd„ Zd	d
„ Zdd„ Z	dS )ÚAPISettingsaV  
    A settings object that allows REST Framework settings to be accessed as
    properties. For example:

        from rest_framework.settings import api_settings
        print(api_settings.DEFAULT_RENDERER_CLASSES)

    Any setting with string import paths will be automatically resolved
    and return the class, rather than the string literal.

    Note:
    This is an internal class that is only compatible with settings namespaced
    under the REST_FRAMEWORK name. It is not intended to be used by 3rd-party
    apps, and test helpers like `override_settings` may not work as expected.
    Nc                 C   s0   |r|   |¡| _|pt| _|p t| _tƒ | _d S )N)Ú!_APISettings__check_user_settingsÚ_user_settingsÚDEFAULTSÚdefaultsÚIMPORT_STRINGSÚimport_stringsÚsetÚ_cached_attrs)ÚselfÚuser_settingsr9   r;   r"   r"   r(   Ú__init__É   s
    

zAPISettings.__init__c                 C   s   t | dƒsttdi ƒ| _| jS )Nr7   ÚREST_FRAMEWORK)ÚhasattrÚgetattrr   r7   )r>   r"   r"   r(   r?   Ð   s    
zAPISettings.user_settingsc                 C   st   || j krtd| ƒ‚z| j| }W n tk
rB   | j | }Y nX || jkrXt||ƒ}| j |¡ t| ||ƒ |S )NzInvalid API setting: '%s')	r9   ÚAttributeErrorr?   ÚKeyErrorr;   r/   r=   ÚaddÚsetattr)r>   Úattrr.   r"   r"   r(   Ú__getattr__Ö   s    


zAPISettings.__getattr__c                 C   s*   d}t D ]}||krtd||f ƒ‚q|S )Nz9https://www.django-rest-framework.org/api-guide/settings/zOThe '%s' setting has been removed. Please refer to '%s' for available settings.)ÚREMOVED_SETTINGSÚRuntimeError)r>   r?   ZSETTINGS_DOCÚsettingr"   r"   r(   Z__check_user_settingsê   s
    z!APISettings.__check_user_settingsc                 C   s8   | j D ]}t| |ƒ q| j  ¡  t| dƒr4t| dƒ d S )Nr7   )r=   ÚdelattrÚclearrB   )r>   rH   r"   r"   r(   Úreloadñ   s
    


zAPISettings.reload)NNN)
r2   Ú
__module__Ú__qualname__Ú__doc__r@   Úpropertyr?   rI   r6   rO   r"   r"   r"   r(   r5   ¹   s   

r5   c                  O   s   |d }|dkrt  ¡  d S )NrL   rA   )Úapi_settingsrO   )ÚargsÚkwargsrL   r"   r"   r(   Úreload_api_settingsü   s    rW   )rR   Zdjango.confr   Zdjango.core.signalsr   Zdjango.utils.module_loadingr   Zrest_frameworkr   r8   r:   rJ   r/   r#   r5   rT   rW   Úconnectr"   r"   r"   r(   Ú<module>   s¸   þýþÿþþþ iï  ÿ@