aboutsummaryrefslogtreecommitdiff
path: root/app/views/packages
diff options
context:
space:
mode:
authorrubenwardy <rw@rubenwardy.com>2018-05-27 22:55:46 +0100
committerGitHub <noreply@github.com>2018-05-27 22:55:46 +0100
commitd046de8057d42d4653af6d7c6c7ff557319d1bae (patch)
tree0361d8515fa3b3d16b0222a27048158262d76376 /app/views/packages
parente85298d890a3fdaa3ac1919092aa495cf480a61f (diff)
parent05e536b1217633fd612b8ee94360e8afef3c527c (diff)
downloadcheatdb-d046de8057d42d4653af6d7c6c7ff557319d1bae.tar.xz
Merge pull request #78 from minetest/dev
Add meta packages, remove current dependencies
Diffstat (limited to 'app/views/packages')
-rw-r--r--app/views/packages/__init__.py44
1 files changed, 39 insertions, 5 deletions
diff --git a/app/views/packages/__init__.py b/app/views/packages/__init__.py
index c60d68d..bd090c7 100644
--- a/app/views/packages/__init__.py
+++ b/app/views/packages/__init__.py
@@ -102,13 +102,14 @@ def package_download_page(package):
class PackageForm(FlaskForm):
name = StringField("Name", [InputRequired(), Length(1, 20), Regexp("^[a-z0-9_]", 0, "Lower case letters (a-z), digits (0-9), and underscores (_) only")])
title = StringField("Title", [InputRequired(), Length(3, 50)])
- shortDesc = StringField("Short Description", [InputRequired(), Length(1,200)])
- desc = TextAreaField("Long Description", [Optional(), Length(0,10000)])
+ shortDesc = StringField("Short Description (Plaintext)", [InputRequired(), Length(1,200)])
+ desc = TextAreaField("Long Description (Markdown)", [Optional(), Length(0,10000)])
type = SelectField("Type", [InputRequired()], choices=PackageType.choices(), coerce=PackageType.coerce, default=PackageType.MOD)
license = QuerySelectField("License", [InputRequired()], query_factory=lambda: License.query, get_pk=lambda a: a.id, get_label=lambda a: a.name)
+ provides_str = StringField("Provides (mods included in package)", [Optional(), Length(0,1000)])
tags = QuerySelectMultipleField('Tags', query_factory=lambda: Tag.query.order_by(db.asc(Tag.name)), get_pk=lambda a: a.id, get_label=lambda a: a.title)
- harddeps = QuerySelectMultipleField('Dependencies', query_factory=lambda: Package.query.filter_by(soft_deleted=False,approved=True).join(User).order_by(db.asc(Package.title), db.asc(User.display_name)), get_pk=lambda a: a.id, get_label=lambda a: a.title + " by " + a.author.display_name)
- softdeps = QuerySelectMultipleField('Soft Dependencies', query_factory=lambda: Package.query.filter_by(soft_deleted=False,approved=True).join(User).order_by(db.asc(Package.title), db.asc(User.display_name)), get_pk=lambda a: a.id, get_label=lambda a: a.title + " by " + a.author.display_name)
+ harddep_str = StringField("Hard Dependencies", [Optional(), Length(0,1000)])
+ softdep_str = StringField("Soft Dependencies", [Optional(), Length(0,1000)])
repo = StringField("Repo URL", [Optional(), URL()])
website = StringField("Website URL", [Optional(), URL()])
issueTracker = StringField("Issue Tracker URL", [Optional(), URL()])
@@ -146,6 +147,12 @@ def create_edit_package_page(author=None, name=None):
form = PackageForm(formdata=request.form, obj=package)
# Initial form class from post data and default data
+ if request.method == "GET" and package is not None:
+ deps = package.dependencies
+ form.harddep_str.data = ",".join([str(x) for x in deps if not x.optional])
+ form.softdep_str.data = ",".join([str(x) for x in deps if x.optional])
+ form.provides_str.data = MetaPackage.ListToSpec(package.provides)
+
if request.method == "POST" and form.validate():
wasNew = False
if not package:
@@ -166,6 +173,27 @@ def create_edit_package_page(author=None, name=None):
form.populate_obj(package) # copy to row
+ mpackage_cache = {}
+ package.provides.clear()
+ mpackages = MetaPackage.SpecToList(form.provides_str.data, mpackage_cache)
+ for m in mpackages:
+ package.provides.append(m)
+
+ Dependency.query.filter_by(depender=package).delete()
+ deps = Dependency.SpecToList(package, form.harddep_str.data, mpackage_cache)
+ for dep in deps:
+ dep.optional = False
+ db.session.add(dep)
+
+ deps = Dependency.SpecToList(package, form.softdep_str.data, mpackage_cache)
+ for dep in deps:
+ dep.optional = True
+ db.session.add(dep)
+
+ if wasNew and package.type == PackageType.MOD and not package.name in mpackage_cache:
+ m = MetaPackage.GetOrCreate(package.name, mpackage_cache)
+ package.provides.append(m)
+
package.tags.clear()
for tag in form.tags.raw_data:
package.tags.append(Tag.query.get(tag))
@@ -178,9 +206,15 @@ def create_edit_package_page(author=None, name=None):
return redirect(package.getDetailsURL())
+ package_query = Package.query.filter_by(approved=True, soft_deleted=False)
+ if package is not None:
+ package_query = package_query.filter(Package.id != package.id)
+
enableWizard = name is None and request.method != "POST"
return render_template("packages/create_edit.html", package=package, \
- form=form, author=author, enable_wizard=enableWizard)
+ form=form, author=author, enable_wizard=enableWizard, \
+ packages=package_query.all(), \
+ mpackages=MetaPackage.query.order_by(db.asc(MetaPackage.name)).all())
@app.route("/packages/<author>/<name>/approve/", methods=["POST"])
@login_required