LeoDu 4 лет назад
Родитель
Сommit
72d426390e

+ 6 - 5
backend_refactor/app.py

@@ -1,5 +1,4 @@
 import logging
-from nturl2path import url2pathname
 from flask import Flask
 import route.upload, route.analyze, route.result
 from config import VERSION_PREFIX, MAX_CONTENT_LENGTH, MYSQL_URI
@@ -10,9 +9,13 @@ from db import db
 app = Flask(__name__)
 app.config['MAX_CONTENT_LENGTH'] = MAX_CONTENT_LENGTH
 
-
 app.config['SQLALCHEMY_DATABASE_URI'] = MYSQL_URI
 app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
+
+app.register_blueprint(route.upload.bp, url_prefix=VERSION_PREFIX)
+app.register_blueprint(route.analyze.bp, url_prefix=VERSION_PREFIX)
+app.register_blueprint(route.result.bp, url_prefix=VERSION_PREFIX)
+
 db.init_app(app)
 with app.app_context():
     # db.drop_all()
@@ -23,9 +26,7 @@ def hello_world():
     return "<p>Hello, World!</p>"
 
 
-app.register_blueprint(route.upload.bp, url_prefix=VERSION_PREFIX)
-app.register_blueprint(route.analyze.bp, url_prefix=VERSION_PREFIX)
-app.register_blueprint(route.result.bp, url_prefix=VERSION_PREFIX)
+
 
 
 @app.errorhandler(413)

+ 10 - 5
backend_refactor/db/task.py

@@ -1,11 +1,16 @@
 from db import db
+import time
 
-class Task:
+class Task(db.Model):
 	uuid = db.Column(db.String(64), primary_key=True)
+	type = db.Column(db.Enum('PHOTO_STANDINGPOSE'))
+	create_time = db.Column(db.BigInteger)
 	status = db.Column(db.Enum('QUEUEING','RUNNING','FINISHED','ERROR'))
 	result = db.Column(db.String(8192))
 
-	def __init__(self, uuid, status='QUEUEING', result='{}'):
-		self.uuid = uuid;
-		self.status = status;
-		self.result = result;
+	def __init__(self, uuid, type, create_time = time.time() * 1000, status='QUEUEING', result='{}'):
+		self.uuid = uuid
+		self.type = type
+		self.create_time = create_time
+		self.status = status
+		self.result = result

+ 37 - 6
backend_refactor/route/analyze.py

@@ -1,5 +1,8 @@
+import uuid, json
+from backend_refactor.service.video.Video3DAnalyzer import Video3DAnalyzer
+from db import db
 from flask import request
-
+from db.task import Task
 from worker.thread_pool import pool
 from route.util import make_response
 from flask import Blueprint
@@ -8,14 +11,42 @@ from service.photo import StandingPhotoAnalyzer
 
 bp = Blueprint("analyze", __name__, url_prefix='/')
 
+def callback_generator(task_uuid):
+    def callback(status, **args):
+        task = Task.query.get(task_uuid)
+        task.status = status
+        if status == 'FINISHED':
+            task.result = json.dumps(args['result'])
+        
+        db.session.add(task)
+        db.session.commit()
+
+    return callback
+
 
-@bp.route("analysis", methods={"POST"})
-def start_analysis():
 
+@bp.route("photos/analysis", methods=['POST'])
+def photo_analysis():
     req = request.get_json()
+    
+    ana = StandingPhotoAnalyzer(req['front'], req['right'])
 
-    ana = StandingPhotoAnalyzer()
+    task_uuid = str(uuid.uuid4)
+    new_task = Task(task_uuid, 'PHOTO_STANDINGPOSE')
+    db.session.add(new_task)
+    db.session.commit()
 
-    pool.submit(ana.analyze, (req['front'], req['right']))
+    pool.submit(ana.analyze, (callback_generator(task_uuid), ))
+
+    return make_response(201, "success", {'task_uuid' : task_uuid})
+
+@bp.route("videos/analysis", methods=['POST'])
+def video_analysis():
+    req = request.get_json()
+    
+    ana_3d = Video3DAnalyzer()
 
-    return make_response(201, "success", {})
+    task_uuid = str(uuid.uuid4)
+    new_task = Task(task_uuid, req['type'])
+    db.session.add(new_task)
+    db.session.commit()

+ 14 - 1
backend_refactor/route/result.py

@@ -1,4 +1,7 @@
+from operator import imod
 from flask import Blueprint
+from route.util import make_response
+from db.task import Task
 
 bp = Blueprint("result", __name__, url_prefix='/result')
 
@@ -6,5 +9,15 @@ bp = Blueprint("result", __name__, url_prefix='/result')
 @bp.route("/{task_uuid}", methods=["GET"])
 def get_result(task_uuid):
 
-    pass
+    task = Task.query.get(task_uuid)
+    status = task.status
+
+    if status == 'FINISHED':
+        return make_response(200, "success", {"task_uuid": task.uuid, "type" : task.type, "result" : task.result})
+    elif status == 'QUEUEING':
+        return make_response(200, "queueing", {"task_uuid": task.uuid, "type" : task.type})
+    elif status == 'RUNNING':
+        return make_response(200, "running", {"task_uuid" : task.uuid, "type" : task.type})
+    elif status == 'ERROR':
+        return make_response(200, "error", {"task_uuid" : task.uuid, "type" : task.type, "result" : task.result})