download.py 3.87 KB
Newer Older
wanli's avatar
wanli committed
1 2 3 4 5 6 7 8 9
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import logging
import traceback
from flask import Blueprint, request
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
10
from schema.download import AddSchema, DeleteSchema, QuerySchema, UpdateSchema, DownloadSchema
wanli's avatar
wanli committed
11

wanli's avatar
wanli committed
12
logger = logging.getLogger(__name__)
wanli's avatar
wanli committed
13

wanli's avatar
wanli committed
14
download_api = Blueprint("download_api", __name__, url_prefix="/api/v1/%s/download" % config['NAME'])
wanli's avatar
wanli committed
15

wanli's avatar
wanli committed
16
@download_api.route("/add", methods=['POST'])
wanli's avatar
wanli committed
17 18 19 20
@validate_schema(AddSchema)
@Auth.auth_required
def add():
    try:
wanli's avatar
wanli committed
21 22
        user = request.current_user.get("id")
        isSuccess, message = signalManager.actionAddDownload.emit(user, request.schema_data)
wanli's avatar
wanli committed
23 24 25 26 27 28 29 30 31 32
        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))


wanli's avatar
wanli committed
33
@download_api.route("/delete/<uuid:id>", methods=['POST'])
wanli's avatar
wanli committed
34 35 36 37
@validate_schema(DeleteSchema)
@Auth.auth_required
def delete(id):
    try:
wanli's avatar
wanli committed
38 39
        user = request.current_user.get("id")
        isSuccess, message = signalManager.actionDeleteDownload.emit(user, id)
wanli's avatar
wanli committed
40 41 42 43 44 45 46 47 48 49
        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
50
@download_api.route("/apps", methods=["POST"])
wanli's avatar
wanli committed
51
# @validate_schema(DownloadSchema)
wanli's avatar
wanli committed
52 53
def get():
    try:
wanli's avatar
wanli committed
54 55 56 57 58 59 60
        if not request.json:
            return response_result(ResponseCode.INVAILD_REQUEST)

        data = request.json
        if not data.get("uuid") and not data.get("imei"):
            return response_result(ResponseCode.PARAMETER_ERROR)
        
wanli's avatar
wanli committed
61 62
        data.update({ 'real_ip': request.headers.get('X-Forwarded-For', '127.0.0.1') })
        result, message = signalManager.actionGetDownload.emit(data)
wanli's avatar
wanli committed
63
        # 读取epk文件,按照格式返回相应结构体数据
wanli's avatar
wanli committed
64 65 66 67 68 69
        logger.info(data)
        if result:
            ret = result.read_bytes()
            # with open(result.as_posix(), "rb") as f:
            #     ret = f.read()
            #     logger.info(type(ret))
wanliofficial's avatar
wanliofficial committed
70
            return ret
wanli's avatar
wanli committed
71
        return response_result(ResponseCode.SERVER_ERROR, msg=message)
wanli's avatar
wanli committed
72 73 74 75 76 77
    except Exception as e:
        traceback.print_exc()
        logger.error(str(e))
        return response_result(ResponseCode.SERVER_ERROR, msg=str(e))


wanli's avatar
wanli committed
78
@download_api.route("/list", methods=['POST'])
wanli's avatar
wanli committed
79 80 81 82
@validate_schema(QuerySchema)
@Auth.auth_required
def get_list():
    try:
wanli's avatar
wanli committed
83 84
        user = request.current_user.get("id")
        result, count, message = signalManager.actionGetDownloadList.emit(user, request.schema_data)
wanli's avatar
wanli committed
85 86 87 88 89 90 91 92 93 94
        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)


wanli's avatar
wanli committed
95
@download_api.route("/update/<uuid:id>", methods=['POST'])
wanli's avatar
wanli committed
96 97 98 99
@validate_schema(UpdateSchema)
@Auth.auth_required
def update(id):
    try:
wanli's avatar
wanli committed
100 101
        user = request.current_user.get("id")
        isSuccess, message = signalManager.actionUpdateDownload.emit(user, id, request.schema_data)
wanli's avatar
wanli committed
102 103 104 105 106 107 108 109
        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)