From 2f97b2d7c250d4612654824633122b63d917a937 Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Wed, 30 Nov 2016 15:50:28 -0500 Subject: [PATCH] klippy: Add ConfigWrapper.getchoice method Add helper function that ensures a config option is one of several choices. This helps ensure that a proper error is raised if an invalid choice is made. Signed-off-by: Kevin O'Connor --- klippy/heater.py | 5 ++--- klippy/klippy.py | 7 +++++++ klippy/toolhead.py | 3 +-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/klippy/heater.py b/klippy/heater.py index 827ba324..a7522368 100644 --- a/klippy/heater.py +++ b/klippy/heater.py @@ -26,7 +26,7 @@ class PrinterHeater: self.printer = printer self.config = config self.mcu_pwm = self.mcu_adc = None - self.thermistor_c = Thermistors.get(config.get('thermistor_type')) + self.thermistor_c = config.getchoice('thermistor_type', Thermistors) self.pullup_r = config.getfloat('pullup_resistor', 4700.) self.min_extrude_temp = config.getfloat('min_extrude_temp', 170.) self.can_extrude = (self.min_extrude_temp <= 0.) @@ -48,9 +48,8 @@ class PrinterHeater: self.mcu_adc.set_minmax( SAMPLE_TIME, SAMPLE_COUNT, minval=min_adc, maxval=max_adc) self.mcu_adc.set_adc_callback(REPORT_TIME, self.adc_callback) - control_algo = self.config.get('control', 'watermark') algos = {'watermark': ControlBangBang, 'pid': ControlPID} - self.control = algos[control_algo](self, self.config) + self.control = self.config.getchoice('control', algos)(self, self.config) if self.printer.mcu.is_fileoutput(): self.can_extrude = True def set_pwm(self, read_time, value): diff --git a/klippy/klippy.py b/klippy/klippy.py index bf63d01d..f4cdbb41 100644 --- a/klippy/klippy.py +++ b/klippy/klippy.py @@ -61,6 +61,13 @@ class ConfigWrapper: def getboolean(self, option, default=sentinel): return self.get_wrapper( self.printer.fileconfig.getboolean, option, default) + def getchoice(self, option, choices, default=sentinel): + c = self.get(option, default) + if c not in choices: + raise self.error( + "Option '%s' in section '%s' is not a valid choice" % ( + option, self.section)) + return choices[c] def getsection(self, section): return ConfigWrapper(self.printer, section) diff --git a/klippy/toolhead.py b/klippy/toolhead.py index 5248a589..681ebe73 100644 --- a/klippy/toolhead.py +++ b/klippy/toolhead.py @@ -161,8 +161,7 @@ class ToolHead: self.extruder = printer.objects.get('extruder') kintypes = {'cartesian': cartesian.CartKinematics, 'delta': delta.DeltaKinematics} - kin = config.get('kinematics', 'cartesian') - self.kin = kintypes[kin](printer, config) + self.kin = config.getchoice('kinematics', kintypes)(printer, config) self.max_speed, self.max_accel = self.kin.get_max_speed() self.junction_deviation = config.getfloat('junction_deviation', 0.02) self.move_queue = MoveQueue()