Implement project event feed

This commit is contained in:
Drew DeVault 2020-04-01 15:16:20 -04:00
parent 665d0ca21f
commit 03f858a9bf
4 changed files with 54 additions and 21 deletions

View File

@ -4,6 +4,7 @@ from hubsrht.services import git
from hubsrht.types import Event, EventType
from hubsrht.types import Project, RepoType, Visibility
from srht.database import db
from srht.flask import paginate_query
from srht.oauth import current_user, loginrequired
from srht.validation import Validation
@ -23,12 +24,24 @@ def summary_GET(owner, project_name):
.filter(Event.project_id == project.id)
.order_by(Event.created.desc())
.limit(2)).all()
print(events)
return render_template("project-summary.html", view="summary",
owner=owner, project=project, summary=summary,
events=events, EventType=EventType)
@projects.route("/<owner>/<project_name>/feed")
def feed_GET(owner, project_name):
owner, project = get_project(owner, project_name, ProjectAccess.read)
events = (Event.query
.filter(Event.project_id == project.id)
.order_by(Event.created.desc()))
events, pagination = paginate_query(events)
return render_template("project-feed.html",
view="summary", owner=owner, project=project,
events=events, EventType=EventType, **pagination)
@projects.route("/projects/create")
@loginrequired
def create_GET():

View File

@ -0,0 +1,21 @@
{% macro event(event) %}
{% if event.event_type == EventType.source_repo_added %}
<div class="event">
<a
href="{{event.source_repo.url()}}"
>{{event.source_repo.owner.canonical_name}}/{{event.source_repo.name}}</a>
<p>New {{event.source_repo.repo_type.value}} repository added</p>
<small class="text-muted">{{event.created | date}}</small>
</div>
{% elif event.event_type == EventType.mailing_list_added %}
<div class="event">
<a
href="{{event.mailing_list.url()}}"
>{{event.mailing_list.owner.canonical_name}}/{{event.mailing_list.name}}</a>
<p>New mailing list added</p>
<small class="text-muted">{{event.created | date}}</small>
</div>
{% else %}
TODO: implement event type {{event.event_type}}
{% endif %}
{% endmacro %}

View File

@ -0,0 +1,15 @@
{% extends "project-base.html" %}
{% import "event.html" as eventutil with context %}
{# TODO: RSS feed #}
{% block content %}
<div class="container">
<div class="row">
<div class="col-md-12 event-list">
{% for event in events %}
{{ eventutil.event(event) }}
{% endfor %}
{{pagination()}}
</div>
</div>
</div>
{% endblock %}

View File

@ -1,4 +1,5 @@
{% extends "project-base.html" %}
{% import "event.html" as eventutil with context %}
{% block content %}
<div class="container">
<div class="row">
@ -72,25 +73,7 @@
<div class="col-md-12">
<div class="event-list project-events">
{% for event in events %}
{% if event.event_type == EventType.source_repo_added %}
<div class="event">
<a
href="{{event.source_repo.url()}}"
>{{event.source_repo.owner.canonical_name}}/{{event.source_repo.name}}</a>
<p>New {{event.source_repo.repo_type.value}} repository added</p>
<small class="text-muted">{{event.created | date}}</small>
</div>
{% elif event.event_type == EventType.mailing_list_added %}
<div class="event">
<a
href="{{event.mailing_list.url()}}"
>{{event.mailing_list.owner.canonical_name}}/{{event.mailing_list.name}}</a>
<p>New mailing list added</p>
<small class="text-muted">{{event.created | date}}</small>
</div>
{% else %}
TODO: implement event type {{event.event_type}}
{% endif %}
{{ eventutil.event(event) }}
{% endfor %}
{#
<div class="event">
@ -106,7 +89,8 @@
#}
<div class="view-more">
<a
href="#"
href="{{url_for("projects.feed_GET",
owner=owner, project_name=project.name)}}"
class="btn btn-link"
>View project feed&nbsp;{{icon("caret-right")}}</a>
</div>