U
    8ÄT_ )  ã                   @   sÖ   d Z ddlZddlZddlZddlZddlZddlmZ ddlZddl	m
Z
 ddlmZmZ ddlmZ ddlmZ ddlmZmZ d	Zd
ZdZG dd„ deƒZG dd„ deƒZG dd„ dƒZG dd„ dƒZeƒ ZdS )zï
Settings and configuration for Django.

Read values from the module specified by the DJANGO_SETTINGS_MODULE environment
variable, and then from django.conf.global_settings; see the global_settings.py
for a list of all possible variables.
é    N)ÚPath)Úglobal_settings)ÚImproperlyConfiguredÚValidationError)ÚURLValidator)ÚRemovedInDjango40Warning)Ú
LazyObjectÚemptyZDJANGO_SETTINGS_MODULEzZThe PASSWORD_RESET_TIMEOUT_DAYS setting is deprecated. Use PASSWORD_RESET_TIMEOUT instead.z¾The DEFAULT_HASHING_ALGORITHM transitional setting is deprecated. Support for it and tokens, cookies, sessions, and signatures that use SHA-1 hashing algorithm will be removed in Django 4.0.c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚSettingsReferencez£
    String subclass which references a current settings value. It's treated as
    the value in memory but serializes to a settings.NAME attribute reference.
    c                 C   s   t  | |¡S ©N)ÚstrÚ__new__©ÚselfÚvalueÚsetting_name© r   ú8/tmp/pip-unpacked-wheel-dv63caxw/django/conf/__init__.pyr   *   s    zSettingsReference.__new__c                 C   s
   || _ d S r   )r   r   r   r   r   Ú__init__-   s    zSettingsReference.__init__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r
   %   s   r
   c                       sŽ   e Zd ZdZddd„Zdd„ Zdd„ Z‡ fd	d
„Z‡ fdd„Ze	fdd„Z
edd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZ‡  ZS )ÚLazySettingszì
    A lazy proxy for either global Django settings or a custom settings object.
    The user can manually configure settings prior to using them. Otherwise,
    Django uses the settings module pointed to by DJANGO_SETTINGS_MODULE.
    Nc                 C   s>   t j t¡}|s0|rd| nd}td|tf ƒ‚t|ƒ| _dS )zÄ
        Load the settings module pointed to by the environment variable. This
        is used the first time settings are needed, if the user hasn't
        configured settings manually.
        z
setting %sÚsettingsz™Requested %s, but settings are not configured. You must either define the environment variable %s or call settings.configure() before accessing settings.N)ÚosÚenvironÚgetÚENVIRONMENT_VARIABLEr   ÚSettingsÚ_wrapped)r   ÚnameÚsettings_moduleÚdescr   r   r   Ú_setup7   s    ýÿzLazySettings._setupc                 C   s   | j tkrdS dd| j ji S )Nz<LazySettings [Unevaluated]>z$<LazySettings "%(settings_module)s">r"   )r    r	   ÚSETTINGS_MODULE©r   r   r   r   Ú__repr__H   s    
 ÿzLazySettings.__repr__c                 C   s.   | j tkr|  |¡ t| j |ƒ}|| j|< |S )z<Return the value of a setting and cache it in self.__dict__.)r    r	   r$   ÚgetattrÚ__dict__)r   r!   Úvalr   r   r   Ú__getattr__P   s
    


