aboutsummaryrefslogtreecommitdiff
path: root/app/views
diff options
context:
space:
mode:
authorrubenwardy <rw@rubenwardy.com>2018-05-11 15:04:17 +0100
committerrubenwardy <rw@rubenwardy.com>2018-05-11 15:04:17 +0100
commit92717f31dd94ad1c763641a397305de9bc143df9 (patch)
tree3ff4f1fbfbd0f2b1490c46905b959e75dacbaafa /app/views
parent5424f0aa3499ef9cad33ebad4db055860b8000c8 (diff)
downloadcheatdb-92717f31dd94ad1c763641a397305de9bc143df9.tar.xz
Add VCS import from Github
Diffstat (limited to 'app/views')
-rw-r--r--app/views/__init__.py2
-rw-r--r--app/views/api.py35
-rw-r--r--app/views/packages.py17
-rw-r--r--app/views/tasks.py50
4 files changed, 62 insertions, 42 deletions
diff --git a/app/views/__init__.py b/app/views/__init__.py
index 51f4908..cd4f0e6 100644
--- a/app/views/__init__.py
+++ b/app/views/__init__.py
@@ -30,4 +30,4 @@ def home_page():
packages = Package.query.filter_by(approved=True).all()
return render_template("index.html", packages=packages)
-from . import users, githublogin, packages, sass, api
+from . import users, githublogin, packages, sass, tasks
diff --git a/app/views/api.py b/app/views/api.py
deleted file mode 100644
index 277b94e..0000000
--- a/app/views/api.py
+++ /dev/null
@@ -1,35 +0,0 @@
-from flask import *
-from flask_user import *
-from flask.ext import menu
-from app import app
-from app.models import *
-from app.tasks import celery
-from app.tasks.importtasks import getMeta
-# from celery.result import AsyncResult
-
-from .utils import *
-
-@app.route("/tasks/getmeta/new/")
-def new_getmeta_page():
- aresult = getMeta.delay(request.args.get("url"))
- return jsonify({
- "poll_url": url_for("check_task", id=aresult.id),
- })
-
-@app.route("/tasks/<id>/")
-def check_task(id):
- result = celery.AsyncResult(id)
- status = result.status
- traceback = result.traceback
- result = result.result
- if isinstance(result, Exception):
- return jsonify({
- 'status': status,
- 'error': str(result),
- # 'traceback': traceback,
- })
- else:
- return jsonify({
- 'status': status,
- 'result': result,
- })
diff --git a/app/views/packages.py b/app/views/packages.py
index 1f9d570..c39cc8e 100644
--- a/app/views/packages.py
+++ b/app/views/packages.py
@@ -3,6 +3,7 @@ from flask_user import *
from flask.ext import menu
from app import app
from app.models import *
+from app.tasks.importtasks import makeVCSRelease
from .utils import *
@@ -369,16 +370,17 @@ def create_release_page(type, author, name):
# Initial form class from post data and default data
form = CreatePackageReleaseForm()
if request.method == "POST" and form.validate():
- for key, value in request.files.items() :
- print (key, value)
if form["uploadOpt"].data == "vcs":
rel = PackageRelease()
rel.package = package
- rel.title = form["title"].data
- rel.url = form["vcsLabel"].data
- # TODO: get URL to commit from branch name
+ rel.title = form["title"].data
+ rel.url = ""
db.session.commit()
- return redirect(package.getDetailsURL())
+
+ rel.task_id = makeVCSRelease.delay(rel.id, form["vcsLabel"].data).id
+ db.session.commit()
+
+ return redirect(url_for("check_task", id=rel.task_id, r=package.getDetailsURL()))
else:
uploadedPath = doFileUpload(form.fileUpload.data, ["zip"], "a zip file")
if uploadedPath is not None:
@@ -412,6 +414,9 @@ def edit_release_page(type, author, name, id):
if not (canEdit or canApprove):
return redirect(package.getDetailsURL())
+ if release.task_id is not None:
+ return redirect(url_for("check_task", id=release.task_id, r=release.getEditURL()))
+
# Initial form class from post data and default data
form = EditPackageReleaseForm(formdata=request.form, obj=release)
if request.method == "POST" and form.validate():
diff --git a/app/views/tasks.py b/app/views/tasks.py
new file mode 100644
index 0000000..b82c326
--- /dev/null
+++ b/app/views/tasks.py
@@ -0,0 +1,50 @@
+from flask import *
+from flask_user import *
+from flask.ext import menu
+from app import app
+from app.models import *
+from app.tasks import celery
+from app.tasks.importtasks import getMeta
+from .utils import shouldReturnJson
+# from celery.result import AsyncResult
+
+from .utils import *
+
+@app.route("/tasks/getmeta/new/")
+def new_getmeta_page():
+ aresult = getMeta.delay(request.args.get("url"))
+ return jsonify({
+ "poll_url": url_for("check_task", id=aresult.id),
+ })
+
+@app.route("/tasks/<id>/")
+def check_task(id):
+ result = celery.AsyncResult(id)
+ status = result.status
+ traceback = result.traceback
+ result = result.result
+
+ info = None
+ if isinstance(result, Exception):
+ info = {
+ 'status': status,
+ 'error': str(result),
+ }
+ else:
+ info = {
+ 'status': status,
+ 'result': result,
+ }
+
+ if shouldReturnJson():
+ return jsonify(info)
+ else:
+ r = request.args.get("r")
+ if r is None:
+ abort(422)
+
+ if status == "SUCCESS":
+ flash("Task complete!", "success")
+ return redirect(r)
+ else:
+ return render_template("tasks/view.html", info=info)