~gary-lasker/software-center/christhehorton-reviews-crash-fix-lp912855

« back to all changes in this revision

Viewing changes to softwarecenter/backend/restfulclient.py

merged the reviews branch into trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
49
49
 
50
50
UBUNTU_SSO_SERVICE = os.environ.get(
51
51
    "USSOC_SERVICE_URL", "https://login.ubuntu.com/api/1.0")
 
52
 
52
53
UBUNTU_SOFTWARE_CENTER_AGENT_SERVICE = BUY_SOMETHING_HOST+"/api/1.0"
53
54
 
54
55
class EmptyObject(object):
134
135
                self._pending_requests.empty()):
135
136
                return
136
137
 
 
138
class UbuntuSSOAPI(gobject.GObject):
 
139
 
 
140
    __gsignals__ = {
 
141
        "whoami" : (gobject.SIGNAL_RUN_LAST,
 
142
                    gobject.TYPE_NONE, 
 
143
                    (gobject.TYPE_PYOBJECT,),
 
144
                    ),
 
145
        "error" : (gobject.SIGNAL_RUN_LAST,
 
146
                    gobject.TYPE_NONE, 
 
147
                    (gobject.TYPE_PYOBJECT,),
 
148
                    ),
 
149
 
 
150
        }
 
151
       
 
152
    def __init__(self, token):
 
153
        gobject.GObject.__init__(self)
 
154
        self._whoami = None
 
155
        self._error = None
 
156
        self.service = UBUNTU_SSO_SERVICE
 
157
        self.token = token
 
158
        token = OAuthToken(self.token["token"], self.token["token_secret"])
 
159
        authorizer = OAuthAuthorizer(self.token["consumer_key"],
 
160
                                     self.token["consumer_secret"],
 
161
                                     access_token=token)
 
162
        self.worker_thread =  RestfulClientWorker(authorizer, self.service)
 
163
        self.worker_thread.start()
 
164
        glib.timeout_add(200, self._monitor_thread)
 
165
 
 
166
    def _monitor_thread(self):
 
167
        # glib bit of the threading, runs in the main thread
 
168
        if self._whoami is not None:
 
169
            self.emit("whoami", self._whoami)
 
170
            self._whoami = None
 
171
        if self._error is not None:
 
172
            self.emit("error", self._error)
 
173
            self._error = None
 
174
        return True
 
175
 
 
176
    def _thread_whoami_done(self, result):
 
177
        self._whoami = result
 
178
 
 
179
    def _thread_whoami_error(self, e):
 
180
        self._error = e
 
181
 
 
182
    def whoami(self):
 
183
        self.worker_thread.queue_request("accounts.me", (), {},
 
184
                                         self._thread_whoami_done,
 
185
                                         self._thread_whoami_error)
 
186
 
 
187
 
137
188
class SoftwareCenterAgent(gobject.GObject):
138
189
 
139
190
    __gsignals__ = {
415
466
    print "_available: ", [x.name for x in result]
416
467
def _error(scaagent, errormsg):
417
468
    print "_error:", errormsg
 
469
def _whoami(sso, whoami):
 
470
    print "whoami: ", whoami
418
471
 
419
472
# interactive test code
420
473
if __name__ == "__main__":
434
487
        scagent.query_available_for_me("dummy_oauth", "dummy openid")
435
488
 
436
489
    elif sys.argv[1] == "sso":
437
 
        sso = UbuntuSSOlogin()
438
 
        sso.connect("login-successful", _login_success)
439
 
        sso.connect("login-failed", _login_failed)
440
 
        sso.connect("need-username-password", _login_need_user_and_password)
441
 
        sso.login()
 
490
        def _dbus_maybe_login_successful(ssologin, oauth_result):
 
491
            sso = UbuntuSSOAPI(oauth_result)
 
492
            sso.connect("whoami", _whoami)
 
493
            sso.connect("error", _error)
 
494
            sso.whoami()
 
495
        from login_sso import LoginBackendDbusSSO
 
496
        backend = LoginBackendDbusSSO("", "appname", "login_text")
 
497
        backend.connect("login-successful", _dbus_maybe_login_successful)
 
498
        backend.login_or_register()
 
499
 
 
500
    elif sys.argv[1] == "ssologin":
 
501
        ssologin = UbuntuSSOlogin()
 
502
        ssologin.connect("login-successful", _login_success)
 
503
        ssologin.connect("login-failed", _login_failed)
 
504
        ssologin.connect("need-username-password", _login_need_user_and_password)
 
505
        ssologin.login()
442
506
        
443
507
    elif sys.argv[1] == "agent-anon":
444
508
        anon_agent = SoftwareCenterAgentAnonymous()