You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
3.3 KiB
138 lines
3.3 KiB
"""Contains SphinxError and a few subclasses."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
|
|
class SphinxError(Exception):
|
|
"""Base class for Sphinx errors.
|
|
|
|
This is the base class for "nice" exceptions. When such an exception is
|
|
raised, Sphinx will abort the build and present the exception category and
|
|
message to the user.
|
|
|
|
Extensions are encouraged to derive from this exception for their custom
|
|
errors.
|
|
|
|
Exceptions *not* derived from :exc:`SphinxError` are treated as unexpected
|
|
and shown to the user with a part of the traceback (and the full traceback
|
|
saved in a temporary file).
|
|
|
|
.. attribute:: category
|
|
|
|
Description of the exception "category", used in converting the
|
|
exception to a string ("category: message"). Should be set accordingly
|
|
in subclasses.
|
|
"""
|
|
|
|
category = 'Sphinx error'
|
|
|
|
|
|
class SphinxWarning(SphinxError):
|
|
"""Warning, treated as error."""
|
|
|
|
category = 'Warning, treated as error'
|
|
|
|
|
|
class ApplicationError(SphinxError):
|
|
"""Application initialization error."""
|
|
|
|
category = 'Application error'
|
|
|
|
|
|
class ExtensionError(SphinxError):
|
|
"""Extension error."""
|
|
|
|
def __init__(
|
|
self, message: str, orig_exc: Exception | None = None, modname: str | None = None
|
|
) -> None:
|
|
super().__init__(message)
|
|
self.message = message
|
|
self.orig_exc = orig_exc
|
|
self.modname = modname
|
|
|
|
@property
|
|
def category(self) -> str: # type: ignore[override]
|
|
if self.modname:
|
|
return 'Extension error (%s)' % self.modname
|
|
else:
|
|
return 'Extension error'
|
|
|
|
def __repr__(self) -> str:
|
|
if self.orig_exc:
|
|
return f'{self.__class__.__name__}({self.message!r}, {self.orig_exc!r})'
|
|
return f'{self.__class__.__name__}({self.message!r})'
|
|
|
|
def __str__(self) -> str:
|
|
parent_str = super().__str__()
|
|
if self.orig_exc:
|
|
return f'{parent_str} (exception: {self.orig_exc})'
|
|
return parent_str
|
|
|
|
|
|
class BuildEnvironmentError(SphinxError):
|
|
"""BuildEnvironment error."""
|
|
|
|
category = 'BuildEnvironment error'
|
|
|
|
|
|
class ConfigError(SphinxError):
|
|
"""Configuration error."""
|
|
|
|
category = 'Configuration error'
|
|
|
|
|
|
class DocumentError(SphinxError):
|
|
"""Document error."""
|
|
|
|
category = 'Document error'
|
|
|
|
|
|
class ThemeError(SphinxError):
|
|
"""Theme error."""
|
|
|
|
category = 'Theme error'
|
|
|
|
|
|
class VersionRequirementError(SphinxError):
|
|
"""Incompatible Sphinx version error."""
|
|
|
|
category = 'Sphinx version error'
|
|
|
|
|
|
class SphinxParallelError(SphinxError):
|
|
"""Sphinx parallel build error."""
|
|
|
|
category = 'Sphinx parallel build error'
|
|
|
|
def __init__(self, message: str, traceback: Any) -> None:
|
|
self.message = message
|
|
self.traceback = traceback
|
|
|
|
def __str__(self) -> str:
|
|
return self.message
|
|
|
|
|
|
class PycodeError(Exception):
|
|
"""Pycode Python source code analyser error."""
|
|
|
|
def __str__(self) -> str:
|
|
res = self.args[0]
|
|
if len(self.args) > 1:
|
|
res += ' (exception was: %r)' % self.args[1]
|
|
return res
|
|
|
|
|
|
class NoUri(Exception):
|
|
"""Raised by builder.get_relative_uri() or from missing-reference handlers
|
|
if there is no URI available.
|
|
"""
|
|
|
|
pass
|
|
|
|
|
|
class FiletypeNotFoundError(Exception):
|
|
"""Raised by get_filetype() if a filename matches no source suffix."""
|
|
|
|
pass
|
|
|