from collections import namedtuple from mopidy import config class PinConfig(config.ConfigValue): tuple_pinconfig = namedtuple("PinConfig", ("event", "active", "bouncetime")) valid_events = "play_pause", "prev", "next", "volume_up", "volume_down" valid_modes = "active_low", "active_high" def __init__(self): pass def deserialize(self, value): if value is None: return None value = config.decode(value).strip() try: event, active, bouncetime = value.split(',') except ValueError: return None if event not in self.valid_events: raise ValueError( "invalid event for pin config {:s} (Must be {})".format( event, ", ".join(self.valid_events) ) ) if active not in self.valid_modes: raise ValueError( "invalid mode for pin config {:s} (Must be {})".format( event, ", ".join(self.valid_events) ) ) try: bouncetime = int(bouncetime) except ValueError: raise ValueError( "invalid bouncetime value for pin config {}".format(bouncetime) ) return self.tuple_pinconfig(event, active, bouncetime) def serialize(self, value, display=False): if value is None: return "" value = "{:s},{:s},{:d}".format( value.event, value.active, value.bouncetime) return config.encode(value)