apps.py 6.2 KB
Newer Older
wanli's avatar
wanli committed
1 2 3 4 5
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import os
import logging
import traceback
wanli's avatar
wanli committed
6 7
from datetime import datetime

wanli's avatar
wanli committed
8
from flask import Blueprint, request
wanli's avatar
wanli committed
9 10
from werkzeug.utils import secure_filename

wanli's avatar
wanli committed
11 12 13 14
from app import config, signalManager
from fullstack.login import Auth
from fullstack.validation import validate_schema
from fullstack.response import ResponseCode, response_result
wanli's avatar
wanli committed
15
from schema.apps import AddSchema, QuerySchema, UpdateSchema
wanli's avatar
wanli committed
16
from schema.build_logs import AddSchema as LogAddScheme, QuerySchema as LogQuerySchema
wanli's avatar
wanli committed
17

wanli's avatar
wanli committed
18
logger = logging.getLogger(__name__)
wanli's avatar
wanli committed
19 20 21 22 23 24 25 26

apps_api = Blueprint("apps_api", __name__, url_prefix="/api/v1/%s/apps" % config['NAME'])

@apps_api.route("/add", methods=['POST'])
@validate_schema(AddSchema)
@Auth.auth_required
def add():
    try:
wanli's avatar
wanli committed
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
        params = request.schema_data

        dtNowString = datetime.now().strftime("%Y%m%d%H%M%S")
        # 获取相对路径
        dirname = "{}-{}-{}-{}".format(params["app_name"], params["app_version"], params["category"], dtNowString)
        relative_path = os.sep.join([config.get("EPK_DIR"), dirname])
        # 获取最终存储的绝对路径
        upload_path = os.path.normpath(os.sep.join([config.get("UPLOAD_PATH"), relative_path]))

        if not os.path.exists(upload_path):
            os.makedirs(upload_path)

        files = []
        logo = request.files.get("logo")
        if logo:
            filename = secure_filename(logo.filename)
            file_path = os.sep.join([upload_path, filename])
            file_path = os.path.normpath(file_path)
            logo.save(file_path)
            params.update({ "app_icon": file_path })

        fileList = request.files.getlist('fileList')
        if fileList:
            upload_path = os.sep.join([upload_path, "src"])
            if not os.path.exists(upload_path):
                os.mkdir(upload_path)

            for f in fileList:
                filename = secure_filename(f.filename)
                file_path = os.sep.join([upload_path, filename])
                file_path = os.path.normpath(file_path)
                f.save(file_path)
                files.append(file_path)

        # obj = dict()
        # obj['filename'] = binfile.filename
        # obj['content'] = binfile.stream.read()

        params.update({ "fileList": files, "epk_path": upload_path })

wanli's avatar
wanli committed
67
        user = request.current_user.get("id")
wanli's avatar
wanli committed
68
        isSuccess, message = signalManager.actionAddApp.emit(user, params)
wanli's avatar
wanli committed
69 70 71 72 73 74 75 76 77 78 79 80 81
        if isSuccess:
            return response_result(ResponseCode.OK, msg=message)
        else:
            return response_result(ResponseCode.REQUEST_ERROR, msg=message)
    except Exception as e:
        traceback.print_exc()
        logger.error(str(e))
        return response_result(ResponseCode.SERVER_ERROR, msg=str(e))

@apps_api.route("/delete/<uuid:id>", methods=['POST'])
@Auth.auth_required
def delete(id):
    try:
wanli's avatar
wanli committed
82 83
        user = request.current_user.get("id")
        isSuccess, message = signalManager.actionDeleteApp.emit(user, id)
wanli's avatar
wanli committed
84 85 86 87 88 89 90 91 92 93 94 95 96 97
        if isSuccess:
            return response_result(ResponseCode.OK, msg=message)
        else:
            return response_result(ResponseCode.REQUEST_ERROR, msg=message)
    except Exception as e:
        traceback.print_exc()
        logger.error(str(e))
        return response_result(ResponseCode.SERVER_ERROR)

