class ReportsFetchWorker(QtCore.QObject): completed = QtCore.pyqtSignal(list) error = QtCore.pyqtSignal(str) def __init__(self): QtCore.QObject.__init__(self) @QtCore.pyqtSlot(str, str) def start_fetch(self, username, password): self.reportslist_task = ReportParamsTask() self.task = TaskList(LoginTask(username, password), self.reportslist_task) self.task.task_finished.connect(self.handle_finished) self.task.task_exception.connect(self.handle_exception) self.task.start_task() def handle_finished(self): self.completed.emit(self.reportslist_task.reports) def handle_exception(self, e, msg): if isinstance(e, LoginError): self.error.emit(str(e)) else: self.error.emit(msg)