mirror of https://git.sr.ht/~sircmpwn/hub.sr.ht
Implement tracker management
This commit is contained in:
parent
c866a9f4ed
commit
6456c0a7bf
|
@ -91,3 +91,59 @@ def new_POST(owner, project_name):
|
|||
|
||||
return redirect(url_for("projects.summary_GET",
|
||||
owner=owner.canonical_name, project_name=project.name))
|
||||
|
||||
@trackers.route("/<owner>/<project_name>/trackers/manage")
|
||||
@loginrequired
|
||||
def manage_GET(owner, project_name):
|
||||
owner, project = get_project(owner, project_name, ProjectAccess.write)
|
||||
trackers = (Tracker.query
|
||||
.filter(Tracker.project_id == project.id)
|
||||
.order_by(Tracker.updated.desc()))
|
||||
|
||||
terms = request.args.get("search")
|
||||
search_error = None
|
||||
try:
|
||||
trackers = search_by(trackers, terms,
|
||||
[Tracker.name, Tracker.description])
|
||||
except ValueError as ex:
|
||||
search_error = str(ex)
|
||||
|
||||
trackers, pagination = paginate_query(trackers)
|
||||
return render_template("trackers-manage.html", view="tickets",
|
||||
owner=owner, project=project, trackers=trackers,
|
||||
search=terms, search_error=search_error,
|
||||
**pagination)
|
||||
|
||||
@trackers.route("/<owner>/<project_name>/trackers/delete/<int:tracker_id>")
|
||||
@loginrequired
|
||||
def delete_GET(owner, project_name, tracker_id):
|
||||
owner, project = get_project(owner, project_name, ProjectAccess.write)
|
||||
tracker = (Tracker.query
|
||||
.filter(Tracker.id == tracker_id)
|
||||
.filter(Tracker.project_id == project.id)).one_or_none()
|
||||
if not tracker:
|
||||
abort(404)
|
||||
return render_template("resource-delete.html", view="tickets",
|
||||
owner=owner, project=project, resource=tracker,
|
||||
resource_type="ticket tracker")
|
||||
|
||||
@trackers.route("/<owner>/<project_name>/trackers/delete/<int:tracker_id>",
|
||||
methods=["POST"])
|
||||
@loginrequired
|
||||
def delete_POST(owner, project_name, tracker_id):
|
||||
owner, project = get_project(owner, project_name, ProjectAccess.write)
|
||||
tracker = (Tracker.query
|
||||
.filter(Tracker.id == tracker_id)
|
||||
.filter(Tracker.project_id == project.id)).one_or_none()
|
||||
if not tracker:
|
||||
abort(404)
|
||||
db.session.delete(tracker)
|
||||
|
||||
valid = Validation(request)
|
||||
delete_remote = valid.optional("delete-remote") == "on"
|
||||
if delete_remote:
|
||||
todo.delete_tracker(owner, tracker.name)
|
||||
|
||||
db.session.commit()
|
||||
return redirect(url_for("projects.summary_GET",
|
||||
owner=owner.canonical_name, project_name=project.name))
|
||||
|
|
|
@ -121,6 +121,12 @@ class TodoService(SrhtService):
|
|||
raise Exception(r.json())
|
||||
return r.json()
|
||||
|
||||
def delete_tracker(self, user, tracker_name):
|
||||
r = self.session.delete(f"{_todosrht}/api/trackers/{tracker_name}",
|
||||
headers=get_authorization(user))
|
||||
if r.status_code != 204:
|
||||
raise Exception(r.text)
|
||||
|
||||
def ensure_user_webhooks(self, user):
|
||||
config = {
|
||||
origin + url_for("webhooks.tracker"): ["tracker:update", "tracker:delete"]
|
||||
|
|
|
@ -1,17 +1,5 @@
|
|||
{% extends "layout.html" %}
|
||||
{% block body %}
|
||||
<div class="header-tabbed">
|
||||
<div class="container">
|
||||
{% include 'project-nav.html' %}
|
||||
</div>
|
||||
</div>
|
||||
{% if project.description %}
|
||||
<div class="header-extension">
|
||||
<div class="container">
|
||||
{{ project.description }}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% extends "project-base.html" %}
|
||||
{% block content %}
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-12 event-list">
|
||||
|
@ -20,7 +8,7 @@
|
|||
<input
|
||||
name="search"
|
||||
type="text"
|
||||
placeholder="Search repositories"
|
||||
placeholder="Search mailing lists"
|
||||
class="form-control{% if search_error %} is-invalid{% endif %}"
|
||||
value="{{ search if search else "" }}" />
|
||||
{% if search_error %}
|
||||
|
@ -32,7 +20,7 @@
|
|||
<h4>
|
||||
<a
|
||||
href="{{mailing_list.url()}}"
|
||||
>~{{owner.username}}/{{mailing_list.name}}</a>
|
||||
>{{mailing_list.owner.canonical_name}}/{{mailing_list.name}}</a>
|
||||
</h4>
|
||||
{% if mailing_list.description %}
|
||||
{{ mailing_list.description | md }}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<h4>
|
||||
<a
|
||||
href="{{mailing_list.url()}}"
|
||||
>~{{owner.username}}/{{mailing_list.name}}</a>
|
||||
>{{tracker.owner.canonical_name}}/{{mailing_list.name}}</a>
|
||||
</h4>
|
||||
{% if mailing_list.description %}
|
||||
{{ mailing_list.description | md }}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
{% for repo in sources %}
|
||||
<div class="event">
|
||||
<h4>
|
||||
<a href="{{repo.url()}}">~{{repo.owner.username}}/{{repo.name}}</a>
|
||||
<a href="{{repo.url()}}">{{repo.owner.canonical_name}}/{{repo.name}}</a>
|
||||
<small class="pull-right">
|
||||
{{ repo.repo_type.value }}
|
||||
</small>
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
{% extends "project-base.html" %}
|
||||
{% block content %}
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-12 event-list">
|
||||
<h3>Manage mailing lists</h3>
|
||||
<form>
|
||||
<input
|
||||
name="search"
|
||||
type="text"
|
||||
placeholder="Search trackers"
|
||||
class="form-control{% if search_error %} is-invalid{% endif %}"
|
||||
value="{{ search if search else "" }}" />
|
||||
{% if search_error %}
|
||||
<div class="invalid-feedback">{{ search_error }}</div>
|
||||
{% endif %}
|
||||
</form>
|
||||
{% for tracker in trackers %}
|
||||
<div class="event">
|
||||
<h4>
|
||||
<a
|
||||
href="{{tracker.url()}}"
|
||||
>{{tracker.owner.canonical_name}}/{{tracker.name}}</a>
|
||||
</h4>
|
||||
{% if tracker.description %}
|
||||
{{ tracker.description | md }}
|
||||
{% endif %}
|
||||
<a
|
||||
class="btn btn-danger"
|
||||
href="{{url_for("trackers.delete_POST",
|
||||
owner=project.owner.canonical_name,
|
||||
project_name=project.name,
|
||||
tracker_id=tracker.id)}}"
|
||||
>Remove tracker {{icon('caret-right')}}</a>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{{pagination()}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -18,11 +18,9 @@
|
|||
project_name=project.name)}}"
|
||||
class="btn btn-primary btn-block"
|
||||
>Add tracker {{icon('caret-right')}}</a>
|
||||
{#
|
||||
<a
|
||||
href="{{url_for("tracker.manage_GET",
|
||||
href="{{url_for("trackers.manage_GET",
|
||||
owner=owner.canonical_name, project_name=project.name)}}"
|
||||
class="btn btn-default btn-block"
|
||||
>Manage sources {{icon('caret-right')}}</a>
|
||||
#}
|
||||
>Manage trackers {{icon('caret-right')}}</a>
|
||||
{% endblock %}
|
||||
|
|
Loading…
Reference in New Issue