

_V                 @   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 Gd d	   d	 e  Z Gd
 d   d e  Z Gd d   d e  Z Gd 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)RemovedInDjango110Warning)
LazyObjectemptyZDJANGO_SETTINGS_MODULEc               @   s^   e  Z d  Z d Z d d d  Z d d   Z d d   Z e 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   sZ   t  j j t  } | sG | r( d | n d } t d | t f   n  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   6/tmp/pip-build-ghmbqnp_/Django/django/conf/__init__.py_setup   s    zLazySettings._setupc             C   s(   |  j  t k r d Sd i |  j  j d 6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 |  n  t |  j  |  S)N)r   r   r   getattr)r   r   r   r   r   __getattr__5   s    zLazySettings.__getattr__c             K   sd   |  j  t k	 r t d   n  t |  } x* | j   D] \ } } t | | |  q7 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   	configure:   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   
configuredG   s    zLazySettings.configured)__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   sL   | d k r5 | r5 | j  d  r5 t d |   n  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.   S   s    "zBaseSettings.__setattr__N)r#   r$   r%   r&   r.   r   r   r   r   r(   O   s   r(   c               @   s4   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 q W| |  _ t j |  j  } d } t   |  _	 x t  |  D]y } | j   ry t | |  } | | k r t
 | t t f  r t d |   n  t |  | |  |  j	 j |  qy qy W|  j st d   n  d |  j k r?d |  j k r?t j d	 t  n  t t d
  r|  j rd } t j j |  rt j j t j j | |  j j d    rt d |  j   n  |  j t j d <t j   n  d  S)NALLOWED_INCLUDE_ROOTSINSTALLED_APPSTEMPLATE_DIRSLOCALE_PATHSzCThe %s setting must be a list or a tuple. Please fix your settings.z)The SECRET_KEY setting must not be empty.z7django.contrib.auth.middleware.AuthenticationMiddlewarez>django.contrib.auth.middleware.SessionAuthenticationMiddlewarea	  Session verification will become mandatory in Django 1.10. Please add 'django.contrib.auth.middleware.SessionAuthenticationMiddleware' to your MIDDLEWARE_CLASSES setting when you are ready to opt-in after reading the upgrade considerations in the 1.8 release notes.tzsetz/usr/share/zoneinfor+   zIncorrect timezone setting: %sZTZ)r/   r0   r1   r2   )dirr   isupperr   r   r   	importlibimport_moduleset_explicit_settings
isinstancelisttupler   addZ
SECRET_KEYZMIDDLEWARE_CLASSESwarningswarnr   hasattrtimeZ	TIME_ZONEr	   pathexistsjoinsplit
ValueErrorr
   r3   )r   r   settingmodZtuple_settingsZsetting_valueZzoneinfo_rootr   r   r   __init__Z   sB     	   	
.zSettings.__init__c             C   s   | |  j  k S)N)r9   )r   rG   r   r   r   is_overridden   s    zSettings.is_overriddenc             C   s   d i |  j  j d 6|  j d 6S)Nz<%(cls)s "%(settings_module)s">clsr   )	__class__r#   r   )r   r   r   r   r      s    zSettings.__repr__N)r#   r$   r%   rI   rJ   r   r   r   r   r   r   Y   s   6r   c                   s|   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   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   __dict__r   )r   r   r   r   r   rI      s    zUserSettingsHolder.__init__c             C   s(   | |  j  k r t  n  t |  j |  S)N)rM   AttributeErrorr   r   )r   r   r   r   r   r      s    	zUserSettingsHolder.__getattr__c                s-   |  j  j |  t t |   j | |  d  S)N)rM   discardsuperr   r.   )r   r   r    )rL   r   r   r.      s    zUserSettingsHolder.__setattr__c                s<   |  j  j |  t |  |  r8 t t |   j |  n  d  S)N)rM   r=   r@   rQ   r   __delattr__)r   r   )rL   r   r   rR      s    zUserSettingsHolder.__delattr__c             C   s   t  |  j  t |  j  S)N)r;   rN   r4   r   )r   r   r   r   __dir__   s    zUserSettingsHolder.__dir__c             C   sO   | |  j  k } | |  j k } t |  j d d d    |  } | pN | pN | S)NrJ   c             S   s   d S)NFr   )sr   r   r   <lambda>   s    z2UserSettingsHolder.is_overridden.<locals>.<lambda>)rM   rN   r   r   )r   rG   ZdeletedZset_locallyZset_on_defaultr   r   r   rJ      s    !z UserSettingsHolder.is_overriddenc             C   s   d i |  j  j d 6S)Nz	<%(cls)s>rK   )rL   r#   )r   r   r   r   r      s    zUserSettingsHolder.__repr__)r#   r$   r%   r&   r   rI   r   r.   rR   rS   rJ   r   r   r   )rL   r   r      s   r   )r&   r6   r	   rA   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   r   r   <module>   s   9
A,