Get rid of "pypi" prefix from the config values

Now there are two possible sources to read metadata from,
one of them entirely local without any involvement of PyPI.
Change the values accordingly.
This commit is contained in:
Karolina Surma
2025-07-23 10:40:36 +02:00
committed by Karolina Surma
parent 40b55ee132
commit f1cc06e490
17 changed files with 81 additions and 81 deletions
+4 -4
View File
@@ -140,9 +140,9 @@ Configuration data is stored in a TOML file.
| Field | Description | Type |
| -------- | -------- | -------- |
| pypi_name | package name as stored in PyPI | string |
| name | package canonical name | string |
| python_name | pypi_name prepended with `python-` and alternative Python version, if `python_alt_version` is defined| string |
| pypi_version | package version string as on PyPI | string
| version | package version string | string
| summary | short package summary | string |
| license | license name | string |
| url | project URL | string |
@@ -163,8 +163,8 @@ Configuration data is stored in a TOML file.
license = "MIT"
archful = false
summary = "A simple Python 3 library for Notion Home Monitoring"
pypi_version = "2024.3.1"
pypi_name = "aionotion"
version = "2024.3.1"
name = "aionotion"
python_name = "python-aionotion"
url = "https://github.com/bachya/aionotion"
source = "PyPI"
+17 -17
View File
@@ -103,11 +103,11 @@ def convert_version_to_rpm_scheme(version: str) -> str:
return str(RpmVersion(version))
def same_as_rpm(pypi_version: str) -> bool:
return pypi_version == convert_version_to_rpm_scheme(pypi_version)
def same_as_rpm(version: str) -> bool:
return version == convert_version_to_rpm_scheme(version)
def archive_basename(config: ConfigFile, pypi_version: str) -> str:
def archive_basename(config: ConfigFile, version: str) -> str:
"""Return the archive basename.
The filename has been standardized in PEP 625, but many projects out there
@@ -124,7 +124,7 @@ def archive_basename(config: ConfigFile, pypi_version: str) -> str:
# Second, split paths and keep only the last part of it
filename = filename.split("/")[-1]
# Last, get rid of the version string and the delimiter "-"
return filename.replace("-" + pypi_version, "")
return filename.replace("-" + version, "")
def is_zip(config: ConfigFile) -> bool:
@@ -150,15 +150,15 @@ def source(config: ConfigFile) -> str:
"""
detected_source = config.get_string("source")
if detected_source == "PyPI":
pypi_version = config.get_string("pypi_version")
version_str = pypi_version_or_macro(pypi_version)
basename = archive_basename(config, pypi_version)
version = config.get_string("version")
version_str = python_version_or_macro(version)
basename = archive_basename(config, version)
source_macro_args = basename
if is_zip(config):
source_macro_args += f" {version_str} zip"
else:
if version_str == pypi_version:
if version_str == version:
source_macro_args += f" {version_str}"
return "%{pypi_source " + source_macro_args + "}"
elif detected_source == "local":
@@ -167,10 +167,10 @@ def source(config: ConfigFile) -> str:
raise NotImplementedError("pyp2spec can deal with `PyPI` and `local` sources")
def pypi_version_or_macro(pypi_version: str) -> str:
if same_as_rpm(pypi_version):
def python_version_or_macro(version: str) -> str:
if same_as_rpm(version):
return "%{version}"
return pypi_version
return version
def fill_in_template(config: ConfigFile, declarative_buildsystem: bool) -> str:
@@ -181,30 +181,30 @@ def fill_in_template(config: ConfigFile, declarative_buildsystem: bool) -> str:
license, license_notice = get_license_string(config)
pypi_version = config.get_string("pypi_version")
version = config.get_string("version")
result = spec_template.render(
additional_build_requires=list_additional_build_requires(config),
archful=config.get_bool("archful"),
archive_name=archive_basename(config, pypi_version),
archive_name=archive_basename(config, version),
automode=config.get_bool("automode"),
compat=config.get_string("compat"),
compat_name=create_compat_name(config.get_string("pypi_name"), config.get_string("compat")),
compat_name=create_compat_name(config.get_string("name"), config.get_string("compat")),
declarative_buildsystem=declarative_buildsystem,
extras=",".join(config.get_list("extras")),
license=license,
license_notice=license_notice,
mandate_license=config.get_bool("license_files_present"),
name=config.get_string("pypi_name"),
name=config.get_string("name"),
python_compat_name=create_compat_name(config.get_string("python_name"), config.get_string("compat")),
pypi_version=pypi_version_or_macro(pypi_version),
pypi_version=python_version_or_macro(version),
python_alt_version=config.get_string("python_alt_version"),
source=source(config),
summary=config.get_string("summary"),
test_top_level=config.get_bool("test_top_level"),
python3_pkgversion=python3_pkgversion_or_3(config),
url=config.get_string("url"),
version=convert_version_to_rpm_scheme(pypi_version),
version=convert_version_to_rpm_scheme(version),
)
return result
+6 -6
View File
@@ -20,8 +20,8 @@ from pyp2spec.local_loaders import load_dist_data_from_dir
@dataclass
class PackageInfo:
pypi_name: str
pypi_version: str
name: str
version: str
summary: str
url: str
extras: list
@@ -47,8 +47,8 @@ def prepare_package_info(data: RawMetadata | dict) -> PackageInfo:
if (not homepage and (homepage := data.get("package_url", ""))):
project_urls["home_page"] = homepage
return PackageInfo(
pypi_name=normalize_name(data.get("name", "")),
pypi_version=data.get("version", ""),
name=normalize_name(data.get("name", "")),
version=data.get("version", ""),
summary=get_summary_or_placeholder(data.get("summary", "")),
url=resolve_url(project_urls),
extras=get_extras(data.get("provides_extra", []), data.get("requires_dist", [])),
@@ -121,14 +121,14 @@ def create_config_contents(
pkg_info = create_package_from_source(package, version, compat, path, session)
python_alt_version = options.get("python_alt_version")
pkg_info.python_name = prepend_name_with_python(pkg_info.pypi_name, python_alt_version)
pkg_info.python_name = prepend_name_with_python(pkg_info.name, python_alt_version)
if compat is not None:
inform(f"Creating a compat package for version: '{compat}'")
pkg_info.compat = compat
if version is None:
inform(f"No version specified, assuming the version found: '{pkg_info.pypi_version}'")
inform(f"No version specified, assuming the version found: '{pkg_info.version}'")
if pkg_info.archful:
caution("Package contains compiled extensions - you may need to specify additional build requirements")
+6 -6
View File
@@ -73,15 +73,15 @@ def test_default_generated_specfile(file_regression, config_dir, conf, db):
@pytest.mark.parametrize(
("pypi_version", "rpm_version"), [
("version", "rpm_version"), [
("1.1.0", "1.1.0"),
("1!0.2.13", "1:0.2.13"),
("0.0.2-beta1", "0.0.2~b1"),
("0.5.40-0", "0.5.40^post0"),
]
)
def test_pypi_version_is_converted_to_rpm(pypi_version, rpm_version):
assert conf2spec.convert_version_to_rpm_scheme(pypi_version) == rpm_version
def test_version_is_converted_to_rpm(version, rpm_version):
assert conf2spec.convert_version_to_rpm_scheme(version) == rpm_version
@pytest.mark.parametrize(
@@ -144,7 +144,7 @@ def test_license_strings():
]
)
def test_source_pypi(version, extension, expected):
fake_config_data = {"pypi_name": "foo", "archive_name": f"foo-{version}.{extension}", "pypi_version": version, "source": "PyPI"}
fake_config_data = {"pypi_name": "foo", "archive_name": f"foo-{version}.{extension}", "version": version, "source": "PyPI"}
fake_config = conf2spec.ConfigFile(fake_config_data)
assert conf2spec.source(fake_config) == expected
@@ -169,5 +169,5 @@ def test_source_local(archive_name, expected):
("0.0.2-beta1", "0.0.2-beta1"),
]
)
def test_pypi_version_or_macro(version, expected):
assert conf2spec.pypi_version_or_macro(version) == expected
def test_python_version_or_macro(version, expected):
assert conf2spec.python_version_or_macro(version) == expected
+2 -2
View File
@@ -1,5 +1,5 @@
pypi_name = "aionotion"
pypi_version = "2.0.3"
name = "aionotion"
version = "2.0.3"
python_name = "python-aionotion"
summary = "A simple Python 3 library for Notion Home Monitoring"
license = "MIT"
@@ -1,5 +1,5 @@
pypi_name = "markdown-it-py"
pypi_version = "1.1.0"
name = "markdown-it-py"
version = "1.1.0"
python_name = "python-markdown-it-py"
summary = "Python port of markdown-it"
license = "MIT"
@@ -1,6 +1,6 @@
summary = "Python documentation generator"
pypi_version = "8.1.3"
pypi_name = "sphinx"
version = "8.1.3"
name = "sphinx"
python_name = "python-sphinx"
url = "https://www.sphinx-doc.org/"
source = "PyPI"
@@ -1,7 +1,7 @@
summary = "A simple Python 3 library for Notion Home Monitoring"
license = "MIT"
pypi_name = "aionotion"
pypi_version = "2.0.3"
name = "aionotion"
version = "2.0.3"
python_name = "python-aionotion"
url = "https://github.com/bachya/aionotion"
source = "PyPI"
+2 -2
View File
@@ -1,7 +1,7 @@
summary = "Composable command line interface toolkit"
license = "BSD-3-Clause"
pypi_name = "click"
pypi_version = "8.1.7"
name = "click"
version = "8.1.7"
python_name = "python-click"
url = "https://github.com/pallets/click/"
source = "PyPI"
@@ -5,8 +5,8 @@ extras = [
]
license = "MIT AND MIT-0"
license_files_present = true
pypi_name = "local-test"
pypi_version = "0.12.2"
name = "local-test"
version = "0.12.2"
python_name = "python-local-test"
source = "local"
summary = "Test package"
+2 -2
View File
@@ -1,8 +1,8 @@
archful = true
summary = "Fundamental package for array computing in Python"
pypi_version = "1.25.2"
version = "1.25.2"
license = "BSD-3-Clause"
pypi_name = "numpy"
name = "numpy"
python_name = "python-numpy"
url = "https://github.com/numpy/numpy"
source = "PyPI"
+2 -2
View File
@@ -5,8 +5,8 @@ extras = [
]
license = "MIT-0"
license_files_present = true
pypi_name = "pello"
pypi_version = "1.0.4"
name = "pello"
version = "1.0.4"
python_name = "python-pello"
source = "PyPI"
summary = "An example Python Hello World package"
@@ -6,8 +6,8 @@ extras = [
]
license = "MIT"
license_files_present = true
pypi_name = "pytest"
pypi_version = "7.2.1"
name = "pytest"
version = "7.2.1"
python_name = "python-pytest"
source = "PyPI"
summary = "pytest: simple powerful testing with Python"
@@ -6,8 +6,8 @@ extras = [
]
license = "MIT"
license_files_present = true
pypi_name = "pytest"
pypi_version = "7.4.4"
name = "pytest"
version = "7.4.4"
python_name = "python-pytest"
source = "PyPI"
summary = "pytest: simple powerful testing with Python"
@@ -9,8 +9,8 @@ extras = [
]
license = "MIT"
license_files_present = true
pypi_name = "urllib3"
pypi_version = "2.3.0"
name = "urllib3"
version = "2.3.0"
python_name = "python-urllib3"
source = "PyPI"
summary = "HTTP library with thread-safe connection pooling, file post, and more."
@@ -1,9 +1,9 @@
python_alt_version = "3.9"
archful = false
summary = "An example Python Hello World package"
pypi_version = "1.0.4"
version = "1.0.4"
license = "MIT-0"
pypi_name = "pello"
name = "pello"
python_name = "python3.9-pello"
url = "https://github.com/fedora-python/Pello"
source = "PyPI"
+24 -24
View File
@@ -208,12 +208,12 @@ def test_summary_is_generated_if_upstream_data_is_multiline():
assert pkg.summary == "..."
def test_capitalized_underscored_pypi_name_is_normalized():
def test_capitalized_underscored_name_is_normalized():
fake_pkg_data = {
"name": "Awesome_TestPkg",
}
pkg = prepare_package_info(fake_pkg_data)
assert pkg.pypi_name == "awesome-testpkg"
assert pkg.name == "awesome-testpkg"
@pytest.mark.parametrize(
@@ -247,12 +247,12 @@ def test_prepare_package_info_pypi_source():
"maintainer": "John Doe",
}, "releases": [],}
result = prepare_package_info(data["info"])
assert result.pypi_name == "example"
assert result.name == "example"
assert result.summary == "A sample project"
assert result.license_files_present is True
assert result.license == "MIT"
assert result.extras == []
assert result.pypi_version == "1.0.0"
assert result.version == "1.0.0"
assert result.url == "https://example.com"
@@ -270,12 +270,12 @@ def test_prepare_package_info_core_metadata():
"metadata_version": "2.1",
}
result = prepare_package_info(data)
assert result.pypi_name == "example"
assert result.name == "example"
assert result.summary == "A sample project"
assert result.license_files_present is True
assert result.license == "MIT"
assert result.extras == []
assert result.pypi_version == "1.0.0"
assert result.version == "1.0.0"
assert result.url == "https://example.com"
@@ -284,12 +284,12 @@ def test_prepare_package_info_missing_keys():
"name": "foo",
}
result = prepare_package_info(data)
assert result.pypi_name == "foo"
assert result.name == "foo"
assert result.summary == "..."
assert result.license_files_present is False
assert result.license is None
assert result.extras == []
assert result.pypi_version == ""
assert result.version == ""
assert result.url == "..."
@@ -299,12 +299,12 @@ def test_prepare_package_info_only_package_url():
"package_url": "https://example.com",
}
result = prepare_package_info(data)
assert result.pypi_name == "foo"
assert result.name == "foo"
assert result.summary == "..."
assert result.license_files_present is False
assert result.license is None
assert result.extras == []
assert result.pypi_version == ""
assert result.version == ""
assert result.url == "https://example.com"
@@ -314,12 +314,12 @@ def test_prepare_package_info_only_project_url():
"project_url": "https://example.com",
}
result = prepare_package_info(data)
assert result.pypi_name == "foo"
assert result.name == "foo"
assert result.summary == "..."
assert result.license_files_present is False
assert result.license is None
assert result.extras == []
assert result.pypi_version == ""
assert result.version == ""
assert result.url == "https://example.com"
@@ -331,12 +331,12 @@ def test_prepare_package_info_project_urls_precedence():
"project_urls": {"Homepage": "https://example3.com"},
}
result = prepare_package_info(data)
assert result.pypi_name == "foo"
assert result.name == "foo"
assert result.summary == "..."
assert result.license_files_present is False
assert result.license is None
assert result.extras == []
assert result.pypi_version == ""
assert result.version == ""
assert result.url == "https://example3.com"
@@ -348,12 +348,12 @@ def test_prepare_package_info_home_page_precedence():
"home_page": "https://example3.com",
}
result = prepare_package_info(data)
assert result.pypi_name == "foo"
assert result.name == "foo"
assert result.summary == "..."
assert result.license_files_present is False
assert result.license is None
assert result.extras == []
assert result.pypi_version == ""
assert result.version == ""
assert result.url == "https://example3.com"
@@ -364,12 +364,12 @@ def test_prepare_package_info_project_url_precedence():
"package_url": "https://example2.com",
}
result = prepare_package_info(data)
assert result.pypi_name == "foo"
assert result.name == "foo"
assert result.summary == "..."
assert result.license_files_present is False
assert result.license is None
assert result.extras == []
assert result.pypi_version == ""
assert result.version == ""
assert result.url == "https://example1.com"
@@ -382,12 +382,12 @@ def test_prepare_package_info_project_url_precedence_with_nulls():
"package_url": "https://example1.com",
}
result = prepare_package_info(data)
assert result.pypi_name == "foo"
assert result.name == "foo"
assert result.summary == "..."
assert result.license_files_present is False
assert result.license is None
assert result.extras == []
assert result.pypi_version == ""
assert result.version == ""
assert result.url == "https://example1.com"
@@ -448,12 +448,12 @@ def test_gather_package_info_core_metadata():
"filename": "example-7.0-cp34-abi3-manylinux1_x86_64.whl"
}]}
result = gather_package_info(data, pypi)
assert result.pypi_name == "example"
assert result.name == "example"
assert result.summary == "A sample project"
assert result.license_files_present is True
assert result.license == "MIT"
assert result.extras == []
assert result.pypi_version == "1.0.0"
assert result.version == "1.0.0"
assert result.url == "https://example.com"
@@ -497,8 +497,8 @@ def test_create_package_from_pypi():
def test_create_package_from_dir():
pkg = create_package_from_dir("local_test", "tests/local/")
assert pkg.pypi_name == "local-test"
assert pkg.pypi_version == "0.12.2"
assert pkg.name == "local-test"
assert pkg.version == "0.12.2"
assert pkg.source == "local"
assert pkg.archful is False
assert pkg.archive_name.split("/")[-1] == "local_test-0.12.2.tar.gz"