def _print_generic_response(response, output_type, aws_output, text_message=None, json_output=None, verbose_output=None, output_file=None): if output_type == OutputType.BINARY.value: with open(output_file, "wb") as out: out.write(StrUtils.decode_base64(response['Payload']['body'])) elif output_type == OutputType.PLAIN_TEXT.value: output = text_message logger.info(output) else: if output_type == OutputType.JSON.value: output = json_output if json_output else { aws_output: { 'RequestId': response['ResponseMetadata']['RequestId'], 'HTTPStatusCode': response['ResponseMetadata']['HTTPStatusCode'] } } elif output_type == OutputType.VERBOSE.value: output = verbose_output if verbose_output else { aws_output: response } logger.info_json(output)
def parse_http_response(response: Response, resources_info: Dict, scar_info: Dict) -> None: '''Process the response generated by an API Gateway invocation.''' output_type = scar_info.get('cli_output') function_name = resources_info.get('lambda').get('name') asynch = resources_info.get('lambda').get('asynchronous') text_message = "" if response.ok: if output_type == OutputType.BINARY.value: output_file = scar_info.get('output_file', '') with open(output_file, "wb") as out: out.write(StrUtils.decode_base64(response.text)) text_message = f"Output saved in file '{output_file}'" else: text_message = f"Request Id: {response.headers['amz-lambda-request-id']}" if asynch: text_message += f"\nFunction '{function_name}' launched correctly" else: text_message += f"\nLog Group Name: {response.headers['amz-log-group-name']}\n" text_message += f"Log Stream Name: {response.headers['amz-log-stream-name']}\n" text_message += StrUtils.base64_to_utf8_string(response.text) else: if asynch and response.status_code == 502: text_message = f"Function '{function_name}' launched successfully." else: error = json.loads(response.text) if 'message' in error: text_message = f"Error ({response.reason}): {error['message']}" else: text_message = f"Error ({response.reason}): {error['exception']}" logger.info(text_message)
def parse_http_response(response, function_name, asynch, output_type, output_file): if response.ok: if output_type == OutputType.BINARY: with open(output_file, "wb") as out: out.write(StrUtils.decode_base64(response.text)) text_message = f"Output saved in file '{output_file}'" else: text_message = f"Request Id: {response.headers['amz-lambda-request-id']}" if asynch: text_message += f"\nFunction '{function_name}' launched correctly" else: text_message += f"\nLog Group Name: {response.headers['amz-log-group-name']}\n" text_message += f"Log Stream Name: {response.headers['amz-log-stream-name']}\n" text_message += json.loads(response.text)["udocker_output"] else: if asynch and response.status_code == 502: text_message = f"Function '{function_name}' launched sucessfully." else: error = json.loads(response.text) if 'message' in error: text_message = f"Error ({response.reason}): {error['message']}" else: text_message = f"Error ({response.reason}): {error['exception']}" logger.info(text_message)
def get_fdl_config(self, arn: str = None) -> Dict: function = arn if arn else self.function.get('name') function_info = self.client.get_function(function) # Get the FDL from the env variable fdl = function_info.get('Configuration', {}).get('Environment', {}).get('Variables', {}).get('FDL') if fdl: return yaml.safe_load(StrUtils.decode_base64(fdl)) # In the future this part can be removed if 'Location' in function_info.get('Code'): dep_pack_url = function_info.get('Code').get('Location') else: return {} dep_pack = get_file(dep_pack_url) # Extract function_config.yaml try: with ZipFile(io.BytesIO(dep_pack)) as thezip: with thezip.open('function_config.yaml') as cfg_yaml: return yaml.safe_load(cfg_yaml) except (KeyError, BadZipfile): return {}