Fix issues with deleted packages

This commit is contained in:
rubenwardy 2022-06-01 17:02:49 +01:00
parent 767bc9ef12
commit 8b5d767d3c
3 changed files with 9 additions and 8 deletions

@ -103,10 +103,11 @@ def resolve_package_deps(out, package, only_hard, depth=1):
elif dep.meta_package: elif dep.meta_package:
name = dep.meta_package.name name = dep.meta_package.name
fulfilled_by = [ pkg.getId() for pkg in dep.meta_package.packages] fulfilled_by = [ pkg.getId() for pkg in dep.meta_package.packages if pkg.state == PackageState.APPROVED]
if depth == 1 and not dep.optional: if depth == 1 and not dep.optional:
most_likely = next((pkg for pkg in dep.meta_package.packages if pkg.type == PackageType.MOD), None) most_likely = next((pkg for pkg in dep.meta_package.packages \
if pkg.type == PackageType.MOD and pkg.state == PackageState.APPROVED), None)
if most_likely: if most_likely:
resolve_package_deps(out, most_likely, only_hard, depth + 1) resolve_package_deps(out, most_likely, only_hard, depth + 1)

@ -21,7 +21,7 @@ from flask import render_template
from flask_babel import lazy_gettext, gettext from flask_babel import lazy_gettext, gettext
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from flask_login import login_required from flask_login import login_required
from sqlalchemy import or_, func from sqlalchemy import or_, func, and_
from sqlalchemy.orm import joinedload, subqueryload from sqlalchemy.orm import joinedload, subqueryload
from wtforms import * from wtforms import *
from wtforms_sqlalchemy.fields import QuerySelectField, QuerySelectMultipleField from wtforms_sqlalchemy.fields import QuerySelectField, QuerySelectMultipleField
@ -123,7 +123,7 @@ def view(package):
if show_similar and package.type != PackageType.TXP: if show_similar and package.type != PackageType.TXP:
conflicting_modnames = db.session.query(MetaPackage.name) \ conflicting_modnames = db.session.query(MetaPackage.name) \
.filter(MetaPackage.id.in_([ mp.id for mp in package.provides ])) \ .filter(MetaPackage.id.in_([ mp.id for mp in package.provides ])) \
.filter(MetaPackage.packages.any(Package.id != package.id)) \ .filter(MetaPackage.packages.any(and_(Package.id != package.id, Package.state == PackageState.APPROVED))) \
.all() .all()
conflicting_modnames += db.session.query(ForumTopic.name) \ conflicting_modnames += db.session.query(ForumTopic.name) \
@ -298,14 +298,14 @@ def create_edit(author=None, name=None):
if form.validate_on_submit(): if form.validate_on_submit():
wasNew = False wasNew = False
if not package: if package is None:
package = Package.query.filter_by(name=form["name"].data, author_id=author.id).first() package = Package.query.filter_by(name=form["name"].data, author_id=author.id).first()
if package is not None: if package is not None:
if package.state == PackageState.READY_FOR_REVIEW: if package.state == PackageState.DELETED:
Package.query.filter_by(name=form["name"].data, author_id=author.id).delete() Package.query.filter_by(name=form["name"].data, author_id=author.id).delete()
else: else:
flash(gettext("Package already exists!"), "danger") flash(gettext("Package already exists!"), "danger")
return redirect(url_for("packages.create_edit")) return redirect(package.getURL("packages.view"))
package = Package() package = Package()
package.author = author package.author = author

@ -100,7 +100,7 @@
<a class="btn" href="{{ url_for('packages.list_all', author=user.username) }}"> <a class="btn" href="{{ url_for('packages.list_all', author=user.username) }}">
<i class="fas fa-box"></i> <i class="fas fa-box"></i>
<span class="count"> <span class="count">
<strong>{{ user.packages.count() }}</strong> <strong>{{ user.packages.filter_by(state='APPROVED').count() }}</strong>
{{ _("packages") }} {{ _("packages") }}
</span> </span>
</a> </a>