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

from flask import Blueprint, request, redirect, url_for, json, Response, send_file, make_response, send_from_directory
wanli's avatar
wanli committed
12
from werkzeug.utils import secure_filename
wanli's avatar
wanli committed
13

wanli's avatar
wanli committed
14 15 16 17
from app import config, signalManager
from fullstack.login import Auth
from fullstack.response import ResponseCode, response_result
from fullstack.validation import validate_schema
wanli's avatar
wanli committed
18
from schema.api import UpdatePasswordSchema, ApplicationBuildSchema, ConvertString
wanli's avatar
wanli committed
19

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

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

def stopApp():
    fpath = os.sep.join([os.getcwd(), "restart.json"])
wanli's avatar
wanli committed
26
    with open(fpath, "w+") as f:
wanli's avatar
wanli committed
27 28 29 30 31
        ret = json.loads(f.read())
        ret["count"] = ret["count"] + 1
        f.write(json.dumps(ret, indent=4))
    return ret

wanli's avatar
wanli committed
32 33 34 35 36 37 38 39 40 41 42
@api.route("/monitor", methods=['GET', 'POST'])
def action_monitor():
    print(request.json)
    print(request.data)
    print(request.form)
    print(type(request.json))

    

    return response_result(ResponseCode.OK)

wanli's avatar
wanli committed
43 44 45 46 47 48 49
@api.route("/opqcp", methods=['POST'])
def action_opqcp():
    params = request.json
    print(params)
    signalManager.actionOpqcp.emit(params)

    return response_result(ResponseCode.OK)
wanli's avatar
wanli committed
50 51 52 53 54

@api.route("/updatePassword", methods=['POST'])
@validate_schema(UpdatePasswordSchema)
@Auth.auth_required
def update_password():
wanli's avatar
wanli committed
55
    result, message = signalManager.actionUpdatePassword.emit(request.current_user.get("id"), request.schema_data)
wanli's avatar
wanli committed
56 57 58 59 60 61 62 63
    if result:
        return response_result(ResponseCode.OK, data=result, msg=message)
    else:
        return response_result(ResponseCode.NOTHING_CHANGE, msg=message)

@api.route("/upload", methods=['POST']) # 上传文件
def upload_file():
    try:
wanli's avatar
wanli committed
64 65 66 67
        result = None

        binfile = request.files.get("binfile")
        if not binfile:
wanli's avatar
wanli committed
68
            return response_result(ResponseCode.REQUEST_ERROR, msg="upload field name error")
wanli's avatar
wanli committed
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97

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

        dtNowString = datetime.now().strftime("%Y%m%d%H%M%S%f")

        # 文件名构成:文件名_时间日期.文件后缀
        filename = os.path.splitext(obj['filename'])[0] + "_{}".format(dtNowString) + os.path.splitext(obj['filename'])[-1]

        # 获取相对路径
        relative_path = os.sep.join([config.get("TEMP_DIR"), dtNowString])

        # 获取最终存储的绝对路径
        savePath = os.path.normpath(os.sep.join([config.get("UPLOAD_PATH"), relative_path]))

        # 获取最终存储的文件路径
        saveFile = os.path.normpath(os.sep.join([savePath, filename]))

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

        with open(saveFile, 'wb') as f: # 保存文件
            f.write(obj['content'])

        result = {
            "uuid": str(uuid.uuid4()), # 附件唯一编号
            "filename": obj['filename'], # 附件名称
            "filesize": os.path.getsize(saveFile), # 附件大小
wanli's avatar
wanli committed
98 99
            "filepath": os.sep.join([relative_path, filename]).replace("\\", "/"), # 附件存储路径
        }
wanli's avatar
wanli committed
100

wanli's avatar
wanli committed
101
        return response_result(ResponseCode.OK, data=result, msg="upload file [%s] successfully!" % obj['filename'])
wanli's avatar
wanli committed
102 103 104 105 106 107 108 109
    except Exception as e:
        traceback.print_exc()
        logger.error(str(e))
        return response_result(ResponseCode.SERVER_ERROR, msg=str(e))

@api.route("/system/updateDatabase", methods=['GET'])
def update_db():
    result = []
wanli's avatar
wanli committed
110 111 112 113
    for index in range(16):
        print(index)
        result.append(str(uuid.uuid1()))

wanli's avatar
wanli committed
114 115 116 117 118 119 120 121 122 123 124 125
    # conn = sqlite3.connect('./app-store.db')
    # cur = conn.cursor()
    # update_sql = """update test set name = 'noname' where id = ?"""
    # x = (1, )
    # cur.execute(update_sql, x)
    # # commit()提交事务
    # conn.commit()
    # # 关闭游标
    # cur.close()
    # # 关闭连接
    # conn.close()

wanli's avatar
wanli committed
126
    return response_result(ResponseCode.OK, data=result)
wanli's avatar
wanli committed
127

wanli's avatar
wanli committed
128 129 130 131 132 133
@api.route("/system/convertString", methods=['POST'])
@validate_schema(ConvertString)
def convert_string():
    result = signalManager.actionGetConvertString.emit(request.schema_data)
    return response_result(ResponseCode.OK, data=result)

wanli's avatar
wanli committed
134 135 136 137 138 139 140
@api.route("/application/build", methods=["post"])
@validate_schema(ApplicationBuildSchema)
def application_build():
    try:
        if request.method == 'POST' and 'binfiles' in request.files:
            files = []
            data = request.schema_data
wanli's avatar
wanli committed
141
            dt = datetime.now().strftime("%Y%m%d%H%M%S")
wanli's avatar
wanli committed
142
            upload_path = os.sep.join([config["UPLOAD_PATH"], config["TEMP_DIR"], str(data['access_key']), dt])
wanli's avatar
wanli committed
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
            if not os.path.exists(upload_path):
                os.makedirs(upload_path)
            for f in request.files.getlist('binfiles'):
                filename = secure_filename(f.filename)
                file_path = os.sep.join([upload_path, filename])
                f.save(file_path)
                files.append(file_path)

            result, message = signalManager.actionApplicationBuild.emit(files, data)
            if result:
                return response_result(ResponseCode.OK, data=result, msg=message)
            else:
                return response_result(ResponseCode.REQUEST_ERROR, msg=message)
        else:
            return response_result(ResponseCode.REQUEST_ERROR, msg="files can not be null")
    except Exception as e:
        traceback.print_exc()
        logger.error(str(e))
        return response_result(ResponseCode.SERVER_ERROR, msg=str(e))