generated from caltechlibrary/template
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathget-air-values.py
100 lines (96 loc) · 3.8 KB
/
get-air-values.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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import boto3
import json
import datetime
from boto3.dynamodb.conditions import Key
dynamodb = boto3.resource("dynamodb")
table = dynamodb.Table("air-sampling-table")
def lambda_handler(event, context):
today = datetime.date.today().isoformat()
try:
if event["queryStringParameters"]:
metric = event["queryStringParameters"]["graph"]
if metric == 'bands':
bands = dynamodb.Table("air-sampling-bands")
scan = bands.query(
KeyConditionExpression=Key("date").eq(today),
ScanIndexForward=False
)
data = scan["Items"][0]
corrected = {}
for datav in data:
values = data[datav]
corrected_values = []
if datav != 'date':
for value in values:
time = datetime.datetime.fromtimestamp(int(value[0])).time()
corrected_values.append([str(time),float(value[1]),float(value[2])])
corrected[datav] = corrected_values
return {
"statusCode": 200,
"headers": {
"Access-Control-Allow-Headers": "Content-Type",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "OPTIONS,GET",
},
"body": json.dumps(corrected)
}
else:
scan = table.query(
KeyConditionExpression=Key("date").eq(today),
ScanIndexForward=False,
ProjectionExpression='#t,#m',
ExpressionAttributeNames={"#t": "time","#m":metric}
)
data = ""
for line in scan["Items"]:
if metric not in line:
value = None
else:
value = line[metric]
time = line["time"]
time = datetime.datetime.fromtimestamp(time).time()
data = data + f"{time},{value}\n"
return {
"headers": {"Content-Type": "text/csv"},
"statusCode": 200,
"headers": {
"Access-Control-Allow-Headers": "Content-Type",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "OPTIONS,GET",
},
"body": data,
}
else:
scan = table.query(
KeyConditionExpression=Key("date").eq(today),
ScanIndexForward=False,
Limit=1
)
data = scan["Items"][0]
export = {}
for value in data:
if value not in ["date","AQI_30_PRI"]:
if data[value] =='nan':
export[value] = None
else:
export[value] = float(data[value])
else:
export[value] = data[value]
return {
"statusCode": 200,
"headers": {
"Access-Control-Allow-Headers": "Content-Type",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "OPTIONS,GET",
},
"body": json.dumps(export),
}
except IndexError:
return {
"statusCode": 503,
"headers": {
"Access-Control-Allow-Headers": "Content-Type",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "OPTIONS,GET",
},
}