crates: Use looseversion.LooseVersion2 to parse crate versions

packaging.version.parse is dedicated to parse Python package version
numbers but crate versions do not necessarily respect Python version
number conventions and thus some crate versions cannot be parsed.

Prefer to use looseversion.LooseVersion2 instead which in a drop-in
replacement for deprecated distutils.version.LooseVersion and enables
to parse all kind of version numbers.
This commit is contained in:
Antoine Lambert 2024-08-21 15:17:28 +02:00
parent b2ece7ca63
commit aafaebd5de
7 changed files with 18 additions and 2 deletions

View file

@ -32,6 +32,7 @@ repos:
stages: [commit]
- id: codespell
name: Check commit message spelling
args: [-L crate]
stages: [commit-msg]
- repo: local

View file

@ -3,6 +3,7 @@ dateparser
dulwich
iso8601
launchpadlib
looseversion
lxml
psycopg2
pyreadr

View file

@ -15,7 +15,7 @@ from typing import Any, Dict, Iterator, List, Optional
from urllib.parse import urlparse
import iso8601
from packaging.version import parse as parse_version
from looseversion import LooseVersion2
from swh.scheduler.interface import SchedulerInterface
from swh.scheduler.model import ListedOrigin
@ -201,7 +201,7 @@ class CratesLister(Lister[CratesListerState, CratesListerPage]):
for name, item in dataset.items():
page = []
# sort crate versions
versions: list = sorted(item["versions"].keys(), key=parse_version)
versions = sorted(item["versions"].keys(), key=LooseVersion2)
for version in versions:
v = item["versions"][version]

View file

@ -17,6 +17,7 @@ echo -e '''created_at,description,documentation,downloads,homepage,id,max_upload
''' > data/crates.csv
echo -e '''checksum,crate_id,crate_size,created_at,downloads,features,id,license,links,num,published_by,updated_at,yanked
d879626d5babe4ca6c4ec953d712e28d939672b325a4f9352f28ca3c82568a15,1339,,2014-12-18 06:56:46.88489,845,{},1321,MIT/Apache-2.0,,0.1.3-experimental,,2017-11-30 05:24:37.146115,f
398952a2f6cd1d22bc1774fd663808e32cf36add0280dee5cdd84a8fff2db944,2233,,2015-05-27 23:19:16.848643,1961,{},10855,MIT/Apache-2.0,,0.1.0,,2017-11-30 03:37:17.449539,f
343bd0171ee23346506db6f4c64525de6d72f0e8cc533f83aea97f3e7488cbf9,545,,2014-12-18 06:56:46.88489,845,{},1321,MIT/Apache-2.0,,0.1.2,,2017-11-30 02:29:20.01125,f
6e229ed392842fa93c1d76018d197b7e1b74250532bafb37b0e1d121a92d4cf7,1339,,2015-02-03 11:15:19.001762,8211,{},4371,MIT/Apache-2.0,,0.1.2,,2017-11-30 03:14:27.545115,f

View file

@ -26,6 +26,14 @@ expected_origins = [
"filename": "rand-0.1.2.crate",
"url": "https://static.crates.io/crates/rand/rand-0.1.2.crate",
},
{
"version": "0.1.3-experimental",
"checksums": {
"sha256": "d879626d5babe4ca6c4ec953d712e28d939672b325a4f9352f28ca3c82568a15", # noqa: B950
},
"filename": "rand-0.1.3-experimental.crate",
"url": "https://static.crates.io/crates/rand/rand-0.1.3-experimental.crate",
},
],
"crates_metadata": [
{
@ -38,6 +46,11 @@ expected_origins = [
"last_update": "2017-11-30 03:14:27.545115",
"yanked": False,
},
{
"version": "0.1.3-experimental",
"last_update": "2017-11-30 05:24:37.146115",
"yanked": False,
},
],
},
{