fossasia/open-event-orga-server

View on GitHub
app/api/uploads.py

Summary

Maintainability
C
1 day
Test Coverage
import uuid

from flask import Blueprint, abort, jsonify, make_response, request
from flask_jwt_extended import jwt_required

from app.api.helpers.files import uploaded_file, uploaded_image
from app.api.helpers.storage import UPLOAD_PATHS, upload, upload_local

upload_routes = Blueprint('upload', __name__, url_prefix='/v1/upload')


@upload_routes.route('/image', methods=['POST'])
@jwt_required
def upload_image():
    image = request.json['data']
    extension = '.{}'.format(image.split(";")[0].split("/")[1])
    image_file = uploaded_image(extension=extension, file_content=image)
    force_local = request.args.get('force_local', 'false')
    if force_local == 'true':
        image_url = upload_local(
            image_file, UPLOAD_PATHS['temp']['image'].format(uuid=uuid.uuid4())
        )
    else:
        image_url = upload(
            image_file, UPLOAD_PATHS['temp']['image'].format(uuid=uuid.uuid4())
        )
    return jsonify({"url": image_url})


@upload_routes.route('/files', methods=['POST'])
@jwt_required
def upload_file():
    force_local = request.args.get('force_local', 'false')
    if 'file' in request.files:
        files = request.files['file']
        file_uploaded = uploaded_file(files=files)
        if force_local == 'true':
            files_url = upload_local(
                file_uploaded, UPLOAD_PATHS['temp']['event'].format(uuid=uuid.uuid4())
            )
        else:
            files_url = upload(
                file_uploaded, UPLOAD_PATHS['temp']['event'].format(uuid=uuid.uuid4())
            )
    elif 'files[]' in request.files:
        files = request.files.getlist('files[]')
        files_uploaded = uploaded_file(files=files, multiple=True)
        files_url = []
        for file_uploaded in files_uploaded:
            if force_local == 'true':
                files_url.append(
                    upload_local(
                        file_uploaded,
                        UPLOAD_PATHS['temp']['event'].format(uuid=uuid.uuid4()),
                    )
                )
            else:
                files_url.append(
                    upload(
                        file_uploaded,
                        UPLOAD_PATHS['temp']['event'].format(uuid=uuid.uuid4()),
                    )
                )
    else:
        abort(make_response(jsonify(error="Bad Request"), 400))

    return jsonify({"url": files_url})