More robust guessing of package name and version.

Added support for some other package naming schemes.
This commit is contained in:
Nick Pope 2013-07-19 16:00:20 +01:00
parent c3737bdf07
commit 402a04e9af
2 changed files with 26 additions and 4 deletions

View File

@ -47,9 +47,17 @@ _archive_suffix_rx = re.compile(r"(\.zip|\.tar\.gz|\.tgz|\.tar\.bz2|-py[23]\.\d-
def guess_pkgname_and_version(path):
path = os.path.basename(path)
pkgname = '-'.join(re.split(r'-(?=\d+)', path)[:-1])
version = path[len(pkgname) + 1:]
version = _archive_suffix_rx.sub("", version)
path = _archive_suffix_rx.sub('', path)
if '-' not in path:
pkgname, version = path, ''
elif path.count('-') == 1:
pkgname, version = path.split('-', 1)
elif '.' not in path:
pkgname, version = path.rsplit('-', 1)
else:
parts = re.split(r'-(?=(?i)v?\d+[\.a-z])', path)
pkgname = '-'.join(parts[:-1])
version = parts[-1]
return pkgname, version

View File

@ -17,7 +17,21 @@ files = [
("pep8-0.6.0.zip", "pep8", "0.6.0"),
("pytz-2012b.zip", "pytz", "2012b"),
("ABC12-34_V1X-1.2.3.zip", "ABC12-34_V1X", "1.2.3"),
("A100-200-XYZ-1.2.3.zip", "A100-200-XYZ", "1.2.3")]
("A100-200-XYZ-1.2.3.zip", "A100-200-XYZ", "1.2.3"),
("flup-1.0.3.dev-20110405.tar.gz", "flup", "1.0.3.dev-20110405"),
("package-1.0.0-alpha.1.zip", "package", "1.0.0-alpha.1"),
("package-1.3.7+build.11.e0f985a.zip", "package", "1.3.7+build.11.e0f985a"),
("package-v1.8.1.301.ga0df26f.zip", "package", "v1.8.1.301.ga0df26f"),
("package-2013.02.17.dev123.zip", "package", "2013.02.17.dev123"),
("package-20000101.zip", "package", "20000101"),
("flup-123-1.0.3.dev-20110405.tar.gz", "flup-123", "1.0.3.dev-20110405"),
("package-123-1.0.0-alpha.1.zip", "package-123", "1.0.0-alpha.1"),
("package-123-1.3.7+build.11.e0f985a.zip", "package-123", "1.3.7+build.11.e0f985a"),
("package-123-v1.8.1.301.ga0df26f.zip", "package-123", "v1.8.1.301.ga0df26f"),
("package-123-2013.02.17.dev123.zip", "package-123", "2013.02.17.dev123"),
("package-123-20000101.zip", "package-123", "20000101"),
("package.zip", "package", ""),
]
@pytest.mark.parametrize(("filename", "pkgname", "version"), files)