Added `connection-timeout` (int), `connection-timeout` (int) and `no-timeout` (boolean) task parameters to control the newly introduced default timeouts (5s connect, 10s read)
This commit is contained in:
parent
9ad76dd918
commit
114b8e07cf
|
@ -6,7 +6,7 @@ from pyexecplugins.pyexecplugins import PyExecPlugin
|
||||||
|
|
||||||
class Plugin(PyExecPlugin):
|
class Plugin(PyExecPlugin):
|
||||||
name = "Http"
|
name = "Http"
|
||||||
|
|
||||||
taskdef = {
|
taskdef = {
|
||||||
"name" : "pyrest",
|
"name" : "pyrest",
|
||||||
"description" : "Execute an HTTP request with pyrest worker",
|
"description" : "Execute an HTTP request with pyrest worker",
|
||||||
|
@ -14,7 +14,7 @@ class Plugin(PyExecPlugin):
|
||||||
"outputKeys" : ["body", "status", "reason", "headers"],
|
"outputKeys" : ["body", "status", "reason", "headers"],
|
||||||
"ownerEmail" : "m.lettere@gmail.com"
|
"ownerEmail" : "m.lettere@gmail.com"
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, data, config=None):
|
def __init__(self, data, config=None):
|
||||||
super().__init__(data, config)
|
super().__init__(data, config)
|
||||||
self.method = data.get("method") or "get"
|
self.method = data.get("method") or "get"
|
||||||
|
@ -27,7 +27,10 @@ class Plugin(PyExecPlugin):
|
||||||
self.params = data.get("params")
|
self.params = data.get("params")
|
||||||
self.expect = data.get("expect")
|
self.expect = data.get("expect")
|
||||||
self.fail = data.get("fail")
|
self.fail = data.get("fail")
|
||||||
|
self.conntimeout = data.get("connection-timeout") or 5
|
||||||
|
self.readtimeout = data.get("read-timeout") or 10
|
||||||
|
self.notimeout = (data.get("no-timeout") in (True, "true", "True", "TRUE", 1, "1", "y", "Y", "yes", "YES")) or False
|
||||||
|
|
||||||
def doRequest(self):
|
def doRequest(self):
|
||||||
#logging.getLogger("pyexec").debug("%s - %s - %s - %s",self.method, self.url, self.contenttype, self.accept)
|
#logging.getLogger("pyexec").debug("%s - %s - %s - %s",self.method, self.url, self.contenttype, self.accept)
|
||||||
if self.contenttype != None and self.contenttype.find("json") != -1:
|
if self.contenttype != None and self.contenttype.find("json") != -1:
|
||||||
|
@ -36,10 +39,16 @@ class Plugin(PyExecPlugin):
|
||||||
self.request = requests.Request(self.method, self.url, headers=self.headers, data = self.body.encode('utf-8'))
|
self.request = requests.Request(self.method, self.url, headers=self.headers, data = self.body.encode('utf-8'))
|
||||||
else:
|
else:
|
||||||
self.request = requests.Request(self.method, self.url, headers=self.headers, data = self.body, params = self.params)
|
self.request = requests.Request(self.method, self.url, headers=self.headers, data = self.body, params = self.params)
|
||||||
|
|
||||||
self.request = self.request.prepare()
|
self.request = self.request.prepare()
|
||||||
logging.getLogger("pyexec").debug("%s url=%s body=%s",self.method, self.request.url,self.body)
|
if self.notimeout:
|
||||||
self.response = requests.Session().send(self.request)
|
timeout = None
|
||||||
|
else:
|
||||||
|
timeout= (self.conntimeout, self.readtimeout)
|
||||||
|
|
||||||
|
print("timeout: ", timeout)
|
||||||
|
logging.getLogger("pyexec").debug("%s url=%s body=%s conntimeout=%d readtimeout=%d",self.method, self.request.url,self.body,self.conntimeout,self.readtimeout)
|
||||||
|
self.response = requests.Session().send(self.request, timeout=timeout)
|
||||||
return self.response
|
return self.response
|
||||||
|
|
||||||
def computeStatus(self):
|
def computeStatus(self):
|
||||||
|
@ -52,7 +61,7 @@ class Plugin(PyExecPlugin):
|
||||||
return "COMPLETED" if (self.response.status_code in self.expect) else "FAILED"
|
return "COMPLETED" if (self.response.status_code in self.expect) else "FAILED"
|
||||||
else:
|
else:
|
||||||
return "COMPLETED" if (self.response.status_code == self.expect) else "FAILED"
|
return "COMPLETED" if (self.response.status_code == self.expect) else "FAILED"
|
||||||
|
|
||||||
def buildOutput(self, status):
|
def buildOutput(self, status):
|
||||||
hdrs = {}
|
hdrs = {}
|
||||||
for k in self.response.headers.keys(): hdrs[k] = self.response.headers[k]
|
for k in self.response.headers.keys(): hdrs[k] = self.response.headers[k]
|
||||||
|
@ -63,7 +72,7 @@ class Plugin(PyExecPlugin):
|
||||||
outbody = self.response.json() if len(self.response.content) != 0 else None
|
outbody = self.response.json() if len(self.response.content) != 0 else None
|
||||||
else:
|
else:
|
||||||
outbody = self.response.text
|
outbody = self.response.text
|
||||||
|
|
||||||
logging.getLogger("pyexec").debug("%s", outbody)
|
logging.getLogger("pyexec").debug("%s", outbody)
|
||||||
if status == "FAILED":
|
if status == "FAILED":
|
||||||
raise Exception("HTTP call failed with status {} ({}) - {}".format(self.response.status_code, self.response.reason, str(outbody)))
|
raise Exception("HTTP call failed with status {} ({}) - {}".format(self.response.status_code, self.response.reason, str(outbody)))
|
||||||
|
@ -73,7 +82,7 @@ class Plugin(PyExecPlugin):
|
||||||
"status" : self.response.status_code,
|
"status" : self.response.status_code,
|
||||||
"reason" : self.response.reason
|
"reason" : self.response.reason
|
||||||
}
|
}
|
||||||
|
|
||||||
def execute(self):
|
def execute(self):
|
||||||
self.doRequest()
|
self.doRequest()
|
||||||
status = self.computeStatus()
|
status = self.computeStatus()
|
||||||
|
|
Loading…
Reference in New Issue