Source code for meilisearch.errors

from __future__ import annotations

import json
from functools import wraps
from typing import TYPE_CHECKING, Any, Callable, TypeVar

from requests import Response

if TYPE_CHECKING:  # pragma: no cover
    from meilisearch.client import Client
    from meilisearch.index import Index
    from meilisearch.task import TaskHandler

T = TypeVar("T")


[docs] class MeilisearchError(Exception): # pragma: no cover """Generic class for Meilisearch error handling""" def __init__(self, message: str) -> None: self.message = message super().__init__(self.message) def __str__(self) -> str: return f"MeilisearchError. Error message: {self.message}"
[docs] class MeilisearchApiError(MeilisearchError): """Error sent by Meilisearch API""" def __init__(self, error: str, request: Response) -> None: self.status_code = request.status_code self.code = None self.link = None self.type = None if request.text: json_data = json.loads(request.text) self.message = json_data.get("message") self.code = json_data.get("code") self.link = json_data.get("link") self.type = json_data.get("type") else: self.message = error super().__init__(self.message) def __str__(self) -> str: if self.code and self.link: # pragma: no cover return f"MeilisearchApiError. Error code: {self.code}. Error message: {self.message} Error documentation: {self.link} Error type: {self.type}" return f"MeilisearchApiError. {self.message}"
[docs] class MeilisearchCommunicationError(MeilisearchError): """Error when connecting to Meilisearch""" def __str__(self) -> str: # pragma: no cover return f"MeilisearchCommunicationError, {self.message}"
[docs] class MeilisearchTimeoutError(MeilisearchError): """Error when Meilisearch operation takes longer than expected""" def __str__(self) -> str: # pragma: no cover return f"MeilisearchTimeoutError, {self.message}"
[docs] def version_error_hint_message(func: Callable[..., T]) -> Callable[..., T]: @wraps(func) def wrapper(*args: Any, **kwargs: Any) -> Any: try: return func(*args, **kwargs) except MeilisearchApiError as exc: exc.message = f"{exc.message}. Hint: It might not be working because you're not up to date with the Meilisearch version that {func.__name__} call requires." raise exc return wrapper