mirror of https://git.sr.ht/~sircmpwn/hub.sr.ht
Add event tracking
This commit is contained in:
parent
f0f753bfd3
commit
74d8068b44
|
@ -1,6 +1,7 @@
|
|||
from flask import Blueprint, render_template, request, redirect, url_for
|
||||
from hubsrht.projects import ProjectAccess, get_project
|
||||
from hubsrht.services import git, lists
|
||||
from hubsrht.types import Event, EventType
|
||||
from hubsrht.types import Project, RepoType, SourceRepo, Visibility
|
||||
from hubsrht.types import MailingList
|
||||
from srht.config import get_origin
|
||||
|
@ -22,8 +23,13 @@ def summary_GET(owner, project_name):
|
|||
assert repo.repo_type != RepoType.hg # TODO
|
||||
summary = git.get_readme(owner, repo.name)
|
||||
|
||||
events = (Event.query
|
||||
.filter(Event.project_id == project.id)
|
||||
.order_by(Event.created.desc())
|
||||
.limit(2))
|
||||
|
||||
return render_template("project-summary.html", view="summary",
|
||||
owner=owner, project=project, summary=summary)
|
||||
owner=owner, project=project, summary=summary, events=events)
|
||||
|
||||
@projects.route("/projects/create")
|
||||
@loginrequired
|
||||
|
@ -140,6 +146,14 @@ def sources_git_new_POST(owner, project_name):
|
|||
repo.description = git_repo["description"]
|
||||
repo.repo_type = RepoType.git
|
||||
db.session.add(repo)
|
||||
db.session.flush()
|
||||
|
||||
event = Event()
|
||||
event.event_type = EventType.source_repo_added
|
||||
event.source_repo_id = repo.id
|
||||
event.project_id = project.id
|
||||
event.user_id = project.owner_id
|
||||
db.session.add(event)
|
||||
|
||||
git.ensure_user_webhooks(owner, {
|
||||
url_for("webhooks.git_repo_update"): ["repo:update", "repo:delete"],
|
||||
|
@ -211,6 +225,14 @@ def mailing_lists_new_POST(owner, project_name):
|
|||
ml.name = mailing_list["name"]
|
||||
ml.description = mailing_list["description"]
|
||||
db.session.add(ml)
|
||||
db.session.flush()
|
||||
|
||||
event = Event()
|
||||
event.event_type = EventType.mailing_list_added
|
||||
event.mailing_list_id = ml.id
|
||||
event.project_id = project.id
|
||||
event.user_id = project.owner_id
|
||||
db.session.add(event)
|
||||
|
||||
lists.ensure_mailing_list_webhooks(owner, list_name, {
|
||||
url_for("webhooks.mailing_list_update"): ["list:update", "list:delete"],
|
||||
|
|
|
@ -10,6 +10,7 @@ class Visibility(Enum):
|
|||
unlisted = "unlisted"
|
||||
private = "private"
|
||||
|
||||
from hubsrht.types.event import Event, EventType
|
||||
from hubsrht.types.project import Project
|
||||
from hubsrht.types.sourcerepo import SourceRepo, RepoType
|
||||
from hubsrht.types.mailinglist import MailingList
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
import sqlalchemy as sa
|
||||
import sqlalchemy_utils as sau
|
||||
from enum import Enum
|
||||
from srht.database import Base
|
||||
|
||||
class EventType(Enum):
|
||||
source_repo_added = "source_repo_added"
|
||||
mailing_list_added = "mailing_list_added"
|
||||
external_event = "external_event"
|
||||
|
||||
class Event(Base):
|
||||
__tablename__ = "events"
|
||||
id = sa.Column(sa.Integer, primary_key=True)
|
||||
created = sa.Column(sa.DateTime, nullable=False)
|
||||
|
||||
project_id = sa.Column(sa.Integer, sa.ForeignKey("project.id"), nullable=False)
|
||||
project = sa.orm.relationship("Project", backref=sa.orm.backref("events"))
|
||||
"""The project implicated in this event"""
|
||||
|
||||
user_id = sa.Column(sa.Integer, sa.ForeignKey("user.id"), nullable=False)
|
||||
user = sa.orm.relationship("User", backref=sa.orm.backref("events"))
|
||||
"""The user implicated in this event"""
|
||||
|
||||
event_type = sa.Column(sau.ChoiceType(EventType, impl=sa.String()),
|
||||
nullable=False)
|
||||
|
||||
source_repo_id = sa.Column(sa.Integer, sa.ForeignKey("source_repo.id"))
|
||||
source_repo = sa.orm.relationship("SourceRepo")
|
||||
"""The source repository implicated in this event, if applicable"""
|
||||
|
||||
mailing_list_id = sa.Column(sa.Integer, sa.ForeignKey("mailing_list.id"))
|
||||
mailing_list = sa.orm.relationship("MailingList")
|
||||
"""The mailing list implicated in this event, if applicable"""
|
||||
|
||||
external_source = sa.Column(sa.Unicode) # e.g. "lists.sr.ht"
|
||||
external_summary = sa.Column(sa.Unicode) # markdown
|
||||
external_details = sa.Column(sa.Unicode) # markdown
|
Loading…
Reference in New Issue