From 85a23106b0c3c42c3be8d9e9b45bd4ec2e7d84f4 Mon Sep 17 00:00:00 2001 From: Julian Schill Date: Sun, 25 Sep 2022 15:26:53 +0100 Subject: [PATCH] Added configuration checks. Moved config parsing to klippy:connect Signed-off-by: Julian Schill --- klippy/extras/led_group.py | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/klippy/extras/led_group.py b/klippy/extras/led_group.py index d60feb9691e3..3becbe2a9b77 100644 --- a/klippy/extras/led_group.py +++ b/klippy/extras/led_group.py @@ -11,21 +11,32 @@ def __init__(self, config): self.configChains = self.configLeds.split('\n') self.leds=[] self.ledChains=[] - self.printer.register_event_handler('klippy:ready', self._handle_ready) + self.printer.register_event_handler('klippy:connect', + self._handle_connect) - def _handle_ready(self): + def _handle_connect(self): for chain in self.configChains: chain = chain.strip() parms = [parameter.strip() for parameter in chain.split() if parameter.strip()] if parms: - ledChain = self.printer.lookup_object(parms[0]\ + if parms[0].startswith("led_group"): + raise self.config.error( + "Error in '%s': LED group of LED groups is not allowed" + % (self.config.get_name(),)) + ledChain = self.printer.lookup_object(parms[0]\ .replace(':',' ')) - ledIndices = ''.join(parms[1:]).strip('()').split(',') + chainLen = ledChain.led_helper.get_led_count() + ledIndices = ''.join(parms[1:]).strip('()').split(',') for led in ledIndices: if led: if '-' in led: start, stop = map(int,led.split('-')) + if start > chainLen or stop > chainLen or \ + start < 1 or stop < 1: + raise self.config.error( + "LED index out of range for '%s' in '%s'" + % (parms[0],self.config.get_name(),)) if stop == start: ledList = [start-1] elif stop > start: @@ -35,11 +46,14 @@ def _handle_ready(self): for i in ledList: self.leds.append((ledChain, int(i))) else: - for i in led.split(','): - self.leds.append((ledChain, \ - (int(i)-1))) + i = int(led) + if i > chainLen or i < 1: + raise self.config.error( + "LED index out of range for '%s' in '%s'" + % (parms[0],self.config.get_name(),)) + self.leds.append((ledChain, (int(i)-1))) else: - for i in range(ledChain.led_helper.get_led_count()): + for i in range(chainLen): self.leds.append((ledChain, int(i))) if ledChain not in self.ledChains: self.ledChains.append(ledChain)