diff options
-rw-r--r-- | pykolab/wap_client/__init__.py | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/pykolab/wap_client/__init__.py b/pykolab/wap_client/__init__.py index e74ed59..ed96292 100644 --- a/pykolab/wap_client/__init__.py +++ b/pykolab/wap_client/__init__.py @@ -98,10 +98,22 @@ def connect(uri=None): conn = httplib.HTTPSConnection(API_HOSTNAME, API_PORT) else: conn = httplib.HTTPConnection(API_HOSTNAME, API_PORT) + conn.connect() return conn +def disconnect(quit=False): + global conn, session_id + + if quit and session_id: + request('GET', 'system.quit') + session_id = None + + if conn: + conn.close() + conn = None + def domain_add(domain, aliases=[]): dna = conf.get('ldap', 'domain_name_attribute') @@ -380,12 +392,13 @@ def request(method, api_uri, get=None, post=None, headers={}): else: return False -def request_raw(method, api_uri, get=None, post=None, headers={}): +def request_raw(method, api_uri, get=None, post=None, headers={}, isretry=False): global session_id if not session_id == None: headers["X-Session-Token"] = session_id + reconnect = False conn = connect() if conf.debuglevel > 8: @@ -398,13 +411,24 @@ def request_raw(method, api_uri, get=None, post=None, headers={}): log.debug(_("Requesting %r with params %r") % ("%s/%s" % (API_BASE,api_uri), (get, post)), level=8) - conn.request(method.upper(), "%s/%s%s" % (API_BASE, api_uri, _get), post, headers) + try: + conn.request(method.upper(), "%s/%s%s" % (API_BASE, api_uri, _get), post, headers) + + response = conn.getresponse() + data = response.read() - response = conn.getresponse() + log.debug(_("Got response: %r") % (data), level=8) - data = response.read() + except (httplib.BadStatusLine, httplib.CannotSendRequest) as e: + if isretry: + raise e + log.info(_("Connection error: %r; re-connecting..."), e) + reconnect = True - log.debug(_("Got response: %r") % (data), level=8) + # retry with a new connection + if reconnect: + disconnect() + return request_raw(method, api_uri, get, post, headers, True) try: response_data = json.loads(data) |