-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlambda.py
76 lines (60 loc) · 1.67 KB
/
lambda.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import json
import logging
import random
import tidyid
log = logging.getLogger(__name__)
NO_DEFAULT = object()
class ParamError(Exception):
def __init__(self, resp):
self.resp = resp
class ParamParser:
def __init__(self, params):
self.params = params
def missing_required(self, param):
raise ParamError({
'statusCode': 400,
'body': f'missing required param: {param}'
})
def error(self, param, value):
raise ParamError({
'statusCode': 400,
'body': f'error parsing "{param}" value: "{value}"'
})
def get(self, k, fn, default=NO_DEFAULT):
try:
v = self.params[k]
except KeyError:
if default is NO_DEFAULT:
self.missing_required(k)
else:
return default
try:
v = fn(v)
except Exception as e:
self.error(k, v)
return v
def lambda_handler(event, context):
params = event.get('queryStringParameters') or {}
parser = ParamParser(params)
try:
n = parser.get('n', int, 100)
pad = parser.get('pad', int, 0)
split = parser.get('split', int, 3)
start = parser.get('start', int, None)
except ParamError as e:
return e.resp
if start is None:
start = random.randint(1, 3000000)
elif start < 1:
start = 1
gen = tidyid.gen_ids(
n = n,
pad = pad,
split = split,
start = start
)
ids = [tid for i, tid in gen]
return {
'statusCode': 200,
'body': json.dumps(ids)
}