mirror of https://git.sr.ht/~sircmpwn/hub.sr.ht
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:
parent
47d6ec09a1
commit
3c6f828df2
|
@ -157,8 +157,8 @@ def config_POST(owner, project_name):
|
||||||
@loginrequired
|
@loginrequired
|
||||||
def delete_POST(owner, project_name):
|
def delete_POST(owner, project_name):
|
||||||
owner, project = get_project(owner, project_name, ProjectAccess.write)
|
owner, project = get_project(owner, project_name, ProjectAccess.write)
|
||||||
project.summary_repo_id = None
|
session["notice"] = f"{project.name} has been deleted."
|
||||||
db.session.delete(project)
|
db.engine.execute(f"DELETE FROM project WHERE id = {project.id}")
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
return redirect(url_for("public.index"))
|
return redirect(url_for("public.index"))
|
||||||
|
|
||||||
|
|
|
@ -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 hubsrht.types import Project, Feature, Event, EventType, Visibility, User
|
||||||
from srht.flask import paginate_query
|
from srht.flask import paginate_query
|
||||||
from srht.oauth import current_user, loginrequired
|
from srht.oauth import current_user, loginrequired
|
||||||
|
@ -9,6 +9,7 @@ public = Blueprint("public", __name__)
|
||||||
@public.route("/")
|
@public.route("/")
|
||||||
def index():
|
def index():
|
||||||
if current_user:
|
if current_user:
|
||||||
|
notice = session.pop("notice", None)
|
||||||
projects = (Project.query
|
projects = (Project.query
|
||||||
.filter(Project.owner_id == current_user.id)
|
.filter(Project.owner_id == current_user.id)
|
||||||
.order_by(Project.updated.desc())
|
.order_by(Project.updated.desc())
|
||||||
|
@ -19,14 +20,15 @@ def index():
|
||||||
.order_by(Event.created.desc())
|
.order_by(Event.created.desc())
|
||||||
.limit(2)).all()
|
.limit(2)).all()
|
||||||
return render_template("dashboard.html",
|
return render_template("dashboard.html",
|
||||||
projects=projects, EventType=EventType, events=events)
|
projects=projects, EventType=EventType, events=events,
|
||||||
return render_template("new-user-dashboard.html")
|
notice=notice)
|
||||||
|
return render_template("new-user-dashboard.html", notice=notice)
|
||||||
return render_template("index.html")
|
return render_template("index.html")
|
||||||
|
|
||||||
@public.route("/getting-started")
|
@public.route("/getting-started")
|
||||||
@loginrequired
|
@loginrequired
|
||||||
def getting_started():
|
def getting_started():
|
||||||
return render_template("new-user-dashboard.html")
|
return render_template("new-user-dashboard.html", notice=notice)
|
||||||
|
|
||||||
@public.route("/projects")
|
@public.route("/projects")
|
||||||
def project_index():
|
def project_index():
|
||||||
|
|
|
@ -4,6 +4,9 @@
|
||||||
<title>{{cfg("sr.ht", "site-name")}} dashboard</title>
|
<title>{{cfg("sr.ht", "site-name")}} dashboard</title>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
{% if notice %}
|
||||||
|
<div class="alert alert-info">{{notice}}</div>
|
||||||
|
{% endif %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<p>
|
<p>
|
||||||
|
|
|
@ -3,6 +3,9 @@
|
||||||
<title>{{cfg("sr.ht", "site-name")}} dashboard</title>
|
<title>{{cfg("sr.ht", "site-name")}} dashboard</title>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
{% if notice %}
|
||||||
|
<div class="alert alert-info">{{notice}}</div>
|
||||||
|
{% endif %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-10 offset-md-1" style="margin-top: 1rem; margin-bottom: 1rem;">
|
<div class="col-md-10 offset-md-1" style="margin-top: 1rem; margin-bottom: 1rem;">
|
||||||
<strong>Welcome to {{cfg("sr.ht", "site-name")}}!</strong>
|
<strong>Welcome to {{cfg("sr.ht", "site-name")}}!</strong>
|
||||||
|
|
|
@ -215,12 +215,14 @@
|
||||||
Delete project {{icon('caret-right')}}
|
Delete project {{icon('caret-right')}}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
{#
|
||||||
<div class="col-md-9">
|
<div class="col-md-9">
|
||||||
<label class="checkbox">
|
<label class="checkbox">
|
||||||
<input type="checkbox" name="delete-resources" />
|
<input type="checkbox" name="delete-resources" />
|
||||||
Permanently delete project resources (repos, mailing lists, etc)
|
Permanently delete project resources (repos, mailing lists, etc)
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
#}
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in New Issue