3
(h                 @   s   d 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	m
Z
 dZG dd de	ZG d	d
 d
eZG dd deZG dd deZe ZdS )z
Settings and configuration for Django.

Values will be read from the module specified by the DJANGO_SETTINGS_MODULE environment
variable, and then from django.conf.global_settings; see the global settings file for
a list of all possible variables.
    N)global_settings)ImproperlyConfigured)
LazyObjectemptyZDJANGO_SETTINGS_MODULEc               @   sB   e Zd ZdZdddZdd Zdd Zefd	d
Ze	dd Z
d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 we need any settings at all, if the user has not
        previously configured the 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-q3hcpn_q/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 |S )N)r   r   r   getattr)r   r   r   r   r   __getattr__3   s    

zLazySettings.__getattr__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   valuer   r   r   	configure8   s    
zLazySettings.configurec             C   s
   | j tk	S )zL
        Returns True if the settings have already been configured.
        )r   r   )r   r   r   r   
configuredE   s    zLazySettings.configured)N)__name__
__module____qualname____doc__r   r   r   r   r    propertyr!   r   r   r   r   r      s   
r   c               @   s   e Zd ZdZdd ZdS )BaseSettingszK
    Common logic for settings whether set by a module or by the user.
    c             C   s6   |dkr$|r$|j d r$td| tj| || d S )N	MEDIA_URL
STATIC_URL/z If set, %s must end with a slash)r(   r)   )endswithr   object__setattr__)r   r   r   r   r   r   r-   Q   s    zBaseSettings.__setattr__N)r"   r#   r$   r%   r-   r   r   r   r   r'   M   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 ]}|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ttdo| jr$d}tjj|rtjjtjj|f| jjd  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.tzsetz/usr/share/zoneinfor*   zIncorrect timezone setting: %sZTZ)r.   r/   r0   )dirr   isupperr   r   r   	importlibimport_moduleset_explicit_settings
isinstancelisttupler   addZ
SECRET_KEYhasattrtimeZ	TIME_ZONEr   pathexistsjoinsplit
ValueErrorr	   r1   )r   r   settingmodZtuple_settingsZsetting_valueZzoneinfo_rootr   r   r   __init__X   s4      
&zSettings.__init__c             C   s
   || j kS )N)r7   )r   rC   r   r   r   is_overridden   s    zSettings.is_overriddenc             C   s   d| j j| jd S )Nz<%(cls)s "%(settings_module)s">)clsr   )	__class__r"   r   )r   r   r   r   r      s    zSettings.__repr__N)r"   r#   r$   rE   rF   r   r   r   r   r   r   W   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)r6   __dict__r   )r   r   r   r   r   rE      s    zUserSettingsHolder.__init__c             C   s   || j krtt| j|S )N)rI   AttributeErrorr   r   )r   r   r   r   r   r      s    
zUserSettingsHolder.__getattr__c                s"   | j j| tt| j|| d S )N)rI   discardsuperr   r-   )r   r   r   )rH   r   r   r-      s    zUserSettingsHolder.__setattr__c                s*   | j j| t| |r&tt| j| d S )N)rI   r;   r<   rM   r   __delattr__)r   r   )rH   r   r   rN      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)rI   ).0s)r   r   r   	<genexpr>   s    z-UserSettingsHolder.__dir__.<locals>.<genexpr>)sortedr9   rJ   r2   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 )NrF   c             S   s   dS )NFr   )rP   r   r   r   <lambda>   s    z2UserSettingsHolder.is_overridden.<locals>.<lambda>)rI   rJ   r   r   )r   rC   ZdeletedZset_locallyZset_on_defaultr   r   r   rF      s    

z UserSettingsHolder.is_overriddenc             C   s   dd| j ji S )Nz	<%(cls)s>rG   )rH   r"   )r   r   r   r   r      s    zUserSettingsHolder.__repr__)r"   r#   r$   r%   r   rE   r   r-   rN   rS   rF   r   __classcell__r   r   )rH   r   r      s   r   )r%   r4   r   r=   Zdjango.confr   Zdjango.core.exceptionsr   Zdjango.utils.functionalr   r   r   r   r,   r'   r   r   r   r   r   r   r   <module>   s   9
5/