]> git.lizzy.rs Git - cheatdb.git/blobdiff - app/blueprints/packages/releases.py
Optimise SQL queries
[cheatdb.git] / app / blueprints / packages / releases.py
index 60a54bddf62299690ce7769717361bf1bb838538..669f4b12049d96ddcddb3ae0d0ff42ed48bf40c1 100644 (file)
@@ -22,7 +22,7 @@ from . import bp
 
 from app.rediscache import has_key, set_key, make_download_key
 from app.models import *
-from app.tasks.importtasks import makeVCSRelease
+from app.tasks.importtasks import makeVCSRelease, checkZipRelease
 from app.utils import *
 
 from celery import uuid
@@ -98,22 +98,25 @@ def create_release(package):
 
                        return redirect(url_for("tasks.check", id=rel.task_id, r=rel.getEditURL()))
                else:
-                       uploadedPath = doFileUpload(form.fileUpload.data, "zip", "a zip file")
-                       if uploadedPath is not None:
+                       uploadedUrl, uploadedPath = doFileUpload(form.fileUpload.data, "zip", "a zip file")
+                       if uploadedUrl is not None:
                                rel = PackageRelease()
                                rel.package = package
                                rel.title = form["title"].data
-                               rel.url = uploadedPath
+                               rel.url = uploadedUrl
+                               rel.task_id = uuid()
                                rel.min_rel = form["min_rel"].data.getActual()
                                rel.max_rel = form["max_rel"].data.getActual()
-                               rel.approve(current_user)
                                db.session.add(rel)
                                db.session.commit()
 
+                               checkZipRelease.apply_async((rel.id, uploadedPath), task_id=rel.task_id)
+
                                msg = "{}: Release {} created".format(package.title, rel.title)
                                triggerNotif(package.author, current_user, msg, rel.getEditURL())
                                db.session.commit()
-                               return redirect(package.getDetailsURL())
+
+                               return redirect(url_for("tasks.check", id=rel.task_id, r=rel.getEditURL()))
 
        return render_template("packages/release_new.html", package=package, form=form)
 
@@ -130,9 +133,18 @@ def download_release(package, id):
                if not has_key(key):
                        set_key(key, "true")
 
+                       bonus = 1
+                       if not package.getIsFOSS():
+                               bonus *= 0.1
+
                        PackageRelease.query.filter_by(id=release.id).update({
                                        "downloads": PackageRelease.downloads + 1
                                })
+
+                       Package.query.filter_by(id=package.id).update({
+                                       "score": Package.score + bonus
+                               })
+
                        db.session.commit()
 
        return redirect(release.url, code=300)
@@ -154,6 +166,11 @@ def edit_release(package, id):
 
        # Initial form class from post data and default data
        form = EditPackageReleaseForm(formdata=request.form, obj=release)
+
+       # HACK: fix bug in wtforms
+       if request.method == "GET":
+               form.approved.data = release.approved
+
        if request.method == "POST" and form.validate():
                wasApproved = release.approved
                if canEdit:
@@ -216,3 +233,20 @@ def bulk_change_release(package):
                return redirect(package.getDetailsURL())
 
        return render_template("packages/release_bulk_change.html", package=package, form=form)
+
+
+@bp.route("/packages/<author>/<name>/releases/<id>/delete/", methods=["POST"])
+@login_required
+@is_package_page
+def delete_release(package, id):
+       release = PackageRelease.query.get(id)
+       if release is None or release.package != package:
+               abort(404)
+
+       if not release.checkPerm(current_user, Permission.DELETE_RELEASE):
+               return redirect(release.getEditURL())
+
+       db.session.delete(release)
+       db.session.commit()
+
+       return redirect(package.getDetailsURL())