diff --git a/tests/xapian_tests/tests/xapian_backend.py b/tests/xapian_tests/tests/xapian_backend.py index 04da2fa..a12296c 100644 --- a/tests/xapian_tests/tests/xapian_backend.py +++ b/tests/xapian_tests/tests/xapian_backend.py @@ -1,3 +1,5 @@ +from __future__ import unicode_literals + import datetime import sys import xapian @@ -395,20 +397,20 @@ class XapianSearchBackendTestCase(HaystackBackendTestCase, TestCase): def test_verify_type(self): self.assertEqual([result.month for result in self.backend.search(xapian.Query(''))['results']], - [u'02', u'02', u'02']) + ['02', '02', '02']) def test__marshal_value(self): - self.assertEqual(_marshal_value('abc'), u'abc') + self.assertEqual(_marshal_value('abc'), 'abc') self.assertEqual(_marshal_value(1), '000000000001') self.assertEqual(_marshal_value(2653), '000000002653') - self.assertEqual(_marshal_value(25.5), '\xb2`') - self.assertEqual(_marshal_value([1, 2, 3]), u'[1, 2, 3]') - self.assertEqual(_marshal_value((1, 2, 3)), u'(1, 2, 3)') - self.assertEqual(_marshal_value({'a': 1, 'c': 3, 'b': 2}), u"{'a': 1, 'c': 3, 'b': 2}") - self.assertEqual(_marshal_value(datetime.datetime(2009, 5, 9, 16, 14)), u'20090509161400') - self.assertEqual(_marshal_value(datetime.datetime(2009, 5, 9, 0, 0)), u'20090509000000') - self.assertEqual(_marshal_value(datetime.datetime(1899, 5, 18, 0, 0)), u'18990518000000') - self.assertEqual(_marshal_value(datetime.datetime(2009, 5, 18, 1, 16, 30, 250)), u'20090518011630000250') + self.assertEqual(_marshal_value(25.5), b'\xb2`') + self.assertEqual(_marshal_value([1, 2, 3]), '[1, 2, 3]') + self.assertEqual(_marshal_value((1, 2, 3)), '(1, 2, 3)') + self.assertEqual(_marshal_value({'a': 1, 'c': 3, 'b': 2}), "{u'a': 1, u'c': 3, u'b': 2}") + self.assertEqual(_marshal_value(datetime.datetime(2009, 5, 9, 16, 14)), '20090509161400') + self.assertEqual(_marshal_value(datetime.datetime(2009, 5, 9, 0, 0)), '20090509000000') + self.assertEqual(_marshal_value(datetime.datetime(1899, 5, 18, 0, 0)), '18990518000000') + self.assertEqual(_marshal_value(datetime.datetime(2009, 5, 18, 1, 16, 30, 250)), '20090518011630000250') def test_build_schema(self): (content_field_name, fields) = self.backend.build_schema(connections['default'].get_unified_index().all_searchfields()) @@ -441,11 +443,16 @@ class XapianSearchBackendTestCase(HaystackBackendTestCase, TestCase): else: self.assertEqual(str(self.backend.parse_query('name:da*')), 'Xapian::Query((XNAMEdavid1:(pos=1) OR XNAMEdavid2:(pos=1) OR XNAMEdavid3:(pos=1)))') - self.assertEqual(str(self.backend.parse_query('name:david1..david2')), 'Xapian::Query(VALUE_RANGE 5 david1 david2)') - self.assertEqual(str(self.backend.parse_query('value:0..10')), 'Xapian::Query(VALUE_RANGE 14 000000000000 000000000010)') - self.assertEqual(str(self.backend.parse_query('value:..10')), 'Xapian::Query(VALUE_RANGE 14 %012d 000000000010)' % (-sys.maxint - 1)) - self.assertEqual(str(self.backend.parse_query('value:10..*')), 'Xapian::Query(VALUE_RANGE 14 000000000010 %012d)' % sys.maxint) - self.assertEqual(str(self.backend.parse_query('popularity:25.5..100.0')), 'Xapian::Query(VALUE_RANGE 7 \xb2` \xba@)') + self.assertEqual(str(self.backend.parse_query('name:david1..david2')), + 'Xapian::Query(VALUE_RANGE 5 david1 david2)') + self.assertEqual(str(self.backend.parse_query('value:0..10')), + 'Xapian::Query(VALUE_RANGE 14 000000000000 000000000010)') + self.assertEqual(str(self.backend.parse_query('value:..10')), + 'Xapian::Query(VALUE_RANGE 14 %012d 000000000010)' % (-sys.maxint - 1)) + self.assertEqual(str(self.backend.parse_query('value:10..*')), + 'Xapian::Query(VALUE_RANGE 14 000000000010 %012d)' % sys.maxint) + self.assertEqual(str(self.backend.parse_query('popularity:25.5..100.0')), + b'Xapian::Query(VALUE_RANGE 7 \xb2` \xba@)') class LiveXapianMockSearchIndex(indexes.SearchIndex): @@ -477,8 +484,8 @@ class LiveXapianSearchQueryTestCase(HaystackBackendTestCase, TestCase): def test_get_spelling(self): self.sq.add_filter(SQ(content='indxd')) - self.assertEqual(self.sq.get_spelling_suggestion(), u'indexed') - self.assertEqual(self.sq.get_spelling_suggestion('indxd'), u'indexed') + self.assertEqual(self.sq.get_spelling_suggestion(), 'indexed') + self.assertEqual(self.sq.get_spelling_suggestion('indxd'), 'indexed') def test_startswith(self): self.sq.add_filter(SQ(name__startswith='da')) @@ -486,21 +493,21 @@ class LiveXapianSearchQueryTestCase(HaystackBackendTestCase, TestCase): def test_build_query_gt(self): self.sq.add_filter(SQ(name__gt='m')) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query(( AND_NOT VALUE_RANGE 2 a m))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query(( AND_NOT VALUE_RANGE 2 a m))') def test_build_query_gte(self): self.sq.add_filter(SQ(name__gte='m')) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query(VALUE_RANGE 2 m zzzzzzzzzzzzzzzzzzzzzzzzzzzz' - u'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz' - u'zzzzzzzzzzzzzz)') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query(VALUE_RANGE 2 m zzzzzzzzzzzzzzzzzzzzzzzzzzzz' + 'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz' + 'zzzzzzzzzzzzzz)') def test_build_query_lt(self): self.sq.add_filter(SQ(name__lt='m')) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query(( AND_NOT VALUE_RANGE 2 m zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query(( AND_NOT VALUE_RANGE 2 m zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz))') def test_build_query_lte(self): self.sq.add_filter(SQ(name__lte='m')) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query(VALUE_RANGE 2 a m)') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query(VALUE_RANGE 2 a m)') def test_build_query_multiple_filter_types(self): self.sq.add_filter(SQ(content='why')) @@ -509,7 +516,7 @@ class LiveXapianSearchQueryTestCase(HaystackBackendTestCase, TestCase): self.sq.add_filter(SQ(created__lt=datetime.datetime(2009, 2, 12, 12, 13, 0))) self.sq.add_filter(SQ(title__gte='B')) self.sq.add_filter(SQ(id__in=[1, 2, 3])) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query(((Zwhi OR why) AND VALUE_RANGE 3 00010101000000 20090210015900 AND ( AND_NOT VALUE_RANGE 2 a david) AND ( AND_NOT VALUE_RANGE 1 20090212121300 99990101000000) AND VALUE_RANGE 5 b zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz AND (Q1 OR Q2 OR Q3)))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query(((Zwhi OR why) AND VALUE_RANGE 3 00010101000000 20090210015900 AND ( AND_NOT VALUE_RANGE 2 a david) AND ( AND_NOT VALUE_RANGE 1 20090212121300 99990101000000) AND VALUE_RANGE 5 b zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz AND (Q1 OR Q2 OR Q3)))') def test_log_query(self): reset_search_queries() @@ -528,7 +535,7 @@ class LiveXapianSearchQueryTestCase(HaystackBackendTestCase, TestCase): self.sq.add_filter(SQ(name='bar')) len(self.sq.get_results()) self.assertEqual(len(connections['default'].queries), 1) - self.assertEqual(str(connections['default'].queries[0]['query_string']), u'Xapian::Query((ZXNAMEbar OR XNAMEbar))') + self.assertEqual(str(connections['default'].queries[0]['query_string']), 'Xapian::Query((ZXNAMEbar OR XNAMEbar))') # And again, for good measure. self.sq = connections['default'].get_query() @@ -536,8 +543,8 @@ class LiveXapianSearchQueryTestCase(HaystackBackendTestCase, TestCase): self.sq.add_filter(SQ(text='moof')) len(self.sq.get_results()) self.assertEqual(len(connections['default'].queries), 2) - self.assertEqual(str(connections['default'].queries[0]['query_string']), u'Xapian::Query((ZXNAMEbar OR XNAMEbar))') - self.assertEqual(str(connections['default'].queries[1]['query_string']), u'Xapian::Query(((ZXNAMEbar OR XNAMEbar) AND (ZXTEXTmoof OR XTEXTmoof)))') + self.assertEqual(str(connections['default'].queries[0]['query_string']), 'Xapian::Query((ZXNAMEbar OR XNAMEbar))') + self.assertEqual(str(connections['default'].queries[1]['query_string']), 'Xapian::Query(((ZXNAMEbar OR XNAMEbar) AND (ZXTEXTmoof OR XTEXTmoof)))') # Restore. settings.DEBUG = old_debug diff --git a/tests/xapian_tests/tests/xapian_query.py b/tests/xapian_tests/tests/xapian_query.py index c38171d..5d01c41 100644 --- a/tests/xapian_tests/tests/xapian_query.py +++ b/tests/xapian_tests/tests/xapian_query.py @@ -1,3 +1,5 @@ +from __future__ import unicode_literals + import datetime import os import shutil @@ -23,122 +25,122 @@ class XapianSearchQueryTestCase(TestCase): super(XapianSearchQueryTestCase, self).tearDown() def test_build_query_all(self): - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query()') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query()') def test_build_query_single_word(self): self.sq.add_filter(SQ(content='hello')) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query((Zhello OR hello))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query((Zhello OR hello))') def test_build_query_single_word_not(self): self.sq.add_filter(~SQ(content='hello')) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query(( AND_NOT (Zhello OR hello)))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query(( AND_NOT (Zhello OR hello)))') def test_build_query_single_word_field_exact(self): self.sq.add_filter(SQ(foo='hello')) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query((ZXFOOhello OR XFOOhello))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query((ZXFOOhello OR XFOOhello))') def test_build_query_single_word_field_exact_not(self): self.sq.add_filter(~SQ(foo='hello')) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query(( AND_NOT (ZXFOOhello OR XFOOhello)))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query(( AND_NOT (ZXFOOhello OR XFOOhello)))') def test_build_query_boolean(self): self.sq.add_filter(SQ(content=True)) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query((Ztrue OR true))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query((Ztrue OR true))') def test_build_query_date(self): self.sq.add_filter(SQ(content=datetime.date(2009, 5, 8))) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query((Z20090508000000 OR 20090508000000))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query((Z20090508000000 OR 20090508000000))') def test_build_query_date_not(self): self.sq.add_filter(~SQ(content=datetime.date(2009, 5, 8))) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query(( AND_NOT (Z20090508000000 OR 20090508000000)))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query(( AND_NOT (Z20090508000000 OR 20090508000000)))') def test_build_query_datetime(self): self.sq.add_filter(SQ(content=datetime.datetime(2009, 5, 8, 11, 28))) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query((Z20090508112800 OR 20090508112800))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query((Z20090508112800 OR 20090508112800))') def test_build_query_datetime_not(self): self.sq.add_filter(~SQ(content=datetime.datetime(2009, 5, 8, 11, 28))) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query(( AND_NOT (Z20090508112800 OR 20090508112800)))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query(( AND_NOT (Z20090508112800 OR 20090508112800)))') def test_build_query_float(self): self.sq.add_filter(SQ(content=25.52)) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query((Z25.52 OR 25.52))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query((Z25.52 OR 25.52))') def test_build_query_multiple_words_and(self): self.sq.add_filter(SQ(content='hello')) self.sq.add_filter(SQ(content='world')) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query(((Zhello OR hello) AND (Zworld OR world)))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query(((Zhello OR hello) AND (Zworld OR world)))') def test_build_query_multiple_words_not(self): self.sq.add_filter(~SQ(content='hello')) self.sq.add_filter(~SQ(content='world')) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query((( AND_NOT (Zhello OR hello)) AND ( AND_NOT (Zworld OR world))))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query((( AND_NOT (Zhello OR hello)) AND ( AND_NOT (Zworld OR world))))') def test_build_query_multiple_words_or(self): self.sq.add_filter(SQ(content='hello') | SQ(content='world')) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query((Zhello OR hello OR Zworld OR world))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query((Zhello OR hello OR Zworld OR world))') def test_build_query_multiple_words_or_not(self): self.sq.add_filter(~SQ(content='hello') | ~SQ(content='world')) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query((( AND_NOT (Zhello OR hello)) OR ( AND_NOT (Zworld OR world))))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query((( AND_NOT (Zhello OR hello)) OR ( AND_NOT (Zworld OR world))))') def test_build_query_multiple_words_mixed(self): self.sq.add_filter(SQ(content='why') | SQ(content='hello')) self.sq.add_filter(~SQ(content='world')) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query(((Zwhi OR why OR Zhello OR hello) AND ( AND_NOT (Zworld OR world))))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query(((Zwhi OR why OR Zhello OR hello) AND ( AND_NOT (Zworld OR world))))') def test_build_query_multiple_word_field_exact(self): self.sq.add_filter(SQ(foo='hello')) self.sq.add_filter(SQ(bar='world')) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query(((ZXFOOhello OR XFOOhello) AND (ZXBARworld OR XBARworld)))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query(((ZXFOOhello OR XFOOhello) AND (ZXBARworld OR XBARworld)))') def test_build_query_multiple_word_field_exact_not(self): self.sq.add_filter(~SQ(foo='hello')) self.sq.add_filter(~SQ(bar='world')) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query((( AND_NOT (ZXFOOhello OR XFOOhello)) AND ( AND_NOT (ZXBARworld OR XBARworld))))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query((( AND_NOT (ZXFOOhello OR XFOOhello)) AND ( AND_NOT (ZXBARworld OR XBARworld))))') def test_build_query_phrase(self): self.sq.add_filter(SQ(content='hello world')) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query((hello PHRASE 2 world))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query((hello PHRASE 2 world))') def test_build_query_phrase_not(self): self.sq.add_filter(~SQ(content='hello world')) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query(( AND_NOT (hello PHRASE 2 world)))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query(( AND_NOT (hello PHRASE 2 world)))') def test_build_query_boost(self): self.sq.add_filter(SQ(content='hello')) self.sq.add_boost('world', 5) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query(((Zhello OR hello) AND_MAYBE 5 * (Zworld OR world)))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query(((Zhello OR hello) AND_MAYBE 5 * (Zworld OR world)))') def test_build_query_in_filter_single_words(self): self.sq.add_filter(SQ(content='why')) self.sq.add_filter(SQ(title__in=["Dune", "Jaws"])) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query(((Zwhi OR why) AND (ZXTITLEdune OR XTITLEdune OR ZXTITLEjaw OR XTITLEjaws)))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query(((Zwhi OR why) AND (ZXTITLEdune OR XTITLEdune OR ZXTITLEjaw OR XTITLEjaws)))') def test_build_query_not_in_filter_single_words(self): self.sq.add_filter(SQ(content='why')) self.sq.add_filter(~SQ(title__in=["Dune", "Jaws"])) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query(((Zwhi OR why) AND ( AND_NOT (ZXTITLEdune OR XTITLEdune OR ZXTITLEjaw OR XTITLEjaws))))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query(((Zwhi OR why) AND ( AND_NOT (ZXTITLEdune OR XTITLEdune OR ZXTITLEjaw OR XTITLEjaws))))') def test_build_query_in_filter_multiple_words(self): self.sq.add_filter(SQ(content='why')) self.sq.add_filter(SQ(title__in=["A Famous Paper", "An Infamous Article"])) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query(((Zwhi OR why) AND ((XTITLEa PHRASE 3 XTITLEfamous PHRASE 3 XTITLEpaper) OR (XTITLEan PHRASE 3 XTITLEinfamous PHRASE 3 XTITLEarticle))))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query(((Zwhi OR why) AND ((XTITLEa PHRASE 3 XTITLEfamous PHRASE 3 XTITLEpaper) OR (XTITLEan PHRASE 3 XTITLEinfamous PHRASE 3 XTITLEarticle))))') def test_build_query_in_filter_multiple_words_with_punctuation(self): self.sq.add_filter(SQ(title__in=["A Famous Paper", "An Infamous Article", "My Store Inc."])) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query(((XTITLEa PHRASE 3 XTITLEfamous PHRASE 3 XTITLEpaper) OR (XTITLEan PHRASE 3 XTITLEinfamous PHRASE 3 XTITLEarticle) OR (XTITLEmy PHRASE 3 XTITLEstore PHRASE 3 XTITLEinc.)))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query(((XTITLEa PHRASE 3 XTITLEfamous PHRASE 3 XTITLEpaper) OR (XTITLEan PHRASE 3 XTITLEinfamous PHRASE 3 XTITLEarticle) OR (XTITLEmy PHRASE 3 XTITLEstore PHRASE 3 XTITLEinc.)))') def test_build_query_not_in_filter_multiple_words(self): self.sq.add_filter(SQ(content='why')) self.sq.add_filter(~SQ(title__in=["A Famous Paper", "An Infamous Article"])) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query(((Zwhi OR why) AND ( AND_NOT ((XTITLEa PHRASE 3 XTITLEfamous PHRASE 3 XTITLEpaper) OR (XTITLEan PHRASE 3 XTITLEinfamous PHRASE 3 XTITLEarticle)))))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query(((Zwhi OR why) AND ( AND_NOT ((XTITLEa PHRASE 3 XTITLEfamous PHRASE 3 XTITLEpaper) OR (XTITLEan PHRASE 3 XTITLEinfamous PHRASE 3 XTITLEarticle)))))') def test_build_query_in_filter_datetime(self): self.sq.add_filter(SQ(content='why')) self.sq.add_filter(SQ(pub_date__in=[datetime.datetime(2009, 7, 6, 1, 56, 21)])) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query(((Zwhi OR why) AND (ZXPUB_DATE20090706015621 OR XPUB_DATE20090706015621)))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query(((Zwhi OR why) AND (ZXPUB_DATE20090706015621 OR XPUB_DATE20090706015621)))') def test_clean(self): self.assertEqual(self.sq.clean('hello world'), 'hello world') @@ -149,20 +151,19 @@ class XapianSearchQueryTestCase(TestCase): def test_build_query_with_models(self): self.sq.add_filter(SQ(content='hello')) self.sq.add_model(MockModel) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query(((Zhello OR hello) AND 0 * XCONTENTTYPEcore.mockmodel))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query(((Zhello OR hello) AND 0 * XCONTENTTYPEcore.mockmodel))') self.sq.add_model(AnotherMockModel) self.assertTrue(str(self.sq.build_query()) in ( - u'Xapian::Query(((Zhello OR hello) AND (0 * XCONTENTTYPEcore.anothermockmodel OR 0 * XCONTENTTYPEcore.mockmodel)))', - u'Xapian::Query(((Zhello OR hello) AND (0 * XCONTENTTYPEcore.mockmodel OR 0 * XCONTENTTYPEcore.anothermockmodel)))') - ) + 'Xapian::Query(((Zhello OR hello) AND (0 * XCONTENTTYPEcore.anothermockmodel OR 0 * XCONTENTTYPEcore.mockmodel)))', + 'Xapian::Query(((Zhello OR hello) AND (0 * XCONTENTTYPEcore.mockmodel OR 0 * XCONTENTTYPEcore.anothermockmodel)))')) def test_build_query_with_punctuation(self): self.sq.add_filter(SQ(content='http://www.example.com')) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query((Zhttp://www.example.com OR http://www.example.com))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query((Zhttp://www.example.com OR http://www.example.com))') def test_in_filter_values_list(self): self.sq.add_filter(SQ(content='why')) self.sq.add_filter(SQ(title__in=MockModel.objects.values_list('id', flat=True))) - self.assertEqual(str(self.sq.build_query()), u'Xapian::Query(((Zwhi OR why) AND (ZXTITLE1 OR XTITLE1 OR ZXTITLE2 OR XTITLE2 OR ZXTITLE3 OR XTITLE3)))') + self.assertEqual(str(self.sq.build_query()), 'Xapian::Query(((Zwhi OR why) AND (ZXTITLE1 OR XTITLE1 OR ZXTITLE2 OR XTITLE2 OR ZXTITLE3 OR XTITLE3)))') diff --git a/xapian_backend.py b/xapian_backend.py index 606abc8..16e0866 100755 --- a/xapian_backend.py +++ b/xapian_backend.py @@ -1,3 +1,5 @@ +from __future__ import unicode_literals + import time import datetime import cPickle as pickle @@ -72,22 +74,22 @@ class XHValueRangeProcessor(xapian.ValueRangeProcessor): if field_dict['field_name'] == field_name: if not begin: if field_dict['type'] == 'text': - begin = u'a' # TODO: A better way of getting a min text value? + begin = 'a' # TODO: A better way of getting a min text value? elif field_dict['type'] == 'long': begin = -sys.maxint - 1 elif field_dict['type'] == 'float': begin = float('-inf') elif field_dict['type'] == 'date' or field_dict['type'] == 'datetime': - begin = u'00010101000000' + begin = '00010101000000' elif end == '*': if field_dict['type'] == 'text': - end = u'z' * 100 # TODO: A better way of getting a max text value? + end = 'z' * 100 # TODO: A better way of getting a max text value? elif field_dict['type'] == 'long': end = sys.maxint elif field_dict['type'] == 'float': end = float('inf') elif field_dict['type'] == 'date' or field_dict['type'] == 'datetime': - end = u'99990101000000' + end = '99990101000000' if field_dict['type'] == 'float': begin = _marshal_value(float(begin)) end = _marshal_value(float(end)) @@ -854,7 +856,7 @@ class XapianSearchBackend(BaseSearchBackend): try: database = xapian.Database(self.path) except xapian.DatabaseOpeningError: - raise InvalidIndexError(u'Unable to open index at %s' % self.path) + raise InvalidIndexError('Unable to open index at %s' % self.path) return database @@ -1238,13 +1240,13 @@ def _marshal_value(value): value = _marshal_date(value) elif isinstance(value, bool): if value: - value = u't' + value = 't' else: - value = u'f' + value = 'f' elif isinstance(value, float): value = xapian.sortable_serialise(value) elif isinstance(value, (int, long)): - value = u'%012d' % value + value = '%012d' % value else: value = force_unicode(value).lower() return value @@ -1264,17 +1266,17 @@ def _marshal_term(term): def _marshal_date(d): - return u'%04d%02d%02d000000' % (d.year, d.month, d.day) + return '%04d%02d%02d000000' % (d.year, d.month, d.day) def _marshal_datetime(dt): if dt.microsecond: - return u'%04d%02d%02d%02d%02d%02d%06d' % ( + return '%04d%02d%02d%02d%02d%02d%06d' % ( dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.microsecond ) else: - return u'%04d%02d%02d%02d%02d%02d' % ( + return '%04d%02d%02d%02d%02d%02d' % ( dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second )