代码片段

那年仲夏 提交于 2019-12-19 02:34:05

‘’’
class PluginAPI(Resource):

def get(self):
    id = request.args.get('id', '')
    app_id = request.args.get('app_id', '')
    if not id and not app_id:
        return {"data": {}}
    if id and len(id) == 32:
        data = PluginDetail.query.filter_by(
            unique_id=id).first()
    else:
        data = None
    if data:
        json_data = data.to_json()
        param = {
            "app_id": json_data["app_id"],
            "version": json_data["version"],
            "is_new": False,
        }
        if not json_data["type"]:
            data.type = PLUGIN_STATUS_REQUESTING
            try:
                db.session.commit()
            except Exception:
                db.session.rollback()
            else:
                send_request("post", DOWNLOAD_URL, param=param)
                json_data["type"] = PLUGIN_STATUS_REQUESTING
                return {"data": json_data}
        elif json_data["type"] == PLUGIN_STATUS_REQUESTING:
            return {"data": json_data}
        elif json_data["type"] == PLUGIN_STATUS_DONE:
            now_time = datetime.datetime.now()
            yes_time = now_time + datetime.timedelta(days=-7)
            update_time = datetime.datetime.strptime(
                json_data["update_time"], "%Y-%m-%d %H:%M:%S")
            if update_time >= yes_time:
                return {"data": json_data}
            else:
                data.type = PLUGIN_STATUS_REQUESTING
                try:
                    db.session.commit()
                except Exception:
                    db.session.rollback()
                else:
                    send_request("post", DOWNLOAD_URL, param=param)
                    json_data["type"] = PLUGIN_STATUS_REQUESTING
                    return {"data": json_data}
    else:
        token = request.headers.get('token', '')
        if not app_id or not token or token != TOKEN:
            return {"data": {}}
        param = {
            "app_id": app_id,
            "is_new": True
        }
        send_request("post", DOWNLOAD_URL, param=param)
        return {"data": {"type": PLUGIN_STATUS_REQUESTING}}

def post(self):
    token = request.headers.get('token', '')
    data = request.get_json(force=True)
    if not data or not token or token != TOKEN:
        return
    create_get_plugin_task(data)
    return {"data": {"type": PLUGIN_STATUS_REQUESTING}}

def put(self):
    token = request.headers.get('token', '')
    if not token or token != TOKEN:
        return
    data = request.get_json(force=True)
    if not data["request_done"]:
        id = data["app_id"]
        query = PluginDetail.query.filter_by(
            app_id=id).first()
        if not query:
            return
        if data["status_code"] == 404:
            query.type = PLUGIN_STATUS_DONE
            query.update_time = datetime.datetime.now()
        try:
            db.session.commit()
        except Exception:
            db.session.rollback()
        return
    is_new = data["is_new"]
    if is_new:
        if data["done"]:
            obj = PluginDetail(
                unique_id=generate_uuid(32, False),
                app_id=data["app_id"],
                icon=data["icon_url"],
                name=data["name"],
                version=data["version"],
                crx_two=data["crx_two"],
                crx_three=data["crx_three"],
                desc=data["desc"],
                remark='无',
                img=data["img_url"],
                create_time=datetime.datetime.now(),
                update_time=datetime.datetime.now(),
                count=0,
                users=data["users"],
                type=PLUGIN_STATUS_DONE,
            )
            db.session.add(obj)
            try:
                db.session.commit()
            except Exception:
                db.session.rollback()
    else:
        id = data["app_id"]
        query = PluginDetail.query.filter_by(
            app_id=id).first()
        if not query:
            return
        query_data = query.to_json()
        query_type = query_data["type"]
        if query_type == PLUGIN_STATUS_DONE:
            return
        else:
            if data["done"]:
                if data["update"]:
                    if query_data["crx_two"]:
                        qiniu_del(BUCKET_NAME, query_data["crx_two"].split('/')[-1])
                    if query_data["crx_three"]:
                        qiniu_del(BUCKET_NAME, query_data["crx_three"].split('/')[-1])
                    query.crx_two = data["crx_two"]
                    query.crx_three = data["crx_three"]
                    query.version = data["version"]
                    query.users = data["users"]
                    query.type = PLUGIN_STATUS_DONE
                    query.update_time = datetime.datetime.now()
                else:
                    query.users = data["users"]
                    query.type = PLUGIN_STATUS_DONE
                    query.update_time = datetime.datetime.now()
            else:
                query.type = PLUGIN_STATUS_DEFAULT
            try:
                db.session.commit()
            except Exception:
                db.session.rollback()

class PluginSearchAPI(Resource):

def get(self):
    keyword = request.args.get('keyword', '')
    if not keyword:
        return {"data": {}}
    result = PluginDetail.query.filter(
        or_(PluginDetail.name.like('%{}%'.format(keyword)),
            PluginDetail.desc.like('%{}%'.format(keyword)))
    ).order_by(PluginDetail.users.desc()).limit(12)
    data = []
    for i in result:
        data.append(i.to_json())
    return {"data": data}

‘’’

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!