On Thu, Sep 9, 2010 at 16:15, Dipankar Patro <dipan...@seeta.in> wrote: > Registration with the school server is currently done synchronously. > To prevent the UI from hanging indefinitely, if the school server is reachable > but unresponsive, we add an explicit timeout. > --- > src/jarabe/desktop/schoolserver.py | 20 +++++++++++++++++--- > 1 files changed, 17 insertions(+), 3 deletions(-) > > diff --git a/src/jarabe/desktop/schoolserver.py > b/src/jarabe/desktop/schoolserver.py > index 62519df..98ad7e7 100644 > --- a/src/jarabe/desktop/schoolserver.py > +++ b/src/jarabe/desktop/schoolserver.py > @@ -16,7 +16,8 @@ > > import logging > from gettext import gettext as _ > -from xmlrpclib import ServerProxy, Error > +import httplib > +import xmlrpclib > import socket > import os > import string > @@ -30,6 +31,7 @@ from sugar import env > from sugar.profile import get_profile > > REGISTER_URL = 'http://schoolserver:8080/' > +REGISTER_TIMEOUT = 8 > > def generate_serial_number(): > """ Generates a serial number based on 3 random uppercase letters > @@ -76,6 +78,18 @@ def store_identifiers(serial_number, uuid, backup_url): > class RegisterError(Exception): > pass > > +class TimeoutHTTP(httplib.HTTP): > + def __init__(self, host='', port=None, strict=None, timeout = None): > + if port == 0: > + port = None > + self._setup(self._connection_class(host, > + port, strict, timeout = REGISTER_TIMEOUT))
Please, if you are going to commit this, open a ticket warning that we are using something that can break at any Python release and put a warning pointing to that ticket next to that line. If you have any doubts about this, please ask. Thanks, Tomeu > + > +class TimeoutTransport(xmlrpclib.Transport): > + def make_connection(self, host): > + host, extra_headers, x509 = self.get_host_info(host) > + return TimeoutHTTP(host, timeout = REGISTER_TIMEOUT) > + > def register_laptop(url=REGISTER_URL): > > profile = get_profile() > @@ -95,10 +109,10 @@ def register_laptop(url=REGISTER_URL): > > nick = client.get_string('/desktop/sugar/user/nick') > > - server = ServerProxy(url) > + server = xmlrpclib.ServerProxy(url, TimeoutTransport()) > try: > data = server.register(sn, nick, uuid_, profile.pubkey) > - except (Error, socket.error): > + except (xmlrpclib.Error, socket.error): > logging.exception('Registration: cannot connect to server') > raise RegisterError(_('Cannot connect to the server.')) > > -- > 1.7.0.4 > > _______________________________________________ > Sugar-devel mailing list > Sugar-devel@lists.sugarlabs.org > http://lists.sugarlabs.org/listinfo/sugar-devel > _______________________________________________ Sugar-devel mailing list Sugar-devel@lists.sugarlabs.org http://lists.sugarlabs.org/listinfo/sugar-devel