diff --git a/warden3/warden_client/warden_client.py b/warden3/warden_client/warden_client.py index d01d347a6ea9ce9ef63746e58c34790233fb2782..b1a9951143ae398a824ec06d2f346a9357561bbb 100644 --- a/warden3/warden_client/warden_client.py +++ b/warden3/warden_client/warden_client.py @@ -226,8 +226,9 @@ class Client(object): try: if self.url.scheme=="https": - self.conn = HTTPSConnection( + conn = HTTPSConnection( self.url.netloc, + strict = False, key_file = self.keyfile, cert_file = self.certfile, timeout = self.timeout, @@ -235,8 +236,9 @@ class Client(object): ca_certs = self.cafile, ssl_version = self.sslversion) elif self.url.scheme=="http": - self.conn = httplib.HTTPConnection( + conn = httplib.HTTPConnection( self.url.netloc, + strict = False, timeout = self.timeout) else: return Error("Don't know how to connect to \"%s\"" % self.url.scheme, self.logger, @@ -252,7 +254,7 @@ class Client(object): "ciphers": self.ciphers, "ssl_version": self.sslversion}) - return True + return conn def sendRequest(self, func="", payload=None, **kwargs): @@ -285,19 +287,16 @@ class Client(object): "Content-Length": str(len(data)) } - # We are connecting here at first use instead of in - # constructor, because constructor cannot return data/errors - # and we don't want to spit exceptions into user's face - # And maaaybee sometime we will implement reconnection on errors - if self.conn is None: - err = self.connect() - if not err: - return err # either False of Error instance + # HTTP(S)Connection is oneshot object (and we don't speak "pipelining") + conn = self.connect() + if not conn: + return conn # either False of Error instance loc = '%s/%s%s' % (self.url.path, func, argurl) try: - self.conn.request("POST", loc, data, self.headers) + conn.request("POST", loc, data, self.headers) except: + conn.close() return Error("Sending of request to server failed", self.logger, exc=exc_info(), method=func, detail={ "loc": loc, @@ -305,14 +304,24 @@ class Client(object): "data": data}) try: - res = self.conn.getresponse() + res = conn.getresponse() except: - return Error("HTTP reply failed", self.logger, method=func, exc=exc_info()) + conn.close() + return Error("HTTP reply failed", self.logger, method=func, exc=exc_info(), detail={ + "loc": loc, + "headers": self.headers, + "data": data}) try: response_data = res.read() except: - return Error("Fetching HTTP data from server failed", self.logger, method=func, exc=exc_info()) + conn.close() + return Error("Fetching HTTP data from server failed", self.logger, method=func, exc=exc_info(), detail={ + "loc": loc, + "headers": self.headers, + "data": data}) + + conn.close() if res.status==httplib.OK: try: @@ -382,7 +391,7 @@ class Client(object): return res - def getEvents(self, id=None, idstore=None, count=1, + def getEvents(self, id=None, idstore=None, count=None, cat=None, nocat=None, tag=None, notag=None, group=None, nogroup=None): diff --git a/warden3/warden_server/warden_server.py b/warden3/warden_server/warden_server.py index 5cff2b0cfc20eaf37f2fc44bb029fde479b8d99c..1caa425b7ba8592e8b811cda59f862a7d66dbd1b 100755 --- a/warden3/warden_server/warden_server.py +++ b/warden3/warden_server/warden_server.py @@ -794,7 +794,7 @@ class WardenHandler(ObjectReq): try: count = int(count[0]) except (ValueError, TypeError, IndexError): - count = 1 + count = self.get_events_limit if self.get_events_limit: count = min(count, self.get_events_limit)