summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkali <kali@leap.se>2013-06-15 01:28:59 +0900
committerkali <kali@leap.se>2013-06-15 01:31:11 +0900
commite6a181c13e8bf99a893b3e3881c13d2df23701a7 (patch)
treeaced8cb3ba7b9d6db54740fbaf327144008b22b9
parent561e7bc90f21efe5f86be7a842c283f4b7fa7610 (diff)
parent8bee5f4e9a1bb0f7069fe41ab37dfec000487d7b (diff)
Merge remote-tracking branch 'chiiph/bug/true_threading' into develop
Closes #2848
-rw-r--r--src/leap/crypto/srpauth.py22
-rw-r--r--src/leap/gui/mainwindow.py3
-rw-r--r--src/leap/gui/statuspanel.py2
-rw-r--r--src/leap/services/abstractbootstrapper.py7
4 files changed, 26 insertions, 8 deletions
diff --git a/src/leap/crypto/srpauth.py b/src/leap/crypto/srpauth.py
index bcd24de3..0e95ae64 100644
--- a/src/leap/crypto/srpauth.py
+++ b/src/leap/crypto/srpauth.py
@@ -24,6 +24,7 @@ import json
#this error is raised from requests
from simplejson.decoder import JSONDecodeError
+from functools import partial
from PySide import QtCore
from twisted.internet import threads
@@ -321,6 +322,9 @@ class SRPAuth(QtCore.QObject):
self.set_session_id(session_id)
+ def _threader(self, cb, res, *args, **kwargs):
+ return threads.deferToThread(cb, res, *args, **kwargs)
+
def authenticate(self, username, password):
"""
Executes the whole authentication process for a user
@@ -341,10 +345,17 @@ class SRPAuth(QtCore.QObject):
username=username,
password=password)
- d.addCallback(self._start_authentication, username=username,
- password=password)
- d.addCallback(self._process_challenge, username=username)
- d.addCallback(self._verify_session)
+ d.addCallback(
+ partial(self._threader,
+ self._start_authentication),
+ username=username,
+ password=password)
+ d.addCallback(
+ partial(self._threader,
+ self._process_challenge),
+ username=username)
+ d.addCallback(partial(self._threader,
+ self._verify_session))
return d
@@ -459,7 +470,8 @@ class SRPAuth(QtCore.QObject):
:type failure: twisted.python.failure.Failure
"""
logger.error("Error logging in %s" % (failure,))
- self.authentication_finished.emit(False, "%s" % (failure,))
+ self.authentication_finished.emit(False, "%s" % (failure.value,))
+ failure.trap(Exception)
def get_session_id(self):
return self.__instance.get_session_id()
diff --git a/src/leap/gui/mainwindow.py b/src/leap/gui/mainwindow.py
index 90e74823..a5905679 100644
--- a/src/leap/gui/mainwindow.py
+++ b/src/leap/gui/mainwindow.py
@@ -1150,7 +1150,8 @@ class MainWindow(QtGui.QMainWindow):
"""
passed = data[self._provider_bootstrapper.PASSED_KEY]
if not passed:
- self._set_status(data[self._provider_bootstrapper.ERROR_KEY])
+ self._login_widget.set_status(
+ data[self._provider_bootstrapper.ERROR_KEY])
self._already_started_eip = False
def _eip_finished(self, exitCode):
diff --git a/src/leap/gui/statuspanel.py b/src/leap/gui/statuspanel.py
index 53c19e86..554903d8 100644
--- a/src/leap/gui/statuspanel.py
+++ b/src/leap/gui/statuspanel.py
@@ -189,7 +189,7 @@ class StatusPanelWidget(QtGui.QWidget):
"it's already "
"running.")))
else:
- self._set_eip_status(status)
+ self.set_eip_status(status)
def set_eip_status_icon(self, status):
"""
diff --git a/src/leap/services/abstractbootstrapper.py b/src/leap/services/abstractbootstrapper.py
index 2cbd56bc..f0937197 100644
--- a/src/leap/services/abstractbootstrapper.py
+++ b/src/leap/services/abstractbootstrapper.py
@@ -22,6 +22,8 @@ import logging
import requests
+from functools import partial
+
from PySide import QtCore
from twisted.internet import threads
from leap.common.check import leap_assert, leap_assert_type
@@ -128,6 +130,9 @@ class AbstractBootstrapper(QtCore.QObject):
logger.debug("Emitting %s" % (signal,))
signal.emit({self.PASSED_KEY: True, self.ERROR_KEY: ""})
+ def _callback_threader(self, cb, res, *args, **kwargs):
+ return threads.deferToThread(cb, res, *args, **kwargs)
+
def addCallbackChain(self, callbacks):
"""
Creates a callback/errback chain on another thread using
@@ -148,7 +153,7 @@ class AbstractBootstrapper(QtCore.QObject):
if d is None:
d = threads.deferToThread(cb)
else:
- d.addCallback(cb)
+ d.addCallback(partial(self._callback_threader, cb))
d.addErrback(self._errback, signal=sig)
d.addCallback(self._gui_notify, signal=sig)
d.addErrback(self._gui_errback)