Files
synology-api/synology_api/exceptions.py
2023-03-19 10:32:58 -04:00

321 lines
12 KiB
Python

from .error_codes import error_codes, auth_error_codes, download_station_error_codes, file_station_error_codes
from .error_codes import virtualization_error_codes
# Base exception:
class SynoBaseException(Exception):
"""Base class for an exception. Defines error_message."""
def __init__(self, error_message: str, *args: object) -> None:
super().__init__(*args)
self.error_message = error_message
return
# Classes to reraise Exceptions from requests.
class SynoConnectionError(SynoBaseException):
"""Class to raise when a connection error occurs."""
def __init__(self, error_message: str, *args: object) -> None:
super().__init__(error_message=error_message, *args)
return
class HTTPError(SynoBaseException):
"""Class to raise when a http error occurs."""
def __init__(self, error_message: str, *args: object) -> None:
super().__init__(error_message, *args)
return
class JSONDecodeError(SynoBaseException):
"""Class to raise when server fails to send JSON."""
def __init__(self, error_message: str, *args: object) -> None:
super().__init__(error_message, *args)
return
# Classes for when we receive an error code in the JSON from the server.
class LoginError(SynoBaseException):
"""Class for an error during login."""
def __init__(self, error_code: int, *args: object) -> None:
self.error_code: int = error_code
if error_code not in error_codes.keys():
super().__init__(error_message=auth_error_codes[error_code], *args)
else:
super().__init__(error_message=error_codes[error_code], *args)
return
class LogoutError(SynoBaseException):
"""Class for an error during logout."""
def __init__(self, error_code: int, *args: object) -> None:
self.error_code: int = error_code
if error_code in error_codes.keys():
super().__init__(error_message=error_codes[error_code], *args)
else:
super().__init__(error_message=auth_error_codes[error_code], *args)
return
class DownloadStationError(SynoBaseException):
"""Class for an error during a download station request."""
def __init__(self, error_code: int, *args: object) -> None:
self.error_code: int = error_code
if error_code in error_codes.keys():
super().__init__(error_message=error_codes[error_code], *args)
elif error_code in download_station_error_codes.keys():
super().__init__(error_message=download_station_error_codes[error_code], *args)
else:
super().__init__(error_message="DownloadStation Error: %i" % error_code, *args)
return
class FileStationError(SynoBaseException):
"""Class for an error during a file station request."""
def __init__(self, error_code: int, *args: object) -> None:
self.error_code: int = error_code
if error_code in error_codes.keys():
super().__init__(error_message=error_codes[error_code], *args)
elif error_code in file_station_error_codes.keys():
super().__init__(error_message=file_station_error_codes[error_code], *args)
else:
super().__init__(error_message="FileStation Error: %i" % error_code, *args)
return
class VirtualizationError(SynoBaseException):
"""Class for an error during a virtualization request."""
def __init__(self, error_code: int, *args: object) -> None:
self.error_code = error_code
if error_code in error_codes.keys():
super().__init__(error_message=error_codes[error_code], *args)
elif error_code in virtualization_error_codes.keys():
super().__init__(error_message=virtualization_error_codes[error_code], *args)
else:
super().__init__(error_message="Virtualization Error: %i" % error_code, *args)
return
class AudioStationError(SynoBaseException):
"""Class for an error during an audio station request. NOTE: I can't find any documentation on the audio station
webAPI errors numbers and their respective messages."""
def __init__(self, error_code: int, *args: object) -> None:
self.error_code = error_code
if error_code in error_codes.keys():
super().__init__(error_message=error_codes[error_code], *args)
else:
super().__init__(error_message="AudioStation Error: %i" % error_code, *args)
return
class ActiveBackupError(SynoBaseException):
"""Class for an error during ActiveBackup request. NOTE: I can't find any documentation on error codes or their
respective messages."""
def __init__(self, error_code: int, *args: object) -> None:
self.error_code = error_code
if error_code in error_codes.keys():
super().__init__(error_message=error_codes[error_code], *args)
else:
super().__init__(error_message='ActiveBackup Error: %i' % error_code, *args)
class BackupError(SynoBaseException):
"""Class for an error during backup request. NOTE: Again I can't find error code documentation."""
def __init__(self, error_code: int, *args: object) -> None:
self.error_code = error_code
if error_code in error_codes.keys():
super().__init__(error_message=error_codes[error_code], *args)
else:
super().__init__(error_message="Backup Error: %i" % error_code, *args)
return
class CertificateError(SynoBaseException):
"""Class for an error during Core.Certificate request. NOTE: Lacking documentation."""
def __init__(self, error_code: int, *args: object) -> None:
self.error_code = error_code
if error_code in error_codes.keys():
super().__init__(error_message=error_codes[error_code])
else:
super().__init__(error_message="Certificate Error: %i" % error_code, *args)
return
class DHCPServerError(SynoBaseException):
"""Class for an error during a DHCPServer request."""
def __init__(self, error_code: int, *args: object) -> None:
self.error_code = error_code
if error_code in error_codes.keys():
super().__init__(error_message=error_codes[error_code], *args)
else:
super().__init__(error_message="DHCPServer Error: %i" % error_code, *args)
return
class DirectoryServerError(SynoBaseException):
"""Class for an error during a directory server request. NOTE: No docs on errors."""
def __init__(self, error_code: int, *args: object) -> None:
self.error_code = error_code
if error_code in error_codes.keys():
super().__init__(error_message=error_codes[error_code], *args)
else:
super().__init__(error_message="DirectoryServer Error: %i" % error_code, *args)
return
class DockerError(SynoBaseException):
"""Class for an error during a docker request. NOTE: No docs on errors."""
def __init__(self, error_code: int, *args: object) -> None:
self.error_code = error_code
if error_code in error_codes.keys():
super().__init__(error_message=error_codes[error_code], *args)
else:
super().__init__(error_message="Docker Error: %i" % error_code, *args)
return
class DriveAdminError(SynoBaseException):
"""Class for an error during a drive admin request. NOTE: No error docs."""
def __init__(self, error_code: int, *args: object) -> None:
self.error_code = error_code
if error_code in error_codes.keys():
super().__init__(error_message=error_codes[error_code], *args)
else:
super().__init__(error_message="DriveAdmin Error: %i" % error_code, *args)
return
class LogCenterError(SynoBaseException):
"""Class for an error during a LogCenter request. NOTE: No docs on errors.... again."""
def __init__(self, error_code: int, *args: object) -> None:
self.error_code = error_code
if error_code in error_codes.keys():
super().__init__(error_message=error_codes[error_code], *args)
else:
super().__init__(error_message="LogCenter Error: %i" % error_code, *args)
return
class NoteStationError(SynoBaseException):
"""Class for an error during a NoteStation request. NOTE: No error docs."""
def __init__(self, error_code: int, *args: object) -> None:
self.error_code = error_code
if error_code in error_codes.keys():
super().__init__(error_message=error_codes[error_code], *args)
else:
super().__init__(error_message="NoteStation Error: %i" % error_code, *args)
return
class OAUTHError(SynoBaseException):
"""Class for an error during a OAUTH request. NOTE: No error docs."""
def __init__(self, error_code: int, *args: object) -> None:
self.error_code = error_code
if error_code in error_codes.keys():
super().__init__(error_message=error_codes[error_code], *args)
else:
super().__init__(error_message="OAUTH Error: %i" % error_code, *args)
return
class PhotosError(SynoBaseException):
"""Class for an error during a Photos request. NOTE: No error docs."""
def __init__(self, error_code: int, *args: object) -> None:
self.error_code = error_code
if error_code in error_codes.keys():
super().__init__(error_message=error_codes[error_code], *args)
else:
super().__init__(error_message="Photos Error: %i" % error_code, *args)
return
class SecurityAdvisorError(SynoBaseException):
"""Class for an error during a SecurityAdvisor request. NOTE: What docs?"""
def __init__(self, error_code: int, *args: object) -> None:
self.error_code = error_code
if error_code in error_codes.keys():
super().__init__(error_message=error_codes[error_code], *args)
else:
super().__init__(error_message="SecurityAdvisor Error: %i" % error_code, *args)
return
class UniversalSearchError(SynoBaseException):
"""Class for an error during UniversalSearch request. NOTE:... no docs on errors...."""
def __init__(self, error_code: int, *args: object) -> None:
self.error_code = error_code
if error_code in error_codes.keys():
super().__init__(error_message=error_codes[error_code], *args)
else:
super().__init__(error_message="UniversalSearch Error: %i" % error_code, *args)
return
class USBCopyError(SynoBaseException):
"""Class for an error during a USBCopy request. NOTE: No docs on errors."""
def __init__(self, error_code: int, *args: object) -> None:
self.error_code = error_code
if error_code in error_codes.keys():
super().__init__(error_message=error_codes[error_code], *args)
else:
super().__init__(error_message="USBCopy Error: %i" % error_code, *args)
class VPNError(SynoBaseException):
"""Class for an error during a VPN request. NOTE: No docs on errors."""
def __init__(self, error_code: int, *args: object) -> None:
self.error_code = error_code
if error_code in error_codes.keys():
super().__init__(error_message=error_codes[error_code], *args)
else:
super().__init__(error_message="VPN Error: %i" % error_code, *args)
return
class CoreSysInfoError(SynoBaseException):
"""Class for an error during a SYNO.Core.*, 'SYNO.Backup.Service.NetworkBackup', SYNO.Storage.*,
'SYNO.Finder.FileIndexing.Status', 'SYNO.S2S.Server.Pair', SYNO.ResourceMonitor.*
"""
def __init__(self, error_code: int, *args: object) -> None:
self.error_code = error_code
if error_code in error_codes.keys():
super().__init__(error_message=error_codes[error_code], *args)
else:
super().__init__(error_message="CoreSysInfo Error: %i" % error_code, *args)
return
class UndefinedError(SynoBaseException):
"""Class for undefined errors."""
def __init__(self, error_code: int, api_name: str, *args: object) -> None:
self.error_code = error_code
self.api_name = api_name
super().__init__(error_message="Undefined Error: API: %s, Code: %i" % (api_name, error_code), *args)
return