B
    CVvg)  ã               @   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 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)Ú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-install-o3oxmrkh/Django/django/conf/__init__.pyr
   )   s    zSettingsReference.__new__c             C   s
   || _ d S )N)r   )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                   sv   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‡  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   Ú_setup6   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__G   s    
zLazySettings.__repr__c             C   s^   | j tkr|  |¡ t| j |ƒ}|dkr<|dk	r<|  |¡}n|dkrP|sPtdƒ‚|| j|< |S )z<Return the value of a setting and cache it in self.__dict__.>   Ú	MEDIA_URLÚ
STATIC_URLNZ
SECRET_KEYz)The SECRET_KEY setting must not be empty.)r   r   r    ÚgetattrÚ_add_script_prefixr   Ú__dict__)r   r   Úvalr   r   r   Ú__getattr__O   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-   _   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   )r.   r   r   r/   j   s    zLazySettings.__delattr__c             K   sZ   | j tk	rtdƒ‚t|ƒ}x4| ¡ D ](\}}| ¡ s@td| ƒ‚t|||ƒ q$W || _ 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   Ú	configureo   s    
zLazySettings.configurec             C   s(   |   d¡r| 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.
        )zhttp://zhttps://ú/r   )Úget_script_prefixz%s%s)Ú
startswithZdjango.urlsr:   )r   r:   r   r   r   r&   ~   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_stackr;   r   ÚpathÚdirnameÚdjangoÚ__file__ÚwarningsÚwarnÚ*PASSWORD_RESET_TIMEOUT_DAYS_DEPRECATED_MSGr   r)   )r   ÚstackÚfilenameÚ_r   r   r   r@   ‘   s    z(LazySettings.PASSWORD_RESET_TIMEOUT_DAYS)N)r   r   r   r   r    r"   r)   r-   r/   r   r8   Ústaticmethodr&   Úpropertyr<   r@   Ú__classcell__r   r   )r.   r   r   0   s   
r   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )r   c             C   sj  x*t tƒD ]}| ¡ r
t| |tt|ƒƒ q
W || _t | j¡}d}tƒ | _	x\t |ƒD ]P}| ¡ rTt||ƒ}||krŒt
|ttfƒsŒtd| ƒ‚t| ||ƒ | j	 |¡ qTW |  d¡rê|  d¡rÄtdƒ‚t| d| jd d d ƒ t tt¡ |  d¡�rt tt¡ ttd	ƒ�rf| j�rftd
ƒ}|j| j d¡Ž }| ¡ �rR| ¡ �sRt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. r@   ÚPASSWORD_RESET_TIMEOUTzJPASSWORD_RESET_TIMEOUT_DAYS/PASSWORD_RESET_TIMEOUT are mutually exclusive.é<   é   ÚDEFAULT_HASHING_ALGORITHMÚtzsetz/usr/share/zoneinfor9   zIncorrect timezone setting: %sZTZ)!Údirr   r3   r5   r%   r!   Ú	importlibÚimport_moduleÚsetÚ_explicit_settingsÚ
isinstanceÚlistÚtupler   ÚaddÚis_overriddenr@   rG   rH   rI   r   Ú(DEFAULT_HASHING_ALGORITHM_DEPRECATED_MSGÚhasattrÚtimeZ	TIME_ZONEr   ZjoinpathÚsplitÚexistsÚ
ValueErrorr   r   rT   )r   r   ÚsettingÚmodZtuple_settingsZsetting_valueZzoneinfo_rootZzone_info_filer   r   r   r   ¡   s<    


zSettings.__init__c             C   s
   || j kS )N)rY   )r   re   r   r   r   r^   Ô   s    zSettings.is_overriddenc             C   s   d| j j| jdœ S )Nz<%(cls)s "%(settings_module)s">)Úclsr   )r.   r   r!   )r   r   r   r   r"   ×   s    zSettings.__repr__N)r   r   r   r   r^   r"   r   r   r   r   r       s   3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 )r1   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)rX   r'   r6   )r   r6   r   r   r   r   ä   s    zUserSettingsHolder.__init__c             C   s"   |  ¡ r|| jkrt‚t| j|ƒS )N)r3   rh   ÚAttributeErrorr%   r6   )r   r   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 )Nr@   rP   rQ   rR   rS   )
rh   Údiscardr5   rG   rH   rI   r   r_   r,   r-   )r   r   r   )r.   r   r   r-   ñ   s    zUserSettingsHolder.__setattr__c                s&   | j  |¡ t| |ƒr"tƒ  |¡ d S )N)rh   r]   r`   r,   r/   )r   r   )r.   r   r   r/   ú   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 )N)rh   )Ú.0Ús)r   r   r   ú	<genexpr>  s    z-UserSettingsHolder.__dir__.<locals>.<genexpr>)Úsortedr'   rU   r6   )r   r   )r   r   Ú__dir__ÿ   s    zUserSettingsHolder.__dir__c             C   s6   || j k}|| jk}t| jddd„ ƒ|ƒ}|p4|p4|S )Nr^   c             S   s   dS )NFr   )rl   r   r   r   Ú<lambda>  ó    z2UserSettingsHolder.is_overridden.<locals>.<lambda>)rh   r'   r%   r6   )r   re   ZdeletedZset_locallyZset_on_defaultr   r   r   r^     s    

z UserSettingsHolder.is_overriddenc             C   s   dd| j ji S )Nz	<%(cls)s>rg   )r.   r   )r   r   r   r   r"     s    zUserSettingsHolder.__repr__)r   r   r   r   r!   r   r)   r-   r/   ro   r^   r"   rO   r   r   )r.   r   r1   Þ   s   	r1   )r   rV   r   ra   rA   rG   Zpathlibr   rE   Zdjango.confr   Zdjango.core.exceptionsr   Zdjango.utils.deprecationr   Zdjango.utils.functionalr   r   r   rI   r_   r	   r   r   r   r1   r   r   r   r   r   Ú<module>   s&   p>3