B
    ¡0H[  ã               @   s’   d 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mZ ddl	m
Z
 ddlmZmZ d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)Úglobal_settings)ÚImproperlyConfigured)ÚRemovedInDjango30Warning)Ú
LazyObjectÚemptyZDJANGO_SETTINGS_MODULEc                   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‡  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)ÚselfÚnameÚsettings_moduleÚdesc© r   úXC:\Users\HIRONO~1\AppData\Local\Temp\pip-install-6bm3nxem\django\django\conf\__init__.pyÚ_setup   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__-   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__5   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   Úvalue)Ú	__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"   H   s    zLazySettings.__delattr__c             K   sF   | j tk	rtdƒ‚t|ƒ}x | ¡ 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.N)r   r   ÚRuntimeErrorÚUserSettingsHolderÚitemsÚsetattr)r   Údefault_settingsÚoptionsZholderr   r    r   r   r   Ú	configureM   s    
zLazySettings.configurec             C   s
   | j tk	S )z9Return True if the settings have already been configured.)r   r   )r   r   r   r   Ú
configuredZ   s    zLazySettings.configured)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r"   r   r)   Úpropertyr*   Ú__classcell__r   r   )r!   r   r      s   
r   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )r   c             C   s<  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 | js¶tdƒ‚|  d¡rÌt dt¡ ttdƒ�r8| j�r8d}tj |¡�r$tj tjj|f| j d¡žŽ ¡�s$t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.ÚDEFAULT_CONTENT_TYPEz/The DEFAULT_CONTENT_TYPE setting is deprecated.Útzsetz/usr/share/zoneinfoú/zIncorrect timezone setting: %sZTZ)Údirr   Úisupperr&   r   r   Ú	importlibÚimport_moduleÚsetÚ_explicit_settingsÚ
isinstanceÚlistÚtupler   ÚaddZ
SECRET_KEYÚis_overriddenÚwarningsÚwarnr   ÚhasattrÚtimeZ	TIME_ZONEr	   ÚpathÚexistsÚjoinÚsplitÚ
ValueErrorr
   r2   )r   r   ÚsettingÚmodZtuple_settingsZsetting_valueZzoneinfo_rootr   r   r   Ú__init__a   s4    

$zSettings.__init__c             C   s
   || j kS )N)r9   )r   rH   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-   rJ   r>   r   r   r   r   r   r   `   s   -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 )r$   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)r8   r   r'   )r   r'   r   r   r   rJ   ž   s    zUserSettingsHolder.__init__c             C   s   || j krt‚t| j|ƒS )N)rL   ÚAttributeErrorr   r'   )r   r   r   r   r   r   ¦   s    
zUserSettingsHolder.__getattr__c                s2   | j  |¡ |dkr t dt¡ tƒ  ||¡ d S )Nr1   z/The DEFAULT_CONTENT_TYPE setting is deprecated.)rL   Údiscardr?   r@   r   r   r   )r   r   r    )r!   r   r   r   «   s    zUserSettingsHolder.__setattr__c                s&   | j  |¡ t| |ƒr"tƒ  |¡ d S )N)rL   r=   rA   r   r"   )r   r   )r!   r   r   r"   ±   s    
zUserSettingsHolder.__delattr__c                s&   t ‡ fdd„tˆ jƒtˆ jƒ D ƒƒS )Nc             3   s   | ]}|ˆ j kr|V  qd S )N)rL   )Ú.0Ús)r   r   r   ú	<genexpr>¸   s    z-UserSettingsHolder.__dir__.<locals>.<genexpr>)Úsortedr;   r   r4   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 )Nr>   c             S   s   dS )NFr   )rP   r   r   r   Ú<lambda>¿   s    z2UserSettingsHolder.is_overridden.<locals>.<lambda>)rL   r   r   r'   )r   rH   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>rK   )r!   r+   )r   r   r   r   r   Â   s    zUserSettingsHolder.__repr__)r+   r,   r-   r.   r   rJ   r   r   r"   rS   r>   r   r0   r   r   )r!   r   r$   ˜   s   r$   )r.   r6   r	   rB   r?   Zdjango.confr   Zdjango.core.exceptionsr   Zdjango.utils.deprecationr   Zdjango.utils.functionalr   r   r   r   r   r$   r   r   r   r   r   Ú<module>   s   J80