46 lines
1.3 KiB
Python
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
|