mirror of
https://github.com/onyx-and-iris/xair-api-python.git
synced 2024-11-22 04:40:58 +00:00
f8c6659fd8
now packaged with poetry and added to pypi using tomllib, requires python 3.11 readme, changelog updated to reflect changes major version bump
100 lines
2.5 KiB
Python
100 lines
2.5 KiB
Python
import abc
|
|
from typing import Optional
|
|
|
|
from .errors import XAirRemoteError
|
|
from .shared import EQ, GEQ, Automix, Config, Dyn, Gate, Group, Insert, Mix, Preamp
|
|
|
|
|
|
class IRtn(abc.ABC):
|
|
"""Abstract Base Class for aux"""
|
|
|
|
def __init__(self, remote, index: Optional[int] = None):
|
|
self._remote = remote
|
|
if index is not None:
|
|
self.index = index + 1
|
|
|
|
def getter(self, param: str):
|
|
self._remote.send(f"{self.address}/{param}")
|
|
return self._remote.info_response
|
|
|
|
def setter(self, param: str, val: int):
|
|
self._remote.send(f"{self.address}/{param}", val)
|
|
|
|
@abc.abstractmethod
|
|
def address(self):
|
|
pass
|
|
|
|
|
|
class Aux(IRtn):
|
|
"""Concrete class for aux"""
|
|
|
|
@classmethod
|
|
def make(cls, remote):
|
|
"""
|
|
Factory function for aux
|
|
|
|
Creates a mixin of shared subclasses, sets them as class attributes.
|
|
|
|
Returns an Aux class of a kind.
|
|
"""
|
|
AUX_cls = type(
|
|
f"Aux{remote.kind}",
|
|
(cls,),
|
|
{
|
|
**{
|
|
_cls.__name__.lower(): type(
|
|
f"{_cls.__name__}{remote.kind}", (_cls, cls), {}
|
|
)(remote)
|
|
for _cls in (
|
|
Config,
|
|
Preamp,
|
|
EQ.make_fourband(cls, remote),
|
|
Mix,
|
|
Group,
|
|
)
|
|
}
|
|
},
|
|
)
|
|
return AUX_cls(remote)
|
|
|
|
@property
|
|
def address(self):
|
|
return "/rtn/aux"
|
|
|
|
|
|
class Rtn(IRtn):
|
|
"""Concrete class for rtn"""
|
|
|
|
@classmethod
|
|
def make(cls, remote, index):
|
|
"""
|
|
Factory function for rtn
|
|
|
|
Creates a mixin of shared subclasses, sets them as class attributes.
|
|
|
|
Returns an Rtn class of a kind.
|
|
"""
|
|
RTN_cls = type(
|
|
f"Rtn{remote.kind.id_}",
|
|
(cls,),
|
|
{
|
|
**{
|
|
_cls.__name__.lower(): type(
|
|
f"{_cls.__name__}{remote.kind.id_}", (_cls, cls), {}
|
|
)(remote, index)
|
|
for _cls in (
|
|
Config,
|
|
Preamp,
|
|
EQ.make_fourband(cls, remote, index),
|
|
Mix,
|
|
Group,
|
|
)
|
|
}
|
|
},
|
|
)
|
|
return RTN_cls(remote, index)
|
|
|
|
@property
|
|
def address(self):
|
|
return f"/rtn/{self.index}"
|