Skip to content

Instantly share code, notes, and snippets.

@moyix
Created April 28, 2024 21:03
Show Gist options
  • Save moyix/915b7bf7e3ef5117990020c32e519a97 to your computer and use it in GitHub Desktop.
Save moyix/915b7bf7e3ef5117990020c32e519a97 to your computer and use it in GitHub Desktop.
Script to list the most recent version of a PyPI package released before a particular date
#!/usr/bin/env python3
import sys
import requests
from datetime import datetime, timezone
# Ok I'll be honest ChatGPT wrote the vast majority of this
# Use at your own risk
def get_latest_version_before_date(package_name, cutoff_date):
"""
Fetch the latest version of the package that was released before the specified cutoff_date.
Args:
package_name (str): The name of the package on PyPI.
cutoff_date (str): The cutoff date in ISO 8601 format (YYYY-MM-DD).
Returns:
str: The version of the latest release before the cutoff date or None if no release matches.
"""
# Convert cutoff_date to a datetime object for comparison
cutoff_datetime = datetime.fromisoformat(cutoff_date).replace(tzinfo=timezone.utc)
# Request package information from PyPI
response = requests.get(f'https://pypi.org/pypi/{package_name}/json')
if response.status_code != 200:
return None
data = response.json()
releases = data.get('releases', {})
# Initialize variables to find the latest version before the cutoff date
latest_version = None
latest_release_date = datetime.min.replace(tzinfo=timezone.utc)
# Iterate over all versions and their releases
for version, release_info in releases.items():
for release in release_info:
release_date = datetime.fromisoformat(release['upload_time_iso_8601'].replace('Z', '+00:00'))
# Check if this release is before the cutoff and after the last found release
if release_date < cutoff_datetime and release_date > latest_release_date:
latest_version = version
latest_release_date = release_date
return latest_version
# Example usage
cutoff_date = sys.argv[1]
for package_name in sys.argv[2:]:
latest_version = get_latest_version_before_date(package_name, cutoff_date)
print(f"{package_name}=={latest_version}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment