This commit is contained in:
@@ -1,28 +1,23 @@
|
||||
#!/usr/bin/env python3
|
||||
import tempfile
|
||||
import os
|
||||
from flask import request, jsonify, current_app, abort, Response
|
||||
from flask import request, jsonify, current_app, abort, Response, url_for
|
||||
from flask_classful import FlaskView, route
|
||||
from model import db, Default, AIModel, AIModelType, SVMDetails
|
||||
from minio.error import NoSuchKey
|
||||
from schemas import AIModelSchema, DefaultSchema, InfoSchema
|
||||
from schemas import AIModelSchema, InfoSchema
|
||||
from marshmallow.exceptions import ValidationError
|
||||
from utils import json_required, storage, ensure_buckets
|
||||
from pyAudioAnalysis.audioTrainTest import load_model, load_model_knn
|
||||
from utils import storage, ensure_buckets, multipart_required
|
||||
from pyAudioAnalysis.audioTrainTest import load_model
|
||||
|
||||
|
||||
class SVMView(FlaskView):
|
||||
route_base = 'svm'
|
||||
|
||||
aimodel_schema = AIModelSchema(many=False)
|
||||
aimodels_schema = AIModelSchema(many=True, exclude=['timestamp', 'details'])
|
||||
default_schema = DefaultSchema(many=False)
|
||||
info_schema = InfoSchema(many=False)
|
||||
|
||||
def index(self):
|
||||
models = AIModel.query.filter_by(type=AIModelType.SVM).all()
|
||||
return jsonify(self.aimodels_schema.dump(models)), 200
|
||||
|
||||
@multipart_required
|
||||
def post(self):
|
||||
|
||||
# get important data from the request
|
||||
@@ -84,7 +79,7 @@ class SVMView(FlaskView):
|
||||
os.remove(temp_model_filename)
|
||||
os.remove(temp_means_filename)
|
||||
|
||||
m = AIModel(id=info['id'], type=AIModelType.SVM, target_class_name=info['target_class_name'])
|
||||
m = AIModel(id=info['id'], type=AIModelType.svm, target_class_name=info['target_class_name'])
|
||||
|
||||
d = SVMDetails(
|
||||
aimodel=m,
|
||||
@@ -101,14 +96,31 @@ class SVMView(FlaskView):
|
||||
|
||||
return jsonify(self.aimodel_schema.dump(m)), 200
|
||||
|
||||
def get(self, _id: str):
|
||||
def delete(self, _id: str):
|
||||
|
||||
if _id == "$default":
|
||||
# TODO: Kitalálni, hogy inkább a latestestest-el térjen-e vissza
|
||||
default = Default.query.filter_by(type=AIModelType.SVM).first_or_404()
|
||||
default = Default.query.filter_by(type=AIModelType.svm).first_or_404()
|
||||
m = default.aimodel
|
||||
else:
|
||||
m = AIModel.query.filter_by(type=AIModelType.SVM, id=_id).first_or_404()
|
||||
m = AIModel.query.filter_by(type=AIModelType.svm, id=_id).first_or_404()
|
||||
|
||||
storage.connection.remove_object(current_app.config['MINIO_SVM_BUCKET_NAME'], "means/" + str(m.id))
|
||||
storage.connection.remove_object(current_app.config['MINIO_SVM_BUCKET_NAME'], "model/" + str(m.id))
|
||||
|
||||
db.session.delete(m)
|
||||
db.session.commit()
|
||||
|
||||
return '', 204
|
||||
|
||||
# builtin file proxy
|
||||
@route('<_id>/file')
|
||||
def get_file(self, _id: str):
|
||||
|
||||
if _id == "$default":
|
||||
default = Default.query.filter_by(type=AIModelType.svm).first_or_404()
|
||||
m = default.aimodel
|
||||
else:
|
||||
m = AIModel.query.filter_by(type=AIModelType.svm, id=_id).first_or_404()
|
||||
|
||||
if "means" in request.args:
|
||||
path = "means/" + str(m.id)
|
||||
@@ -121,50 +133,3 @@ class SVMView(FlaskView):
|
||||
abort(500, "The ID is stored in the database but not int the Object Store")
|
||||
|
||||
return Response(data.stream(), mimetype=data.headers['Content-type'])
|
||||
|
||||
@route('<_id>/details')
|
||||
def get_details(self, _id: str):
|
||||
|
||||
if _id == "$default":
|
||||
# TODO: Kitalálni, hogy inkább a latestestest-el térjen-e vissza
|
||||
default = Default.query.filter_by(type=AIModelType.SVM).first_or_404()
|
||||
m = default.aimodel
|
||||
else:
|
||||
m = AIModel.query.filter_by(type=AIModelType.SVM, id=_id).first_or_404()
|
||||
|
||||
return jsonify(self.aimodel_schema.dump(m))
|
||||
|
||||
def delete(self, _id: str):
|
||||
|
||||
if _id == "$default":
|
||||
# TODO: Kitalálni, hogy inkább a latestestest-el térjen-e vissza
|
||||
default = Default.query.filter_by(type=AIModelType.SVM).first_or_404()
|
||||
m = default.aimodel
|
||||
else:
|
||||
m = AIModel.query.filter_by(type=AIModelType.SVM, id=_id).first_or_404()
|
||||
|
||||
storage.connection.remove_object(current_app.config['MINIO_SVM_BUCKET_NAME'], "means/" + str(m.id))
|
||||
storage.connection.remove_object(current_app.config['MINIO_SVM_BUCKET_NAME'], "model/" + str(m.id))
|
||||
|
||||
db.session.delete(m)
|
||||
db.session.commit()
|
||||
|
||||
return '', 204
|
||||
|
||||
@json_required
|
||||
@route('$default', methods=['PUT'])
|
||||
def put_default(self):
|
||||
|
||||
try:
|
||||
req = self.default_schema.load(request.json)
|
||||
except ValidationError as e:
|
||||
abort(400, str(e))
|
||||
|
||||
m = AIModel.query.filter_by(type=AIModelType.SVM, id=req['id']).first_or_404()
|
||||
|
||||
Default.query.filter_by(type=AIModelType.SVM).delete()
|
||||
new_default = Default(type=AIModelType.SVM, aimodel=m)
|
||||
db.session.add(new_default)
|
||||
db.session.commit()
|
||||
|
||||
return '', 204
|
||||
|
||||
Reference in New Issue
Block a user