Skip to main content

Middleware API

Reference for the middleware pipeline.

MiddlewareContext​

class whoosh.middleware.context.MiddlewareContext

Context object passed through all middleware hooks.

Attributes​

AttributeTypeDescription
operationstrOperation type: index, search, delete, commit
indexAnyThe index object
backendAnyThe backend storage object
writerAnyThe index writer
searcherAnyThe searcher
documentdict | NoneDocument being indexed/deleted
querystrSearch query string
collectorAnyCollector instance
resultsAnySearch results
labelsdictMiddleware identification labels
metadatadictArbitrary middleware communication data

Methods​

copy()​

ctx_copy = context.copy()

Create a shallow copy.


Middleware​

class whoosh.middleware.base.Middleware

Base class for all middleware.

Methods​

startup()​

def startup(self, context: MiddlewareContext) -> None:
"""Called once on initialization."""

shutdown()​

def shutdown(self, context: MiddlewareContext) -> None:
"""Called once on teardown."""

before_index()​

def before_index(self, context: MiddlewareContext) -> MiddlewareContext:
"""Called before indexing a document."""

after_index()​

def after_index(self, context: MiddlewareContext) -> MiddlewareContext:
"""Called after indexing a document."""

before_delete()​

def before_delete(self, context: MiddlewareContext) -> MiddlewareContext:
"""Called before deleting a document."""

after_delete()​

def after_delete(self, context: MiddlewareContext) -> MiddlewareContext:
"""Called after deleting a document."""
def before_search(self, context: MiddlewareContext) -> MiddlewareContext:
"""Called before executing a search."""
def after_search(self, context: MiddlewareContext) -> MiddlewareContext:
"""Called after search results are returned."""

on_error()​

def on_error(self, context: MiddlewareContext, exc: Exception) -> None:
"""Called on exception. Re-raise by default."""

on_commit()​

def on_commit(self, context: MiddlewareContext) -> None:
"""Called after commit."""

MiddlewareChain​

class whoosh.middleware.chain.MiddlewareChain

Orchestrates ordered middleware execution.

Methods​

add()​

chain.add(middleware: Middleware)

Add a middleware.


extend()​

chain.extend(middlewares: list[Middleware])

Add multiple middlewares.


run_before()​

context = chain.run_before(
hook_name: str,
context: MiddlewareContext,
fail_open: bool = False
)

Run before hooks in order.


run_after()​

context = chain.run_after(
hook_name: str,
context: MiddlewareContext,
fail_open: bool = False
)

Run after hooks in reverse.


run_on_error()​

chain.run_on_error(context, exc, fail_open=False)

Call on_error hooks.


Built-in Middleware Classes​

MetricsMiddleware​

class whoosh.middleware.base.MetricsMiddleware

Tracks indexing/search counts.

Methods​

after_index()​

Increment documents indexed count.

after_search()​

Increment searches executed count.

get_metrics()​
metrics = metrics_mw.get_metrics() -> dict

Return collected metrics.


CacheMiddleware​

class whoosh.middleware.base.CacheMiddleware

In-memory search cache.

Methods​

before_search()​

Check cache for query.

after_search()​

Store results in cache.

get_cached()​
cached = cache_mw.get_cached(query: str) -> Any
set_cached()​
cache_mw.set_cached(query: str, results: Any)

CompressionMiddleware​

class whoosh.middleware.base.CompressionMiddleware

Mark documents for compression at backend level.


EncryptionMiddleware​

class whoosh.middleware.base.EncryptionMiddleware

Mark documents for encryption at backend level.


Exceptions​

StopOperation​

class whoosh.middleware.exceptions.StopOperation(Exception)

Raise to abort an operation.


Integration Helpers​

apply_middleware_to_writer()​

def apply_middleware_to_writer(
writer: IndexWriter,
middleware: list[Middleware] = None
) -> MiddlewareWriter

apply_middleware_to_searcher()​

def apply_middleware_to_searcher(
searcher: Searcher,
middleware: list[Middleware] = None
) -> MiddlewareSearcher