|
|
|
|
|
|
|
|
return result |
|
|
return result |
|
|
|
|
|
|
|
|
content = json.loads(response.content) |
|
|
content = json.loads(response.content) |
|
|
result["version"] = content["version"] |
|
|
|
|
|
result["release_date"] = content["releaseDate"] |
|
|
|
|
|
result["release_notes"] = content["releaseNotes"] |
|
|
|
|
|
result["can_auto_update"] = content["canAutoUpdate"] |
|
|
|
|
|
|
|
|
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 |
|
|
return result |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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: |
|
|
|
|
|
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") |
|
|
api.add_resource(VersionApi, "/version") |