Flesh out webhooks somewhat

This handles deletion of the remote resource
This commit is contained in:
Drew DeVault 2020-04-08 14:33:16 -04:00
parent e0326ac0e2
commit 3d11d5dfe4
2 changed files with 35 additions and 16 deletions

View File

@ -174,7 +174,7 @@ def new_POST(owner, project_name):
event.user_id = project.owner_id
db.session.add(event)
lists.ensure_mailing_list_webhooks(owner, ml.name)
lists.ensure_mailing_list_webhooks(ml)
db.session.commit()

View File

@ -1,6 +1,8 @@
import json
from datetime import datetime
from flask import Blueprint, request
from hubsrht.types import Event, EventType, MailingList, SourceRepo, RepoType
from hubsrht.types import Tracker, User
from srht.database import db
from srht.flask import csrf_bypass
@ -23,6 +25,7 @@ def git_user(user_id):
return "I don't recognize this git repo.", 404
repo.name = payload["name"]
repo.description = payload["description"]
repo.project.updated = datetime.utcnow()
db.session.commit()
return f"Updated local:{repo.id}/remote:{repo.remote_id}. Thanks!", 200
elif event == "repo:delete":
@ -31,7 +34,13 @@ def git_user(user_id):
.filter(SourceRepo.repo_type == RepoType.git)).one_or_none()
if not repo:
return "I don't recognize this git repo.", 404
raise NotImplementedError()
if repo.project.summary_repo_id == repo.id:
repo.project.summary_repo = None
db.session.commit()
db.session.delete(repo)
repo.project.updated = datetime.utcnow()
db.session.commit()
return f"Deleted local:{repo.id}/remote:{repo.remote_id}. Thanks!", 200
else:
raise NotImplementedError()
@ -60,16 +69,28 @@ def hg_user(user_id):
if event == "repo:update":
repo = (SourceRepo.query
.filter(SourceRepo.id == repo_id)
.filter(SourceRepo.id == payload["id"])
.filter(SourceRepo.repo_type == RepoType.hg)).one_or_none()
if not repo:
return "I don't recognize that repository.", 404
repo.name = payload["name"]
repo.description = payload["description"]
repo.project.updated = datetime.utcnow()
db.session.commit()
return f"Updated local:{repo.id}/remote:{repo.remote_id}. Thanks!", 200
elif event == "repo:delete":
raise NotImplementedError()
repo = (SourceRepo.query
.filter(SourceRepo.remote_id == payload["id"])
.filter(SourceRepo.repo_type == RepoType.hg)).one_or_none()
if not repo:
return "I don't recognize this hg repo.", 404
if repo.project.summary_repo_id == repo.id:
repo.project.summary_repo = None
db.session.commit()
db.session.delete(repo)
repo.project.updated = datetime.utcnow()
db.session.commit()
return f"Deleted local:{repo.id}/remote:{repo.remote_id}. Thanks!", 200
else:
raise NotImplementedError()
@ -86,6 +107,7 @@ def mailing_list():
return "I don't recognize that mailing list.", 404
ml.name = payload["name"]
ml.description = payload["description"]
ml.project.updated = datetime.utcnow()
db.session.commit()
return f"Updated local:{ml.id}/remote:{ml.remote_id}. Thanks!", 200
elif event == "list:delete":
@ -103,27 +125,31 @@ def todo_user(user_id):
event = request.headers.get("X-Webhook-Event")
payload = json.loads(request.data.decode("utf-8"))
user = User.query.get(tracker_id)
user = User.query.get(user_id)
if not user:
return "I don't recognize this tracker.", 404
if event == "tracker:update":
tracker = (Tracker.query
.filter(Tracker.remote_id == payload["id"])
.one_or_default())
.one_or_none())
if not tracker:
return "I don't recognize this tracker.", 404
tracker.name = payload["name"]
tracker.description = payload["description"]
tracker.project.updated = datetime.utcnow()
db.session.commit()
return f"Updated local:{tracker.id}/remote:{tracker.remote_id}. Thanks!", 200
elif event == "tracker:delete":
tracker = (Tracker.query
.filter(Tracker.remote_id == payload["id"])
.one_or_default())
.one_or_none())
if not tracker:
return "I don't recognize this tracker.", 404
raise NotImplementedError()
tracker.project.updated = datetime.utcnow()
db.session.delete(tracker)
db.session.commit()
return f"Deleted local:{tracker.id}/remote:{tracker.remote_id}. Thanks!", 200
else:
raise NotImplementedError()
@ -137,14 +163,7 @@ def todo_tracker(tracker_id):
if not tracker:
return "I don't recognize this tracker.", 404
if event == "tracker:update":
tracker.name = payload["name"]
tracker.description = payload["description"]
db.session.commit()
return f"Updated local:{tracker.id}/remote:{tracker.remote_id}. Thanks!", 200
elif event == "tracker:delete":
raise NotImplementedError()
elif event == "ticket:create":
if event == "ticket:create":
raise NotImplementedError()
else:
raise NotImplementedError()