diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2021-08-19 13:03:35 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2021-08-21 18:08:10 -0400 |
commit | f9ca5b90980273bbfab7e1636ac7cfe60e5ce839 (patch) | |
tree | 4fcd0c34dfb711f2043b5afe8aa44eac4b5e7672 /klippy/configfile.py | |
parent | c64ea474d70b235b8e75a20840b8dc93ffdda004 (diff) | |
download | kutter-f9ca5b90980273bbfab7e1636ac7cfe60e5ce839.tar.gz kutter-f9ca5b90980273bbfab7e1636ac7cfe60e5ce839.tar.xz kutter-f9ca5b90980273bbfab7e1636ac7cfe60e5ce839.zip |
configfile: Add helpers for parsing list of parameters from the config
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/configfile.py')
-rw-r--r-- | klippy/configfile.py | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/klippy/configfile.py b/klippy/configfile.py index d4293af3..d6fd8beb 100644 --- a/klippy/configfile.py +++ b/klippy/configfile.py @@ -74,6 +74,34 @@ class ConfigWrapper: raise error("Choice '%s' for option '%s' in section '%s'" " is not a valid choice" % (c, option, self.section)) return choices[c] + def getlists(self, option, default=sentinel, seps=(',',), count=None, + parser=str, note_valid=True): + def lparser(value, pos): + if pos: + # Nested list + parts = [p.strip() for p in value.split(seps[pos])] + return tuple([lparser(p, pos - 1) for p in parts if p]) + res = [parser(p.strip()) for p in value.split(seps[pos])] + if count is not None and len(res) != count: + raise error("Option '%s' in section '%s' must have %d elements" + % (option, self.section, count)) + return tuple(res) + def fcparser(section, option): + return lparser(self.fileconfig.get(section, option), len(seps) - 1) + return self._get_wrapper(fcparser, option, default, + note_valid=note_valid) + def getlist(self, option, default=sentinel, sep=',', count=None, + note_valid=True): + return self.getlists(option, default, seps=(sep,), count=count, + parser=str, note_valid=note_valid) + def getintlist(self, option, default=sentinel, sep=',', count=None, + note_valid=True): + return self.getlists(option, default, seps=(sep,), count=count, + parser=int, note_valid=note_valid) + def getfloatlist(self, option, default=sentinel, sep=',', count=None, + note_valid=True): + return self.getlists(option, default, seps=(sep,), count=count, + parser=float, note_valid=note_valid) def getsection(self, section): return ConfigWrapper(self.printer, self.fileconfig, self.access_tracking, section) |