mirror of https://git.sr.ht/~sircmpwn/hub.sr.ht
Implement mailing list removal
This commit is contained in:
parent
1880cef710
commit
47d6ec09a1
|
@ -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))
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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')}}
|
||||
|
|
Loading…
Reference in New Issue