Underground-Digital/Workflow-Engine
0
1import json2import logging3 4import requests5from flask_restful import Resource, reqparse6from packaging import version7 8from configs import dify_config9 10from . import api11 12 13class VersionApi(Resource):14 def get(self):15 parser = reqparse.RequestParser()16 parser.add_argument("current_version", type=str, required=True, location="args")17 args = parser.parse_args()18 check_update_url = dify_config.CHECK_UPDATE_URL19 20 result = {21 "version": dify_config.CURRENT_VERSION,22 "release_date": "",23 "release_notes": "",24 "can_auto_update": False,25 "features": {26 "can_replace_logo": dify_config.CAN_REPLACE_LOGO,27 "model_load_balancing_enabled": dify_config.MODEL_LB_ENABLED,28 },29 }30 31 if not check_update_url:32 return result33 34 try:35 response = requests.get(check_update_url, {"current_version": args.get("current_version")})36 except Exception as error:37 logging.warning("Check update version error: {}.".format(str(error)))38 result["version"] = args.get("current_version")39 return result40 41 content = json.loads(response.content)42 if _has_new_version(latest_version=content["version"], current_version=f"{args.get('current_version')}"):43 result["version"] = content["version"]44 result["release_date"] = content["releaseDate"]45 result["release_notes"] = content["releaseNotes"]46 result["can_auto_update"] = content["canAutoUpdate"]47 return result48 49 50def _has_new_version(*, latest_version: str, current_version: str) -> bool:51 try:52 latest = version.parse(latest_version)53 current = version.parse(current_version)54 55 # Compare versions56 return latest > current57 except version.InvalidVersion:58 logging.warning(f"Invalid version format: latest={latest_version}, current={current_version}")59 return False60 61 62api.add_resource(VersionApi, "/version")63 