This cost me some hair-pulling today as I was trying to write a custom test runner for a Django project I'm working on that creates a test Xapian database just for running the tests. Basically, you can't do this:


Because if you do you end up getting these strange DatabaseOpeningError exceptions. So, here's how you do it:

import xapian

Hopefully by blogging about this some other poor coder will save some time.

LE - 19 January 2010 [«« Reply to this]
Why would you mkdir a database's directory? Makes no sense.
Peter Bengtsson - 19 January 2010 [«« Reply to this]
Because the test runner doesn't work like a normal Django startup. Without first doing this, the first test that tries to open the database in read-only mode will fail. Perhaps there is a more appropriate way but I couldn't immediately find one.
david - 19 January 2010 [«« Reply to this]
I normally use xappy for xapian stuff, it makes it a lot easier, or at least I look at the source code if there is something that is bugging me. i.e"

The makers of it also make xapian core, so xappy has got best use practices in it.
Peter Bengtsson - 19 January 2010 [«« Reply to this]
I'm currently using django-haystack to wrap Xapian. django-haystack actually wraps xapian-haystack.

I might reconsider this because I'm not getting the most out of django-haystack because so much of my work has been to patch and subclass django-haystack in various forms because I'm not using Django's ORM.

I will take a closer look at xappy as it might actually simplify the stack in this project.
kirby - 08 March 2011 [«« Reply to this]
Was going nuts because django didn't create it initially. Thanks!

Your email will never ever be published