Search code examples
pythondjangodevstack

Devstack: TypeError: __init__() takes exactly 2 arguments (1 given)


I am getting this error when run horizon in devstack in eclipse. may be it's configuration error but I cannot solve it. please help

 WARNING:root:No local_settings file found.
    Traceback (most recent call last):
      File "/home/stack/git/horizon/manage.py", line 23, in <module>
        execute_from_command_line(sys.argv)
      File "/usr/local/lib/python2.7/dist-packages/Django-1.8-py2.7.egg/django/core/management/__init__.py", line 338, in execute_from_command_line
        utility.execute()
      File "/usr/local/lib/python2.7/dist-packages/Django-1.8-py2.7.egg/django/core/management/__init__.py", line 303, in execute
        settings.INSTALLED_APPS
      File "/usr/local/lib/python2.7/dist-packages/Django-1.8-py2.7.egg/django/conf/__init__.py", line 48, in __getattr__
        self._setup(name)
      File "/usr/local/lib/python2.7/dist-packages/Django-1.8-py2.7.egg/django/conf/__init__.py", line 44, in _setup
        self._wrapped = Settings(settings_module)
      File "/usr/local/lib/python2.7/dist-packages/Django-1.8-py2.7.egg/django/conf/__init__.py", line 92, in __init__
        mod = importlib.import_module(self.SETTINGS_MODULE)
      File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
        __import__(name)
      File "/home/stack/git/horizon/openstack_dashboard/settings.py", line 339, in <module>
        from horizon.utils import secret_key
      File "/home/stack/git/horizon/horizon/__init__.py", line 27, in <module>
        from horizon.base import Dashboard  # noqa
      File "/home/stack/git/horizon/horizon/base.py", line 45, in <module>
        from horizon import loaders
      File "/home/stack/git/horizon/horizon/loaders.py", line 57, in <module>
        _loader = TemplateLoader()
      File "/usr/local/lib/python2.7/dist-packages/Django-1.8-py2.7.egg/django/template/loader.py", line 50, in __init__
        super(BaseLoader, self).__init__(*args, **kwargs)
    TypeError: __init__() takes exactly 2 arguments (1 given)

Django loader file is showing error when run horizon. it showed type error in argument

import warnings

from django.utils.deprecation import RemovedInDjango20Warning

from .base import Origin
from .engine import Engine


class LoaderOrigin(Origin):
    def __init__(self, display_name, loader, name, dirs):
        super(LoaderOrigin, self).__init__(display_name)
        self.loader, self.loadname, self.dirs = loader, name, dirs

    def reload(self):
        return self.loader(self.loadname, self.dirs)[0]


def find_template(*args, **kwargs):
    return Engine.get_default().find_template(*args, **kwargs)


def get_template(*args, **kwargs):
    return Engine.get_default().get_template(*args, **kwargs)


def get_template_from_string(*args, **kwargs):
    return Engine.get_default().get_template_from_string(*args, **kwargs)


def render_to_string(*args, **kwargs):
    return Engine.get_default().render_to_string(*args, **kwargs)


def select_template(*args, **kwargs):
    return Engine.get_default().select_template(*args, **kwargs)


# This line must remain at the bottom to avoid import loops.
from .loaders import base


class BaseLoader(base.Loader):
    _accepts_engine_in_init = False

    def __init__(self, *args, **kwargs):
        warnings.warn(
            "django.template.loader.BaseLoader was superseded by "
            "django.template.loaders.base.Loader.",
            RemovedInDjango20Warning, stacklevel=2)
        super(BaseLoader, self).__init__(*args, **kwargs)

Solution

  • Horizon requires Django>=1.4.2,<1.7, you're using Django 1.8 here (see requirements.txt)

    The __init__ arguments for BaseLoader have changed between those two versions.

    You need to fix your environment and dependencies if you want this to work.