configfile: Support config.getchoice() with integer keys

If the choice mapping uses integer keys then lookup the config option
using self.getint().  This simplifies the callers and improves the
encoding of the printer.configfile.settings export.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor 2021-08-25 10:36:45 -04:00
parent 75183bfb86
commit 84ac5b0146
5 changed files with 24 additions and 24 deletions

View File

@ -69,7 +69,10 @@ class ConfigWrapper:
return self._get_wrapper(self.fileconfig.getboolean, option, default, return self._get_wrapper(self.fileconfig.getboolean, option, default,
note_valid=note_valid) note_valid=note_valid)
def getchoice(self, option, choices, default=sentinel, note_valid=True): def getchoice(self, option, choices, default=sentinel, note_valid=True):
c = self.get(option, default, note_valid=note_valid) if choices and type(list(choices.keys())[0]) == int:
c = self.getint(option, default, note_valid=note_valid)
else:
c = self.get(option, default, note_valid=note_valid)
if c not in choices: if c not in choices:
raise error("Choice '%s' for option '%s' in section '%s'" raise error("Choice '%s' for option '%s' in section '%s'"
" is not a valid choice" % (c, option, self.section)) " is not a valid choice" % (c, option, self.section))

View File

@ -7,8 +7,8 @@
import logging import logging
BACKGROUND_PRIORITY_CLOCK = 0x7fffffff00000000 BACKGROUND_PRIORITY_CLOCK = 0x7fffffff00000000
LINE_LENGTH_DEFAULT="20" LINE_LENGTH_DEFAULT=20
LINE_LENGTH_OPTIONS={"16":16, "20":20} LINE_LENGTH_OPTIONS={16:16, 20:20}
TextGlyphs = { 'right_arrow': '\x7e' } TextGlyphs = { 'right_arrow': '\x7e' }
@ -22,9 +22,9 @@ class HD44780:
pins = [ppins.lookup_pin(config.get(name + '_pin')) pins = [ppins.lookup_pin(config.get(name + '_pin'))
for name in ['rs', 'e', 'd4', 'd5', 'd6', 'd7']] for name in ['rs', 'e', 'd4', 'd5', 'd6', 'd7']]
self.hd44780_protocol_init = config.getboolean('hd44780_protocol_init', self.hd44780_protocol_init = config.getboolean('hd44780_protocol_init',
True) True)
self.line_length = config.getchoice('line_length', LINE_LENGTH_OPTIONS, self.line_length = config.getchoice('line_length', LINE_LENGTH_OPTIONS,
LINE_LENGTH_DEFAULT) LINE_LENGTH_DEFAULT)
mcu = None mcu = None
for pin_params in pins: for pin_params in pins:
if mcu is not None and pin_params['chip'] != mcu: if mcu is not None and pin_params['chip'] != mcu:
@ -43,9 +43,9 @@ class HD44780:
self.all_framebuffers = [ self.all_framebuffers = [
# Text framebuffers # Text framebuffers
(self.text_framebuffers[0], bytearray('~'*2*self.line_length), (self.text_framebuffers[0], bytearray('~'*2*self.line_length),
0x80), 0x80),
(self.text_framebuffers[1], bytearray('~'*2*self.line_length), (self.text_framebuffers[1], bytearray('~'*2*self.line_length),
0xc0), 0xc0),
# Glyph framebuffer # Glyph framebuffer
(self.glyph_framebuffer, bytearray('~'*64), 0x40) ] (self.glyph_framebuffer, bytearray('~'*64), 0x40) ]
def build_config(self): def build_config(self):

View File

