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
|
||||
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"))
|
||||
|
||||
|
|
|
@ -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():
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue