|
4 | 4 | import os |
5 | 5 | import re |
6 | 6 | import shutil |
7 | | -from distutils.version import LooseVersion, StrictVersion |
| 7 | +from distutils.version import LooseVersion |
8 | 8 | from importlib.util import module_from_spec, spec_from_file_location |
9 | 9 | from itertools import chain |
10 | 10 | from pathlib import Path |
|
16 | 16 |
|
17 | 17 | import fire |
18 | 18 | import pkg_resources |
| 19 | +from packaging.version import parse as version_parse |
19 | 20 |
|
20 | 21 | REQUIREMENT_FILES = { |
21 | 22 | "pytorch": ( |
|
30 | 31 | PACKAGE_MAPPING = {"app": "lightning-app", "pytorch": "pytorch-lightning"} |
31 | 32 |
|
32 | 33 |
|
33 | | -def pypi_versions(package_name: str) -> List[str]: |
34 | | - """Return a list of released versions of a provided pypi name.""" |
| 34 | +def pypi_versions(package_name: str, drop_pre: bool = True) -> List[str]: |
| 35 | + """Return a list of released versions of a provided pypi name. |
| 36 | +
|
| 37 | + >>> _ = pypi_versions("lightning_app", drop_pre=False) |
| 38 | + """ |
35 | 39 | # https://stackoverflow.com/a/27239645/4521646 |
36 | 40 | url = f"https://pypi.org/pypi/{package_name}/json" |
37 | 41 | data = json.load(urlopen(Request(url))) |
38 | 42 | versions = list(data["releases"].keys()) |
39 | 43 | # todo: drop this line after cleaning Pypi history from invalid versions |
40 | | - versions = list(filter(lambda v: v.count(".") == 2 and "rc" not in v, versions)) |
41 | | - versions.sort(key=StrictVersion) |
| 44 | + versions = list(filter(lambda v: v.count(".") == 2, versions)) |
| 45 | + if drop_pre: |
| 46 | + versions = list(filter(lambda v: all(c not in v for c in ["rc", "dev"]), versions)) |
| 47 | + versions.sort(key=version_parse) |
42 | 48 | return versions |
43 | 49 |
|
44 | 50 |
|
@@ -122,7 +128,7 @@ def download_package(package: str, folder: str = ".", version: Optional[str] = N |
122 | 128 | url = f"https://pypi.org/pypi/{PACKAGE_MAPPING[package]}/json" |
123 | 129 | data = json.load(urlopen(Request(url))) |
124 | 130 | if not version: |
125 | | - pypi_vers = pypi_versions(PACKAGE_MAPPING[package]) |
| 131 | + pypi_vers = pypi_versions(PACKAGE_MAPPING[package], drop_pre=False) |
126 | 132 | version = pypi_vers[-1] |
127 | 133 | releases = list(filter(lambda r: r["packagetype"] == "sdist", data["releases"][version])) |
128 | 134 | assert releases, f"Missing 'sdist' for this package/version aka {package}/{version}" |
|
0 commit comments