Spaces:
Sleeping
Sleeping
burtenshaw
commited on
Commit
Β·
d0a5416
1
Parent(s):
49da546
adapt application to actual webhook event
Browse files
app.py
CHANGED
|
@@ -148,7 +148,8 @@ async def process_webhook_comment(webhook_data: Dict[str, Any]):
|
|
| 148 |
discussion_title = webhook_data["discussion"]["title"]
|
| 149 |
repo_name = webhook_data["repo"]["name"]
|
| 150 |
discussion_num = webhook_data["discussion"]["num"]
|
| 151 |
-
|
|
|
|
| 152 |
|
| 153 |
# Extract potential tags from the comment and discussion title
|
| 154 |
comment_tags = extract_tags_from_text(comment_content)
|
|
@@ -215,7 +216,7 @@ async def process_webhook_comment(webhook_data: Dict[str, Any]):
|
|
| 215 |
# If no JSON found, use the response as is
|
| 216 |
msg = f"Tag '{tag}': {response_text}"
|
| 217 |
|
| 218 |
-
except Exception
|
| 219 |
msg = f"Tag '{tag}': Response parse error - {response_text}"
|
| 220 |
|
| 221 |
result_messages.append(msg)
|
|
@@ -249,16 +250,40 @@ async def webhook_handler(request: Request, background_tasks: BackgroundTasks):
|
|
| 249 |
"""Handle HF Hub webhooks"""
|
| 250 |
webhook_secret = request.headers.get("X-Webhook-Secret")
|
| 251 |
if webhook_secret != WEBHOOK_SECRET:
|
|
|
|
| 252 |
return {"error": "Invalid webhook secret"}
|
| 253 |
|
| 254 |
payload = await request.json()
|
|
|
|
|
|
|
| 255 |
event = payload.get("event", {})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 256 |
|
| 257 |
-
scope_check
|
| 258 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 259 |
background_tasks.add_task(process_webhook_comment, payload)
|
| 260 |
return {"status": "processing"}
|
| 261 |
|
|
|
|
| 262 |
return {"status": "ignored"}
|
| 263 |
|
| 264 |
|
|
@@ -270,17 +295,25 @@ async def simulate_webhook(
|
|
| 270 |
return "Please fill in all fields."
|
| 271 |
|
| 272 |
mock_payload = {
|
| 273 |
-
"event": {"action": "create", "scope": "discussion
|
| 274 |
"comment": {
|
| 275 |
"content": comment_content,
|
| 276 |
-
"author": "test-user",
|
| 277 |
-
"
|
|
|
|
| 278 |
},
|
| 279 |
"discussion": {
|
| 280 |
"title": discussion_title,
|
| 281 |
"num": len(tag_operations_store) + 1,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 282 |
},
|
| 283 |
-
"repo": {"name": repo_name},
|
| 284 |
}
|
| 285 |
|
| 286 |
response = await process_webhook_comment(mock_payload)
|
|
@@ -326,7 +359,7 @@ def create_gradio_app():
|
|
| 326 |
sim_result = gr.Textbox(label="Result", lines=8)
|
| 327 |
|
| 328 |
sim_btn.click(
|
| 329 |
-
simulate_webhook,
|
| 330 |
inputs=[sim_repo, sim_title, sim_comment],
|
| 331 |
outputs=sim_result,
|
| 332 |
)
|
|
|
|
| 148 |
discussion_title = webhook_data["discussion"]["title"]
|
| 149 |
repo_name = webhook_data["repo"]["name"]
|
| 150 |
discussion_num = webhook_data["discussion"]["num"]
|
| 151 |
+
# Author is an object with "id" field
|
| 152 |
+
comment_author = webhook_data["comment"]["author"].get("id", "unknown")
|
| 153 |
|
| 154 |
# Extract potential tags from the comment and discussion title
|
| 155 |
comment_tags = extract_tags_from_text(comment_content)
|
|
|
|
| 216 |
# If no JSON found, use the response as is
|
| 217 |
msg = f"Tag '{tag}': {response_text}"
|
| 218 |
|
| 219 |
+
except Exception:
|
| 220 |
msg = f"Tag '{tag}': Response parse error - {response_text}"
|
| 221 |
|
| 222 |
result_messages.append(msg)
|
|
|
|
| 250 |
"""Handle HF Hub webhooks"""
|
| 251 |
webhook_secret = request.headers.get("X-Webhook-Secret")
|
| 252 |
if webhook_secret != WEBHOOK_SECRET:
|
| 253 |
+
print("β Invalid webhook secret")
|
| 254 |
return {"error": "Invalid webhook secret"}
|
| 255 |
|
| 256 |
payload = await request.json()
|
| 257 |
+
print(f"π₯ Received webhook payload: {json.dumps(payload, indent=2)}")
|
| 258 |
+
|
| 259 |
event = payload.get("event", {})
|
| 260 |
+
scope = event.get("scope")
|
| 261 |
+
action = event.get("action")
|
| 262 |
+
|
| 263 |
+
print(f"π Event details - scope: {scope}, action: {action}")
|
| 264 |
+
|
| 265 |
+
# Check if this is a discussion comment creation
|
| 266 |
+
scope_check = scope == "discussion"
|
| 267 |
+
action_check = action == "create"
|
| 268 |
+
|
| 269 |
+
print(f"β
scope_check: {scope_check}")
|
| 270 |
+
print(f"β
action_check: {action_check}")
|
| 271 |
|
| 272 |
+
if scope_check and action_check:
|
| 273 |
+
# Verify we have the required fields
|
| 274 |
+
required_fields = ["comment", "discussion", "repo"]
|
| 275 |
+
missing_fields = [field for field in required_fields if field not in payload]
|
| 276 |
+
|
| 277 |
+
if missing_fields:
|
| 278 |
+
error_msg = f"Missing required fields: {missing_fields}"
|
| 279 |
+
print(f"β {error_msg}")
|
| 280 |
+
return {"error": error_msg}
|
| 281 |
+
|
| 282 |
+
print(f"π Processing webhook for repo: {payload['repo']['name']}")
|
| 283 |
background_tasks.add_task(process_webhook_comment, payload)
|
| 284 |
return {"status": "processing"}
|
| 285 |
|
| 286 |
+
print(f"βοΈ Ignoring webhook - scope: {scope}, action: {action}")
|
| 287 |
return {"status": "ignored"}
|
| 288 |
|
| 289 |
|
|
|
|
| 295 |
return "Please fill in all fields."
|
| 296 |
|
| 297 |
mock_payload = {
|
| 298 |
+
"event": {"action": "create", "scope": "discussion"},
|
| 299 |
"comment": {
|
| 300 |
"content": comment_content,
|
| 301 |
+
"author": {"id": "test-user-id"},
|
| 302 |
+
"id": "mock-comment-id",
|
| 303 |
+
"hidden": False,
|
| 304 |
},
|
| 305 |
"discussion": {
|
| 306 |
"title": discussion_title,
|
| 307 |
"num": len(tag_operations_store) + 1,
|
| 308 |
+
"id": "mock-discussion-id",
|
| 309 |
+
"status": "open",
|
| 310 |
+
"isPullRequest": False,
|
| 311 |
+
},
|
| 312 |
+
"repo": {
|
| 313 |
+
"name": repo_name,
|
| 314 |
+
"type": "model",
|
| 315 |
+
"private": False,
|
| 316 |
},
|
|
|
|
| 317 |
}
|
| 318 |
|
| 319 |
response = await process_webhook_comment(mock_payload)
|
|
|
|
| 359 |
sim_result = gr.Textbox(label="Result", lines=8)
|
| 360 |
|
| 361 |
sim_btn.click(
|
| 362 |
+
fn=simulate_webhook,
|
| 363 |
inputs=[sim_repo, sim_title, sim_comment],
|
| 364 |
outputs=sim_result,
|
| 365 |
)
|