lanforge_api.py: updated request handling and now has HttpStatusData GET and POST methods

Signed-off-by: Jed Reynolds <jed@bitratchet.com>
This commit is contained in:
Jed Reynolds
2021-10-19 18:50:52 -07:00
parent 709d7900fc
commit 3d67eed69e

View File

@@ -629,11 +629,20 @@ class BaseLFJsonRequest:
def json_delete(self, def json_delete(self,
url: str = None, url: str = None,
debug: bool = False, debug: bool = False,
die_on_error: bool = False): die_on_error: bool = False,
wait_sec: float = None,
request_timeout_sec: float = None,
max_timeout_sec: float = None,
errors_warnings: list = None):
if wait_sec and (wait_sec > 0):
time.sleep(wait_sec)
return self.get_as_json(url=url, return self.get_as_json(url=url,
debug=debug | self.debug_on, debug=debug | self.debug_on,
die_on_error=die_on_error, die_on_error=die_on_error,
method_='DELETE') request_timeout_sec=request_timeout_sec,
max_timeout_sec=max_timeout_sec,
method_='DELETE',
errors_warnings=errors_warnings)
def get(self, def get(self,
url: str = None, url: str = None,
@@ -704,33 +713,47 @@ class BaseLFJsonRequest:
url: str = None, url: str = None,
die_on_error: bool = False, die_on_error: bool = False,
debug: bool = False, debug: bool = False,
timeout_sec: float = None, wait_sec: float = None,
method_='GET'): request_timeout_sec: float = None,
max_timeout_sec: float = None, # TODO: use if we do retries
method_='GET',
errors_warnings: list = None):
""" """
:param url: url to do GET request on :param url: url to do GET request on
:param die_on_error: exit immediate if result status is BAD RESPONSE :param die_on_error: exit immediate if result status is BAD RESPONSE
:param debug: print diagnostic information about query :param debug: print diagnostic information about query
:param timeout_sec: number of seconds to wait for a response :param wait_sec: wait before requesting
:param request_timeout_sec: number of seconds to wait for a response
:param method_: Overrides the HTTP method used. Please do not override. :param method_: Overrides the HTTP method used. Please do not override.
:param errors_warnings: if present, this list gets populated with errors and warnings from the result
:param max_timeout_sec: if there is no response, this request can retry every request_timeout_sec
:return: get request as Json data :return: get request as Json data
""" """
begin_sec = time.time() * 1000
responses = [] responses = []
j = self.get(url=url, while (time.time() * 1000) < (begin_sec + max_timeout_sec):
if wait_sec and (wait_sec > 0):
time.sleep(wait_sec)
responses = [self.get(url=url,
debug=debug, debug=debug,
die_on_error=die_on_error, die_on_error=die_on_error,
connection_timeout_sec=timeout_sec, connection_timeout_sec=request_timeout_sec,
method_=method_) method_=method_)]
responses.append(j) if (len(responses) > 0) and responses[0]:
if len(responses) < 1: break
if debug and self.has_errors():
self.print_errors()
return None
if responses[0] is None: if responses[0] is None:
if debug: if debug:
self.logger.debug(message="No response from " + url) self.logger.debug(message="No response from " + url)
return None return None
json_data = json.loads(responses[0].read().decode('utf-8')) json_data = json.loads(responses[0].read().decode('utf-8'))
if errors_warnings is not None:
if "errors" in json_data:
errors_warnings.extend(json_data["errors"])
if "warnings" in responses[0]:
errors_warnings.extend(json_data["warnings"])
return json_data return json_data
def json_get(self, def json_get(self,
@@ -769,7 +792,7 @@ class BaseLFJsonRequest:
json_response = self.get_as_json(url=url, json_response = self.get_as_json(url=url,
debug=debug, debug=debug,
die_on_error=False, die_on_error=False,
timeout_sec=request_timeout_sec) request_timeout_sec=request_timeout_sec)
if debug: if debug:
self.logger.debug("[%s] json_get: URL[%s]" % (attempt_counter, url)) self.logger.debug("[%s] json_get: URL[%s]" % (attempt_counter, url))
self.logger.debug(pformat(json_response)) self.logger.debug(pformat(json_response))
@@ -14414,6 +14437,81 @@ class LFJsonQuery(JsonQuery):
singular_key="sessions/messages", singular_key="sessions/messages",
plural_key="sessions/messages") plural_key="sessions/messages")
# #
"""
Below are 3 methods defined by LFClient URL Responders
"""
def status_msg_new_session(self,
session : str = None,
debug : bool = False,
wait_sec : float = None,
request_timeout_sec : float = None,
max_timeout_sec : float = None,
errors_warnings : list = None):
"""
Add a status message
:param [R]session: session ID [R]
"""
response = self.json_put(url="/status-msg/{session}".format(session=session),
debug=debug,
wait_sec=wait_sec,
request_timeout_sec=request_timeout_sec,
max_timeout_sec=max_timeout_sec,
errors_warnings=errors_warnings)
if not response:
return None
errors_warnings.extend(response['errors'])
errors_warnings.extend(response['warnings'])
return None
def status_msg_delete_session(self,
session : str = None,
debug : bool = False,
wait_sec : float = None,
request_timeout_sec : float = None,
max_timeout_sec : float = None,
errors_warnings : list = None):
"""
Delete a status-msg session
:param session: id to delete
"""
response = self.json_delete(url="/status-msg/{session}".format(session=session),
debug=debug,
wait_sec=wait_sec,
request_timeout_sec=request_timeout_sec,
max_timeout_sec=max_timeout_sec,
errors_warnings=errors_warnings)
if not response:
return None
errors_warnings.extend(response['errors'])
errors_warnings.extend(response['warnings'])
return None
def status_msg_delete_message(self,
session : str = None,
key : str = None,
debug : bool = False,
wait_sec : float = None,
request_timeout_sec : float = None,
max_timeout_sec : float = None,
errors_warnings : list = None):
"""
Delete a status message
:param session: session ID
:param key: item ID
"""
response = self.json_delete(url="/status-msg/{session}/{key}".format(session=session, key=key),
debug=debug,
wait_sec=wait_sec,
request_timeout_sec=request_timeout_sec,
max_timeout_sec=max_timeout_sec,
errors_warnings=errors_warnings)
if not response:
return None
errors_warnings.extend(response['errors'])
errors_warnings.extend(response['warnings'])
return None
"""----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- """----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
Notes for <TEST-GROUP> type requests Notes for <TEST-GROUP> type requests