22Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
33"""
44
5+ import importlib
56import json
67import logging
78import os
89import sys
910import time
1011import traceback
11- import warnings
1212
1313from .lambda_context import LambdaContext
1414from .lambda_runtime_client import LambdaRuntimeClient
1515from .lambda_runtime_exception import FaultException
1616from .lambda_runtime_marshaller import to_json
1717
18- with warnings .catch_warnings ():
19- warnings .filterwarnings ("ignore" , category = DeprecationWarning )
20- import imp
21-
2218ERROR_LOG_LINE_TERMINATE = "\r "
2319ERROR_LOG_IDENT = "\u00a0 " # NO-BREAK SPACE U+00A0
2420
@@ -33,23 +29,14 @@ def _get_handler(handler):
3329 )
3430 return make_fault_handler (fault )
3531
36- file_handle , pathname , desc = None , None , None
3732 try :
38- # Recursively loading handler in nested directories
39- for segment in modname .split ("." ):
40- if pathname is not None :
41- pathname = [pathname ]
42- file_handle , pathname , desc = imp .find_module (segment , pathname )
43- if file_handle is None :
44- module_type = desc [2 ]
45- if module_type == imp .C_BUILTIN :
46- fault = FaultException (
47- FaultException .BUILT_IN_MODULE_CONFLICT ,
48- "Cannot use built-in module {} as a handler module" .format (modname ),
49- )
50- request_handler = make_fault_handler (fault )
51- return request_handler
52- m = imp .load_module (modname , file_handle , pathname , desc )
33+ if modname .split ("." )[0 ] in sys .builtin_module_names :
34+ fault = FaultException (
35+ FaultException .BUILT_IN_MODULE_CONFLICT ,
36+ "Cannot use built-in module {} as a handler module" .format (modname ),
37+ )
38+ return make_fault_handler (fault )
39+ m = importlib .import_module (modname .replace ("/" , "." ))
5340 except ImportError as e :
5441 fault = FaultException (
5542 FaultException .IMPORT_MODULE_ERROR ,
@@ -66,9 +53,6 @@ def _get_handler(handler):
6653 )
6754 request_handler = make_fault_handler (fault )
6855 return request_handler
69- finally :
70- if file_handle is not None :
71- file_handle .close ()
7256
7357 try :
7458 request_handler = getattr (m , fname )
@@ -89,14 +73,13 @@ def result(*args):
8973 return result
9074
9175
92- def make_error (error_message , error_type , stack_trace ):
93- result = {}
94- if error_message :
95- result ["errorMessage" ] = error_message
96- if error_type :
97- result ["errorType" ] = error_type
98- if stack_trace :
99- result ["stackTrace" ] = stack_trace
76+ def make_error (error_message , error_type , stack_trace , invoke_id = None ):
77+ result = {
78+ "errorMessage" : error_message if error_message else "" ,
79+ "errorType" : error_type if error_type else "" ,
80+ "requestId" : invoke_id if invoke_id is not None else "" ,
81+ "stackTrace" : stack_trace if stack_trace else [],
82+ }
10083 return result
10184
10285
@@ -169,7 +152,7 @@ def handle_event_request(
169152 )
170153 except FaultException as e :
171154 xray_fault = make_xray_fault ("LambdaValidationError" , e .msg , os .getcwd (), [])
172- error_result = make_error (e .msg , e .exception_type , e .trace )
155+ error_result = make_error (e .msg , e .exception_type , e .trace , invoke_id )
173156
174157 except Exception :
175158 etype , value , tb = sys .exc_info ()
@@ -181,7 +164,7 @@ def handle_event_request(
181164
182165 xray_fault = make_xray_fault (etype .__name__ , str (value ), os .getcwd (), tb_tuples )
183166 error_result = make_error (
184- str (value ), etype .__name__ , traceback .format_list (tb_tuples )
167+ str (value ), etype .__name__ , traceback .format_list (tb_tuples ), invoke_id
185168 )
186169
187170 if error_result is not None :
@@ -404,7 +387,7 @@ def run(app_root, handler, lambda_runtime_api_addr):
404387 global _GLOBAL_AWS_REQUEST_ID
405388
406389 request_handler = _get_handler (handler )
407- except Exception as e :
390+ except Exception :
408391 error_result = build_fault_result (sys .exc_info (), None )
409392
410393 log_error (error_result , log_sink )
0 commit comments