example_self_tested_lambda/src/lambda_function.py

46 lines
1.3 KiB
Python

""" An Simple example lambda"""
from typing import Set
# pylint: disable=unused-argument
def handler(event, context):
"""
Lambda event handler takes a number and returns it's factors
event must have an value key which can be cast to an int
return value is a comma separated list of numbers as a string
"""
try:
value = int(event["value"])
except Exception as error:
print(f"Failure\tFailed to read value\t{error}\t{event}")
raise error
try:
factors = get_factors(value)
response = stringify(factors)
print(f"Success\tCalculated\t{value}\t{response}")
return response
except Exception as error:
print(f"Failure\tFailed to calculate response\t{error}\t{value}")
raise error
def get_factors(number: int) -> Set[int]:
""" Calculate factors of an integer """
result = set()
for i in range(1, int(number ** 0.5) + 1):
div, mod = divmod(number, i)
if mod == 0:
result.add(i)
result.add(div)
return result
def stringify(numbers: Set[int]) -> str:
""" Convert a list of numbers to an order comma separated list """
numbers = list(numbers)
numbers.sort()
numbers = [str(i) for i in numbers]
response = ",".join(numbers)
return response