‘’’
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}
‘’’
来源:CSDN
作者:damonyangshaoqing
链接:https://blog.csdn.net/weixin_45032167/article/details/103605745