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

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

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

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

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
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 67
        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
68
        user = request.current_user.get("id")
wanli's avatar
wanli committed
69
        isSuccess, message = signalManager.actionAddApp.emit(user, params)
wanli's avatar
wanli committed
70 71 72 73 74 75 76 77 78 79 80 81 82
        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
83 84
        user = request.current_user.get("id")
        isSuccess, message = signalManager.actionDeleteApp.emit(user, id)
wanli's avatar
wanli committed
85 86 87 88 89 90 91 92 93 94 95 96 97 98
        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
99 100
        user = request.current_user.get("id")
        result, message = signalManager.actionGetApp.emit(user, request.schema_data)
wanli's avatar
wanli committed
101 102 103 104 105 106 107 108 109 110 111 112 113 114
        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
115 116
        user = request.current_user.get("id")
        result, count, message = signalManager.actionGetAppList.emit(user, request.schema_data)
wanli's avatar
wanli committed
117 118 119 120 121 122 123 124 125 126 127 128 129 130
        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
131 132
        user = request.current_user.get("id")
        isSuccess, message = signalManager.actionUpdateApp.emit(user, id, request.schema_data)
wanli's avatar
wanli committed
133 134 135 136 137 138 139 140
        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
141 142 143 144 145

@apps_api.route("/build/<uuid:id>", methods=['POST'])
@validate_schema(LogAddScheme)
@Auth.auth_required
def build_app(id):
wanli's avatar
wanli committed
146 147
    user = request.current_user.get("id")
    result, message = signalManager.actionAddBuildLog.emit(user, id)
wanli's avatar
wanli committed
148 149 150 151 152
    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
153 154 155
@apps_api.route("/getBuildApp/<uuid:id>", methods=['POST'])
@Auth.auth_required
def get_build_app(id):
wanli's avatar
wanli committed
156 157
    user = request.current_user.get("id")
    result, message = signalManager.actionGetBuildLog.emit(user, id)
wanli's avatar
wanli committed
158 159 160 161 162
    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
163 164 165 166
@apps_api.route("/buildLogs", methods=['POST'])
@validate_schema(LogQuerySchema)
@Auth.auth_required
def get_build_logs():
wanli's avatar
wanli committed
167 168
    user = request.current_user.get("id")
    result, count, message = signalManager.actionGetBuildLogList.emit(user, request.schema_data)
wanli's avatar
wanli committed
169 170 171 172
    if result:
        return response_result(ResponseCode.OK, data=result, msg=message, count=count)
    else:
        return response_result(ResponseCode.NOTHING_CHANGE, msg=message)