voicemeeter-api-python/voicemeeterlib/iremote.py
onyx-and-iris 48b2857c58 tomli/tomllib compatibility layer added.
Type annotation Self removed.

python version requirement changed.

tomli added as runtime dependency if py ver < 3.11

minor version bump.
2022-09-03 16:28:19 +01:00

42 lines
1.1 KiB
Python

import time
from abc import ABCMeta, abstractmethod
class IRemote(metaclass=ABCMeta):
"""
Common interface between base class and extended (higher) classes
Provides some default implementation
"""
def __init__(self, remote, index=None):
self._remote = remote
self.index = index
def getter(self, param, **kwargs):
"""Gets a parameter value"""
return self._remote.get(f"{self.identifier}.{param}", **kwargs)
def setter(self, param, val):
"""Sets a parameter value"""
self._remote.set(f"{self.identifier}.{param}", val)
@abstractmethod
def identifier(self):
pass
def apply(self, data: dict):
def fget(attr, val):
if attr == "mode":
return (getattr(self, attr), val, 1)
return (self, attr, val)
for attr, val in data.items():
if hasattr(self, attr):
target, attr, val = fget(attr, val)
setattr(target, attr, val)
return self
def then_wait(self):
time.sleep(self._remote.DELAY)