mirror of https://git.sr.ht/~sircmpwn/hub.sr.ht
Add events for todo.sr.ht tickets
This commit is contained in:
parent
8cafac751f
commit
7c3bb9fc0f
|
@ -248,6 +248,9 @@ def delete_POST(owner, project_name, repo_id):
|
|||
project.summary_repo_id = None
|
||||
db.session.commit()
|
||||
|
||||
if repo.repo_type == RepoType.git:
|
||||
git.unensure_repo_webhooks(repo)
|
||||
|
||||
db.session.delete(repo)
|
||||
|
||||
valid = Validation(request)
|
||||
|
|
|
@ -60,15 +60,11 @@ def git_repo(repo_id):
|
|||
return "I don't recognize that repository.", 404
|
||||
|
||||
if event == "repo:post-update":
|
||||
# XXX: This isn't right for Hg, but Hg doesn't have webhooks yet anyway
|
||||
commit_sha = payload["refs"][0]["new"]["id"][:7]
|
||||
commit_url = repo.url() + f"/commit/{commit_sha}"
|
||||
commit_message = payload["refs"][0]["new"]["message"].split("\n")[0]
|
||||
pusher_name = payload['pusher']['canonical_name']
|
||||
if repo.repo_type == RepoType.git:
|
||||
pusher_url = f"{_gitsrht}/{pusher_name}"
|
||||
elif repo.repo_type == RepoType.hg:
|
||||
pusher_url = f"{_hgsrht}/{pusher_name}"
|
||||
pusher_url = f"{_gitsrht}/{pusher_name}"
|
||||
repo_name = repo.owner.canonical_name + "/" + repo.name
|
||||
|
||||
pusher = current_app.oauth_service.lookup_user(payload['pusher']['name'])
|
||||
|
@ -199,7 +195,37 @@ def todo_tracker(tracker_id):
|
|||
return "I don't recognize this tracker.", 404
|
||||
|
||||
if event == "ticket:create":
|
||||
raise NotImplementedError()
|
||||
event = Event()
|
||||
submitter = payload["submitter"]
|
||||
if submitter["type"] == "user":
|
||||
event.user_id = current_app.oauth_service.lookup_user(submitter['name']).id
|
||||
# TODO: Move this to a hub.sr.ht user page
|
||||
submitter_url = f"{_todosrht}/{submitter['canonical_name']}"
|
||||
submitter_url = f"<a href='{submitter_url}'>{submitter['canonical_name']}</a>"
|
||||
elif submitter["type"] == "email":
|
||||
submitter_url = f"{submitter['name']}"
|
||||
else:
|
||||
submitter_url = f"{submitter['external_id']}"
|
||||
|
||||
event.event_type = EventType.external_event
|
||||
event.tracker_id = tracker.id
|
||||
event.project_id = tracker.project_id
|
||||
|
||||
ticket_id = payload["id"]
|
||||
ticket_url = tracker.url() + f"/{ticket_id}"
|
||||
ticket_subject = payload["title"]
|
||||
|
||||
event.external_source = "todo.sr.ht"
|
||||
event.external_summary = (
|
||||
f"<a href='{ticket_url}'>#{ticket_id}</a> " +
|
||||
f"{ticket_subject}")
|
||||
event.external_details = (
|
||||
f"{submitter_url} filed ticket on " +
|
||||
f"<a href='{tracker.url()}'>{tracker.name}</a>")
|
||||
|
||||
db.session.add(event)
|
||||
db.session.commit()
|
||||
return "Thanks!"
|
||||
else:
|
||||
raise NotImplementedError()
|
||||
|
||||
|
|
|
@ -75,6 +75,10 @@ class GitService(SrhtService):
|
|||
}
|
||||
ensure_webhooks(user, f"{_gitsrht}/api/user/webhooks", config)
|
||||
|
||||
def ensure_user_webhooks(self, user):
|
||||
config = { }
|
||||
ensure_webhooks(user, f"{_gitsrht}/api/user/webhooks", config)
|
||||
|
||||
def ensure_repo_webhooks(self, repo):
|
||||
config = {
|
||||
origin + url_for("webhooks.git_repo", repo_id=repo.id):
|
||||
|
@ -84,6 +88,12 @@ class GitService(SrhtService):
|
|||
url = f"{_gitsrht}/api/{owner.canonical_name}/repos/{repo.name}/webhooks"
|
||||
ensure_webhooks(owner, url, config)
|
||||
|
||||
def unensure_repo_webhooks(self, repo):
|
||||
config = { }
|
||||
owner = repo.owner
|
||||
url = f"{_gitsrht}/api/{owner.canonical_name}/repos/{repo.name}/webhooks"
|
||||
ensure_webhooks(owner, url, config)
|
||||
|
||||
class HgService(SrhtService):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
@ -132,6 +142,10 @@ class HgService(SrhtService):
|
|||
}
|
||||
ensure_webhooks(user, f"{_hgsrht}/api/user/webhooks", config)
|
||||
|
||||
def unensure_user_webhooks(self, user):
|
||||
config = { }
|
||||
ensure_webhooks(user, f"{_hgsrht}/api/user/webhooks", config)
|
||||
|
||||
class ListService(SrhtService):
|
||||
def get_lists(self, user):
|
||||
return get_results(f"{_listsrht}/api/lists", user)
|
||||
|
@ -152,6 +166,12 @@ class ListService(SrhtService):
|
|||
url = f"{_listsrht}/api/user/{owner.canonical_name}/lists/{mailing_list.name}/webhooks"
|
||||
ensure_webhooks(owner, url, config)
|
||||
|
||||
def unensure_mailing_list_webhooks(self, mailing_list):
|
||||
config = { }
|
||||
owner = mailing_list.owner
|
||||
url = f"{_listsrht}/api/user/{owner.canonical_name}/lists/{mailing_list.name}/webhooks"
|
||||
ensure_webhooks(owner, url, config)
|
||||
|
||||
def create_list(self, user, valid):
|
||||
name = valid.require("name")
|
||||
description = valid.optional("description")
|
||||
|
@ -197,6 +217,11 @@ class TodoService(SrhtService):
|
|||
url = f"{_todosrht}/api/user/webhooks"
|
||||
ensure_webhooks(user, url, config)
|
||||
|
||||
def unensure_user_webhooks(self, user):
|
||||
config = { }
|
||||
url = f"{_todosrht}/api/user/webhooks"
|
||||
ensure_webhooks(user, url, config)
|
||||
|
||||
def ensure_tracker_webhooks(self, tracker):
|
||||
config = {
|
||||
origin + url_for("webhooks.todo_tracker", tracker_id=tracker.id):
|
||||
|
@ -206,6 +231,12 @@ class TodoService(SrhtService):
|
|||
url = f"{_todosrht}/api/user/{owner.canonical_name}/trackers/{tracker.name}/webhooks"
|
||||
ensure_webhooks(owner, url, config)
|
||||
|
||||
def unensure_tracker_webhooks(self, tracker):
|
||||
config = { }
|
||||
owner = tracker.owner
|
||||
url = f"{_todosrht}/api/user/{owner.canonical_name}/trackers/{tracker.name}/webhooks"
|
||||
ensure_webhooks(owner, url, config)
|
||||
|
||||
def ensure_ticket_webhooks(self, tracker, ticket_id):
|
||||
config = {
|
||||
origin + url_for("webhooks.todo_ticket", tracker_id=tracker.id):
|
||||
|
@ -215,6 +246,12 @@ class TodoService(SrhtService):
|
|||
url = f"{_todosrht}/api/user/{owner.canonical_name}/trackers/{tracker.name}/tickets/{ticket_id}/webhooks"
|
||||
ensure_webhooks(owner, url, config)
|
||||
|
||||
def unensure_ticket_webhooks(self, tracker, ticket_id):
|
||||
config = { }
|
||||
owner = tracker.owner
|
||||
url = f"{_todosrht}/api/user/{owner.canonical_name}/trackers/{tracker.name}/tickets/{ticket_id}/webhooks"
|
||||
ensure_webhooks(owner, url, config)
|
||||
|
||||
def create_tracker(self, user, valid):
|
||||
name = valid.require("name")
|
||||
description = valid.optional("description")
|
||||
|
|
|
@ -113,18 +113,6 @@
|
|||
{% for event in events %}
|
||||
{{ eventutil.event(event) }}
|
||||
{% endfor %}
|
||||
{#
|
||||
<div class="event">
|
||||
<a href="#">a7358194</a> <code>gen_temporary: fix (unlikely) buffer overflow</code>
|
||||
<p><a href="#">Drew DeVault</a> pushed to <a href="#">~sircmpwn/scdoc</a> git</p>
|
||||
<small class="text-muted">12 hours ago</small>
|
||||
</div>
|
||||
<div class="event">
|
||||
<a href="#">#360</a> Support for Gmail tabs
|
||||
<p>Comment from <a href="#">~j-james</a> on <a href="#">~sircmpwn/scdoc</a> todo</p>
|
||||
<small class="text-muted">14 hours ago</small>
|
||||
</div>
|
||||
#}
|
||||
<div class="view-more">
|
||||
<a
|
||||
href="{{url_for("projects.feed_GET",
|
||||
|
|
|
@ -10,7 +10,7 @@ class EventType(Enum):
|
|||
external_event = "external_event"
|
||||
|
||||
class Event(Base):
|
||||
__tablename__ = "events"
|
||||
__tablename__ = "event"
|
||||
id = sa.Column(sa.Integer, primary_key=True)
|
||||
created = sa.Column(sa.DateTime, nullable=False)
|
||||
|
||||
|
@ -22,7 +22,7 @@ class Event(Base):
|
|||
"""The project implicated in this event"""
|
||||
|
||||
user_id = sa.Column(sa.Integer,
|
||||
sa.ForeignKey("user.id", ondelete="CASCADE"), nullable=False)
|
||||
sa.ForeignKey("user.id", ondelete="CASCADE"))
|
||||
user = sa.orm.relationship("User", backref=sa.orm.backref("events"),
|
||||
cascade="all, delete")
|
||||
"""The user implicated in this event"""
|
||||
|
|
Loading…
Reference in New Issue