-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathstock_lambda.py
More file actions
67 lines (54 loc) · 1.79 KB
/
stock_lambda.py
File metadata and controls
67 lines (54 loc) · 1.79 KB
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
import boto3
import json
import logging
import os
import requests
from datetime import date, timedelta
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
s3 = boto3.client("s3")
bucket_name = os.environ["BUCKET_NAME"]
resp = s3.list_objects_v2(Bucket=bucket_name, Prefix=event["symbol"])
start_date = event["start"] + "T0:00:00Z"
file_name = event["symbol"] + ".json"
if resp["KeyCount"] > 0:
start_date = str(date.today() - timedelta(days=7))
file_name = event["symbol"] + start_date + ".json"
headers = {
"APCA-API-KEY-ID": os.environ["APCA_API_KEY_ID"],
"APCA-API-SECRET-KEY": os.environ["APCA_API_SECRET_KEY"],
}
parameters = {"start": start_date, "timeframe": event["timeframe"]}
api_response = requests.get(
event["base_url"] + event["sub_url"] + event["symbol"] + event["query_url"],
headers=headers,
params=parameters,
)
if api_response.status_code != 200:
logger.error(
"error"
+ str(api_response.status_code)
+ "for API request"
+ event["base_url"]
+ event["sub_url"]
+ event["symbol"]
+ event["query_url"]
)
body = json.dumps(api_response.json())
s3_response = s3.put_object(Body=body, Bucket=bucket_name, Key=file_name)
if s3_response["ResponseMetadata"]["HTTPStatusCode"] != 200:
logger.error(
"error"
+ s3_response["ResponseMetadata"]["HTTPStatusCode"]
+ "while uploading json to s3"
)
return {
"statusCode": 200,
"body": "OK for query: "
+ str(event["symbol"])
+ " from:"
+ str(event["start"])
+ " in:"
+ str(event["timeframe"]),
}