diff options
| author | rubenwardy <rw@rubenwardy.com> | 2018-05-27 22:55:46 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-05-27 22:55:46 +0100 |
| commit | d046de8057d42d4653af6d7c6c7ff557319d1bae (patch) | |
| tree | 0361d8515fa3b3d16b0222a27048158262d76376 /app/views | |
| parent | e85298d890a3fdaa3ac1919092aa495cf480a61f (diff) | |
| parent | 05e536b1217633fd612b8ee94360e8afef3c527c (diff) | |
| download | cheatdb-d046de8057d42d4653af6d7c6c7ff557319d1bae.tar.xz | |
Merge pull request #78 from minetest/dev
Add meta packages, remove current dependencies
Diffstat (limited to 'app/views')
| -rw-r--r-- | app/views/__init__.py | 6 | ||||
| -rw-r--r-- | app/views/admin.py | 5 | ||||
| -rw-r--r-- | app/views/meta.py | 34 | ||||
| -rw-r--r-- | app/views/packages/__init__.py | 44 |
4 files changed, 82 insertions, 7 deletions
diff --git a/app/views/__init__.py b/app/views/__init__.py index c584bb8..2559969 100644 --- a/app/views/__init__.py +++ b/app/views/__init__.py @@ -28,6 +28,10 @@ from urllib.parse import urlparse cache = SimpleCache() @app.template_filter() +def throw(err): + raise Exception(err) + +@app.template_filter() def domain(url): return urlparse(url).netloc @@ -43,7 +47,7 @@ def home_page(): packages = query.order_by(db.desc(Package.created_at)).limit(15).all() return render_template("index.html", packages=packages, count=count) -from . import users, githublogin, packages, sass, tasks, admin, notifications, tagseditor +from . import users, githublogin, packages, sass, tasks, admin, notifications, tagseditor, meta @menu.register_menu(app, ".help", "Help", order=19, endpoint_arguments_constructor=lambda: { 'path': 'help' }) @app.route('/<path:path>/') diff --git a/app/views/admin.py b/app/views/admin.py index 2320cc6..b1cfed6 100644 --- a/app/views/admin.py +++ b/app/views/admin.py @@ -20,7 +20,7 @@ from flask_user import * from flask.ext import menu from app import app from app.models import * -from app.tasks.importtasks import importRepoScreenshot +from app.tasks.importtasks import importRepoScreenshot, importAllDependencies from app.tasks.forumtasks import importUsersFromModList from flask_wtf import FlaskForm from wtforms import * @@ -52,6 +52,9 @@ def admin_page(): package.soft_deleted = False db.session.commit() return redirect(url_for("admin_page")) + elif action == "importdepends": + task = importAllDependencies.delay() + return redirect(url_for("check_task", id=task.id, r=url_for("admin_page"))) else: flash("Unknown action: " + action, "error") diff --git a/app/views/meta.py b/app/views/meta.py new file mode 100644 index 0000000..fe1a05a --- /dev/null +++ b/app/views/meta.py @@ -0,0 +1,34 @@ +# Content DB +# Copyright (C) 2018 rubenwardy +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + + +from flask import * +from flask_user import * +from app import app +from app.models import * + +@app.route("/metapackages/") +def meta_package_list_page(): + mpackages = MetaPackage.query.order_by(db.desc(MetaPackage.name)).all() + return render_template("meta/list.html", mpackages=mpackages) + +@app.route("/metapackages/<name>/") +def meta_package_page(name): + mpackage = MetaPackage.query.filter_by(name=name).first() + if mpackage is None: + abort(404) + + return render_template("meta/view.html", mpackage=mpackage) 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 |
