|
@@ -38,11 +38,52 @@ class VersionApi(Resource):
|
|
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")
|