Richard Guo commited on
Commit
f47c911
1 Parent(s): 46270d0

webhook models

Browse files
Files changed (2) hide show
  1. main.py +16 -1
  2. models.py +17 -0
main.py CHANGED
@@ -1,13 +1,13 @@
1
  from fastapi import FastAPI, Form, Request, BackgroundTasks
2
  from fastapi.responses import HTMLResponse
3
  from fastapi.templating import Jinja2Templates
4
- #from pydantic import BaseModel
5
 
6
  from uuid import uuid4
7
  import time
8
  import asyncio
9
 
10
  from build_map import load_dataset_and_metadata, upload_dataset_to_atlas
 
11
 
12
 
13
  app = FastAPI()
@@ -56,3 +56,18 @@ async def read_task(task_id: str):
56
  return {'status': 'not found'}
57
  else:
58
  return tasks[task_id]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  from fastapi import FastAPI, Form, Request, BackgroundTasks
2
  from fastapi.responses import HTMLResponse
3
  from fastapi.templating import Jinja2Templates
 
4
 
5
  from uuid import uuid4
6
  import time
7
  import asyncio
8
 
9
  from build_map import load_dataset_and_metadata, upload_dataset_to_atlas
10
+ from models import WebhookPayload, WebhookPayloadRepo, WebhookPayloadEvent
11
 
12
 
13
  app = FastAPI()
 
56
  return {'status': 'not found'}
57
  else:
58
  return tasks[task_id]
59
+
60
+ @app.post("/webhook")
61
+ async def post_webhook(background_tasks: BackgroundTasks, payload: WebhookPayload):
62
+ if not (
63
+ payload.event.action == "update"
64
+ and payload.event.scope.startswith("repo.content")
65
+ and payload.repo.type == "dataset"
66
+ ):
67
+ return {"processed": False}
68
+ else:
69
+ task_id = str(uuid4())
70
+ tasks[task_id] = {'status': 'running'}
71
+ #form_data = DatasetForm(dataset_name=dataset_name)
72
+ background_tasks.add_task(upload_atlas_task, task_id, payload.repo.name)
73
+ return {'task_id': task_id}
models.py ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from pydantic import BaseModel
2
+ from typing import Literal
3
+
4
+ class WebhookPayloadEvent(BaseModel):
5
+ action: Literal["create", "update", "delete"]
6
+ scope: str
7
+
8
+ class WebhookPayloadRepo(BaseModel):
9
+ type: Literal["dataset", "model", "space"]
10
+ name: str
11
+ id: str
12
+ private: bool
13
+ headSha: str
14
+
15
+ class WebhookPayload(BaseModel):
16
+ event: WebhookPayloadEvent
17
+ repo: WebhookPayloadRepo