3
[-                 @   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 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)Path)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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settingszRequested %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   8/tmp/pip-install-j7i95hgp/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| j| 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__6   s
    


zLazySettings.__getattr__c                s4   |dkr| j j  n| j j|d t j|| 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| | j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#   I   s    zLazySettings.__delattr__c             K   sF   | j tk	rtdt|}x |j 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   	configureN   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   
configured[   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   s6  x*t tD ]}|j r
t| |tt| q
W || _tj| j}d}t | _	x^t |D ]R}|j rTt||}||krt
|ttf rtd| t| || | j	j| qTW | jstd| jdrtjdt ttdo| jr2td	}|j| jjd
 }|j r|j  rtd| j | jtjd< tj  d S )NINSTALLED_APPSTEMPLATE_DIRS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)r2   r3   r4   )dirr   isupperr'   r   r   	importlibimport_moduleset_explicit_settings
isinstancelisttupler   addZ
SECRET_KEYis_overriddenwarningswarnr   hasattrtimeZ	TIME_ZONEr   Zjoinpathsplitexists
ValueErrorr
   r   r6   )r   r   settingmodZtuple_settingsZsetting_valueZzoneinfo_rootZzone_info_filer   r   r   __init__b   s8      

zSettings.__init__c             C   s
   || j kS )N)r=   )r   rJ   r   r   r   rB      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.   rL   rB   r   r   r   r   r   r   a   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)r<   r   r(   )r   r(   r   r   r   rL      s    zUserSettingsHolder.__init__c             C   s   || j krtt| j|S )N)rN   AttributeErrorr   r(   )r   r   r   r   r   r      s    
zUserSettingsHolder.__getattr__c                s2   | j j| |dkr tjdt t j|| d S )Nr5   z/The DEFAULT_CONTENT_TYPE setting is deprecated.)rN   discardrC   rD   r   r   r    )r   r   r!   )r"   r   r   r       s    zUserSettingsHolder.__setattr__c                s&   | j j| t| |r"t j| d S )N)rN   rA   rE   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)rN   ).0s)r   r   r   	<genexpr>   s    z-UserSettingsHolder.__dir__.<locals>.<genexpr>)sortedr?   r   r8   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 )NrB   c             S   s   dS )NFr   )rR   r   r   r   <lambda>   s    z2UserSettingsHolder.is_overridden.<locals>.<lambda>)rN   r   r   r(   )r   rJ   ZdeletedZset_locallyZset_on_defaultr   r   r   rB      s    

z UserSettingsHolder.is_overriddenc             C   s   dd| j ji S )Nz	<%(cls)s>rM   )r"   r,   )r   r   r   r   r      s    zUserSettingsHolder.__repr__)r,   r-   r.   r/   r   rL   r   r    r#   rU   rB   r   r1   r   r   )r"   r   r%      s   r%   )r/   r:   r
   rF   rC   Zpathlibr   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