Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
File size: 2,389 Bytes
d1ddfcd 74f2127 a5b6885 d1ddfcd 74f2127 a5b6885 74f2127 a5b6885 74f2127 a5b6885 d1ddfcd a5b6885 74f2127 a5b6885 d1ddfcd a5b6885 d1ddfcd a5b6885 d1ddfcd a5b6885 d1ddfcd a5b6885 d1ddfcd a5b6885 d1ddfcd a5b6885 d1ddfcd 74f2127 d1ddfcd 74f2127 a5b6885 88b92fb |
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 |
from fastapi import FastAPI, Request, Response
import os
import requests
import json
import logging
# Set up logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
HF_WEBHOOK_SECRET = os.environ.get("HF_WEBHOOK_SECRET")
SLACK_WEBHOOK_URL = os.environ.get("SLACK_WEBHOOK_URL")
def send_slack_message(message: str):
"""Send a message to Slack using webhook URL"""
if not SLACK_WEBHOOK_URL:
logger.warning(f"No Slack webhook URL configured. Message: {message}")
return
payload = {"text": message}
try:
response = requests.post(SLACK_WEBHOOK_URL, json=payload)
response.raise_for_status()
logger.info(f"Slack message sent successfully: {message}")
except requests.exceptions.RequestException as e:
logger.error(f"Failed to send Slack message: {e}")
app = FastAPI()
@app.post("/webhook")
async def webhook(request: Request):
logger.info(f"Received webhook request from {request.client.host}")
if request.headers.get("X-Webhook-Secret") != HF_WEBHOOK_SECRET:
logger.warning("Invalid webhook secret received")
return Response("Invalid secret", status_code=401)
data = await request.json()
logger.info(f"Webhook payload: {json.dumps(data, indent=2)}")
event = data.get("event", {})
repo = data.get("repo", {})
# Only process model repo events
if repo.get("type") != "model" or event.get("scope") != "repo":
logger.info(f"Skipping non-model repo event: type={repo.get('type')}, scope={event.get('scope')}")
return Response("Not a model repo event", status_code=200)
action = event.get("action")
logger.info(f"Processing model repo action: {action}")
if action == "move":
old_name = data.get("oldRepo", {}).get("name", "unknown") # TODO ernsure good key when name change
new_name = repo.get("name", "unknown")
message = f"Model renamed: `{old_name}` → `{new_name}`"
send_slack_message(message)
elif action == "delete":
name = repo.get("name", "unknown")
message = f"Model deleted: `{name}`"
send_slack_message(message)
else:
logger.info(f"Unhandled action: {action}")
return Response("Webhook notification received and processed!", status_code=200)
|