Updates related to new feed() signature

This commit is contained in:
Matthias Geier 2016-06-08 15:53:18 +02:00
parent 3ecb08c5a9
commit d27386cc95
5 changed files with 13 additions and 7 deletions

View File

@ -719,7 +719,11 @@ class StandaloneHTMLBuilder(Builder):
# only index pages with title
if self.indexer is not None and title:
filename = self.env.doc2path(pagename, base=None)
self.indexer.feed(pagename, filename, title, doctree)
try:
self.indexer.feed(pagename, filename, title, doctree)
except TypeError:
# fallback for old search-adapters
self.indexer.feed(pagename, title, doctree)
def _get_local_toctree(self, docname, collapse=True, **kwds):
if 'includehidden' not in kwds:

View File

@ -34,19 +34,20 @@ class BaseSearch(object):
"""
pass
def feed(self, pagename, title, doctree):
def feed(self, pagename, filename, title, doctree):
"""Called by the builder to add a doctree to the index. Converts the
`doctree` to text and passes it to :meth:`add_document`. You probably
won't want to override this unless you need access to the `doctree`.
Override :meth:`add_document` instead.
:param pagename: the name of the page to be indexed
:param filename: the name of the original source file
:param title: the title of the page to be indexed
:param doctree: is the docutils doctree representation of the page
"""
self.add_document(pagename, title, doctree.astext())
self.add_document(pagename, filename, title, doctree.astext())
def add_document(self, pagename, title, text):
def add_document(self, pagename, filename, title, text):
"""Called by :meth:`feed` to add a document to the search index.
This method should should do everything necessary to add a single
document to the search index.
@ -59,6 +60,7 @@ class BaseSearch(object):
query.
:param pagename: the name of the page being indexed
:param filename: the name of the original source file
:param title: the page's title
:param text: the full text of the page
"""

View File

@ -17,7 +17,7 @@ class NullSearch(BaseSearch):
"""A search adapter that does nothing. Used when no search adapter
is specified.
"""
def feed(self, pagename, title, doctree):
def feed(self, pagename, filename, title, doctree):
pass
def query(self, q):

View File

@ -44,7 +44,7 @@ class WhooshSearch(BaseSearch):
def finish_indexing(self):
self.index_writer.commit()
def add_document(self, pagename, title, text):
def add_document(self, pagename, filename, title, text):
self.index_writer.add_document(path=text_type(pagename),
title=title,
text=text)

View File

@ -41,7 +41,7 @@ def search_adapter_helper(adapter):
# Make sure documents are properly updated by the search adapter.
s.init_indexing(changed=['markup'])
s.add_document(u'markup', u'title', u'SomeLongRandomWord')
s.add_document(u'markup', u'filename', u'title', u'SomeLongRandomWord')
s.finish_indexing()
# Now a search for "Epigraph" should return zero results.
results = s.query(u'Epigraph')