configtool: parse, load and write homing values

This commit is contained in:
Nico Tonnhofer 2019-01-24 12:04:35 +01:00
parent a32974b182
commit 20dd299c7a
1 changed files with 66 additions and 3 deletions

View File

@ -16,16 +16,27 @@ from configtool.data import (
reDefQSm2, reDefQSm2,
reDefBool, reDefBool,
reDefBoolBL, reDefBoolBL,
reCandHomingOptions,
reDefHoming,
reHoming,
) )
class Printer: class Printer:
def __init__(self, settings): def __init__(self, settings):
self.settings = settings
self.configFile = None self.configFile = None
self.cfgDir = os.path.join(self.settings.folder, "configtool")
self.cfgValues = {} self.cfgValues = {}
self.settings = settings self.homing = []
self.cfgDir = os.path.join(self.settings.folder, "configtool") self.candHomingOptions = []
self.homingKeys = [
"HOMING_STEP1",
"HOMING_STEP2",
"HOMING_STEP3",
"HOMING_STEP4",
]
def getValues(self): def getValues(self):
vars = [(x, self.cfgValues[x]) for x in self.cfgValues] vars = [(x, self.cfgValues[x]) for x in self.cfgValues]
@ -51,6 +62,8 @@ class Printer:
self.configFile = fn self.configFile = fn
self.homing = []
self.candHomingOptions = []
gatheringHelpText = False gatheringHelpText = False
helpTextString = "" helpTextString = ""
helpKey = None helpKey = None
@ -129,7 +142,20 @@ class Printer:
ln = prevLines + ln ln = prevLines + ln
prevLines = "" prevLines = ""
self.parseDefineValue(ln) if self.parseCandidateValues(ln):
continue
if self.parseDefineValue(ln):
continue
m = reDefHoming.search(ln)
if m:
t = m.groups()
if len(t) == 1:
s = self.parseHoming(t[0])
if s:
self.homing = s
continue
# Parsing done. All parsed stuff is now in these array and dicts. # Parsing done. All parsed stuff is now in these array and dicts.
if self.settings.verbose >= 2: if self.settings.verbose >= 2:
@ -197,6 +223,27 @@ class Printer:
return False return False
def parseCandidateValues(self, ln):
m = reCandHomingOptions.match(ln)
if m:
t = m.groups()
if len(t) == 1:
self.candHomingOptions.append(t[0])
return True
def parseHoming(self, s):
m = re.findall(reHoming, s)
if not m:
return None
for i, tag in enumerate(self.homingKeys):
try:
self.cfgValues[tag] = m[i], True
except IndexError:
self.cfgValues[tag] = "none", False
return m
def saveConfigFile(self, path, values): def saveConfigFile(self, path, values):
if not values: if not values:
values = self.cfgValues values = self.cfgValues
@ -209,7 +256,23 @@ class Printer:
fp = open(path, "w") fp = open(path, "w")
self.configFile = path self.configFile = path
homingWritten = False
for ln in self.cfgBuffer: for ln in self.cfgBuffer:
if reDefHoming.match(ln):
if not homingWritten:
home = []
for h in self.homingKeys:
home.append(values[h][0])
while "none" in home:
home.remove("none")
if not home:
home = ["none"]
homing_str = "DEFINE_HOMING({})\n".format(", ".join(home))
fp.write(homing_str)
homingWritten = True
continue
m = reDefine.match(ln) m = reDefine.match(ln)
if m: if m:
t = m.groups() t = m.groups()