-
Notifications
You must be signed in to change notification settings - Fork 29
Expand file tree
/
Copy pathapp.py
More file actions
46 lines (32 loc) · 1.16 KB
/
app.py
File metadata and controls
46 lines (32 loc) · 1.16 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
import logging
import restate
from syncasync.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_typed("bucket creation", create_s3_bucket)
await ctx.run_typed("upload", upload_data, target=url)
await ctx.promise("url", type_hint=str).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", type_hint=str).value()
await ctx.run_typed(
"email",
send_email,
email=email,
url=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))