Implement mailing list removal

This commit is contained in:
Drew DeVault 2020-07-08 12:19:48 -04:00
parent 1880cef710
commit 47d6ec09a1
7 changed files with 28 additions and 14 deletions

View File

@ -1,5 +1,5 @@
import json
from flask import Blueprint, render_template, request, redirect, url_for
from flask import Blueprint, render_template, request, redirect, url_for, abort
from hubsrht.projects import ProjectAccess, get_project
from hubsrht.services import lists
from hubsrht.types import Event, EventType
@ -233,8 +233,7 @@ def delete_GET(owner, project_name, list_id):
abort(404)
return render_template("resource-delete.html", view="mailing lists",
owner=owner, project=project, resource=mailing_list,
resource_type="mailing list",
undeletable=True) # TODO: mailing list deletion
resource_type="mailing list")
@mailing_lists.route("/<owner>/<project_name>/lists/delete/<int:list_id>",
methods=["POST"])
@ -247,14 +246,15 @@ def delete_POST(owner, project_name, list_id):
if not mailing_list:
abort(404)
list_name = mailing_list.name
lists.unensure_mailing_list_webhooks(mailing_list)
db.session.delete(mailing_list)
db.session.commit()
valid = Validation(request)
delete_remote = valid.optional("delete-remote") == "on"
if delete_remote:
assert False # TODO: mailing list deletion
lists.delete_list(owner, list_name)
db.session.commit()
return redirect(url_for("projects.summary_GET",
owner=owner.canonical_name, project_name=project.name))

View File

@ -260,18 +260,19 @@ def delete_POST(owner, project_name, repo_id):
if repo.repo_type == RepoType.git:
git.unensure_repo_webhooks(repo)
repo_name = repo.name
db.session.delete(repo)
db.session.commit()
valid = Validation(request)
delete_remote = valid.optional("delete-remote") == "on"
if delete_remote:
if repo.repo_type == RepoType.git:
git.delete_repo(owner, repo.name)
git.delete_repo(owner, repo_name)
elif repo.repo_type == RepoType.hg:
hg.delete_repo(owner, repo.name)
hg.delete_repo(owner, repo_name)
else:
assert False
db.session.commit()
return redirect(url_for("projects.summary_GET",
owner=owner.canonical_name, project_name=project.name))

View File

@ -151,13 +151,14 @@ def delete_POST(owner, project_name, tracker_id):
.filter(Tracker.project_id == project.id)).one_or_none()
if not tracker:
abort(404)
tracker_name = tracker.name
db.session.delete(tracker)
db.session.commit()
valid = Validation(request)
delete_remote = valid.optional("delete-remote") == "on"
if delete_remote:
todo.delete_tracker(owner, tracker.name)
todo.delete_tracker(owner, tracker_name)
db.session.commit()
return redirect(url_for("projects.summary_GET",
owner=owner.canonical_name, project_name=project.name))

View File

@ -157,7 +157,10 @@ def mailing_list(list_id):
db.session.commit()
return f"Updated local:{ml.id}/remote:{ml.remote_id}. Thanks!", 200
elif event == "list:delete":
raise NotImplementedError()
db.session.delete(ml)
ml.project.updated = datetime.utcnow()
db.session.commit()
return f"Deleted local:{ml.id}/remote:{ml.remote_id}. Thanks!", 200
elif event == "post:received":
event = Event()
print(payload)

View File

@ -212,6 +212,12 @@ class ListService(SrhtService):
"description": description,
})
def delete_list(self, user, list_name):
r = self.session.delete(f"{_listsrht}/api/lists/{list_name}",
headers=get_authorization(user))
if r.status_code != 204 and r.status_code != 404:
raise Exception(r.text)
class TodoService(SrhtService):
def get_trackers(self, user):
return get_results(f"{_todosrht}/api/trackers", user)

View File

@ -215,6 +215,12 @@
Delete project {{icon('caret-right')}}
</button>
</div>
<div class="col-md-9">
<label class="checkbox">
<input type="checkbox" name="delete-resources" />
Permanently delete project resources (repos, mailing lists, etc)
</label>
</div>
</div>
</form>
</div>

View File

@ -12,8 +12,6 @@
<a href="{{resource.url()}}">{{resource.name}}</a>
{{resource_type}} from the {{project.name}} project?
</p>
{# Deletion is complicated, some services don't support it yet #}
{% if not undeletable %}
<div class="event-list">
<div class="event">
<div class="form-check form-group">
@ -31,7 +29,6 @@
</div>
</div>
</div>
{% endif %}
<div class="form-group">
<button type="submit" class="btn btn-danger">
Remove this {{resource_type}} {{icon('caret-right')}}