zLazySettings.__getattr__c                    s4   |dkr| j  ¡  n| j  |d¡ tƒ  ||¡ dS )zŸ
        Set the value of setting. Clear all cached values if _wrapped changes
        (@override_settings does this) or clear single values when set.
        r    N)r)   ÚclearÚpopÚsuperÚ__setattr__©r   r!   r   ©Ú	__class__r   r   r/   X   s    zLazySettings.__setattr__c                    s   t ƒ  |¡ | j |d¡ dS )z3Delete a setting and clear it from cache if needed.N)r.   Ú__delattr__r)   r-   ©r   r!   r1   r   r   r3   c   s    zLazySettings.__delattr__c                 K   sV   | j tk	rtdƒ‚t|ƒ}| ¡ D ](\}}| ¡ s>td| ƒ‚t|||ƒ q"|| _ dS )zÜ
        Called to manually configure the settings. The 'default_settings'
        parameter sets where to retrieve any unspecified values from (its
        argument must support attribute access (__getattr__)).
        zSettings already configured.zSetting %r must be uppercase.N)r    r	   ÚRuntimeErrorÚUserSettingsHolderÚitemsÚisupperÚ	TypeErrorÚsetattr)r   Údefault_settingsÚoptionsZholderr!   r   r   r   r   Ú	configureh   s    
zLazySettings.configurec              	   C   sR   zt ƒ | ƒ | W S  ttfk
r(   Y nX |  d¡r8| S ddlm} d|ƒ | f S )zÕ
        Add SCRIPT_NAME prefix to relative paths.

        Useful when the app is being served at a subpath and manually prefixing
        subpath to STATIC_URL and MEDIA_URL in settings is inconvenient.
        ú/r   )Úget_script_prefixz%s%s)r   r   ÚAttributeErrorÚ
startswithZdjango.urlsr?   )r   r?   r   r   r   Ú_add_script_prefixw   s    	

zLazySettings._add_script_prefixc                 C   s
   | j tk	S )z9Return True if the settings have already been configured.)r    r	   r&   r   r   r   Ú
configured‹   s    zLazySettings.configuredc                 C   sF   t  ¡ }|d \}}}}| tj tj¡¡s<tj	t
tdd� |  d¡S )Néþÿÿÿé   )Ú
stacklevelÚPASSWORD_RESET_TIMEOUT_DAYS)Ú	tracebackÚextract_stackrA   r   ÚpathÚdirnameÚdjangoÚ__file__ÚwarningsÚwarnÚ*PASSWORD_RESET_TIMEOUT_DAYS_DEPRECATED_MSGr   r+   )r   ÚstackÚfilenameÚ_r   r   r   rG   �   s    ýz(LazySettings.PASSWORD_RESET_TIMEOUT_DAYSc                 C   s   |   |  d¡¡S )NÚ
STATIC_URL©rB   r+   r&   r   r   r   rT   ž   s    zLazySettings.STATIC_URLc                 C   s   |   |  d¡¡S )NÚ	MEDIA_URLrU   r&   r   r   r   rV   ¢   s    zLazySettings.MEDIA_URL)N)r   r   r   r   r$   r'   r+   r/   r3   r   r=   ÚstaticmethodrB   ÚpropertyrC   rG   rT   rV   Ú__classcell__r   r   r1   r   r   1   s"   




r   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )r   c                 C   sp  t tƒD ]}| ¡ rt| |tt|ƒƒ q|| _t | j¡}d}tƒ | _	t |ƒD ]P}| ¡ rNt||ƒ}||kr†t
|ttfƒs†td| ƒ‚t| ||ƒ | j	 |¡ qN| js®tdƒ‚|  d¡rð|  d¡rÊtdƒ‚t| d| jd d d ƒ t tt¡ |  d	¡�rt tt¡ ttd
ƒ�rl| j�rltdƒ}|j| j d¡Ž }| ¡ �rX| ¡ �sXtd| j ƒ‚| jtj d< t !¡  d S )N)ZINSTALLED_APPSZTEMPLATE_DIRSZLOCALE_PATHSz*The %s setting must be a list or a tuple. z)The SECRET_KEY setting must not be empty.rG   ÚPASSWORD_RESET_TIMEOUTzJPASSWORD_RESET_TIMEOUT_DAYS/PASSWORD_RESET_TIMEOUT are mutually exclusive.é<   é   ÚDEFAULT_HASHING_ALGORITHMÚtzsetz/usr/share/zoneinfor>   zIncorrect timezone setting: %sZTZ)"Údirr   r8   r:   r(   r%   Ú	importlibÚimport_moduleÚsetÚ_explicit_settingsÚ
isinstanceÚlistÚtupler   ÚaddZ
SECRET_KEYÚis_overriddenrG   rN   rO   rP   r   Ú(DEFAULT_HASHING_ALGORITHM_DEPRECATED_MSGÚhasattrÚtimeZ	TIME_ZONEr   ÚjoinpathÚsplitÚexistsÚ
ValueErrorr   r   r^   )r   r"   ÚsettingÚmodZtuple_settingsZsetting_valueZzoneinfo_rootZzone_info_filer   r   r   r   ¨   sD    
ÿ

