aboutsummaryrefslogtreecommitdiffstats
path: root/klippy
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2020-12-03 12:05:46 -0500
committerKevin O'Connor <kevin@koconnor.net>2020-12-03 12:19:47 -0500
commitd7053f6e718e0a51b48054b90e38a1b0a698ca52 (patch)
treefeed961b91a80beff2a22a3063cbf63e19a1944a /klippy
parent91de1560a727264e6955f7581a5864bdb9c1653e (diff)
downloadkutter-d7053f6e718e0a51b48054b90e38a1b0a698ca52.tar.gz
kutter-d7053f6e718e0a51b48054b90e38a1b0a698ca52.tar.xz
kutter-d7053f6e718e0a51b48054b90e38a1b0a698ca52.zip
save_variables: Support saving variables to a disk file
Signed-off-by: Dushyant Ahuja dusht.ahuja@gmail.com Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy')
-rw-r--r--klippy/extras/save_variables.py63
1 files changed, 63 insertions, 0 deletions
diff --git a/klippy/extras/save_variables.py b/klippy/extras/save_variables.py
new file mode 100644
index 00000000..8a6e9bec
--- /dev/null
+++ b/klippy/extras/save_variables.py
@@ -0,0 +1,63 @@
+# Save arbitrary variables so that values can be kept across restarts.
+#
+# Copyright (C) 2020 Dushyant Ahuja <dusht.ahuja@gmail.com>
+# Copyright (C) 2016-2020 Kevin O'Connor <kevin@koconnor.net>
+#
+# This file may be distributed under the terms of the GNU GPLv3 license.
+import os, logging, ast, ConfigParser
+
+class SaveVariables:
+ def __init__(self, config):
+ self.printer = config.get_printer()
+ self.filename = os.path.expanduser(config.get('filename'))
+ self.allVariables = {}
+ try:
+ self.loadVariables()
+ except self.printer.command_error as e:
+ raise config.error(str(e))
+ gcode = self.printer.lookup_object('gcode')
+ gcode.register_command('SAVE_VARIABLE', self.cmd_SAVE_VARIABLE,
+ desc=self.cmd_SAVE_VARIABLE_help)
+ def loadVariables(self):
+ allvars = {}
+ varfile = ConfigParser.ConfigParser()
+ try:
+ varfile.read(self.filename)
+ if varfile.has_section('Variables'):
+ for name, val in varfile.items('Variables'):
+ allvars[name] = ast.literal_eval(val)
+ except:
+ msg = "Unable to parse existing variable file"
+ logging.exception(msg)
+ raise self.printer.command_error(msg)
+ self.allVariables = allvars
+ cmd_SAVE_VARIABLE_help = "Save arbitrary variables to disk"
+ def cmd_SAVE_VARIABLE(self, gcmd):
+ varname = gcmd.get('VARIABLE')
+ value = gcmd.get('VALUE')
+ try:
+ value = ast.literal_eval(value)
+ except ValueError as e:
+ raise gcmd.error("Unable to parse '%s' as a literal" % (value,))
+ newvars = dict(self.allVariables)
+ newvars[varname] = value
+ # Write file
+ varfile = ConfigParser.ConfigParser()
+ varfile.add_section('Variables')
+ for name, val in sorted(newvars.items()):
+ varfile.set('Variables', name, repr(val))
+ try:
+ f = open(self.filename, "w")
+ varfile.write(f)
+ f.close()
+ except:
+ msg = "Unable to save variable"
+ logging.exception(msg)
+ raise gcmd.error(msg)
+ gcmd.respond_info("Variable Saved")
+ self.loadVariables()
+ def get_status(self, eventtime):
+ return {'variables': dict(self.allVariables)}
+
+def load_config(config):
+ return SaveVariables(config)