Initial commit
This commit is contained in:
111
label/infra/code/lambda_handler.py
Normal file
111
label/infra/code/lambda_handler.py
Normal file
@@ -0,0 +1,111 @@
|
||||
import json
|
||||
import function_a
|
||||
import function_b
|
||||
|
||||
|
||||
def lambda_handler(event, context):
|
||||
"""
|
||||
AWS Lambda handler that routes to function_a or function_b
|
||||
|
||||
Expected event structure:
|
||||
{
|
||||
"function_name": "function_a" or "function_b",
|
||||
"text_parameter": "your string here"
|
||||
}
|
||||
"""
|
||||
try:
|
||||
# DEBUG: Log the entire event
|
||||
print(f"Received event: {json.dumps(event)}")
|
||||
|
||||
# Handle different event sources
|
||||
body = None
|
||||
|
||||
# Check if body exists and is a string (API Gateway)
|
||||
if 'body' in event:
|
||||
if event['body'] is None:
|
||||
return {
|
||||
'statusCode': 400,
|
||||
'body': json.dumps({'error': 'Request body is empty'})
|
||||
}
|
||||
|
||||
if isinstance(event['body'], str):
|
||||
# Try to parse JSON
|
||||
try:
|
||||
body = json.loads(event['body'])
|
||||
except json.JSONDecodeError as e:
|
||||
return {
|
||||
'statusCode': 400,
|
||||
'body': json.dumps({
|
||||
'error': 'Invalid JSON in request body',
|
||||
'details': str(e),
|
||||
'received': event['body'][:100] # First 100 chars
|
||||
})
|
||||
}
|
||||
else:
|
||||
body = event['body']
|
||||
else:
|
||||
# Direct invocation (no body wrapper)
|
||||
body = event
|
||||
|
||||
print(f"Parsed body: {json.dumps(body)}")
|
||||
|
||||
# Get parameters
|
||||
function_name = body.get('function_name')
|
||||
text_parameter = body.get('text_parameter')
|
||||
|
||||
# Validate inputs
|
||||
if not function_name:
|
||||
return {
|
||||
'statusCode': 400,
|
||||
'body': json.dumps({'error': 'function_name is required'})
|
||||
}
|
||||
|
||||
if not text_parameter:
|
||||
return {
|
||||
'statusCode': 400,
|
||||
'body': json.dumps({'error': 'text_parameter is required'})
|
||||
}
|
||||
|
||||
# Route to the appropriate function
|
||||
if function_name == 'function_a':
|
||||
result = function_a.execute(text_parameter)
|
||||
elif function_name == 'function_b':
|
||||
result = function_b.execute(text_parameter)
|
||||
else:
|
||||
return {
|
||||
'statusCode': 400,
|
||||
'body': json.dumps({'error': f'Unknown function: {function_name}. Use "function_a" or "function_b"'})
|
||||
}
|
||||
|
||||
# Return success response
|
||||
return {
|
||||
'statusCode': 200,
|
||||
'body': json.dumps({
|
||||
'message': 'Success',
|
||||
'result': result
|
||||
})
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error: {str(e)}")
|
||||
import traceback
|
||||
print(traceback.format_exc())
|
||||
return {
|
||||
'statusCode': 500,
|
||||
'body': json.dumps({
|
||||
'error': str(e),
|
||||
'type': type(e).__name__
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
# For local testing
|
||||
if __name__ == "__main__":
|
||||
# Test event
|
||||
test_event = {
|
||||
'function_name': 'function_a',
|
||||
'text_parameter': 'Hello from Lambda!'
|
||||
}
|
||||
|
||||
result = lambda_handler(test_event, None)
|
||||
print(json.dumps(result, indent=2))
|
||||
Reference in New Issue
Block a user