Fix project deletion

SQLAlchemy's internal cascade handling is the most miserable, broken
piece of shit I have ever had the displeasure of using. So we circumvent
it entirely and let the SQL server do the right thing.

A word of advice: don't use SQLAlchemy for new projects.
This commit is contained in:
Drew DeVault 2020-07-09 09:52:53 -04:00
parent 47d6ec09a1
commit 3c6f828df2
5 changed files with 16 additions and 6 deletions

View File

@ -157,8 +157,8 @@ def config_POST(owner, project_name):
@loginrequired
def delete_POST(owner, project_name):
owner, project = get_project(owner, project_name, ProjectAccess.write)
project.summary_repo_id = None
db.session.delete(project)
session["notice"] = f"{project.name} has been deleted."
db.engine.execute(f"DELETE FROM project WHERE id = {project.id}")
db.session.commit()
return redirect(url_for("public.index"))

View File

@ -1,4 +1,4 @@
from flask import Blueprint, render_template, request
from flask import Blueprint, render_template, request, session
from hubsrht.types import Project, Feature, Event, EventType, Visibility, User
from srht.flask import paginate_query
from srht.oauth import current_user, loginrequired
@ -9,6 +9,7 @@ public = Blueprint("public", __name__)
@public.route("/")
def index():
if current_user:
notice = session.pop("notice", None)
projects = (Project.query
.filter(Project.owner_id == current_user.id)
.order_by(Project.updated.desc())
@ -19,14 +20,15 @@ def index():
.order_by(Event.created.desc())
.limit(2)).all()
return render_template("dashboard.html",
projects=projects, EventType=EventType, events=events)
return render_template("new-user-dashboard.html")
projects=projects, EventType=EventType, events=events,
notice=notice)
return render_template("new-user-dashboard.html", notice=notice)
return render_template("index.html")
@public.route("/getting-started")
@loginrequired
def getting_started():
return render_template("new-user-dashboard.html")
return render_template("new-user-dashboard.html", notice=notice)
@public.route("/projects")
def project_index():

View File

@ -4,6 +4,9 @@
<title>{{cfg("sr.ht", "site-name")}} dashboard</title>
{% endblock %}
{% block content %}
{% if notice %}
<div class="alert alert-info">{{notice}}</div>
{% endif %}
<div class="row">
<div class="col-md-4">
<p>

View File

@ -3,6 +3,9 @@
<title>{{cfg("sr.ht", "site-name")}} dashboard</title>
{% endblock %}
{% block content %}
{% if notice %}
<div class="alert alert-info">{{notice}}</div>
{% endif %}
<div class="row">
<div class="col-md-10 offset-md-1" style="margin-top: 1rem; margin-bottom: 1rem;">
<strong>Welcome to {{cfg("sr.ht", "site-name")}}!</strong>

View File

@ -215,12 +215,14 @@
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>