3
=^l              /   @   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l	m
Z
 ddlmZ dDdEdFdGf ddddf ddddddddddddddddddHdddd eefeefeefd!d!d!d!d!d"d#d!d$d%d&d'-ZdIZdJZd<d= Zd>d? ZG d@dA dAeZedeeZdBdC Zeje dS )Ka  
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.
    )unicode_literals)import_module)settings)setting_changed)six)ISO_8601%rest_framework.renderers.JSONRenderer-rest_framework.renderers.BrowsableAPIRenderer!rest_framework.parsers.JSONParser!rest_framework.parsers.FormParser&rest_framework.parsers.MultiPartParser3rest_framework.authentication.SessionAuthentication1rest_framework.authentication.BasicAuthentication#rest_framework.permissions.AllowAnyz4rest_framework.negotiation.DefaultContentNegotiationz&rest_framework.metadata.SimpleMetadataNz!rest_framework.schemas.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_errors*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*   PAGINATE_BYPAGINATE_BY_PARAMMAX_PAGINATE_BYc                sF   | dkrdS t | tjr"t|  S t | ttfrB 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_namer0   F/tmp/pip-build-8app2_gc/djangorestframework/rest_framework/settings.py
<listcomp>   s    z"perform_import.<locals>.<listcomp>)
isinstancer   string_typesr1   listtuple)valr4   r0   )r4   r5   perform_import   s    
r<   c             C   sj   y"| j dd\}}t|}t||S  ttfk
rd } 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)rsplitr   getattrImportErrorAttributeError	__class____name__)r;   r4   module_path
class_namemoduleemsgr0   r0   r5   r1      s    
r1   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 API 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.
    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_settingsrN   rP   r0   r0   r5   __init__   s
    

zAPISettings.__init__c             C   s   t | dsttdi | _| jS )NrL   REST_FRAMEWORK)hasattrr@   r   rL   )rS   r0   r0   r5   rT      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')	rN   rB   rT   KeyErrorrP   r<   rR   addsetattr)rS   attrr;   r0   r0   r5   __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)rS   rT   ZSETTINGS_DOCsettingr0   r0   r5   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 )NrL   )rR   delattrclearrW   )rS   r[   r0   r0   r5   reload   s
    

zAPISettings.reload)NNN)
rD   
__module____qualname____doc__rU   propertyrT   r\   rK   rb   r0   r0   r0   r5   rJ      s   

rJ   c              O   s   |d }|dkrt j  d S )Nr_   rV   )api_settingsrb   )argskwargsr_   r0   r0   r5   reload_api_settings   s    rj   )r   r	   )r
   r   r   )r   r   )r   )r   r   )r   r   r   r   r   r    r!   r"   r#   r$   r%   r+   r,   r'   r(   r)   r*   )r-   r.   r/   )re   
__future__r   	importlibr   Zdjango.confr   Zdjango.test.signalsr   Zdjango.utilsr   Zrest_frameworkr   rM   rO   r]   r<   r1   objectrJ   rg   rj   connectr0   r0   r0   r5   <module>   s                        ;