From 87217f6f9c35951f584f4d986aaa515ffc2603d0 Mon Sep 17 00:00:00 2001 From: onyx-and-iris <75868496+onyx-and-iris@users.noreply.github.com> Date: Tue, 8 Nov 2022 16:54:23 +0000 Subject: [PATCH] remove type checks, prefer duck typing. keep bounds checks for any vals passed to lin_set/log_set --- xair_api/config.py | 32 ++-------- xair_api/dca.py | 6 -- xair_api/fx.py | 2 - xair_api/meta.py | 8 --- xair_api/shared.py | 154 +++++++++++++++------------------------------ 5 files changed, 54 insertions(+), 148 deletions(-) diff --git a/xair_api/config.py b/xair_api/config.py index 5154c8e..9dc8d0b 100644 --- a/xair_api/config.py +++ b/xair_api/config.py @@ -57,8 +57,6 @@ class Config(IConfig): @amixenable.setter def amixenable(self, val: bool): - if not isinstance(val, bool): - raise XAirRemoteError("amixenable is a bool parameter") self.setter("amixenable", 1 if val else 0) @property @@ -67,8 +65,6 @@ class Config(IConfig): @amixlock.setter def amixlock(self, val: bool): - if not isinstance(val, bool): - raise XAirRemoteError("amixlock is a bool parameter") self.setter("amixlock", 1 if val else 0) class MuteGroup: @@ -87,8 +83,6 @@ class Config(IConfig): @on.setter def on(self, val: bool): - if not isinstance(val, bool): - raise XAirRemoteError("on is a boolean parameter") self.setter(f"{self.i}", 1 if val else 0) class Monitor: @@ -112,8 +106,6 @@ class Config(IConfig): @source.setter def source(self, val: int): - if not isinstance(val, int): - raise XAirRemoteError("source is an int parameter") self.setter(f"source", val) @property @@ -122,10 +114,8 @@ class Config(IConfig): @sourcetrim.setter def sourcetrim(self, val: float): - if not isinstance(val, float): - raise XAirRemoteError( - "sourcetrim is a float parameter, expected value in range -18 to 18" - ) + if not -18 <= val <= 18: + raise XAirRemoteError("expected value in range -18.0 to 18.0") self.setter("sourcetrim", lin_set(-18, 18, val)) @property @@ -134,8 +124,6 @@ class Config(IConfig): @chmode.setter def chmode(self, val: bool): - if not isinstance(val, bool): - raise XAirRemoteError("chmode is a bool parameter") self.setter("chmode", 1 if val else 0) @property @@ -144,8 +132,6 @@ class Config(IConfig): @busmode.setter def busmode(self, val: bool): - if not isinstance(val, bool): - raise XAirRemoteError("busmode is a bool parameter") self.setter("busmode", 1 if val else 0) @property @@ -154,10 +140,8 @@ class Config(IConfig): @dimgain.setter def dimgain(self, val: int): - if not isinstance(val, int): - raise XAirRemoteError( - "dimgain is an int parameter, expected value in range -40 to 0" - ) + if not -40 <= val <= 0: + raise XAirRemoteError("expected value in range -40 to 0") self.setter("dimatt", lin_set(-40, 0, val)) @property @@ -166,8 +150,6 @@ class Config(IConfig): @dim.setter def dim(self, val: bool): - if not isinstance(val, bool): - raise XAirRemoteError("dim is a bool parameter") self.setter("dim", 1 if val else 0) @property @@ -176,8 +158,6 @@ class Config(IConfig): @mono.setter def mono(self, val: bool): - if not isinstance(val, bool): - raise XAirRemoteError("mono is a bool parameter") self.setter("mono", 1 if val else 0) @property @@ -186,8 +166,6 @@ class Config(IConfig): @mute.setter def mute(self, val: bool): - if not isinstance(val, bool): - raise XAirRemoteError("mute is a bool parameter") self.setter("mute", 1 if val else 0) @property @@ -196,8 +174,6 @@ class Config(IConfig): @dimfpl.setter def dimfpl(self, val: bool): - if not isinstance(val, bool): - raise XAirRemoteError("dimfpl is a bool parameter") self.setter("dimfpl", 1 if val else 0) diff --git a/xair_api/dca.py b/xair_api/dca.py index 23551e9..6360957 100644 --- a/xair_api/dca.py +++ b/xair_api/dca.py @@ -35,8 +35,6 @@ class DCA(IDCA): @on.setter def on(self, val: bool): - if not isinstance(val, bool): - raise XAirRemoteError("on is a boolean parameter") self.setter("on", 1 if val else 0) @property @@ -45,8 +43,6 @@ class DCA(IDCA): @name.setter def name(self, val: str): - if not isinstance(val, str): - raise XAirRemoteError("name is a str parameter") self.setter("config/name")[0] @property @@ -55,6 +51,4 @@ class DCA(IDCA): @color.setter def color(self, val: int): - if not isinstance(val, int): - raise XAirRemoteError("color is an int parameter") self.setter("config/color", val) diff --git a/xair_api/fx.py b/xair_api/fx.py index f7adada..99360c8 100644 --- a/xair_api/fx.py +++ b/xair_api/fx.py @@ -36,8 +36,6 @@ class FX(IFX): @type.setter def type(self, val: int): - if not isinstance(val, int): - raise XAirRemoteError("type is an integer parameter") self.setter("type", val) diff --git a/xair_api/meta.py b/xair_api/meta.py index 9cfd712..59b7fcd 100644 --- a/xair_api/meta.py +++ b/xair_api/meta.py @@ -9,8 +9,6 @@ def bool_prop(param): return self.getter(param)[0] == 1 def fset(self, val): - if not isinstance(val, bool): - raise XAirRemoteError(f"{param} is a boolean parameter") self.setter(param, 1 if val else 0) return property(fget, fset) @@ -23,8 +21,6 @@ def string_prop(param): return self.getter(param)[0] def fset(self, val): - if not isinstance(val, str): - raise XAirRemoteError(f"{param} is a string parameter") self.setter(param, val) return property(fget, fset) @@ -37,8 +33,6 @@ def int_prop(param): return int(self.getter(param)[0]) def fset(self, val): - if not isinstance(val, int): - raise XAirRemoteError(f"{param} is an integer parameter") self.setter(param, val) return property(fget, fset) @@ -51,8 +45,6 @@ def float_prop(param): return round(self.getter(param)[0], 1) def fset(self, val): - if not isinstance(val, int): - raise XAirRemoteError(f"{param} is a float parameter") self.setter(param, val) return property(fget, fset) diff --git a/xair_api/shared.py b/xair_api/shared.py index 0aa67b6..afaaeac 100644 --- a/xair_api/shared.py +++ b/xair_api/shared.py @@ -21,8 +21,6 @@ class Config: @name.setter def name(self, val: str): - if not isinstance(val, str): - raise XAirRemoteError("name is a string parameter") self.setter("name", val) @property @@ -31,8 +29,6 @@ class Config: @color.setter def color(self, val: int): - if not isinstance(val, int): - raise XAirRemoteError("color is an int parameter") self.setter("color", val) @property @@ -41,8 +37,6 @@ class Config: @inputsource.setter def inputsource(self, val: int): - if not isinstance(val, int): - raise XAirRemoteError("inputsource is an int parameter") self.setter("insrc", val) @property @@ -51,8 +45,6 @@ class Config: @usbreturn.setter def usbreturn(self, val: int): - if not isinstance(val, int): - raise XAirRemoteError("usbreturn is an int parameter") self.setter("rtnsrc", val) @@ -68,10 +60,8 @@ class Preamp: @usbtrim.setter def usbtrim(self, val: float): - if not isinstance(val, float): - raise XAirRemoteError( - "usbtrim is a float parameter, expected value in range -18 to 18" - ) + if not -18 <= val <= 18: + raise XAirRemoteError("expected value in range -18.0 to 18.0") self.setter("rtntrim", lin_set(-18, 18, val)) @property @@ -80,8 +70,6 @@ class Preamp: @usbinput.setter def usbinput(self, val: bool): - if not isinstance(val, bool): - raise XAirRemoteError("rtnsw is a bool parameter") self.setter("rtnsw", 1 if val else 0) @property @@ -90,8 +78,6 @@ class Preamp: @invert.setter def invert(self, val: bool): - if not isinstance(val, bool): - raise XAirRemoteError("invert is a bool parameter") self.setter("invert", 1 if val else 0) @property @@ -100,8 +86,6 @@ class Preamp: @highpasson.setter def highpasson(self, val: bool): - if not isinstance(val, bool): - raise XAirRemoteError("hpon is a bool parameter") self.setter("hpon", 1 if val else 0) @property @@ -110,8 +94,8 @@ class Preamp: @highpassfilter.setter def highpassfilter(self, val: int): - if not isinstance(val, int): - raise XAirRemoteError("highpassfilter is an int parameter") + if not 20 <= val <= 400: + raise XAirRemoteError("expected value in range 20 to 400") self.setter("hpf", log_set(20, 400, val)) @@ -127,8 +111,6 @@ class Gate: @on.setter def on(self, val: bool): - if not isinstance(val, bool): - raise XAirRemoteError("on is a boolean parameter") self.setter("on", 1 if val else 0) @property @@ -139,8 +121,8 @@ class Gate: @mode.setter def mode(self, val: str): opts = ("gate", "exp2", "exp3", "exp4", "duck") - if not isinstance(val, str) and val not in opts: - raise XAirRemoteError(f"mode is a string parameter, expected one of {opts}") + if val not in opts: + raise XAirRemoteError(f"expected one of {opts}") self.setter("mode", opts.index(val)) @property @@ -149,10 +131,8 @@ class Gate: @threshold.setter def threshold(self, val: float): - if not isinstance(val, float): - raise XAirRemoteError( - "threshold is a float parameter, expected value in range -80 to 0" - ) + if not -80 <= val <= 0: + raise XAirRemoteError("expected value in range -80.0 to 0.0") self.setter("thr", lin_set(-80, 0, val)) @property @@ -161,10 +141,8 @@ class Gate: @range.setter def range(self, val: int): - if not isinstance(val, int): - raise XAirRemoteError( - "range is an int parameter, expected value in range 3 to 60" - ) + if not 3 <= val <= 60: + raise XAirRemoteError("expected value in range 3 to 60") self.setter("range", lin_set(3, 60, val)) @property @@ -173,10 +151,8 @@ class Gate: @attack.setter def attack(self, val: int): - if not isinstance(val, int): - raise XAirRemoteError( - "attack is an int parameter, expected value in range 0 to 120" - ) + if not 0 <= val <= 120: + raise XAirRemoteError("expected value in range 0 to 120") self.setter("attack", lin_set(0, 120, val)) @property @@ -186,6 +162,8 @@ class Gate: @hold.setter def hold(self, val: float): + if not 0.02 <= val <= 2000: + raise XAirRemoteError("expected value in range 0.02 to 2000.0") self.setter("hold", log_set(0.02, 2000, val)) @property @@ -194,10 +172,8 @@ class Gate: @release.setter def release(self, val: int): - if not isinstance(val, int): - raise XAirRemoteError( - "release is an int parameter, expected value in range 5 to 4000" - ) + if not 5 <= val <= 4000: + raise XAirRemoteError("expected value in range 5 to 4000") self.setter("release", log_set(5, 4000, val)) @property @@ -206,8 +182,6 @@ class Gate: @keysource.setter def keysource(self, val): - if not isinstance(val, int): - raise XAirRemoteError("keysource is an int parameter") self.setter("keysrc", val) @property @@ -216,8 +190,6 @@ class Gate: @filteron.setter def filteron(self, val: bool): - if not isinstance(val, bool): - raise XAirRemoteError("filteron is a boolean parameter") self.setter("filter/on", 1 if val else 0) @property @@ -226,8 +198,6 @@ class Gate: @filtertype.setter def filtertype(self, val: int): - if not isinstance(val, int): - raise XAirRemoteError("filtertype is an int parameter") self.setter("filter/type", val) @property @@ -237,6 +207,8 @@ class Gate: @filterfreq.setter def filterfreq(self, val: Union[float, int]): + if not 20 <= val <= 20000: + raise XAirRemoteError("expected value in range 20 to 20000") self.setter("filter/f", log_set(20, 20000, val)) @@ -252,8 +224,6 @@ class Dyn: @on.setter def on(self, val: bool): - if not isinstance(val, bool): - raise XAirRemoteError("on is a boolean parameter") self.setter("on", 1 if val else 0) @property @@ -264,8 +234,8 @@ class Dyn: @mode.setter def mode(self, val: str): opts = ("comp", "exp") - if not isinstance(val, str) and val not in opts: - raise XAirRemoteError(f"mode is a string parameter, expected one of {opts}") + if val not in opts: + raise XAirRemoteError(f"expected one of {opts}") self.setter("mode", opts.index(val)) @property @@ -276,8 +246,8 @@ class Dyn: @det.setter def det(self, val: str): opts = ("peak", "rms") - if not isinstance(val, str) and val not in opts: - raise XAirRemoteError(f"det is a string parameter, expected one of {opts}") + if val not in opts: + raise XAirRemoteError(f"expected one of {opts}") self.setter("det", opts.index(val)) @property @@ -288,8 +258,8 @@ class Dyn: @env.setter def env(self, val: str): opts = ("lin", "log") - if not isinstance(val, str) and val not in opts: - raise XAirRemoteError(f"env is a string parameter, expected one of {opts}") + if val not in opts: + raise XAirRemoteError(f"expected one of {opts}") self.setter("env", opts.index(val)) @property @@ -298,10 +268,8 @@ class Dyn: @threshold.setter def threshold(self, val: float): - if not isinstance(val, float): - raise XAirRemoteError( - "threshold is a float parameter, expected value in range -80 to 0" - ) + if not -60 <= val <= 0: + raise XAirRemoteError("expected value in range -60.0 to 0") self.setter("thr", lin_set(-60, 0, val)) @property @@ -311,8 +279,6 @@ class Dyn: @ratio.setter def ratio(self, val: int): - if not isinstance(val, int): - raise XAirRemoteError("ratio is an int parameter") self.setter("ratio", val) @property @@ -321,10 +287,8 @@ class Dyn: @knee.setter def knee(self, val: int): - if not isinstance(val, int): - raise XAirRemoteError( - "knee is an int parameter, expected value in range 0 to 5" - ) + if not 0 <= val <= 5: + raise XAirRemoteError("expected value in range 0 to 5") self.setter("knee", lin_set(0, 5, val)) @property @@ -333,6 +297,8 @@ class Dyn: @mgain.setter def mgain(self, val: float): + if not 0 <= val <= 24: + raise XAirRemoteError("expected value in range 0.0 to 24.0") self.setter("mgain", lin_set(0, 24, val)) @property @@ -341,6 +307,8 @@ class Dyn: @attack.setter def attack(self, val: int): + if not 0 <= val <= 120: + raise XAirRemoteError("expected value in range 0 to 120") self.setter("attack", lin_set(0, 120, val)) @property @@ -350,6 +318,8 @@ class Dyn: @hold.setter def hold(self, val: float): + if not 0.02 <= val <= 2000: + raise XAirRemoteError("expected value in range 0.02 to 2000.0") self.setter("hold", log_set(0.02, 2000, val)) @property @@ -358,10 +328,8 @@ class Dyn: @release.setter def release(self, val: int): - if not isinstance(val, int): - raise XAirRemoteError( - "release is an int parameter, expected value in range 5 to 4000" - ) + if not 5 <= val <= 4000: + raise XAirRemoteError("expected value in range 5 to 4000") self.setter("release", log_set(5, 4000, val)) @property @@ -370,10 +338,8 @@ class Dyn: @mix.setter def mix(self, val: int): - if not isinstance(val, int): - raise XAirRemoteError( - "mix is an int parameter, expected value in range 0 to 5" - ) + if not 0 <= val <= 100: + raise XAirRemoteError("expected value in range 0 to 100") self.setter("mix", lin_set(0, 100, val)) @property @@ -382,8 +348,6 @@ class Dyn: @keysource.setter def keysource(self, val): - if not isinstance(val, int): - raise XAirRemoteError("keysource is an int parameter") self.setter("keysrc", val) @property @@ -392,8 +356,6 @@ class Dyn: @auto.setter def auto(self, val: bool): - if not isinstance(val, bool): - raise XAirRemoteError("auto is a boolean parameter") self.setter("auto", 1 if val else 0) @property @@ -402,8 +364,6 @@ class Dyn: @filteron.setter def filteron(self, val: bool): - if not isinstance(val, bool): - raise XAirRemoteError("filteron is a boolean parameter") self.setter("filter/on", 1 if val else 0) @property @@ -412,8 +372,6 @@ class Dyn: @filtertype.setter def filtertype(self, val: int): - if not isinstance(val, int): - raise XAirRemoteError("filtertype is an int parameter") self.setter("filter/type", val) @property @@ -423,6 +381,8 @@ class Dyn: @filterfreq.setter def filterfreq(self, val: Union[float, int]): + if not 20 <= val <= 20000: + raise XAirRemoteError("expected value in range 20 to 20000") self.setter("filter/f", log_set(20, 20000, val)) @@ -438,8 +398,6 @@ class Insert: @on.setter def on(self, val: bool): - if not isinstance(val, bool): - raise XAirRemoteError("on is a boolean parameter") self.setter("on", 1 if val else 0) @property @@ -448,8 +406,6 @@ class Insert: @sel.setter def sel(self, val: int): - if not isinstance(val, int): - raise XAirRemoteError("sel is an int parameter") self.setter("sel", val) @@ -495,8 +451,6 @@ class EQ: @on.setter def on(self, val: bool): - if not isinstance(val, bool): - raise XAirRemoteError("on is a boolean parameter") self.setter("on", 1 if val else 0) @property @@ -507,8 +461,8 @@ class EQ: @mode.setter def mode(self, val: str): opts = ("peq", "geq", "teq") - if not isinstance(val, str) and val not in opts: - raise XAirRemoteError(f"mode is a string parameter, expected one of {opts}") + if val not in opts: + raise XAirRemoteError(f"expected one of {opts}") self.setter("mode", opts.index(val)) class EQBand: @@ -530,8 +484,6 @@ class EQ: @type.setter def type(self, val: int): - if not isinstance(val, int): - raise XAirRemoteError("type is an int parameter") self.setter(f"type", val) @property @@ -541,6 +493,8 @@ class EQ: @frequency.setter def frequency(self, val: float): + if not 20 <= val <= 20000: + raise XAirRemoteError("expected value in range 20.0 to 20000.0") self.setter("f", log_set(20, 20000, val)) @property @@ -549,6 +503,8 @@ class EQ: @gain.setter def gain(self, val: float): + if not -15 <= val <= 15: + raise XAirRemoteError("expected value in range -15.0 to 15.0") self.setter("g", lin_set(-15, 15, val)) @property @@ -558,6 +514,8 @@ class EQ: @quality.setter def quality(self, val: float): + if not 0.3 <= val <= 10: + raise XAirRemoteError("expected value in range 0.3 to 10.0") self.setter("q", log_set(0.3, 10, val)) @@ -600,8 +558,6 @@ class Mix: @on.setter def on(self, val: bool): - if not isinstance(val, bool): - raise XAirRemoteError("on is a boolean parameter") self.setter("on", 1 if val else 0) @property @@ -619,8 +575,6 @@ class Mix: @lr.setter def lr(self, val: bool): - if not isinstance(val, bool): - raise XAirRemoteError("lr is a boolean parameter") self.setter("lr", 1 if val else 0) @@ -636,8 +590,6 @@ class Group: @dca.setter def dca(self, val: int): - if not isinstance(val, int): - raise XAirRemoteError("dca is an int parameter") self.setter("dca", val) @property @@ -646,8 +598,6 @@ class Group: @mute.setter def mute(self, val: int): - if not isinstance(val, int): - raise XAirRemoteError("mute is an int parameter") self.setter("mute", val) @@ -663,8 +613,6 @@ class Automix: @group.setter def group(self, val: int): - if not isinstance(val, int): - raise XAirRemoteError("group is an int parameter") self.setter("group", val) @property @@ -673,8 +621,6 @@ class Automix: @weight.setter def weight(self, val: float): - if not isinstance(val, float): - raise XAirRemoteError( - "weight is a float parameter, expected value in range -12 to 12" - ) + if not -12 <= val <= 12: + raise XAirRemoteError("expected value in range -12.0 to 12.0") self.setter("weight", lin_set(-12, 12, val))