Ticket #2289: 0001-Register-widget-click-event-reflects-a-timeout-on-un.patch
File 0001-Register-widget-click-event-reflects-a-timeout-on-un.patch, 2.5 KB (added by dipankar, 13 years ago) |
---|
-
src/jarabe/desktop/schoolserver.py
From a2cf4863eca617bcd57008730e13ab8af95e7cfa Mon Sep 17 00:00:00 2001 From: Dipankar Patro <dipankar@seeta.in> Date: Mon, 6 Sep 2010 21:42:51 +0530 Subject: [PATCH] Register widget click event reflects a timeout on unavailability of servers [Ticket #2289] The register widget when clicked, used to cause sugar to freeze. Added a timeout facilitated ServerProxy() so that connection to schoolserver is dropped in case it is not available. --- src/jarabe/desktop/schoolserver.py | 28 ++++++++++++++++++++++++++-- 1 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/jarabe/desktop/schoolserver.py b/src/jarabe/desktop/schoolserver.py index 62519df..e60e26f 100644
a b 16 16 17 17 import logging 18 18 from gettext import gettext as _ 19 from xmlrpclib import ServerProxy, Error 19 import httplib 20 import xmlrpclib 20 21 import socket 21 22 import os 22 23 import string … … def store_identifiers(serial_number, uuid, backup_url): 76 77 class RegisterError(Exception): 77 78 pass 78 79 80 class TimeoutHTTP(httplib.HTTP): 81 def __init__(self, host='', port=None, strict=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT): 82 if port == 0: 83 port = None 84 self._setup(self._connection_class(host, port, strict, timeout)) 85 86 class TimeoutTransport(xmlrpclib.Transport): 87 def __init__(self, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, *args, **kwargs): 88 xmlrpclib.Transport.__init__(self, *args, **kwargs) 89 self.timeout = timeout 90 91 def make_connection(self, host): 92 host, extra_headers, x509 = self.get_host_info(host) 93 return TimeoutHTTP(host, timeout=self.timeout) 94 95 class TimeoutServerProxy(xmlrpclib.ServerProxy): 96 """ Creates a server proxy with Timeout facility. 97 Timeout sent in argument can be used to drop connection 98 for unavailable servers """ 99 def __init__(self, url, timeout, *args, **kwargs): 100 kwargs['transport'] = TimeoutTransport(timeout=timeout, use_datetime=kwargs.get('use_datetime', 0)) 101 xmlrpclib.ServerProxy.__init__(self, url, *args, **kwargs) 102 79 103 def register_laptop(url=REGISTER_URL): 80 104 81 105 profile = get_profile() … … def register_laptop(url=REGISTER_URL): 95 119 96 120 nick = client.get_string('/desktop/sugar/user/nick') 97 121 98 server = ServerProxy(url)122 server = TimeoutServerProxy(url,10) 99 123 try: 100 124 data = server.register(sn, nick, uuid_, profile.pubkey) 101 125 except (Error, socket.error):