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
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)
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)
# 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:
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())