rename exceptions + lint fixes

This commit is contained in:
onyx-and-iris 2026-03-19 03:51:36 +00:00
parent 8e8e3ce8a5
commit 8b025206b1
4 changed files with 26 additions and 17 deletions

View File

@ -2,7 +2,7 @@ import ctypes as ct
from ctypes.wintypes import CHAR, FLOAT, LONG from ctypes.wintypes import CHAR, FLOAT, LONG
from .cdll import libc from .cdll import libc
from .error import VMCAPIError from .error import VMAddonCAPIError
class Binds: class Binds:
@ -41,5 +41,5 @@ class Binds:
def call(self, fn, *args, ok=(0,)): def call(self, fn, *args, ok=(0,)):
retval = fn(*args) retval = fn(*args)
if retval not in ok: if retval not in ok:
raise VMCAPIError(fn.__name__, retval) raise VMAddonCAPIError(fn.__name__, retval)
return retval return retval

View File

@ -1,16 +1,22 @@
import ctypes as ct import ctypes as ct
import platform import platform
import winreg
from pathlib import Path from pathlib import Path
from .error import VMError from .error import VMAddonError
try:
import winreg
except ImportError as e:
ERR_MSG = 'winreg module not found, only Windows OS supported'
raise VMAddonError(ERR_MSG) from e
# Defense against edge cases where winreg imports but we're not on Windows
if platform.system() != 'Windows':
ERR_MSG = f'Unsupported OS: {platform.system()}, only Windows OS supported'
raise VMAddonError(ERR_MSG)
BITS = 64 if ct.sizeof(ct.c_voidp) == 8 else 32 BITS = 64 if ct.sizeof(ct.c_voidp) == 8 else 32
if platform.system() != 'Windows':
raise VMError('Only Windows OS supported')
VM_KEY = 'VB:Voicemeeter {17359A74-1236-5467}' VM_KEY = 'VB:Voicemeeter {17359A74-1236-5467}'
REG_KEY = '\\'.join( REG_KEY = '\\'.join(
filter( filter(
@ -35,12 +41,14 @@ def get_vmpath():
try: try:
vm_parent = Path(get_vmpath()).parent vm_parent = Path(get_vmpath()).parent
except FileNotFoundError as e: except FileNotFoundError as e:
raise VMError('Unable to fetch DLL path from the registry') from e ERR_MSG = 'Voicemeeter installation not found in registry'
raise VMAddonError(ERR_MSG) from e
DLL_NAME = f'VoicemeeterRemote{"64" if BITS == 64 else ""}.dll' DLL_NAME = f'VoicemeeterRemote{"64" if BITS == 64 else ""}.dll'
dll_path = vm_parent.joinpath(DLL_NAME) dll_path = vm_parent.joinpath(DLL_NAME)
if not dll_path.is_file(): if not dll_path.is_file():
raise VMError(f'Could not find {dll_path}') ERR_MSG = f'Could not find {dll_path}'
raise VMAddonError(ERR_MSG)
libc = ct.WinDLL(str(dll_path)) libc = ct.WinDLL(str(dll_path))

View File

@ -1,9 +1,9 @@
class VMError(Exception): class VMAddonError(Exception):
"""Base voicemeeterlib exception class""" """Base voicemeeter add-on exception class"""
class VMCAPIError(VMError): class VMAddonCAPIError(VMAddonError):
"""Exception raised when the C-API returns an error code""" """Exception raised when the Voicemeeter C-API returns an error code"""
def __init__(self, fn_name, code): def __init__(self, fn_name, code):
self.fn_name = fn_name self.fn_name = fn_name

View File

@ -1,7 +1,7 @@
from dataclasses import dataclass from dataclasses import dataclass
from enum import Enum, unique from enum import Enum, unique
from .error import VMError from .error import VMAddonError
@unique @unique
@ -78,7 +78,8 @@ def kind_factory(kind_id):
elif kind_id == 'potato': elif kind_id == 'potato':
_kind_map = PotatoMap _kind_map = PotatoMap
else: else:
raise ValueError(f'Unknown Voicemeeter kind {kind_id}') ERR_MSG = f'Unknown Voicemeeter kind {kind_id}'
raise ValueError(ERR_MSG)
return _kind_map(name=kind_id) return _kind_map(name=kind_id)
@ -87,5 +88,5 @@ def request_kind_map(kind_id):
try: try:
KIND_obj = kind_factory(kind_id) KIND_obj = kind_factory(kind_id)
except ValueError as e: except ValueError as e:
raise VMError(str(e)) from e raise VMAddonError(str(e)) from e
return KIND_obj return KIND_obj