mirror of
https://github.com/minetest/contentdb.git
synced 2024-12-23 14:32:25 +01:00
41 lines
1.2 KiB
Python
41 lines
1.2 KiB
Python
from app.models import PackageRelease, db, Permission
|
|
from app.tasks.importtasks import makeVCSRelease
|
|
from celery import uuid
|
|
from flask import jsonify, abort, make_response, url_for
|
|
import datetime
|
|
|
|
|
|
def error(status, message):
|
|
abort(make_response(jsonify({ "success": False, "error": message }), status))
|
|
|
|
|
|
def handleCreateRelease(token, package, title, ref):
|
|
if not token.canOperateOnPackage(package):
|
|
return error(403, "API token does not have access to the package")
|
|
|
|
if not package.checkPerm(token.owner, Permission.MAKE_RELEASE):
|
|
return error(403, "Permission denied. Missing MAKE_RELEASE permission")
|
|
|
|
five_minutes_ago = datetime.datetime.now() - datetime.timedelta(minutes=5)
|
|
count = package.releases.filter(PackageRelease.releaseDate > five_minutes_ago).count()
|
|
if count >= 2:
|
|
return error(429, "Too many requests, please wait before trying again")
|
|
|
|
rel = PackageRelease()
|
|
rel.package = package
|
|
rel.title = title
|
|
rel.url = ""
|
|
rel.task_id = uuid()
|
|
rel.min_rel = None
|
|
rel.max_rel = None
|
|
db.session.add(rel)
|
|
db.session.commit()
|
|
|
|
makeVCSRelease.apply_async((rel.id, ref), task_id=rel.task_id)
|
|
|
|
return jsonify({
|
|
"success": True,
|
|
"task": url_for("tasks.check", id=rel.task_id),
|
|
"release": rel.getAsDictionary()
|
|
})
|