a
    Cø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g d¢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	g d$¢Z
g d%¢Zd&d'„ Zd(d)„ ZG d*d+„ d+ƒZede	e
ƒZd,d-„ Ze e¡ dS ).a”  
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.BrowsableAPIRenderer)z!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_NAMES)r   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u 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"   úV/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/rest_framework/settings.pyÚ
<listcomp>ª   ó    z"perform_import.<locals>.<listcomp>)Ú
isinstanceÚstrr#   ÚlistÚtuple)Úvalr'   r"   r&   r(   Úperform_import    s    

r0   c              
   C   sP   z
t | ƒW S  tyJ } z(d| ||jj|f }t|ƒ‚W Y d}~n
d}~0 0 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_settingsr:   r<   r"   r"   r(   Ú__init__É   s
    

zAPISettings.__init__c                 C   s   t | dƒsttdi ƒ| _| jS )Nr8   ÚREST_FRAMEWORK)ÚhasattrÚgetattrr   r8   )r?   r"   r"   r(   r@   Ð   s    
zAPISettings.user_settingsc                 C   sr   || j vrtd| ƒ‚z| j| }W n ty@   | j | }Y n0 || jv rVt||ƒ}| j |¡ t| ||ƒ |S )NzInvalid API setting: '%s')	r:   ÚAttributeErrorr@   ÚKeyErrorr<   r0   r>   ÚaddÚsetattr)r?   Úattrr/   r"   r"   r(   Ú__getattr__Ö   s    


zAPISettings.__getattr__c                 C   s*   d}t D ]}||v 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 )Nr8   )r>   ÚdelattrÚclearrC   )r?   rI   r"   r"   r(   Úreloadñ   s
    


zAPISettings.reload)NNN)
r3   Ú
__module__Ú__qualname__Ú__doc__rA   Úpropertyr@   rJ   r7   rP   r"   r"   r"   r(   r6   ¹   s   

r6   c                  O   s   |d }|dkrt  ¡  d S )NrM   rB   )Úapi_settingsrP   )ÚargsÚkwargsrM   r"   r"   r(   Úreload_api_settingsü   s    rX   )rS   Zdjango.confr   Zdjango.core.signalsr   Zdjango.utils.module_loadingr   Zrest_frameworkr   r9   r;   rK   r0   r#   r6   rU   rX   Úconnectr"   r"   r"   r(   Ú<module>   sŠ   þþÿþþþ h@