aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/klippy.py
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2017-04-11 11:37:09 -0400
committerKevin O'Connor <kevin@koconnor.net>2017-04-11 11:42:55 -0400
commit7b03b04c786863bc32d3b790862857061f71f072 (patch)
tree4396da5121caf1f7f6e5072115a4ddff345fa476 /klippy/klippy.py
parent7a7b98cc31dff8cb7f1a6a1ab886362a0802be66 (diff)
downloadkutter-7b03b04c786863bc32d3b790862857061f71f072.tar.gz
kutter-7b03b04c786863bc32d3b790862857061f71f072.tar.xz
kutter-7b03b04c786863bc32d3b790862857061f71f072.zip
klippy: Support minimum/maximum value checks on configuration variables
Verify that numeric parameters are in a sane range when reading the config. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/klippy.py')
-rw-r--r--klippy/klippy.py33
1 files changed, 27 insertions, 6 deletions
diff --git a/klippy/klippy.py b/klippy/klippy.py
index 0ecdb0a7..e63bb096 100644
--- a/klippy/klippy.py
+++ b/klippy/klippy.py
@@ -52,26 +52,47 @@ class ConfigWrapper:
def __init__(self, printer, section):
self.printer = printer
self.section = section
- def get_wrapper(self, parser, option, default):
+ def get_wrapper(self, parser, option, default
+ , minval=None, maxval=None, above=None, below=None):
if (default is not self.sentinel
and not self.printer.fileconfig.has_option(self.section, option)):
return default
self.printer.all_config_options[
(self.section.lower(), option.lower())] = 1
try:
- return parser(self.section, option)
+ v = parser(self.section, option)
except self.error, e:
raise
except:
raise self.error("Unable to parse option '%s' in section '%s'" % (
option, self.section))
+ if minval is not None and v < minval:
+ raise self.error(
+ "Option '%s' in section '%s' must have minimum of %s" % (
+ option, self.section, minval))
+ if maxval is not None and v > maxval:
+ raise self.error(
+ "Option '%s' in section '%s' must have maximum of %s" % (
+ option, self.section, maxval))
+ if above is not None and v <= above:
+ raise self.error(
+ "Option '%s' in section '%s' must be above %s" % (
+ option, self.section, above))
+ if below is not None and v >= below:
+ raise self.error(
+ "Option '%s' in section '%s' must be below %s" % (
+ option, self.section, below))
+ return v
def get(self, option, default=sentinel):
return self.get_wrapper(self.printer.fileconfig.get, option, default)
- def getint(self, option, default=sentinel):
- return self.get_wrapper(self.printer.fileconfig.getint, option, default)
- def getfloat(self, option, default=sentinel):
+ def getint(self, option, default=sentinel, minval=None, maxval=None):
+ return self.get_wrapper(
+ self.printer.fileconfig.getint, option, default, minval, maxval)
+ def getfloat(self, option, default=sentinel
+ , minval=None, maxval=None, above=None, below=None):
return self.get_wrapper(
- self.printer.fileconfig.getfloat, option, default)
+ self.printer.fileconfig.getfloat, option, default
+ , minval, maxval, above, below)
def getboolean(self, option, default=sentinel):
return self.get_wrapper(
self.printer.fileconfig.getboolean, option, default)