From 11d2f82a12ddc2908f5cf43834b62e594909b66a Mon Sep 17 00:00:00 2001 From: Brandon Nguyen <112731698+bxngyn@users.noreply.github.com> Date: Wed, 23 Jul 2025 13:35:43 -0400 Subject: [PATCH 1/6] pypi check wip --- submit50/__main__.py | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/submit50/__main__.py b/submit50/__main__.py index 51e1a6a..3a9f2c6 100755 --- a/submit50/__main__.py +++ b/submit50/__main__.py @@ -60,21 +60,39 @@ def check_announcements(): raise Error(res.text.strip()) -def check_version(): +def check_version(package_name=__package__, timeout=15): """Check that submit50 is the latest version according to submit50.io.""" + if not __version__: + return + # Retrieve version info - res = requests.get(f"{SUBMIT_URL}/versions/submit50") + res = requests.get(f"{SUBMIT_URL}/versions/submit50", timeout=timeout) if res.status_code != 200: - raise Error(_("You have an unknown version of submit50. " - "Please visit our status page https://cs50.statuspage.io for more information.")) + raise Error(_("Could not connect to submit.cs50.io." + "Please visit our status page https://cs50.statuspage.io for more information.")) - # Check that latest version == version installed - required_version = version.parse(res.text.strip()) - local_version = version.parse(__version__) + # Get submit.cs50.io version + latest_io = version.parse(res.text.strip()) + current = version.parse(__version__) - if required_version > local_version: - raise Error(_("You have an outdated version of submit50. " - "Please upgrade.")) + # Get PyPi version + latest_pypi = max( + requests.get(f"https://pypi.org/pypi/{package_name}/json", timeout=timeout).json()["releases"], + key=version.parse + ) + latest_pypi = version.parse(latest_pypi) + + # Check for minimum requirement + if current < latest_io: + pass + + # Check for latest version + if latest_pypi > current or latest_io > current: + raise Error(_(f"A newer version of {package_name} is available. Run pip3 install --upgrade {package_name} to upgrade.")) + + # Resolve if submit.cs50.io version differs from PyPi + if latest_pypi != latest_io: + pass def setup_logging(level): @@ -179,7 +197,7 @@ def check_slug_year(slug): # Ask if they want to continue if not re.match(f"^\s*(?:{_('y|yes')})\s*$", input(_("Do you want to continue with this submission (yes/no)? ")), re.I): raise Error(_("User aborted submission.")) - + except ValueError: pass @@ -246,7 +264,7 @@ def main(): check_announcements() check_version() check_slug_year(args.slug) - + user_name, commit_hash, message = lib50.push("submit50", args.slug, CONFIG_LOADER, prompt=prompt) print(message) From 2815f55dca548f6d0713e5ce7d73d26a9502d53f Mon Sep 17 00:00:00 2001 From: Brandon Nguyen <112731698+bxngyn@users.noreply.github.com> Date: Wed, 23 Jul 2025 14:35:41 -0400 Subject: [PATCH 2/6] update version check --- setup.py | 2 +- submit50/__main__.py | 12 ++++-------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/setup.py b/setup.py index 972ca0d..57eaec9 100755 --- a/setup.py +++ b/setup.py @@ -26,6 +26,6 @@ entry_points={ "console_scripts": ["submit50=submit50.__main__:main"] }, - version="3.2.0", + version="3.2.1", include_package_data=True ) diff --git a/submit50/__main__.py b/submit50/__main__.py index 3a9f2c6..fc97ef3 100755 --- a/submit50/__main__.py +++ b/submit50/__main__.py @@ -60,7 +60,7 @@ def check_announcements(): raise Error(res.text.strip()) -def check_version(package_name=__package__, timeout=15): +def check_version(package_name=__package__, timeout=30): """Check that submit50 is the latest version according to submit50.io.""" if not __version__: return @@ -69,7 +69,7 @@ def check_version(package_name=__package__, timeout=15): res = requests.get(f"{SUBMIT_URL}/versions/submit50", timeout=timeout) if res.status_code != 200: raise Error(_("Could not connect to submit.cs50.io." - "Please visit our status page https://cs50.statuspage.io for more information.")) + "Please visit our status page https://cs50.statuspage.io for more information.")) # Get submit.cs50.io version latest_io = version.parse(res.text.strip()) @@ -84,15 +84,11 @@ def check_version(package_name=__package__, timeout=15): # Check for minimum requirement if current < latest_io: - pass + raise Error(_(f"v{current} of {package_name} is no longer supported. Run pip3 install --upgrade {package_name} to upgrade.")) # Check for latest version if latest_pypi > current or latest_io > current: - raise Error(_(f"A newer version of {package_name} is available. Run pip3 install --upgrade {package_name} to upgrade.")) - - # Resolve if submit.cs50.io version differs from PyPi - if latest_pypi != latest_io: - pass + cprint(f"A newer version of {package_name} is available. Run pip3 install --upgrade {package_name} to upgrade.", "magenta") def setup_logging(level): From a1bb454c2ba5a966cdf23d1810ba0faeb704b08f Mon Sep 17 00:00:00 2001 From: Brandon Nguyen <112731698+bxngyn@users.noreply.github.com> Date: Wed, 23 Jul 2025 14:55:09 -0400 Subject: [PATCH 3/6] remove redundant conditional --- submit50/__main__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/submit50/__main__.py b/submit50/__main__.py index fc97ef3..49c4f14 100755 --- a/submit50/__main__.py +++ b/submit50/__main__.py @@ -61,7 +61,7 @@ def check_announcements(): def check_version(package_name=__package__, timeout=30): - """Check that submit50 is the latest version according to submit50.io.""" + """Check that submit50 is the latest version according to submit50.io and PyPI.""" if not __version__: return @@ -75,7 +75,7 @@ def check_version(package_name=__package__, timeout=30): latest_io = version.parse(res.text.strip()) current = version.parse(__version__) - # Get PyPi version + # Get PyPI version latest_pypi = max( requests.get(f"https://pypi.org/pypi/{package_name}/json", timeout=timeout).json()["releases"], key=version.parse @@ -87,7 +87,7 @@ def check_version(package_name=__package__, timeout=30): raise Error(_(f"v{current} of {package_name} is no longer supported. Run pip3 install --upgrade {package_name} to upgrade.")) # Check for latest version - if latest_pypi > current or latest_io > current: + if latest_pypi > current: cprint(f"A newer version of {package_name} is available. Run pip3 install --upgrade {package_name} to upgrade.", "magenta") From 68c6fe64f32c5ffb99e77bbfa65d96e84fcdcca4 Mon Sep 17 00:00:00 2001 From: Rongxin Liu Date: Wed, 23 Jul 2025 23:17:35 -0400 Subject: [PATCH 4/6] tweaked formatting --- submit50/__main__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/submit50/__main__.py b/submit50/__main__.py index 49c4f14..fbf6e73 100755 --- a/submit50/__main__.py +++ b/submit50/__main__.py @@ -193,7 +193,7 @@ def check_slug_year(slug): # Ask if they want to continue if not re.match(f"^\s*(?:{_('y|yes')})\s*$", input(_("Do you want to continue with this submission (yes/no)? ")), re.I): raise Error(_("User aborted submission.")) - + except ValueError: pass @@ -260,7 +260,7 @@ def main(): check_announcements() check_version() check_slug_year(args.slug) - + user_name, commit_hash, message = lib50.push("submit50", args.slug, CONFIG_LOADER, prompt=prompt) print(message) From 3076d4c4ef405e601250a1e763828f2992b0f135 Mon Sep 17 00:00:00 2001 From: Rongxin Liu Date: Wed, 23 Jul 2025 23:38:17 -0400 Subject: [PATCH 5/6] reduce timeout --- submit50/__main__.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/submit50/__main__.py b/submit50/__main__.py index fbf6e73..048eab8 100755 --- a/submit50/__main__.py +++ b/submit50/__main__.py @@ -60,8 +60,8 @@ def check_announcements(): raise Error(res.text.strip()) -def check_version(package_name=__package__, timeout=30): - """Check that submit50 is the latest version according to submit50.io and PyPI.""" +def check_version(package_name=__package__, timeout=5): + """Check that submit50 is the latest version according to submit.cs50.io and PyPI.""" if not __version__: return @@ -71,7 +71,7 @@ def check_version(package_name=__package__, timeout=30): raise Error(_("Could not connect to submit.cs50.io." "Please visit our status page https://cs50.statuspage.io for more information.")) - # Get submit.cs50.io version + # Get the minimum required version from submit.cs50.io latest_io = version.parse(res.text.strip()) current = version.parse(__version__) @@ -84,7 +84,7 @@ def check_version(package_name=__package__, timeout=30): # Check for minimum requirement if current < latest_io: - raise Error(_(f"v{current} of {package_name} is no longer supported. Run pip3 install --upgrade {package_name} to upgrade.")) + raise Error(_(f"Current version {current} of {package_name} is no longer supported. Run pip3 install --upgrade {package_name} now to upgrade.")) # Check for latest version if latest_pypi > current: From c5548a14c38c352d33f805466afc23c256e60f8d Mon Sep 17 00:00:00 2001 From: Rongxin Liu Date: Thu, 24 Jul 2025 00:15:54 -0400 Subject: [PATCH 6/6] add quotes around pip install command --- submit50/__main__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/submit50/__main__.py b/submit50/__main__.py index 048eab8..0a3a72e 100755 --- a/submit50/__main__.py +++ b/submit50/__main__.py @@ -84,11 +84,11 @@ def check_version(package_name=__package__, timeout=5): # Check for minimum requirement if current < latest_io: - raise Error(_(f"Current version {current} of {package_name} is no longer supported. Run pip3 install --upgrade {package_name} now to upgrade.")) + raise Error(_(f"Current version {current} of {package_name} is no longer supported. Run \"pip3 install --upgrade {package_name}\" now to upgrade.")) # Check for latest version if latest_pypi > current: - cprint(f"A newer version of {package_name} is available. Run pip3 install --upgrade {package_name} to upgrade.", "magenta") + cprint(f"A newer version of {package_name} is available. Run \"pip3 install --upgrade {package_name}\" now to upgrade.", "magenta") def setup_logging(level):