Initialize drivers while reporting the status in a QtWidget. :param widget: Qt Widget where the status information is going to be shown. :param drivers: iterable of drivers to initialize. :param register_finalizer: register driver.finalize method to be called at python exit. :param
(widget, drivers, register_finalizer=True,
initializing_msg='Initializing ...', initialized_msg='Initialized',
concurrent=True, dependencies=None)
| 1192 | |
| 1193 | |
| 1194 | def initialize_and_report(widget, drivers, register_finalizer=True, |
| 1195 | initializing_msg='Initializing ...', initialized_msg='Initialized', |
| 1196 | concurrent=True, dependencies=None): |
| 1197 | """Initialize drivers while reporting the status in a QtWidget. |
| 1198 | |
| 1199 | :param widget: Qt Widget where the status information is going to be shown. |
| 1200 | :param drivers: iterable of drivers to initialize. |
| 1201 | :param register_finalizer: register driver.finalize method to be called at python exit. |
| 1202 | :param initializing_msg: message to be displayed while initializing. |
| 1203 | :param initialized_msg: message to be displayed after successful initialization. |
| 1204 | :param concurrent: indicates that drivers with satisfied dependencies |
| 1205 | should be initialized concurrently. |
| 1206 | :param dependencies: indicates which drivers depend on others to be initialized. |
| 1207 | each key is a driver name, and the corresponding |
| 1208 | value is an iterable with its dependencies. |
| 1209 | :return: the QThread doing the initialization. |
| 1210 | """ |
| 1211 | timing = {} |
| 1212 | |
| 1213 | thread = QtCore.QThread() |
| 1214 | helper = InitializerHelper(drivers, register_finalizer, concurrent, dependencies) |
| 1215 | helper.moveToThread(thread) |
| 1216 | thread.helper = helper |
| 1217 | |
| 1218 | if isinstance(widget, QtGui.QTableWidget): |
| 1219 | def _initializing(driver): |
| 1220 | timing[driver] = time.time() |
| 1221 | row = drivers.index(driver) |
| 1222 | widget.setItem(row, 2, QtGui.QTableWidgetItem(initializing_msg)) |
| 1223 | |
| 1224 | def _initialized(driver): |
| 1225 | delta = time.time() - timing[driver] |
| 1226 | row = drivers.index(driver) |
| 1227 | widget.setItem(row, 2, QtGui.QTableWidgetItem(initialized_msg + ' ({:.1f} sec)'.format(delta))) |
| 1228 | |
| 1229 | def _exception(driver, e): |
| 1230 | delta = time.time() - timing[driver] |
| 1231 | row = drivers.index(driver) |
| 1232 | widget.setItem(row, 2, QtGui.QTableWidgetItem('{} ({:.1f} sec)'.format(e, delta))) |
| 1233 | |
| 1234 | def _done(duration): |
| 1235 | widget.setItem(len(drivers), 2, QtGui.QTableWidgetItem('{:.1f} sec'.format(duration))) |
| 1236 | thread.quit() |
| 1237 | |
| 1238 | widget.clearContents() |
| 1239 | widget.setRowCount(len(drivers) + 1) |
| 1240 | for row, driver in enumerate(drivers): |
| 1241 | widget.setItem(row, 0, QtGui.QTableWidgetItem(driver.name)) |
| 1242 | widget.setItem(row, 1, QtGui.QTableWidgetItem(driver.__class__.__name__)) |
| 1243 | widget.setItem(row, 2, QtGui.QTableWidgetItem('')) |
| 1244 | |
| 1245 | widget.resizeColumnToContents(0) |
| 1246 | widget.horizontalHeader().setStretchLastSection(True) |
| 1247 | |
| 1248 | elif isinstance(widget, QtGui.QLineEdit): |
| 1249 | def _initializing(driver): |
| 1250 | timing[driver] = time.time() |
| 1251 | widget.setText('{} ({}) > {}'.format(driver.name, driver.__class__.__name__, |
no test coverage detected