|
|
|
@@ -3,6 +3,7 @@ import logging |
|
|
|
|
|
|
|
import requests |
|
|
|
from flask_restful import Resource, reqparse |
|
|
|
from packaging import version |
|
|
|
|
|
|
|
from configs import dify_config |
|
|
|
|
|
|
|
@@ -47,43 +48,15 @@ class VersionApi(Resource): |
|
|
|
|
|
|
|
|
|
|
|
def _has_new_version(*, latest_version: str, current_version: str) -> bool: |
|
|
|
def parse_version(version: str) -> tuple: |
|
|
|
# Split version into parts and pre-release suffix if any |
|
|
|
parts = version.split("-") |
|
|
|
version_parts = parts[0].split(".") |
|
|
|
pre_release = parts[1] if len(parts) > 1 else None |
|
|
|
|
|
|
|
# Validate version format |
|
|
|
if len(version_parts) != 3: |
|
|
|
raise ValueError(f"Invalid version format: {version}") |
|
|
|
|
|
|
|
try: |
|
|
|
# Convert version parts to integers |
|
|
|
major, minor, patch = map(int, version_parts) |
|
|
|
return (major, minor, patch, pre_release) |
|
|
|
except ValueError: |
|
|
|
raise ValueError(f"Invalid version format: {version}") |
|
|
|
|
|
|
|
latest = parse_version(latest_version) |
|
|
|
current = parse_version(current_version) |
|
|
|
|
|
|
|
# Compare major, minor, and patch versions |
|
|
|
for latest_part, current_part in zip(latest[:3], current[:3]): |
|
|
|
if latest_part > current_part: |
|
|
|
return True |
|
|
|
elif latest_part < current_part: |
|
|
|
return False |
|
|
|
|
|
|
|
# If versions are equal, check pre-release suffixes |
|
|
|
if latest[3] is None and current[3] is not None: |
|
|
|
return True |
|
|
|
elif latest[3] is not None and current[3] is None: |
|
|
|
try: |
|
|
|
latest = version.parse(latest_version) |
|
|
|
current = version.parse(current_version) |
|
|
|
|
|
|
|
# Compare versions |
|
|
|
return latest > current |
|
|
|
except version.InvalidVersion: |
|
|
|
logging.warning(f"Invalid version format: latest={latest_version}, current={current_version}") |
|
|
|
return False |
|
|
|
elif latest[3] is not None and current[3] is not None: |
|
|
|
# Simple string comparison for pre-release versions |
|
|
|
return latest[3] > current[3] |
|
|
|
|
|
|
|
return False |
|
|
|
|
|
|
|
|
|
|
|
api.add_resource(VersionApi, "/version") |