| | import json |
| | import logging |
| |
|
| | import requests |
| | from flask_restful import Resource, reqparse |
| | from packaging import version |
| |
|
| | from configs import dify_config |
| |
|
| | from . import api |
| |
|
| |
|
| | class VersionApi(Resource): |
| | def get(self): |
| | parser = reqparse.RequestParser() |
| | parser.add_argument("current_version", type=str, required=True, location="args") |
| | args = parser.parse_args() |
| | check_update_url = dify_config.CHECK_UPDATE_URL |
| |
|
| | result = { |
| | "version": dify_config.CURRENT_VERSION, |
| | "release_date": "", |
| | "release_notes": "", |
| | "can_auto_update": False, |
| | "features": { |
| | "can_replace_logo": dify_config.CAN_REPLACE_LOGO, |
| | "model_load_balancing_enabled": dify_config.MODEL_LB_ENABLED, |
| | }, |
| | } |
| |
|
| | if not check_update_url: |
| | return result |
| |
|
| | try: |
| | response = requests.get(check_update_url, {"current_version": args.get("current_version")}) |
| | except Exception as error: |
| | logging.warning("Check update version error: {}.".format(str(error))) |
| | result["version"] = args.get("current_version") |
| | return result |
| |
|
| | content = json.loads(response.content) |
| | if _has_new_version(latest_version=content["version"], current_version=f"{args.get('current_version')}"): |
| | result["version"] = content["version"] |
| | result["release_date"] = content["releaseDate"] |
| | result["release_notes"] = content["releaseNotes"] |
| | result["can_auto_update"] = content["canAutoUpdate"] |
| | return result |
| |
|
| |
|
| | def _has_new_version(*, latest_version: str, current_version: str) -> bool: |
| | try: |
| | latest = version.parse(latest_version) |
| | current = version.parse(current_version) |
| |
|
| | |
| | return latest > current |
| | except version.InvalidVersion: |
| | logging.warning(f"Invalid version format: latest={latest_version}, current={current_version}") |
| | return False |
| |
|
| |
|
| | api.add_resource(VersionApi, "/version") |
| |
|