54 lines
1.5 KiB
Python
54 lines
1.5 KiB
Python
"""Shared domain exception classes used across routers and services."""
|
|
|
|
from __future__ import annotations
|
|
|
|
|
|
class JailNotFoundError(Exception):
|
|
"""Raised when a requested jail name does not exist."""
|
|
|
|
def __init__(self, name: str) -> None:
|
|
self.name = name
|
|
super().__init__(f"Jail not found: {name!r}")
|
|
|
|
|
|
class JailOperationError(Exception):
|
|
"""Raised when a fail2ban jail operation fails."""
|
|
|
|
|
|
class ConfigValidationError(Exception):
|
|
"""Raised when config values fail validation before applying."""
|
|
|
|
|
|
class ConfigOperationError(Exception):
|
|
"""Raised when a config payload update or command fails."""
|
|
|
|
|
|
class ServerOperationError(Exception):
|
|
"""Raised when a server control command (e.g. refresh) fails."""
|
|
|
|
|
|
class FilterInvalidRegexError(Exception):
|
|
"""Raised when a regex pattern fails to compile."""
|
|
|
|
def __init__(self, pattern: str, error: str) -> None:
|
|
"""Initialize with the invalid pattern and compile error."""
|
|
self.pattern = pattern
|
|
self.error = error
|
|
super().__init__(f"Invalid regex {pattern!r}: {error}")
|
|
|
|
|
|
class JailNotFoundInConfigError(Exception):
|
|
"""Raised when the requested jail name is not defined in any config file."""
|
|
|
|
def __init__(self, name: str) -> None:
|
|
self.name = name
|
|
super().__init__(f"Jail not found in config: {name!r}")
|
|
|
|
|
|
class ConfigWriteError(Exception):
|
|
"""Raised when writing a configuration file modification fails."""
|
|
|
|
def __init__(self, message: str) -> None:
|
|
self.message = message
|
|
super().__init__(message)
|