Implemented the REST of the endpoints
continuous-integration/drone/push Build is passing Details

This commit is contained in:
Pünkösd Marcell 2020-03-25 21:13:45 +01:00
parent 186c51301d
commit 9010db211e
1 changed files with 40 additions and 3 deletions

View File

@ -1,7 +1,7 @@
#!/usr/bin/env python3
from flask import jsonify, request, abort, current_app
from flask import jsonify, request, abort, current_app, Response
from flask_classful import FlaskView
from minio.error import BucketAlreadyExists, BucketAlreadyOwnedByYou, ResponseError
from minio.error import BucketAlreadyExists, BucketAlreadyOwnedByYou, ResponseError, NoSuchKey
from marshmallow import ValidationError
from utils import storage
from schemas import DescriptionSchema
@ -10,6 +10,15 @@ from schemas import DescriptionSchema
class ObjectView(FlaskView):
description_schema = DescriptionSchema(many=False)
@staticmethod
def _check_existance(tag: str) -> bool: # ez aztán igen
try:
storage.connection.stat_object(current_app.config['MINIO_BUCKET_NAME'], tag)
except NoSuchKey:
return False
return True
def post(self):
# get important data from the request
try:
@ -17,6 +26,11 @@ class ObjectView(FlaskView):
except ValidationError as e:
abort(400, str(e))
# check for conflict
if self._check_existance(description['tag']):
abort(409)
# get and validate file
file = request.files['soundFile']
if file.content_type != 'audio/wave':
@ -37,8 +51,31 @@ class ObjectView(FlaskView):
# poot file into bucket
try:
storage.connection.put_object(current_app.config['MINIO_BUCKET_NAME'], description['tag'], file, file.content_length, content_type=file.content_type)
storage.connection.put_object(current_app.config['MINIO_BUCKET_NAME'], description['tag'], file,
file.content_length, content_type=file.content_type)
except ResponseError: # TODO: Check if object already exists... somehow
raise
return jsonify({"status": "200"}), 200 # TODO: 200 should be OK but that would be inconsistent with the errors
def get(self, tag: str):
# TODO: Validate tag
try:
data = storage.connection.get_object(current_app.config['MINIO_BUCKET_NAME'], tag)
except NoSuchKey:
abort(404)
return Response(data.stream(), mimetype=data.headers['Content-type'])
def delete(self, tag: str):
# TODO: Validate tag
if not self._check_existance(tag):
abort(404)
storage.connection.remove_object(current_app.config['MINIO_BUCKET_NAME'], tag)
return jsonify({"status": "200"}), 200