refactor: Modify script to only show versions compatible with Python 3.8 or lower

This commit is contained in:
Paul Gauthier (aider) 2024-09-23 12:27:10 -07:00
parent bbeb4749cb
commit c2a35fef05

View file

@ -2,9 +2,7 @@ import requests
from packaging import version from packaging import version
from packaging.specifiers import SpecifierSet from packaging.specifiers import SpecifierSet
def get_versions_supporting_python38_or_lower(package_name):
def get_python_support_for_versions(package_name):
# Fetch package information from PyPI
url = f"https://pypi.org/pypi/{package_name}/json" url = f"https://pypi.org/pypi/{package_name}/json"
response = requests.get(url) response = requests.get(url)
if response.status_code != 200: if response.status_code != 200:
@ -12,45 +10,33 @@ def get_python_support_for_versions(package_name):
return {} return {}
data = response.json() data = response.json()
version_support = {} compatible_versions = {}
for release, release_data in data["releases"].items(): for release, release_data in data["releases"].items():
if not release_data: # Skip empty releases if not release_data: # Skip empty releases
continue continue
# Check the 'requires_python' field
requires_python = release_data[0].get("requires_python") requires_python = release_data[0].get("requires_python")
if requires_python is None: if requires_python is None:
version_support[release] = "Unspecified (assumed compatible with all versions)" compatible_versions[release] = "Unspecified (assumed compatible with Python 3.8 and lower)"
else: else:
try: try:
spec = SpecifierSet(requires_python) spec = SpecifierSet(requires_python)
supported_versions = [] if version.parse("3.8") in spec:
for py_version in ["3.6", "3.7", "3.8", "3.9", "3.10", "3.11", "3.12"]: compatible_versions[release] = f"Compatible with Python 3.8 (spec: {requires_python})"
if version.parse(py_version) in spec:
supported_versions.append(py_version)
version_support[release] = (
", ".join(supported_versions)
if supported_versions
else "No supported versions found"
)
except ValueError: except ValueError:
version_support[release] = f"Invalid specifier: {requires_python}" print(f"Invalid requires_python specifier for version {release}: {requires_python}")
return version_support
return compatible_versions
def main(): def main():
package_name = "aider-chat" # Replace with your package name package_name = "aider-chat" # Replace with your package name
version_support = get_python_support_for_versions(package_name) compatible_versions = get_versions_supporting_python38_or_lower(package_name)
print(f"Python version support for each release of {package_name}:") print(f"Versions of {package_name} compatible with Python 3.8 or lower:")
for release, support in sorted( for release, support in sorted(compatible_versions.items(), key=lambda x: version.parse(x[0]), reverse=True):
version_support.items(), key=lambda x: version.parse(x[0]), reverse=True
):
print(f"{release}: {support}") print(f"{release}: {support}")
if __name__ == "__main__": if __name__ == "__main__":
main() main()