diff --git a/src/PyPiUpdater/__init__.py b/src/PyPiUpdater/__init__.py index 136d36c..621ee43 100644 --- a/src/PyPiUpdater/__init__.py +++ b/src/PyPiUpdater/__init__.py @@ -1,4 +1,5 @@ -from .pypi_updater import PyPiUpdater +from .single_updater import PyPiUpdater +#from .multi_updater import MultiPackageUpdater __all__ = ["PyPiUpdater"] diff --git a/src/PyPiUpdater/multi_updater.py b/src/PyPiUpdater/multi_updater.py new file mode 100644 index 0000000..71e55a9 --- /dev/null +++ b/src/PyPiUpdater/multi_updater.py @@ -0,0 +1,4 @@ + +class MultiPackageUpdater: + def __init__(self, log_path): + print("Not ready yet...") diff --git a/src/PyPiUpdater/pypi_updater.py b/src/PyPiUpdater/single_updater.py similarity index 86% rename from src/PyPiUpdater/pypi_updater.py rename to src/PyPiUpdater/single_updater.py index 3203ddb..851f69b 100644 --- a/src/PyPiUpdater/pypi_updater.py +++ b/src/PyPiUpdater/single_updater.py @@ -6,6 +6,7 @@ import time import json import re from packaging import version +from packaging.version import parse, Version from xml.etree import ElementTree as ET class PyPiUpdater: @@ -25,7 +26,7 @@ class PyPiUpdater: self.last_update_check = 0.1 def _get_latest_version(self): - """Fetch the latest version from PyPI RSS feed.""" + """Fetch the latest stable version from PyPI RSS feed.""" rss_url = f"https://pypi.org/rss/project/{self.package_name.lower()}/releases.xml" try: @@ -33,9 +34,24 @@ class PyPiUpdater: response.raise_for_status() root = ET.fromstring(response.content) - latest_version = root.find(".//item/title").text.strip() - self.latest_version = latest_version - return [latest_version, None] + # Extract all versions from the feed + versions = [] + for item in root.findall(".//item/title"): + version_text = item.text.strip() + parsed_version = parse(version_text) + print(version_text,"\n",parsed_version) + # Check if the version is stable (not a pre-release) + if isinstance(parsed_version, Version) and not parsed_version.is_prerelease: + versions.append(parsed_version) + + # Return the latest stable version + if versions: + latest_version = str(max(versions)) + self.latest_version = latest_version + return [latest_version, None] + + return [None, "No stable versions found"] + except requests.exceptions.RequestException as e: return [None, f"Network error: {str(e)}"] except Exception as e: