Support timeout parameter in client and CLI
This commit is contained in:
parent
251a1ea4b5
commit
c00b46ef5c
2 changed files with 45 additions and 34 deletions
|
|
@ -79,30 +79,33 @@ def log_response(response, status_code=True, body=True, headers=False):
|
|||
|
||||
@client.command("get")
|
||||
@click.argument("path")
|
||||
@click.option("--timeout", type=float, default=None)
|
||||
@click.pass_context
|
||||
def get(ctx, path):
|
||||
def get(ctx, path, timeout):
|
||||
"""Performs a GET request against the specified server path."""
|
||||
r = ctx.obj.client.get(path)
|
||||
r = ctx.obj.client.get(path, timeout=timeout)
|
||||
log_response(r)
|
||||
|
||||
|
||||
@client.command("post_json")
|
||||
@click.argument("path")
|
||||
@click.argument("data", type=JsonStringParamType())
|
||||
@click.option("--timeout", type=float, default=None)
|
||||
@click.pass_context
|
||||
def post_json(ctx, path, data):
|
||||
def post_json(ctx, path, data, timeout):
|
||||
"""POSTs JSON data to the specified server path."""
|
||||
r = ctx.obj.client.post_json(path, data)
|
||||
r = ctx.obj.client.post_json(path, data, timeout=timeout)
|
||||
log_response(r)
|
||||
|
||||
|
||||
@client.command("patch_json")
|
||||
@click.argument("path")
|
||||
@click.argument("data", type=JsonStringParamType())
|
||||
@click.option("--timeout", type=float, default=None, help="Request timeout in seconds")
|
||||
@click.pass_context
|
||||
def patch_json(ctx, path, data):
|
||||
def patch_json(ctx, path, data, timeout):
|
||||
"""PATCHes JSON data to the specified server path."""
|
||||
r = ctx.obj.client.patch(path, data, encoding="json")
|
||||
r = ctx.obj.client.patch(path, data, encoding="json", timeout=timeout)
|
||||
log_response(r)
|
||||
|
||||
|
||||
|
|
@ -111,9 +114,10 @@ def patch_json(ctx, path, data):
|
|||
@click.argument("file_path", type=click.Path(exists=True, dir_okay=False, resolve_path=True))
|
||||
@click.option("--json", is_flag=True)
|
||||
@click.option("--yaml", is_flag=True)
|
||||
@click.option("--timeout", type=float, default=None, help="Request timeout in seconds")
|
||||
@click.pass_context
|
||||
def post_from_file(ctx, path, file_path, json_flag, yaml_flag):
|
||||
"""POSTs JSON data to the specified server path."""
|
||||
def post_from_file(ctx, path, file_path, json_flag, yaml_flag, timeout):
|
||||
"""POSTs JSON data to the specified server path, taking the data from the specified file."""
|
||||
if json_flag or yaml_flag:
|
||||
if json_flag:
|
||||
with open(file_path, "rb") as fp:
|
||||
|
|
@ -123,12 +127,12 @@ def post_from_file(ctx, path, file_path, json_flag, yaml_flag):
|
|||
with open(file_path, "rb") as fp:
|
||||
data = yaml.safe_load(fp)
|
||||
|
||||
r = ctx.obj.client.post_json(path, data)
|
||||
r = ctx.obj.client.post_json(path, data, timeout=timeout)
|
||||
else:
|
||||
with open(file_path, "rb") as fp:
|
||||
data = fp.read()
|
||||
|
||||
r = ctx.obj.client.post(path, data)
|
||||
r = ctx.obj.client.post(path, data, timeout=timeout)
|
||||
|
||||
log_response(r)
|
||||
|
||||
|
|
@ -140,14 +144,15 @@ def post_from_file(ctx, path, file_path, json_flag, yaml_flag):
|
|||
@click.option("--int", "-i", "int_params", multiple=True, nargs=2, type=click.Tuple([unicode, int]))
|
||||
@click.option("--float", "-f", "float_params", multiple=True, nargs=2, type=click.Tuple([unicode, float]))
|
||||
@click.option("--bool", "-b", "bool_params", multiple=True, nargs=2, type=click.Tuple([unicode, bool]))
|
||||
@click.option("--timeout", type=float, default=None, help="Request timeout in seconds")
|
||||
@click.pass_context
|
||||
def command(ctx, path, command, str_params, int_params, float_params, bool_params):
|
||||
def command(ctx, path, command, str_params, int_params, float_params, bool_params, timeout):
|
||||
"""Sends a JSON command to the specified server path."""
|
||||
data = dict()
|
||||
params = str_params + int_params + float_params + bool_params
|
||||
for param in params:
|
||||
data[param[0]] = param[1]
|
||||
r = ctx.obj.client.post_command(path, command, additional=data)
|
||||
r = ctx.obj.client.post_command(path, command, additional=data, timeout=timeout)
|
||||
log_response(r, body=False)
|
||||
|
||||
|
||||
|
|
@ -157,23 +162,26 @@ def command(ctx, path, command, str_params, int_params, float_params, bool_param
|
|||
@click.option("--parameter", "-P", "params", multiple=True, nargs=2, type=click.Tuple([unicode, unicode]))
|
||||
@click.option("--file-name", type=click.STRING)
|
||||
@click.option("--content-type", type=click.STRING)
|
||||
@click.option("--timeout", type=float, default=None, help="Request timeout in seconds")
|
||||
@click.pass_context
|
||||
def upload(ctx, path, file_path, params, file_name, content_type):
|
||||
def upload(ctx, path, file_path, params, file_name, content_type, timeout):
|
||||
"""Uploads the specified file to the specified server path."""
|
||||
data = dict()
|
||||
for param in params:
|
||||
data[param[0]] = param[1]
|
||||
|
||||
r = ctx.obj.client.upload(path, file_path, additional=data, file_name=file_name, content_type=content_type)
|
||||
r = ctx.obj.client.upload(path, file_path,
|
||||
additional=data, file_name=file_name, content_type=content_type, timeout=timeout)
|
||||
log_response(r)
|
||||
|
||||
|
||||
@client.command("delete")
|
||||
@click.argument("path")
|
||||
@click.option("--timeout", type=float, default=None, help="Request timeout in seconds")
|
||||
@click.pass_context
|
||||
def delete(ctx, path):
|
||||
def delete(ctx, path, timeout):
|
||||
"""Sends a DELETE request to the specified server path."""
|
||||
r = ctx.obj.client.delete(path)
|
||||
r = ctx.obj.client.delete(path, timeout=timeout)
|
||||
log_response(r)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -223,7 +223,10 @@ class Client(object):
|
|||
url = self.baseurl + "/" + path
|
||||
return requests.Request(method=method, url=url, params=params, headers={"X-Api-Key": self.apikey}).prepare()
|
||||
|
||||
def request(self, method, path, data=None, files=None, encoding=None, params=None):
|
||||
def request(self, method, path, data=None, files=None, encoding=None, params=None, timeout=None):
|
||||
if timeout is None:
|
||||
timeout = 30
|
||||
|
||||
s = requests.Session()
|
||||
request = self.prepare_request(method, path, params=params)
|
||||
if data or files:
|
||||
|
|
@ -231,25 +234,25 @@ class Client(object):
|
|||
request.prepare_body(None, None, json=data)
|
||||
else:
|
||||
request.prepare_body(data, files=files)
|
||||
response = s.send(request, timeout=10)
|
||||
response = s.send(request, timeout=timeout)
|
||||
return response
|
||||
|
||||
def get(self, path, params=None):
|
||||
return self.request("GET", path, params=params)
|
||||
def get(self, path, params=None, timeout=None):
|
||||
return self.request("GET", path, params=params, timeout=timeout)
|
||||
|
||||
def post(self, path, data, encoding=None, params=None):
|
||||
return self.request("POST", path, data=data, encoding=encoding, params=params)
|
||||
def post(self, path, data, encoding=None, params=None, timeout=None):
|
||||
return self.request("POST", path, data=data, encoding=encoding, params=params, timeout=timeout)
|
||||
|
||||
def post_json(self, path, data, params=None):
|
||||
return self.post(path, data, encoding="json", params=params)
|
||||
def post_json(self, path, data, params=None, timeout=None):
|
||||
return self.post(path, data, encoding="json", params=params, timeout=timeout)
|
||||
|
||||
def post_command(self, path, command, additional=None):
|
||||
def post_command(self, path, command, additional=None, timeout=None):
|
||||
data = dict(command=command)
|
||||
if additional:
|
||||
data.update(additional)
|
||||
return self.post_json(path, data, params=data)
|
||||
return self.post_json(path, data, params=data, timeout=timeout)
|
||||
|
||||
def upload(self, path, file_path, additional=None, file_name=None, content_type=None, params=None):
|
||||
def upload(self, path, file_path, additional=None, file_name=None, content_type=None, params=None, timeout=None):
|
||||
import os
|
||||
|
||||
if not os.path.isfile(file_path):
|
||||
|
|
@ -264,18 +267,18 @@ class Client(object):
|
|||
else:
|
||||
files = dict(file=(file_name, fp))
|
||||
|
||||
response = self.request("POST", path, data=additional, files=files, params=params)
|
||||
response = self.request("POST", path, data=additional, files=files, params=params, timeout=timeout)
|
||||
|
||||
return response
|
||||
|
||||
def delete(self, path, params=None):
|
||||
return self.request("DELETE", path, params=params)
|
||||
def delete(self, path, params=None, timeout=None):
|
||||
return self.request("DELETE", path, params=params, timeout=timeout)
|
||||
|
||||
def patch(self, path, data, encoding=None, params=None):
|
||||
return self.request("PATCH", path, data=data, encoding=encoding, params=params)
|
||||
def patch(self, path, data, encoding=None, params=None, timeout=None):
|
||||
return self.request("PATCH", path, data=data, encoding=encoding, params=params, timeout=timeout)
|
||||
|
||||
def put(self, path, data, encoding=None, params=None):
|
||||
return self.request("PUT", path, data=data, encoding=encoding, params=params)
|
||||
def put(self, path, data, encoding=None, params=None, timeout=None):
|
||||
return self.request("PUT", path, data=data, encoding=encoding, params=params, timeout=timeout)
|
||||
|
||||
def create_socket(self, **kwargs):
|
||||
import uuid
|
||||
|
|
|
|||
Loading…
Reference in a new issue