voicemeeter-api-python/voicemeeterlib/event.py
onyx-and-iris ce5936b740 lint fixes
ruff added to dev dependencies

ruff badge added to readme
2023-10-29 09:40:10 +00:00

75 lines
2.0 KiB
Python

import logging
from typing import Iterable, Union
logger = logging.getLogger(__name__)
class Event:
"""Keeps track of event subscriptions"""
def __init__(self, subs: dict):
self.subs = subs
self.logger = logger.getChild(self.__class__.__name__)
def info(self, msg=None):
info = (f"{msg} events",) if msg else ()
if self.any():
info += (f"now listening for {', '.join(self.get())} events",)
else:
info += ("not listening for any events",)
self.logger.info(", ".join(info))
@property
def pdirty(self) -> bool:
return self.subs["pdirty"]
@pdirty.setter
def pdirty(self, val: bool):
self.subs["pdirty"] = val
self.info(f"pdirty {'added to' if val else 'removed from'}")
@property
def mdirty(self) -> bool:
return self.subs["mdirty"]
@mdirty.setter
def mdirty(self, val: bool):
self.subs["mdirty"] = val
self.info(f"mdirty {'added to' if val else 'removed from'}")
@property
def midi(self) -> bool:
return self.subs["midi"]
@midi.setter
def midi(self, val: bool):
self.subs["midi"] = val
self.info(f"midi {'added to' if val else 'removed from'}")
@property
def ldirty(self) -> bool:
return self.subs["ldirty"]
@ldirty.setter
def ldirty(self, val: bool):
self.subs["ldirty"] = val
self.info(f"ldirty {'added to' if val else 'removed from'}")
def get(self) -> list:
return [k for k, v in self.subs.items() if v]
def any(self) -> bool:
return any(self.subs.values())
def add(self, events: Union[str, Iterable[str]]):
if isinstance(events, str):
events = [events]
for event in events:
setattr(self, event, True)
def remove(self, events: Union[str, Iterable[str]]):
if isinstance(events, str):
events = [events]
for event in events:
setattr(self, event, False)