@apps_api.route("/get", methods=["POST"])
@validate_schema(QuerySchema)
@Auth.auth_required
def get():
    try:
wanli's avatar
wanli committed
98 99
        user = request.current_user.get("id")
        result, message = signalManager.actionGetApp.emit(user, request.schema_data)
wanli's avatar
wanli committed
100 101 102 103 104 105 106 107 108 109 110 111 112 113
        if result:
            return response_result(ResponseCode.OK, data=result, msg=message)
        else:
            return response_result(ResponseCode.REQUEST_ERROR, msg=message)
    except Exception as e:
        traceback.print_exc()
        logger.error(str(e))
        return response_result(ResponseCode.SERVER_ERROR, msg=str(e))

@apps_api.route("/list", methods=['POST'])
@validate_schema(QuerySchema)
@Auth.auth_required
def get_list():
    try:
wanli's avatar
wanli committed
114 115
        user = request.current_user.get("id")
        result, count, message = signalManager.actionGetAppList.emit(user, request.schema_data)
wanli's avatar
wanli committed
116 117 118 119 120 121 122 123 124 125 126 127 128 129
        if result:
            return response_result(ResponseCode.OK, data=result, msg=message, count=count)
        else:
            return response_result(ResponseCode.REQUEST_ERROR, msg=message)
    except Exception as e:
        traceback.print_exc()
        logger.error(str(e))
        return response_result(ResponseCode.SERVER_ERROR)

@apps_api.route("/update/<uuid:id>", methods=['POST'])
@validate_schema(UpdateSchema)
@Auth.auth_required
def update(id):
    try:
wanli's avatar
wanli committed
130 131
        user = request.current_user.get("id")
        isSuccess, message = signalManager.actionUpdateApp.emit(user, id, request.schema_data)
wanli's avatar
wanli committed
132 133 134 135 136 137 138 139
        if isSuccess:
            return response_result(ResponseCode.OK, msg=message)
        else:
            return response_result(ResponseCode.REQUEST_ERROR, msg=message)
    except Exception as e:
        traceback.print_exc()
        logger.error(str(e))
        return response_result(ResponseCode.SERVER_ERROR)
wanli's avatar
wanli committed
140 141 142 143 144

@apps_api.route("/build/<uuid:id>", methods=['POST'])
@validate_schema(LogAddScheme)
@Auth.auth_required
def build_app(id):
wanli's avatar
wanli committed
145 146
    user = request.current_user.get("id")
    result, message = signalManager.actionAddBuildLog.emit(user, id)
wanli's avatar
wanli committed
147 148 149 150 151
    if result:
        return response_result(ResponseCode.OK, data=result, msg=message)
    else:
        return response_result(ResponseCode.NOTHING_CHANGE, msg=message)

wanli's avatar
wanli committed
152 153 154
@apps_api.route("/getBuildApp/<uuid:id>", methods=['POST'])
@Auth.auth_required
def get_build_app(id):
wanli's avatar
wanli committed
155 156
    user = request.current_user.get("id")
    result, message = signalManager.actionGetBuildLog.emit(user, id)
wanli's avatar
wanli committed
157 158 159 160 161
    if result:
        return response_result(ResponseCode.OK, data=result, msg=message)
    else:
        return response_result(ResponseCode.NOTHING_CHANGE, msg=message)

wanli's avatar
wanli committed
162 163 164 165
@apps_api.route("/buildLogs", methods=['POST'])
@validate_schema(LogQuerySchema)
@Auth.auth_required
def get_build_logs():
wanli's avatar
wanli committed
166 167
    user = request.current_user.get("id")
    result, count, message = signalManager.actionGetBuildLogList.emit(user, request.schema_data)
wanli's avatar
wanli committed
168 169 170 171
    if result:
        return response_result(ResponseCode.OK, data=result, msg=message, count=count)
    else:
        return response_result(ResponseCode.NOTHING_CHANGE, msg=message)