﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
16263	settings __file__ missing for setup_environ()	tushar.wagle@…	nobody	"I'm getting the following problem:

{{{
Traceback (most recent call last):
  File ""request_handler.py"", line 10, in <module>
    setup_environ(settings)
  File ""c:\Python27\lib\site-packages\django\core\management\__init__.py"", line 394, in setup_environ
    if '__init__.py' in settings_mod.__file__:
  File ""c:\Python27\lib\site-packages\django\utils\functional.py"", line 277, in __getattr__
    return getattr(self._wrapped, name)
AttributeError: 'Settings' object has no attribute '__file__'
}}}

when trying to use django standalone with code like this (and with DJANGO_SETTINGS_MODULE set to a valid module):

{{{
from django.conf import settings
from django.core.management import setup_environ
setup_environ(settings)
}}}

The problem is that there is no `__file__` attribute on the `django.conf.Settings` object, and the `setup_environ()` code assumes that there will be.

One fix (that I've tested) is to add the copy of the `__file__` attribute within the Settings class in  `django.conf.__init__.py` like this:

{{{
class Settings(BaseSettings):
    def __init__(self, settings_module):
        # update this dict from global settings (but only for ALL_CAPS settings)
        for setting in dir(global_settings):
            if setting == setting.upper():
                setattr(self, setting, getattr(global_settings, setting))

        # store the settings module in case someone later cares
        self.SETTINGS_MODULE = settings_module

        try:
            mod = importlib.import_module(self.SETTINGS_MODULE)
        except ImportError, e:
            raise ImportError(""Could not import settings '%s' (Is it on sys.path?): %s"" % (self.SETTINGS_MODULE, e))

        # Settings that should be converted into tuples if they're mistakenly entered
        # as strings.
        tuple_settings = (""INSTALLED_APPS"", ""TEMPLATE_DIRS"")

        for setting in dir(mod):
            #if setting == setting.upper():  ## OLD BROKEN
            if setting == setting.upper() or setting == '__file__': #NEW FIXED
}}}


This works, but might not be the best solution. This problem means that I cannot use any settings files other than the default one (so is quite a big problem). There is of course a simple workaround: ie to rename my custom file to `settings.py`, but this isn't ideal.

(Also note that this is not a problem when using `manage.py`, just when trying to use this standalone, eg in a non-webserver process).
"	Bug	closed	Core (Other)	1.3	Normal	needsinfo	conf, settings		Unreviewed	1	0	0	0	1	0
