I'm trying to setup haystack with whoosh backend. When i try to gen the index [or any index command for that matter] i receive:
TypeError: Item in ``from list'' not a string
if i completely remove my search_indexes.py i get the same error [so i'm guessing it can't find that file at all]
what might cause this error? it's set to autodiscover and i'm sure my app is installed because i'm currently using it.
Full traceback:
Traceback (most recent call last):
File "./manage.py", line 17, in <module>
execute_manager(settings)
File "/Users/ghostrocket/Development/Redux/.dependencies/django/core/management/__init__.py", line 362, in execute_manager
utility.execute()
File "/Users/ghostrocket/Development/Redux/.dependencies/django/core/management/__init__.py", line 303, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/ghostrocket/Development/Redux/.dependencies/django/core/management/__init__.py", line 257, in fetch_command
klass = load_command_class(app_name, subcommand)
File "/Users/ghostrocket/Development/Redux/.dependencies/django/core/management/__init__.py", line 67, in load_command_class
module = import_module('%s.management.commands.%s' % (app_name, name))
File "/Users/ghostrocket/Development/Redux/.dependencies/django/utils/importlib.py", line 35, in import_module
__import__(name)
File "/Users/ghostrocket/Development/Redux/.dependencies/haystack/__init__.py", line 124, in <module>
handle_registrations()
File "/Users/ghostrocket/Development/Redux/.dependencies/haystack/__init__.py", line 121, in handle_registrations
search_sites_conf = __import__(settings.HAYSTACK_SITECONF)
File "/Users/ghostrocket/Development/Redux/website/../website/search_sites.py", line 2, in <module>
haystack.autodiscover()
File "/Users/ghostrocket/Development/Redux/.dependencies/haystack/__init__.py", line 83, in autodiscover
app_path = __import__(app, {}, {}, [app.split('.')[-1]]).__path__
TypeError: Item in ``from list'' not a string
and here is my search_indexes.py
from haystack import indexes
from haystack import site
from myproject.models import *
site.register(myobject)
I've just encountered the same TypeError message with a completely different stack.
A search on the whole error message brought up two results: this question, and the source code for Python's import.c.
So after a little digging, I find that this particular error is caused when the __import__ builtin is passed an import name which isn't a string.
The important word there is string - ie. a str object. Anything else (eg. unicode) will be rejected with the error described here.
So the solution is: wherever you're passing a module/member name to something which will dynamically import it, make sure that it's a str and not a unicode.
Fails:
__import__('mylib.foo', globals(), locals(), [u'bar'])
Work:
__import__('mylib.foo', globals(), locals(), ['bar'])
__import__(u'mylib.foo', globals(), locals(), ['bar'])
Of course, this is probably only relevant to Python 2.x, given that 3.x does strings/unicode differently.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With