ÿzSettings.__init__c                 C   s
   || j kS r   )rc   )r   rp   r   r   r   rh   Þ   s    zSettings.is_overriddenc                 C   s   d| j j| jdœ S )Nz<%(cls)s "%(settings_module)s">)Úclsr"   )r2   r   r%   r&   r   r   r   r'   á   s    þzSettings.__repr__N)r   r   r   r   rh   r'   r   r   r   r   r   §   s   6r   c                       sX   e Zd ZdZdZdd„ Zdd„ Z‡ fdd„Z‡ fd	d
„Zdd„ Z	dd„ Z
dd„ Z‡  ZS )r6   z$Holder for user configured settings.Nc                 C   s   t ƒ | jd< || _dS )z›
        Requests for configuration variables not in this class are satisfied
        from the module specified in default_settings (if possible).
        Ú_deletedN)rb   r)   r;   )r   r;   r   r   r   r   î   s    zUserSettingsHolder.__init__c                 C   s"   |  ¡ r|| jkrt‚t| j|ƒS r   )r8   rs   r@   r(   r;   r4   r   r   r   r+   ö   s    zUserSettingsHolder.__getattr__c                    s^   | j  |¡ |dkr8t| d|d d d ƒ t tt¡ |dkrLt tt¡ tƒ  	||¡ d S )NrG   rZ   r[   r\   r]   )
rs   Údiscardr:   rN   rO   rP   r   ri   r.   r/   r0   r1   r   r   r/   û   s    zUserSettingsHolder.__setattr__c                    s&   | j  |¡ t| |ƒr"tƒ  |¡ d S r   )rs   rg   rj   r.   r3   r4   r1   r   r   r3     s    
zUserSettingsHolder.__delattr__c                    s"   t ‡ fdd„ˆ jtˆ jƒ•D ƒƒS )Nc                 3   s   | ]}|ˆ j kr|V  qd S r   )rs   )Ú.0Úsr&   r   r   Ú	<genexpr>
  s   
ÿz-UserSettingsHolder.__dir__.<locals>.<genexpr>)Úsortedr)   r_   r;   r&   r   r&   r   Ú__dir__	  s    ÿzUserSettingsHolder.__dir__c                 C   s6   || j k}|| jk}t| jddd„ ƒ|ƒ}|p4|p4|S )Nrh   c                 S   s   dS )NFr   )rv   r   r   r   Ú<lambda>  ó    z2UserSettingsHolder.is_overridden.<locals>.<lambda>)rs   r)   r(   r;   )r   rp   ZdeletedZset_locallyZset_on_defaultr   r   r   rh     s    

z UserSettingsHolder.is_overriddenc                 C   s   dd| j ji S )Nz	<%(cls)s>rr   )r2   r   r&   r   r   r   r'     s     ÿzUserSettingsHolder.__repr__)r   r   r   r   r%   r   r+   r/   r3   ry   rh   r'   rY   r   r   r1   r   r6   è   s   	r6   )r   r`   r   rk   rH   rN   Úpathlibr   rL   Zdjango.confr   Zdjango.core.exceptionsr   r   Zdjango.core.validatorsr   Zdjango.utils.deprecationr   Zdjango.utils.functionalr   r	   r   rP   ri   r   r
   r   r   r6   r   r   r   r   r   Ú<module>   s,   ÿÿvA3