2
2
Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
3
"""
4
4
5
+ import importlib
5
6
import json
6
7
import logging
7
8
import os
8
9
import sys
9
10
import time
10
11
import traceback
11
- import warnings
12
12
13
13
from .lambda_context import LambdaContext
14
14
from .lambda_runtime_client import LambdaRuntimeClient
15
15
from .lambda_runtime_exception import FaultException
16
16
from .lambda_runtime_marshaller import to_json
17
17
18
- with warnings .catch_warnings ():
19
- warnings .filterwarnings ("ignore" , category = DeprecationWarning )
20
- import imp
21
-
22
18
ERROR_LOG_LINE_TERMINATE = "\r "
23
19
ERROR_LOG_IDENT = "\u00a0 " # NO-BREAK SPACE U+00A0
24
20
@@ -33,23 +29,14 @@ def _get_handler(handler):
33
29
)
34
30
return make_fault_handler (fault )
35
31
36
- file_handle , pathname , desc = None , None , None
37
32
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 ("/" , "." ))
53
40
except ImportError as e :
54
41
fault = FaultException (
55
42
FaultException .IMPORT_MODULE_ERROR ,
@@ -66,9 +53,6 @@ def _get_handler(handler):
66
53
)
67
54
request_handler = make_fault_handler (fault )
68
55
return request_handler
69
- finally :
70
- if file_handle is not None :
71
- file_handle .close ()
72
56
73
57
try :
74
58
request_handler = getattr (m , fname )
@@ -89,14 +73,13 @@ def result(*args):
89
73
return result
90
74
91
75
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
+ }
100
83
return result
101
84
102
85
@@ -169,7 +152,7 @@ def handle_event_request(
169
152
)
170
153
except FaultException as e :
171
154
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 )
173
156
174
157
except Exception :
175
158
etype , value , tb = sys .exc_info ()
@@ -181,7 +164,7 @@ def handle_event_request(
181
164
182
165
xray_fault = make_xray_fault (etype .__name__ , str (value ), os .getcwd (), tb_tuples )
183
166
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
185
168
)
186
169
187
170
if error_result is not None :
@@ -404,7 +387,7 @@ def run(app_root, handler, lambda_runtime_api_addr):
404
387
global _GLOBAL_AWS_REQUEST_ID
405
388
406
389
request_handler = _get_handler (handler )
407
- except Exception as e :
390
+ except Exception :
408
391
error_result = build_fault_result (sys .exc_info (), None )
409
392
410
393
log_error (error_result , log_sink )
0 commit comments