@ -8,8 +8,8 @@
import logging import logging
from .. import bus from .. import bus
LINE_LENGTH_DEFAULT="20" LINE_LENGTH_DEFAULT=20
LINE_LENGTH_OPTIONS={"16":16, "20":20} LINE_LENGTH_OPTIONS={16:16, 20:20}
TextGlyphs = { 'right_arrow': '\x7e' } TextGlyphs = { 'right_arrow': '\x7e' }
@ -19,7 +19,7 @@ class hd44780_spi:
def __init__(self, config): def __init__(self, config):
self.printer = config.get_printer() self.printer = config.get_printer()
self.hd44780_protocol_init = config.getboolean('hd44780_protocol_init', self.hd44780_protocol_init = config.getboolean('hd44780_protocol_init',
True) True)
# spi config # spi config
self.spi = bus.MCU_SPI_from_config( self.spi = bus.MCU_SPI_from_config(
config, 0x00, pin_option="latch_pin") config, 0x00, pin_option="latch_pin")
@ -31,7 +31,7 @@ class hd44780_spi:
self.icons = {} self.icons = {}
self.line_length = config.getchoice('line_length', LINE_LENGTH_OPTIONS, self.line_length = config.getchoice('line_length', LINE_LENGTH_OPTIONS,
LINE_LENGTH_DEFAULT) LINE_LENGTH_DEFAULT)
# framebuffers # framebuffers
self.text_framebuffers = [bytearray(' '*2*self.line_length), self.text_framebuffers = [bytearray(' '*2*self.line_length),
@ -40,9 +40,9 @@ class hd44780_spi:
self.all_framebuffers = [ self.all_framebuffers = [
# Text framebuffers # Text framebuffers
(self.text_framebuffers[0], bytearray('~'*2*self.line_length), (self.text_framebuffers[0], bytearray('~'*2*self.line_length),
0x80), 0x80),
(self.text_framebuffers[1], bytearray('~'*2*self.line_length), (self.text_framebuffers[1], bytearray('~'*2*self.line_length),
0xc0), 0xc0),
# Glyph framebuffer # Glyph framebuffer
(self.glyph_framebuffer, bytearray('~'*64), 0x40) ] (self.glyph_framebuffer, bytearray('~'*64), 0x40) ]
def send_4_bits(self, cmd, is_data, minclock): def send_4_bits(self, cmd, is_data, minclock):

View File

@ -167,13 +167,13 @@ class MAX31856(SensorBase):
} }
value = config.getchoice('tc_type', types, default="K") value = config.getchoice('tc_type', types, default="K")
averages = { averages = {
"1" : MAX31856_CR1_AVGSEL1, 1 : MAX31856_CR1_AVGSEL1,
"2" : MAX31856_CR1_AVGSEL2, 2 : MAX31856_CR1_AVGSEL2,
"4" : MAX31856_CR1_AVGSEL4, 4 : MAX31856_CR1_AVGSEL4,
"8" : MAX31856_CR1_AVGSEL8, 8 : MAX31856_CR1_AVGSEL8,
"16" : MAX31856_CR1_AVGSEL16 16 : MAX31856_CR1_AVGSEL16
} }
value |= config.getchoice('tc_averaging_count', averages, "1") value |= config.getchoice('tc_averaging_count', averages, 1)
cmds.append(value) cmds.append(value)
value = (MAX31856_MASK_VOLTAGE_UNDER_OVER_FAULT | value = (MAX31856_MASK_VOLTAGE_UNDER_OVER_FAULT |

View File

@ -472,11 +472,8 @@ def TMCMicrostepHelper(config, mcu_tmc):
and config.get('microsteps', None, note_valid=False) is not None): and config.get('microsteps', None, note_valid=False) is not None):
# Older config format with microsteps in tmc config section # Older config format with microsteps in tmc config section
ms_config = config ms_config = config
ms = ms_config.getint('microsteps') steps = {256: 0, 128: 1, 64: 2, 32: 3, 16: 4, 8: 5, 4: 6, 2: 7, 1: 8}
mres = {256: 0, 128: 1, 64: 2, 32: 3, 16: 4, 8: 5, 4: 6, 2: 7, 1: 8}.get(ms) mres = ms_config.getchoice('microsteps', steps)
if mres is None:
raise config.error("Invalid '%s' microstep setting (%d)"
% (config.get_name(), ms))
fields.set_field("mres", mres) fields.set_field("mres", mres)
fields.set_field("intpol", config.getboolean("interpolate", True)) fields.set_field("intpol", config.getboolean("interpolate", True))