Source code for blacs.compile_and_restart

#####################################################################
#                                                                   #
# /compile_and_restart.py                                           #
#                                                                   #
# Copyright 2013, Monash University                                 #
#                                                                   #
# This file is part of the program BLACS, in the labscript suite    #
# (see http://labscriptsuite.org), and is licensed under the        #
# Simplified BSD License. See the license.txt file in the root of   #
# the project for the full license.                                 #
#                                                                   #
#####################################################################
import os
import shutil

from qtutils.qt.QtCore import *
from qtutils.qt.QtGui import *
from qtutils.qt.QtWidgets import *

from qtutils import *
import runmanager
from labscript_utils.qtwidgets.outputbox import OutputBox

from blacs import BLACS_DIR


[docs] class CompileAndRestart(QDialog):
[docs] def __init__(self, blacs, globals_files,connection_table_labscript, output_path, close_notification_func=None): QDialog.__init__(self,blacs['ui']) self.setAttribute(Qt.WA_DeleteOnClose, True) # make sure the dialog is deleted when the window is closed self.globals_files = globals_files self.labscript_file = connection_table_labscript self.output_path = output_path self.tempfilename = self.output_path.strip('.h5')+'.temp.h5' self.blacs = blacs self.close_notification_func = close_notification_func self.ui = UiLoader().load(os.path.join(BLACS_DIR, 'compile_and_restart.ui')) self.output_box = OutputBox(self.ui.verticalLayout) self.ui.restart.setEnabled(False) # Connect buttons self.ui.restart.clicked.connect(self.restart) self.ui.compile.clicked.connect(self.compile) self.ui.cancel.clicked.connect(self.reject) self.setLayout(self.ui.layout()) self.resize(500, 300) self.show() self.setWindowTitle('Recompile connection table') self.compile()
[docs] def closeEvent(self,event): if not self.ui.cancel.isEnabled(): event.ignore() else: event.accept()
[docs] def on_activate_default(self,window): if self.button_restart.get_sensitive(): self.restart() elif self.button_compile.get_sensitive(): self.compile()
[docs] def compile(self): self.ui.compile.setEnabled(False) self.ui.cancel.setEnabled(False) self.ui.restart.setEnabled(False) msg = 'Recompiling connection table' self.ui.label.setText(msg) self.output_box.output(msg + '\n') runmanager.compile_labscript_with_globals_files_async(self.labscript_file, self.globals_files, self.tempfilename, self.output_box.port, self.finished_compiling)
[docs] @inmain_decorator(True) def finished_compiling(self, success): self.ui.compile.setEnabled(True) self.ui.cancel.setEnabled(True) if success: try: shutil.move(self.tempfilename,self.output_path) except Exception as e: msg = ('Couldn\'t replace existing connection table h5 file. ' + 'Is it open in another process? ' + 'error was:\n %s\n') % str(e) self.output_box.output(msg, red=True) self.ui.label.setText('Compilation failed.') self.ui.restart.setEnabled(False) os.remove(self.tempfilename) else: self.ui.restart.setEnabled(True) self.ui.cancel.setEnabled(False) msg = 'Compilation succeeded, restart when ready' self.ui.label.setText(msg) self.output_box.output(msg + '\n') else: self.ui.restart.setEnabled(False) msg = 'Compilation failed. Please fix the errors in the connection table (python file) and try again' self.ui.label.setText(msg) self.output_box.output(msg + '\n') try: os.remove(self.tempfilename) except Exception: pass
[docs] def restart(self): if self.close_notification_func: self.close_notification_func() QTimer.singleShot(100, self.blacs['ui'].close) self.accept() self.blacs['set_relaunch'](True)