3
Ah`€  ã            /   @   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j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"   úF/tmp/pip-build-9m32_hle/djangorestframework/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   sL   yt | ƒS  tk
rF } z"d| ||jj|f }t|ƒ‚W Y dd}~X 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| j |ƒ| _|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_settingsr8   r:   r"   r"   r'   Ú__init__Ç   s
    

zAPISettings.__init__c             C   s   t | dƒsttdi ƒ| _| jS )Nr6   ÚREST_FRAMEWORK)ÚhasattrÚgetattrr   r6   )r=   r"   r"   r'   r>   Î   s    
zAPISettings.user_settingsc             C   st   || j krtd| ƒ‚y| j| }W n tk
rB   | j | }Y nX || jkrXt||ƒ}| jj|ƒ t| ||ƒ |S )NzInvalid API setting: '%s')	r8   ÚAttributeErrorr>   ÚKeyErrorr:   r.   r<   ÚaddÚsetattr)r=   Úattrr-   r"   r"   r'   Ú__getattr__Ô   s    


zAPISettings.__getattr__c             C   s.   d}x$t D ]}||kr
td||f ƒ‚q
W |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   s<   x| j D ]}t| |ƒ qW | j jƒ  t| dƒr8t| dƒ d S )Nr6   )r<   ÚdelattrÚclearrA   )r=   rG   r"   r"   r'   Úreloadï   s
    

zAPISettings.reload)NNN)
r1   Ú
__module__Ú__qualname__Ú__doc__r?   Úpropertyr>   rH   r5   rN   r"   r"   r"   r'   r4   ·   s   
r4   c              O   s   |d }|dkrt jƒ  d S )NrK   r@   )Úapi_settingsrN   )ÚargsÚkwargsrK   r"   r"   r'   Úreload_api_settingsú   s    rV   )rQ   Zdjango.confr   Zdjango.test.signalsr   Zdjango.utils.module_loadingr   Zrest_frameworkr   r7   r9   rI   r.   r#   r4   rS   rV   Úconnectr"   r"   r"   r'   Ú<module>   s    
@