mirror of
https://github.com/Klipper3d/klipper.git
synced 2025-07-13 01:37:55 -06:00
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>
This commit is contained in:
parent
91de1560a7
commit
d7053f6e71
4 changed files with 123 additions and 0 deletions
63
klippy/extras/save_variables.py
Normal file
63
klippy/extras/save_variables.py
Normal file
|
@ -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)
|
Loading…
Add table
Add a link
Reference in a new issue