mirror of
https://github.com/cookiecutter/cookiecutter-django.git
synced 2025-07-13 17:42:26 +03:00
Refactor function to list django versions
This commit is contained in:
parent
d886e68af6
commit
1a962b5ad9
|
@ -9,15 +9,13 @@ to keep up to date.
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import os
|
import os
|
||||||
from typing import NamedTuple, Sequence, TYPE_CHECKING
|
|
||||||
|
|
||||||
import requests
|
|
||||||
import sys
|
import sys
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from typing import TYPE_CHECKING, Any, Iterable, NamedTuple
|
||||||
|
|
||||||
|
import requests
|
||||||
from github import Github
|
from github import Github
|
||||||
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from github.Issue import Issue
|
from github.Issue import Issue
|
||||||
|
|
||||||
|
@ -34,6 +32,7 @@ class DjVersion(NamedTuple):
|
||||||
|
|
||||||
Only keeps track on (major, minor) versions, excluding patches and pre-releases.
|
Only keeps track on (major, minor) versions, excluding patches and pre-releases.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
major: int
|
major: int
|
||||||
minor: int
|
minor: int
|
||||||
|
|
||||||
|
@ -49,6 +48,7 @@ class DjVersion(NamedTuple):
|
||||||
|
|
||||||
|
|
||||||
def get_package_info(package: str) -> dict:
|
def get_package_info(package: str) -> dict:
|
||||||
|
"""Get package metadata using PyPI API."""
|
||||||
# "django" converts to "Django" on redirect
|
# "django" converts to "Django" on redirect
|
||||||
r = requests.get(f"https://pypi.org/pypi/{package}/json", allow_redirects=True)
|
r = requests.get(f"https://pypi.org/pypi/{package}/json", allow_redirects=True)
|
||||||
if not r.ok:
|
if not r.ok:
|
||||||
|
@ -57,17 +57,18 @@ def get_package_info(package: str) -> dict:
|
||||||
return r.json()
|
return r.json()
|
||||||
|
|
||||||
|
|
||||||
def get_package_versions(package_info: dict, reverse=True, *, include_pre=False):
|
def get_django_versions() -> Iterable[DjVersion]:
|
||||||
# Mostly used for the Django check really... to get the latest
|
"""List all django versions."""
|
||||||
# package version, you could simple do get_package_info()["info"]["version"]
|
django_package_info: dict[str, Any] = get_package_info("django")
|
||||||
releases: Sequence[str] = package_info["releases"].keys()
|
releases = django_package_info["releases"].keys()
|
||||||
if not include_pre:
|
for release_str in releases:
|
||||||
releases = [r for r in releases if r.replace(".", "").isdigit()]
|
if release_str.replace(".", "").isdigit():
|
||||||
return sorted(releases, reverse=reverse)
|
# Exclude pre-releases with non-numeric characters in version
|
||||||
|
yield DjVersion.parse(release_str)
|
||||||
|
|
||||||
|
|
||||||
def get_name_and_version(requirements_line: str) -> tuple[str, ...]:
|
def get_name_and_version(requirements_line: str) -> tuple[str, ...]:
|
||||||
"""Get the name a verion of a package from a line in the requirement file."""
|
"""Get the name a version of a package from a line in the requirement file."""
|
||||||
full_name, version = requirements_line.split(" ", 1)[0].split("==")
|
full_name, version = requirements_line.split(" ", 1)[0].split("==")
|
||||||
name_without_extras = full_name.split("[", 1)[0]
|
name_without_extras = full_name.split("[", 1)[0]
|
||||||
return name_without_extras, version
|
return name_without_extras, version
|
||||||
|
@ -92,12 +93,10 @@ def get_all_latest_django_versions() -> tuple[DjVersion, list[DjVersion]]:
|
||||||
_, current_version_str = get_name_and_version(line)
|
_, current_version_str = get_name_and_version(line)
|
||||||
# Get a tuple of (major, minor) - ignoring patch version
|
# Get a tuple of (major, minor) - ignoring patch version
|
||||||
current_minor_version = DjVersion.parse(current_version_str)
|
current_minor_version = DjVersion.parse(current_version_str)
|
||||||
all_django_versions = get_package_versions(get_package_info("django"))
|
|
||||||
newer_versions: set[DjVersion] = set()
|
newer_versions: set[DjVersion] = set()
|
||||||
for version_str in all_django_versions:
|
for django_version in get_django_versions():
|
||||||
released_minor_version = DjVersion.parse(version_str)
|
if django_version > current_minor_version:
|
||||||
if released_minor_version > current_minor_version:
|
newer_versions.add(django_version)
|
||||||
newer_versions.add(released_minor_version)
|
|
||||||
|
|
||||||
return current_minor_version, sorted(newer_versions, reverse=True)
|
return current_minor_version, sorted(newer_versions, reverse=True)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user