Compare commits

...

5 Commits

Author SHA1 Message Date
Matthias Portzel 4bcb3efa70 Merge branch 'master' of https://github.com/notanumber/xapian-haystack 2022-02-08 12:14:52 -05:00
Alejandro R. Sedeño 3fc4cfe46d GitHub Actions: rework test matrix
Drop Django 3.1 (EoL)
Add Django 4.0
Add Python 3.8 (Minimum version for Django 4.0)
Add Python 3.10 to the general matrix, not just for Djagno 3.2

Exclude Django 2.2 from Python 3.10 testing.
Exclude Django 4.0 from Python 3.7 testing.

Django 2.2 will EoL in a little over a month, at which point we can
trim the matrix down again by dropping it and Python 3.9 if we want
to.
2022-02-08 08:17:06 +01:00
AJ Slater 515651f893
tests for non-multiprocessing management commands 2022-02-07 21:01:01 +01:00
Claude Paroz 65adf90601 Remove obsolete comment backend docstring.
xapian issue #364 is solved in xapian 1.3+.
2022-02-05 10:56:25 +01:00
Claude Paroz 77d1fc8ef6 Dropped support for Python 3.6 2022-02-05 10:53:22 +01:00
5 changed files with 101 additions and 14 deletions

View File

@ -10,7 +10,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.6', '3.9', '3.10']
python-version: ['3.7', '3.8', '3.9', '3.10']
xapian-version: ['1.4.18']
steps:
@ -41,13 +41,17 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.6', '3.9']
django-version: ['2.2', '3.1', '3.2']
python-version: ['3.7', '3.8', '3.9', '3.10']
django-version: ['2.2', '3.2', '4.0']
xapian-version: ['1.4.18']
include:
exclude:
# Django added python 3.10 support in 3.2.9
- python-version: '3.10'
django-version: '3.2'
django-version: '2.2'
xapian-version: '1.4.18'
# Django dropped python 3.7 support in 4.0
- python-version: '3.7'
django-version: '4.0'
xapian-version: '1.4.18'
steps:

View File

@ -2,6 +2,11 @@
xapian-haystack Changelog
=========================
Unreleased
----------
- Dropped support for Python 3.6.
v3.0.1 (2021-11-12)
-------------------

View File

@ -18,11 +18,11 @@ setup(
'License :: OSI Approved :: GNU General Public License (GPL)',
'Topic :: Internet :: WWW/HTTP :: Indexing/Search',
'Framework :: Django',
'Programming Language :: Python :: 3 :: Only',
],
author='Jorge C. Leitão',
author_email='jorgecarleitao@gmail.com',
url='http://github.com/notanumber/xapian-haystack',
download_url='http://github.com/notanumber/xapian-haystack/tarball/2.1.0',
url='https://github.com/notanumber/xapian-haystack',
license='GPL2',
py_modules=['xapian_backend'],
install_requires=[

View File

@ -0,0 +1,84 @@
from unittest import TestCase
from django.core.management import call_command
from ..models import BlogEntry
from ..search_indexes import BlogSearchIndex
from .test_backend import BackendFeaturesTestCase, HaystackBackendTestCase
class ManagementCommandTestCase(HaystackBackendTestCase, TestCase):
NUM_BLOG_ENTRIES = 20
def get_index(self):
return BlogSearchIndex()
def setUp(self):
super().setUp()
self.sample_objs = []
for i in range(1, self.NUM_BLOG_ENTRIES + 1):
entry = BackendFeaturesTestCase.get_entry(i)
self.sample_objs.append(entry)
entry.save()
def verify_indexed_document_count(self, expected):
count = self.backend.document_count()
self.assertEqual(count, expected)
def verify_indexed_documents(self):
"""Confirm that the documents in the search index match the database"""
count = self.backend.document_count()
self.assertEqual(count, self.NUM_BLOG_ENTRIES)
pks = set(BlogEntry.objects.values_list("pk", flat=True))
doc_ids = set()
database = self.backend._database()
for pk in pks:
xapian_doc = database.get_document(pk)
doc_id = xapian_doc.get_docid()
doc_ids.add(doc_id)
database.close()
self.assertSetEqual(pks, doc_ids)
def test_clear(self):
self.backend.update(self.index, BlogEntry.objects.all())
self.verify_indexed_documents()
call_command("clear_index", interactive=False, verbosity=0)
self.verify_indexed_document_count(0)
def test_update(self):
self.verify_indexed_document_count(0)
call_command("update_index", verbosity=0)
self.verify_indexed_documents()
def test_rebuild(self):
self.verify_indexed_document_count(0)
call_command("rebuild_index", interactive=False, verbosity=0)
self.verify_indexed_documents()
def test_remove(self):
self.verify_indexed_document_count(0)
call_command("update_index", verbosity=0)
self.verify_indexed_documents()
# Remove three instances.
three_pks = BlogEntry.objects.all()[:3].values_list("pk", flat=True)
BlogEntry.objects.filter(pk__in=three_pks).delete()
self.verify_indexed_document_count(self.NUM_BLOG_ENTRIES)
# Plain ``update_index`` doesn't fix it.
call_command("update_index", verbosity=0)
self.verify_indexed_document_count(self.NUM_BLOG_ENTRIES)
# … but remove does:
call_command("update_index", remove=True, verbosity=0)
self.verify_indexed_document_count(self.NUM_BLOG_ENTRIES - 3)

View File

@ -152,13 +152,7 @@ class XapianSearchBackend(BaseSearchBackend):
`SearchBackend` defines the Xapian search backend for use with the Haystack
API for Django search.
It uses the Xapian Python bindings to interface with Xapian, and as
such is subject to this bug: <http://trac.xapian.org/ticket/364> when
Django is running with mod_python or mod_wsgi under Apache.
Until this issue has been fixed by Xapian, it is neccessary to set
`WSGIApplicationGroup to %{GLOBAL}` when using mod_wsgi, or
`PythonInterpreter main_interpreter` when using mod_python.
It uses the Xapian Python bindings to interface with Xapian.
In order to use this backend, `PATH` must be included in the
`connection_options`. This should point to a location where you would your