Commit 00afc6c0 authored by Pierre-Antoine Rouby's avatar Pierre-Antoine Rouby
Browse files

SolverRun: Fix bin/gra reading before solver running.

Showing with 84 additions and 48 deletions
+84 -48
......@@ -121,6 +121,9 @@ class AbstractSolver(object):
def is_stoped(self):
return self._status == STATUS.STOPED
def has_results_loaded(self):
self._status = STATUS.NOT_LAUNCHED
@name.setter
def name(self, name):
self._name = name
......
......@@ -124,40 +124,11 @@ class SolverLogWindow(PamhyrWindow):
self.setup_action()
self.setup_alarm()
self.setup_connections()
self.setup_workdir()
self.setup_process()
self._workdir = ""
if self._study.filename == "":
self._workdir = tempfile.TemporaryDirectory()
else:
self._workdir = os.path.join(
os.path.dirname(self._study.filename),
"_PAMHYR_",
self._study.name.replace(" ", "_"),
self._solver.name.replace(" ", "_"),
)
os.makedirs(self._workdir, exist_ok=True)
self._alarm.start(500)
self._output = Queue()
self._process = self.new_process(parent)
self._log(f" *** Export study {self._solver.name}", color="blue")
self._solver.export(self._study, self._workdir, qlog=self._output)
self.update()
self._log(f" *** Run solver {self._solver.name}", color="blue")
self._solver.run(
study,
process=self._process,
output_queue=self._output
)
def new_process(self, parent):
new = QProcess(parent)
new.setWorkingDirectory(self._workdir)
new.setProcessChannelMode(QProcess.MergedChannels)
return new
self.export()
self.run()
def setup_action(self):
self.find(QAction, "action_start").setEnabled(False)
......@@ -182,30 +153,74 @@ class SolverLogWindow(PamhyrWindow):
self._alarm.timeout.connect(self.update)
def setup_workdir(self):
self._workdir = ""
if self._study.filename == "":
self._workdir = tempfile.TemporaryDirectory()
else:
self._workdir = os.path.join(
os.path.dirname(self._study.filename),
"_PAMHYR_",
self._study.name.replace(" ", "_"),
self._solver.name.replace(" ", "_"),
)
os.makedirs(self._workdir, exist_ok=True)
def setup_process(self):
self._alarm.start(500)
self._output = Queue()
self._process = self.new_process(self._parent)
def new_process(self, parent):
new = QProcess(parent)
new.setWorkingDirectory(self._workdir)
new.setProcessChannelMode(QProcess.MergedChannels)
return new
def export(self):
self._log(f" *** Export study {self._solver.name}", color="blue")
self._solver.export(self._study, self._workdir, qlog=self._output)
self.update()
#######
# LOG #
#######
def _log(self, msg, color=None):
if type(msg) is str:
logger.info(f"solver: {msg}")
self._log_str(msg, color)
elif type(msg) is int:
self._log_int(msg, color)
msg = msg.rsplit('\n')[0]
def _log_str(self, msg, color=None):
logger.info(f"solver: {msg}")
msg = msg.rsplit('\n')[0]
if color is not None:
msg = f"<font color=\"{color}\">" + msg + "</font>"
if color is not None:
msg = f"<font color=\"{color}\">" + msg + "</font>"
self.find(QTextEdit, "textEdit").append(msg)
elif type(msg) is int:
logger.info(f"solver: Returns {msg}")
self.find(QTextEdit, "textEdit").append(msg)
color = "blue" if msg == 0 else "red"
self.find(QTextEdit, "textEdit")\
.append(f"<font color=\"{color}\">" +
f" *** Finished with code {msg}" +
"</font>")
def _log_int(self, int_code, color=None):
logger.info(f"solver: Returns {int_code}")
color = "blue" if int_code == 0 else "red"
self.statusbar.showMessage(
"Done" if msg == 0 else "Failed",
3000
self.find(QTextEdit, "textEdit")\
.append(
f"<font color=\"{color}\">" +
f" *** Finished with code {int_code}" +
"</font>"
)
self.statusbar.showMessage(
"Done" if int_code == 0 else "Failed",
3000
)
##########
# UPDATE #
##########
def update(self):
if self._solver.is_stoped():
self.find(QAction, "action_start").setEnabled(True)
......@@ -235,6 +250,18 @@ class SolverLogWindow(PamhyrWindow):
else:
self._log(s)
####################
# Process controle #
####################
def run(self):
self._log(f" *** Run solver {self._solver.name}", color="blue")
self._solver.run(
self._study,
process=self._process,
output_queue=self._output
)
def start(self):
if self._solver.is_stoped():
self._log(f" *** Export study {self._solver.name}", color="blue")
......@@ -276,6 +303,10 @@ class SolverLogWindow(PamhyrWindow):
if self._solver.log_file() != "":
self.find(QAction, "action_log_file").setEnabled(True)
###########
# Results #
###########
def results(self):
if self._results is None:
self._results = self._solver.results(
......@@ -284,6 +315,8 @@ class SolverLogWindow(PamhyrWindow):
self._parent.set_results(self._solver, self._results)
self._parent.open_solver_results(self._solver, self._results)
self._solver.has_results_loaded()
def log_file(self):
file_name = os.path.join(self._workdir, self._solver.log_file())
log = SolverLogFileWindow(
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment