-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy pathapp.py
48 lines (34 loc) · 1.13 KB
/
app.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
import logging
import restate
from utils import upload_data, create_s3_bucket, send_email
logging.basicConfig(
level=logging.INFO,
format="[%(asctime)s] [%(process)d] [%(levelname)s] - %(message)s",
)
logger = logging.getLogger(__name__)
data_upload_service = restate.Workflow("DataUploadService")
@data_upload_service.main()
async def run(ctx: restate.WorkflowContext) -> str:
url = await ctx.run("bucket creation", create_s3_bucket)
await ctx.run("upload", upload_data, args=(url,))
await ctx.promise("url").resolve(url)
return url
@data_upload_service.handler("resultAsEmail")
async def result_as_email(ctx: restate.WorkflowSharedContext, email: str):
logging.info("Slow upload: client requested to be notified via email")
url = await ctx.promise("url").value()
await ctx.run(
"email",
send_email,
args=(
email,
url,
),
)
app = restate.app([data_upload_service])
if __name__ == "__main__":
import hypercorn
import asyncio
conf = hypercorn.Config()
conf.bind = ["0.0.0.0:9080"]
asyncio.run(hypercorn.asyncio.serve(app, conf))