34
from multiprocessing import Pipe, Process
34
35
from threading import Thread
35
36
from oauth import oauth
37
38
from ubuntu_sso import DBUS_BUS_NAME, DBUS_IFACE_CRED_NAME, DBUS_CRED_PATH
38
39
from ubuntuone import clientdefs
39
40
from ubuntuone.syncdaemon.tools import SyncDaemonTool
40
from ubuntuone.api.restclient import RestClient
41
41
from ubuntuone.logger import (basic_formatter, LOGFOLDER,
42
42
CustomRotatingFileHandler)
117
117
except DBusException, e:
120
def do_rest_request(rest_client, url, method, callback):
121
"""Helper that handles the REST request."""
120
def really_do_rest_request(url, method, conn):
121
"""Second-order helper that does the REST request.
123
Necessary because of libproxy's orneriness WRT threads: LP:633241.
125
from ubuntuone.api.restclient import RestClient
126
logger.debug("really_do_rest_request (%s:%s)", method, url)
127
rest_client = RestClient(url)
122
128
result = rest_client.call(url, method, oauth_consumer, oauth_token)
124
gtk.gdk.threads_enter()
126
gtk.gdk.threads_leave()
129
logger.debug("got result for really_do_rest_request (%s:%s)", method, url)
131
logger.debug("end really_do_rest_request (%s:%s)", method, url)
133
def do_rest_request(proc, conn, callback):
134
"""Helper that handles the REST request."""
136
logger.debug("do_rest_request (%s)", pid)
140
logger.debug("got result for do_rest_request (%d)", pid)
141
if callback is not None:
144
logger.debug("end do_rest_request (%d)", pid)
128
146
def make_rest_request(url=None, method='GET', callback=None):
129
147
"""Helper that makes an oauth-wrapped REST request."""
130
rest_client = RestClient(url)
131
Thread(target=do_rest_request, args=(rest_client, url, method, callback)).start()
148
logger.debug("make_rest_request (%s:%s)", method, url)
149
conn1, conn2 = Pipe(False)
150
p = Process(target=really_do_rest_request, args=(url, method, conn2))
152
logger.debug("make_rest_request (%s:%s) started %d", method, url, p.pid)
153
Thread(target=do_rest_request, args=(p, conn1, callback)).start()
154
logger.debug("end make_rest_request (%s:%s)", method, url)
133
156
class DevicesWidget(gtk.Table):