diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2020-12-03 12:05:46 -0500 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2020-12-03 12:19:47 -0500 |
commit | d7053f6e718e0a51b48054b90e38a1b0a698ca52 (patch) | |
tree | feed961b91a80beff2a22a3063cbf63e19a1944a /klippy | |
parent | 91de1560a727264e6955f7581a5864bdb9c1653e (diff) | |
download | kutter-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.py | 63 |
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) |