Add support for additional per pin event options
parent
e40219c254
commit
e5a18757ba
|
@ -12,7 +12,7 @@ class ValidList(list):
|
||||||
|
|
||||||
|
|
||||||
class PinConfig(config.ConfigValue):
|
class PinConfig(config.ConfigValue):
|
||||||
tuple_pinconfig = namedtuple("PinConfig", ("event", "active", "bouncetime"))
|
tuple_pinconfig = namedtuple("PinConfig", ("event", "active", "bouncetime", "options"))
|
||||||
|
|
||||||
valid_events = ValidList(
|
valid_events = ValidList(
|
||||||
["play_pause", "prev", "next", "volume_up", "volume_down"]
|
["play_pause", "prev", "next", "volume_up", "volume_down"]
|
||||||
|
@ -29,11 +29,13 @@ class PinConfig(config.ConfigValue):
|
||||||
|
|
||||||
value = types.decode(value).strip()
|
value = types.decode(value).strip()
|
||||||
|
|
||||||
try:
|
value = value.split(",")
|
||||||
event, active, bouncetime = value.split(",")
|
|
||||||
except ValueError:
|
if len(value) < 3: # At least Event, Active and Bouncetime settings required
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
event, active, bouncetime = value[0:3]
|
||||||
|
|
||||||
if event not in self.valid_events:
|
if event not in self.valid_events:
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
f"invalid event for pin config {event} (Must be {self.valid_events})"
|
f"invalid event for pin config {event} (Must be {self.valid_events})"
|
||||||
|
@ -51,10 +53,17 @@ class PinConfig(config.ConfigValue):
|
||||||
f"invalid bouncetime value for pin config {bouncetime}"
|
f"invalid bouncetime value for pin config {bouncetime}"
|
||||||
)
|
)
|
||||||
|
|
||||||
return self.tuple_pinconfig(event, active, bouncetime)
|
options = {}
|
||||||
|
|
||||||
|
for option in value[3:]:
|
||||||
|
key, value = option.split("=")
|
||||||
|
options[key] = value
|
||||||
|
|
||||||
|
return self.tuple_pinconfig(event, active, bouncetime, options)
|
||||||
|
|
||||||
def serialize(self, value, display=False):
|
def serialize(self, value, display=False):
|
||||||
if value is None:
|
if value is None:
|
||||||
return ""
|
return ""
|
||||||
|
options = ",".join({f'{k}={v}' for k, v in value.options.items()})
|
||||||
value = f"{value.event},{value.active},{value.bouncetime}"
|
value = f"{value.event},{value.active},{value.bouncetime}"
|
||||||
return types.encode(value)
|
return types.encode(value)
|
||||||
|
|
|
@ -59,3 +59,21 @@ def test_pinconfig_invalid_bouncetime_raises_valueerror():
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
bcm1 = schema["bcm1"].deserialize("play_pause,active_low,tomato")
|
bcm1 = schema["bcm1"].deserialize("play_pause,active_low,tomato")
|
||||||
del bcm1
|
del bcm1
|
||||||
|
|
||||||
|
|
||||||
|
def test_pinconfig_additional_options():
|
||||||
|
ext = Extension()
|
||||||
|
|
||||||
|
schema = ext.get_config_schema()
|
||||||
|
|
||||||
|
bcm1 = schema["bcm1"].deserialize("volume_up,active_low,30,steps=1")
|
||||||
|
del bcm1
|
||||||
|
|
||||||
|
|
||||||
|
def test_pinconfig_serialize():
|
||||||
|
ext = Extension()
|
||||||
|
|
||||||
|
schema = ext.get_config_schema()
|
||||||
|
|
||||||
|
bcm1 = schema["bcm1"].deserialize("volume_up,active_low,30,steps=1")
|
||||||
|
assert bcm1.serialize() == "volume_up,active_low,30,steps=1"
|
||||||
|
|
Loading…
Reference in New Issue