diff options
| author | kali <kali@leap.se> | 2013-06-15 01:28:59 +0900 | 
|---|---|---|
| committer | kali <kali@leap.se> | 2013-06-15 01:31:11 +0900 | 
| commit | e6a181c13e8bf99a893b3e3881c13d2df23701a7 (patch) | |
| tree | aced8cb3ba7b9d6db54740fbaf327144008b22b9 | |
| parent | 561e7bc90f21efe5f86be7a842c283f4b7fa7610 (diff) | |
| parent | 8bee5f4e9a1bb0f7069fe41ab37dfec000487d7b (diff) | |
Merge remote-tracking branch 'chiiph/bug/true_threading' into develop
Closes #2848
| -rw-r--r-- | src/leap/crypto/srpauth.py | 22 | ||||
| -rw-r--r-- | src/leap/gui/mainwindow.py | 3 | ||||
| -rw-r--r-- | src/leap/gui/statuspanel.py | 2 | ||||
| -rw-r--r-- | src/leap/services/abstractbootstrapper.py | 7 | 
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)  | 
