Compare commits
12 Commits
| Author | SHA256 | Date | |
|---|---|---|---|
| f3aff5d3d6 | |||
| 75e6f9ec33 | |||
| 801a037b63 | |||
| d9e7c758c1 | |||
| de564ccb8f | |||
| 8c7c14b217 | |||
| 5afa4ad643 | |||
| 278d105ff3 | |||
| af30307b3d | |||
| a69038991c | |||
| 44eaca2d21 | |||
| ccab063ddf |
3
binary-1.0.2-py3-none-any.whl
Normal file
3
binary-1.0.2-py3-none-any.whl
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:e79bba085cddfb9d3beefe138464506d2ef0c0f5f68c69e27fc9f82d4ac85470
|
||||||
|
size 9568
|
||||||
3
certifi-2025.11.12-py3-none-any.whl
Normal file
3
certifi-2025.11.12-py3-none-any.whl
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b
|
||||||
|
size 159438
|
||||||
3
charset_normalizer-3.4.4-py3-none-any.whl
Normal file
3
charset_normalizer-3.4.4-py3-none-any.whl
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f
|
||||||
|
size 53402
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
From df295583784427214324b974c75901da12931ec1 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Daniel Garcia Moreno <daniel.garcia@suse.com>
|
|
||||||
Date: Thu, 26 Jun 2025 11:32:54 +0200
|
|
||||||
Subject: [PATCH] Fix test_self with click >= 8.2.0
|
|
||||||
|
|
||||||
https://click.palletsprojects.com/en/stable/changes/#version-8-2-0
|
|
||||||
---
|
|
||||||
tests/cli/self/test_self.py | 8 +++++++-
|
|
||||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/tests/cli/self/test_self.py b/tests/cli/self/test_self.py
|
|
||||||
index cd1a4aed1..f727b87f4 100644
|
|
||||||
--- a/tests/cli/self/test_self.py
|
|
||||||
+++ b/tests/cli/self/test_self.py
|
|
||||||
@@ -1,7 +1,13 @@
|
|
||||||
import os
|
|
||||||
+import importlib
|
|
||||||
|
|
||||||
|
|
||||||
def test(hatch):
|
|
||||||
result = hatch(os.environ['PYAPP_COMMAND_NAME'])
|
|
||||||
+ exit_code = 2
|
|
||||||
|
|
||||||
- assert result.exit_code == 0, result.output
|
|
||||||
+ click_version = importlib.metadata.version('click')
|
|
||||||
+ if click_version <= '8.1.8':
|
|
||||||
+ exit_code = 0
|
|
||||||
+
|
|
||||||
+ assert result.exit_code == exit_code, result.output
|
|
||||||
3
click-8.3.1-py3-none-any.whl
Normal file
3
click-8.3.1-py3-none-any.whl
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6
|
||||||
|
size 108274
|
||||||
@@ -1,924 +0,0 @@
|
|||||||
From f8a2eaa2e0ce80a931837539d8f565ceeab75961 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ofek Lev <ofekmeister@gmail.com>
|
|
||||||
Date: Sat, 9 Nov 2024 11:35:16 -0500
|
|
||||||
Subject: [PATCH] Bump `packaging` to 24.2 (#1788)
|
|
||||||
|
|
||||||
---
|
|
||||||
hatch.toml | 4 -
|
|
||||||
pyproject.toml | 2 +-
|
|
||||||
src/hatch/template/default.py | 2 +-
|
|
||||||
tests/backend/licenses/__init__.py | 0
|
|
||||||
tests/backend/licenses/test_parse.py | 56 --
|
|
||||||
tests/backend/licenses/test_supported.py | 31 -
|
|
||||||
tests/backend/metadata/test_core.py | 2 +-
|
|
||||||
15 files changed, 11 insertions(+), 974 deletions(-)
|
|
||||||
delete mode 100644 tests/backend/licenses/__init__.py
|
|
||||||
delete mode 100644 tests/backend/licenses/test_parse.py
|
|
||||||
delete mode 100644 tests/backend/licenses/test_supported.py
|
|
||||||
|
|
||||||
Index: hatch-hatch-v1.14.0/hatch.toml
|
|
||||||
===================================================================
|
|
||||||
--- hatch-hatch-v1.14.0.orig/hatch.toml
|
|
||||||
+++ hatch-hatch-v1.14.0/hatch.toml
|
|
||||||
@@ -114,11 +114,7 @@ update-hatch = [
|
|
||||||
"update-distributions",
|
|
||||||
"update-ruff",
|
|
||||||
]
|
|
||||||
-update-hatchling = [
|
|
||||||
- "update-licenses",
|
|
||||||
-]
|
|
||||||
update-distributions = "python scripts/update_distributions.py"
|
|
||||||
-update-licenses = "python backend/scripts/update_licenses.py"
|
|
||||||
update-ruff = [
|
|
||||||
"{env:HATCH_UV} pip install --upgrade ruff",
|
|
||||||
"python scripts/update_ruff.py",
|
|
||||||
Index: hatch-hatch-v1.14.0/pyproject.toml
|
|
||||||
===================================================================
|
|
||||||
--- hatch-hatch-v1.14.0.orig/pyproject.toml
|
|
||||||
+++ hatch-hatch-v1.14.0/pyproject.toml
|
|
||||||
@@ -44,7 +44,7 @@ dependencies = [
|
|
||||||
"httpx>=0.22.0",
|
|
||||||
"hyperlink>=21.0.0",
|
|
||||||
"keyring>=23.5.0",
|
|
||||||
- "packaging>=23.2",
|
|
||||||
+ "packaging>=24.2",
|
|
||||||
"pexpect~=4.8",
|
|
||||||
"platformdirs>=2.5.0",
|
|
||||||
"rich>=11.2.0",
|
|
||||||
Index: hatch-hatch-v1.14.0/src/hatch/template/default.py
|
|
||||||
===================================================================
|
|
||||||
--- hatch-hatch-v1.14.0.orig/src/hatch/template/default.py
|
|
||||||
+++ hatch-hatch-v1.14.0/src/hatch/template/default.py
|
|
||||||
@@ -38,7 +38,7 @@ class DefaultTemplate(TemplateInterface)
|
|
||||||
license_file_name = f'{license_id}.txt'
|
|
||||||
cached_license_path = cached_licenses_dir / license_file_name
|
|
||||||
if not cached_license_path.is_file():
|
|
||||||
- from hatchling.licenses.supported import VERSION
|
|
||||||
+ from packaging.licenses._spdx import VERSION # noqa: PLC2701
|
|
||||||
|
|
||||||
url = f'https://raw.githubusercontent.com/spdx/license-list-data/v{VERSION}/text/{license_file_name}'
|
|
||||||
for _ in range(5):
|
|
||||||
Index: hatch-hatch-v1.14.0/tests/backend/licenses/test_parse.py
|
|
||||||
===================================================================
|
|
||||||
--- hatch-hatch-v1.14.0.orig/tests/backend/licenses/test_parse.py
|
|
||||||
+++ /dev/null
|
|
||||||
@@ -1,56 +0,0 @@
|
|
||||||
-import re
|
|
||||||
-
|
|
||||||
-import pytest
|
|
||||||
-
|
|
||||||
-from hatchling.licenses.parse import normalize_license_expression
|
|
||||||
-
|
|
||||||
-
|
|
||||||
-@pytest.mark.parametrize(
|
|
||||||
- 'expression',
|
|
||||||
- [
|
|
||||||
- 'or',
|
|
||||||
- 'and',
|
|
||||||
- 'with',
|
|
||||||
- 'mit or',
|
|
||||||
- 'mit and',
|
|
||||||
- 'mit with',
|
|
||||||
- 'or mit',
|
|
||||||
- 'and mit',
|
|
||||||
- 'with mit',
|
|
||||||
- '(mit',
|
|
||||||
- 'mit)',
|
|
||||||
- 'mit or or apache-2.0',
|
|
||||||
- 'mit or apache-2.0 (bsd-3-clause and MPL-2.0)',
|
|
||||||
- ],
|
|
||||||
-)
|
|
||||||
-def test_syntax_errors(expression):
|
|
||||||
- with pytest.raises(ValueError, match=re.escape(f'invalid license expression: {expression}')):
|
|
||||||
- normalize_license_expression(expression)
|
|
||||||
-
|
|
||||||
-
|
|
||||||
-def test_unknown_license():
|
|
||||||
- with pytest.raises(ValueError, match='unknown license: foo'):
|
|
||||||
- normalize_license_expression('mit or foo')
|
|
||||||
-
|
|
||||||
-
|
|
||||||
-def test_unknown_license_exception():
|
|
||||||
- with pytest.raises(ValueError, match='unknown license exception: foo'):
|
|
||||||
- normalize_license_expression('mit with foo')
|
|
||||||
-
|
|
||||||
-
|
|
||||||
-@pytest.mark.parametrize(
|
|
||||||
- ('raw', 'normalized'),
|
|
||||||
- [
|
|
||||||
- ('mIt', 'MIT'),
|
|
||||||
- ('mit or apache-2.0', 'MIT OR Apache-2.0'),
|
|
||||||
- ('mit and apache-2.0', 'MIT AND Apache-2.0'),
|
|
||||||
- ('gpl-2.0-or-later with bison-exception-2.2', 'GPL-2.0-or-later WITH Bison-exception-2.2'),
|
|
||||||
- ('mit or apache-2.0 and (bsd-3-clause or mpl-2.0)', 'MIT OR Apache-2.0 AND (BSD-3-Clause OR MPL-2.0)'),
|
|
||||||
- ('mit and (apache-2.0+ or mpl-2.0+)', 'MIT AND (Apache-2.0+ OR MPL-2.0+)'),
|
|
||||||
- # Valid non-SPDX values
|
|
||||||
- ('licenseref-public-domain', 'LicenseRef-Public-Domain'),
|
|
||||||
- ('licenseref-proprietary', 'LicenseRef-Proprietary'),
|
|
||||||
- ],
|
|
||||||
-)
|
|
||||||
-def test_normalization(raw, normalized):
|
|
||||||
- assert normalize_license_expression(raw) == normalized
|
|
||||||
Index: hatch-hatch-v1.14.0/tests/backend/licenses/test_supported.py
|
|
||||||
===================================================================
|
|
||||||
--- hatch-hatch-v1.14.0.orig/tests/backend/licenses/test_supported.py
|
|
||||||
+++ /dev/null
|
|
||||||
@@ -1,31 +0,0 @@
|
|
||||||
-from hatchling.licenses.supported import EXCEPTIONS, LICENSES
|
|
||||||
-
|
|
||||||
-
|
|
||||||
-def test_licenses():
|
|
||||||
- assert isinstance(LICENSES, dict)
|
|
||||||
- assert list(LICENSES) == sorted(LICENSES)
|
|
||||||
-
|
|
||||||
- for name, data in LICENSES.items():
|
|
||||||
- assert isinstance(data, dict)
|
|
||||||
-
|
|
||||||
- assert 'id' in data
|
|
||||||
- assert isinstance(data['id'], str)
|
|
||||||
- assert data['id'].lower() == name
|
|
||||||
-
|
|
||||||
- assert 'deprecated' in data
|
|
||||||
- assert isinstance(data['deprecated'], bool)
|
|
||||||
-
|
|
||||||
-
|
|
||||||
-def test_exceptions():
|
|
||||||
- assert isinstance(EXCEPTIONS, dict)
|
|
||||||
- assert list(EXCEPTIONS) == sorted(EXCEPTIONS)
|
|
||||||
-
|
|
||||||
- for name, data in EXCEPTIONS.items():
|
|
||||||
- assert isinstance(data, dict)
|
|
||||||
-
|
|
||||||
- assert 'id' in data
|
|
||||||
- assert isinstance(data['id'], str)
|
|
||||||
- assert data['id'].lower() == name
|
|
||||||
-
|
|
||||||
- assert 'deprecated' in data
|
|
||||||
- assert isinstance(data['deprecated'], bool)
|
|
||||||
Index: hatch-hatch-v1.14.0/tests/backend/metadata/test_core.py
|
|
||||||
===================================================================
|
|
||||||
--- hatch-hatch-v1.14.0.orig/tests/backend/metadata/test_core.py
|
|
||||||
+++ hatch-hatch-v1.14.0/tests/backend/metadata/test_core.py
|
|
||||||
@@ -558,7 +558,7 @@ class TestLicense:
|
|
||||||
def test_invalid_expression(self, isolation):
|
|
||||||
metadata = ProjectMetadata(str(isolation), None, {'project': {'license': 'mit or foo'}})
|
|
||||||
|
|
||||||
- with pytest.raises(ValueError, match='Error parsing field `project.license` - unknown license: foo'):
|
|
||||||
+ with pytest.raises(ValueError, match="Error parsing field `project.license` - Unknown license: 'foo'"):
|
|
||||||
_ = metadata.core.license_expression
|
|
||||||
|
|
||||||
def test_multiple_options(self, isolation):
|
|
||||||
@@ -621,54 +621,16 @@ class TestLicenseFiles:
|
|
||||||
):
|
|
||||||
_ = metadata.core.license_files
|
|
||||||
|
|
||||||
- def test_not_table(self, isolation):
|
|
||||||
+ def test_not_array(self, isolation):
|
|
||||||
metadata = ProjectMetadata(str(isolation), None, {'project': {'license-files': 9000}})
|
|
||||||
|
|
||||||
- with pytest.raises(TypeError, match='Field `project.license-files` must be a table'):
|
|
||||||
- _ = metadata.core.license_files
|
|
||||||
-
|
|
||||||
- def test_multiple_options(self, isolation):
|
|
||||||
- metadata = ProjectMetadata(str(isolation), None, {'project': {'license-files': {'paths': [], 'globs': []}}})
|
|
||||||
-
|
|
||||||
- with pytest.raises(
|
|
||||||
- ValueError, match='Cannot specify both `paths` and `globs` in the `project.license-files` table'
|
|
||||||
- ):
|
|
||||||
- _ = metadata.core.license_files
|
|
||||||
-
|
|
||||||
- def test_no_option(self, isolation):
|
|
||||||
- metadata = ProjectMetadata(str(isolation), None, {'project': {'license-files': {}}})
|
|
||||||
-
|
|
||||||
- with pytest.raises(
|
|
||||||
- ValueError, match='Must specify either `paths` or `globs` in the `project.license-files` table if defined'
|
|
||||||
- ):
|
|
||||||
- _ = metadata.core.license_files
|
|
||||||
-
|
|
||||||
- def test_paths_not_array(self, isolation):
|
|
||||||
- metadata = ProjectMetadata(str(isolation), None, {'project': {'license-files': {'paths': 9000}}})
|
|
||||||
-
|
|
||||||
- with pytest.raises(TypeError, match='Field `paths` in the `project.license-files` table must be an array'):
|
|
||||||
+ with pytest.raises(TypeError, match='Field `project.license-files` must be an array'):
|
|
||||||
_ = metadata.core.license_files
|
|
||||||
|
|
||||||
- def test_paths_entry_not_string(self, isolation):
|
|
||||||
- metadata = ProjectMetadata(str(isolation), None, {'project': {'license-files': {'paths': [9000]}}})
|
|
||||||
-
|
|
||||||
- with pytest.raises(
|
|
||||||
- TypeError, match='Entry #1 in field `paths` in the `project.license-files` table must be a string'
|
|
||||||
- ):
|
|
||||||
- _ = metadata.core.license_files
|
|
||||||
-
|
|
||||||
- def test_globs_not_array(self, isolation):
|
|
||||||
- metadata = ProjectMetadata(str(isolation), None, {'project': {'license-files': {'globs': 9000}}})
|
|
||||||
-
|
|
||||||
- with pytest.raises(TypeError, match='Field `globs` in the `project.license-files` table must be an array'):
|
|
||||||
- _ = metadata.core.license_files
|
|
||||||
-
|
|
||||||
- def test_globs_entry_not_string(self, isolation):
|
|
||||||
- metadata = ProjectMetadata(str(isolation), None, {'project': {'license-files': {'globs': [9000]}}})
|
|
||||||
+ def test_entry_not_string(self, isolation):
|
|
||||||
+ metadata = ProjectMetadata(str(isolation), None, {'project': {'license-files': [9000]}})
|
|
||||||
|
|
||||||
- with pytest.raises(
|
|
||||||
- TypeError, match='Entry #1 in field `globs` in the `project.license-files` table must be a string'
|
|
||||||
- ):
|
|
||||||
+ with pytest.raises(TypeError, match='Entry #1 of field `project.license-files` must be a string'):
|
|
||||||
_ = metadata.core.license_files
|
|
||||||
|
|
||||||
def test_default_globs_no_licenses(self, isolation):
|
|
||||||
@@ -693,7 +655,7 @@ class TestLicenseFiles:
|
|
||||||
assert metadata.core.license_files == sorted(expected)
|
|
||||||
|
|
||||||
def test_globs_with_licenses(self, temp_dir):
|
|
||||||
- metadata = ProjectMetadata(str(temp_dir), None, {'project': {'license-files': {'globs': ['LICENSES/*']}}})
|
|
||||||
+ metadata = ProjectMetadata(str(temp_dir), None, {'project': {'license-files': ['LICENSES/*']}})
|
|
||||||
|
|
||||||
licenses_dir = temp_dir / 'LICENSES'
|
|
||||||
licenses_dir.mkdir()
|
|
||||||
@@ -709,7 +671,7 @@ class TestLicenseFiles:
|
|
||||||
metadata = ProjectMetadata(
|
|
||||||
str(temp_dir),
|
|
||||||
None,
|
|
||||||
- {'project': {'license-files': {'paths': ['LICENSES/Apache-2.0.txt', 'LICENSES/MIT.txt', 'COPYING']}}},
|
|
||||||
+ {'project': {'license-files': ['LICENSES/Apache-2.0.txt', 'LICENSES/MIT.txt', 'COPYING']}},
|
|
||||||
)
|
|
||||||
|
|
||||||
licenses_dir = temp_dir / 'LICENSES'
|
|
||||||
@@ -722,20 +684,6 @@ class TestLicenseFiles:
|
|
||||||
|
|
||||||
assert metadata.core.license_files == ['COPYING', 'LICENSES/Apache-2.0.txt', 'LICENSES/MIT.txt']
|
|
||||||
|
|
||||||
- def test_paths_missing_license(self, temp_dir):
|
|
||||||
- metadata = ProjectMetadata(
|
|
||||||
- str(temp_dir),
|
|
||||||
- None,
|
|
||||||
- {'project': {'license-files': {'paths': ['LICENSES/MIT.txt']}}},
|
|
||||||
- )
|
|
||||||
-
|
|
||||||
- licenses_dir = temp_dir / 'LICENSES'
|
|
||||||
- licenses_dir.mkdir()
|
|
||||||
- (licenses_dir / 'Apache-2.0.txt').touch()
|
|
||||||
-
|
|
||||||
- with pytest.raises(OSError, match='License file does not exist: LICENSES/MIT.txt'):
|
|
||||||
- _ = metadata.core.license_files
|
|
||||||
-
|
|
||||||
|
|
||||||
class TestAuthors:
|
|
||||||
def test_dynamic(self, isolation):
|
|
||||||
@@ -1661,7 +1609,7 @@ class TestMetadataConversion:
|
|
||||||
raw_metadata = {
|
|
||||||
'name': 'My.App',
|
|
||||||
'version': '0.0.1',
|
|
||||||
- 'license-files': {'paths': ['LICENSES/Apache-2.0.txt', 'LICENSES/MIT.txt']},
|
|
||||||
+ 'license-files': ['LICENSES/Apache-2.0.txt', 'LICENSES/MIT.txt'],
|
|
||||||
}
|
|
||||||
metadata = ProjectMetadata(str(temp_dir), None, {'project': raw_metadata})
|
|
||||||
|
|
||||||
Index: hatch-hatch-v1.14.0/tests/backend/builders/test_wheel.py
|
|
||||||
===================================================================
|
|
||||||
--- hatch-hatch-v1.14.0.orig/tests/backend/builders/test_wheel.py
|
|
||||||
+++ hatch-hatch-v1.14.0/tests/backend/builders/test_wheel.py
|
|
||||||
@@ -909,7 +909,7 @@ class TestBuildStandard:
|
|
||||||
(project_path / 'LICENSES' / 'test').mkdir()
|
|
||||||
|
|
||||||
config = {
|
|
||||||
- 'project': {'name': project_name, 'dynamic': ['version'], 'license-files': {'globs': ['LICENSES/*']}},
|
|
||||||
+ 'project': {'name': project_name, 'dynamic': ['version'], 'license-files': ['LICENSES/*']},
|
|
||||||
'tool': {
|
|
||||||
'hatch': {
|
|
||||||
'version': {'path': 'my_app/__about__.py'},
|
|
||||||
Index: hatch-hatch-v1.14.0/tests/backend/metadata/test_spec.py
|
|
||||||
===================================================================
|
|
||||||
--- hatch-hatch-v1.14.0.orig/tests/backend/metadata/test_spec.py
|
|
||||||
+++ hatch-hatch-v1.14.0/tests/backend/metadata/test_spec.py
|
|
||||||
@@ -131,7 +131,7 @@ License-File: LICENSES/MIT.txt
|
|
||||||
assert project_metadata_from_core_metadata(core_metadata) == {
|
|
||||||
'name': 'My.App',
|
|
||||||
'version': '0.1.0',
|
|
||||||
- 'license-files': {'paths': ['LICENSES/Apache-2.0.txt', 'LICENSES/MIT.txt']},
|
|
||||||
+ 'license-files': ['LICENSES/Apache-2.0.txt', 'LICENSES/MIT.txt'],
|
|
||||||
}
|
|
||||||
|
|
||||||
def test_license_expression(self):
|
|
||||||
@@ -419,6 +419,22 @@ class TestCoreMetadataV12:
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
|
|
||||||
+ def test_license_expression(self, constructor, isolation, helpers):
|
|
||||||
+ metadata = ProjectMetadata(
|
|
||||||
+ str(isolation),
|
|
||||||
+ None,
|
|
||||||
+ {'project': {'name': 'My.App', 'version': '0.1.0', 'license': 'mit'}},
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ assert constructor(metadata) == helpers.dedent(
|
|
||||||
+ """
|
|
||||||
+ Metadata-Version: 1.2
|
|
||||||
+ Name: My.App
|
|
||||||
+ Version: 0.1.0
|
|
||||||
+ License: MIT
|
|
||||||
+ """
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
def test_keywords_single(self, constructor, isolation, helpers):
|
|
||||||
metadata = ProjectMetadata(
|
|
||||||
str(isolation), None, {'project': {'name': 'My.App', 'version': '0.1.0', 'keywords': ['foo']}}
|
|
||||||
@@ -762,7 +778,7 @@ class TestCoreMetadataV21:
|
|
||||||
Metadata-Version: 2.1
|
|
||||||
Name: My.App
|
|
||||||
Version: 0.1.0
|
|
||||||
- License-Expression: MIT
|
|
||||||
+ License: MIT
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
|
|
||||||
@@ -961,7 +977,6 @@ class TestCoreMetadataV21:
|
|
||||||
Maintainer-email: foo <bar@domain>
|
|
||||||
License: foo
|
|
||||||
bar
|
|
||||||
- License-File: LICENSE.txt
|
|
||||||
Keywords: bar,foo
|
|
||||||
Classifier: Programming Language :: Python :: 3.9
|
|
||||||
Classifier: Programming Language :: Python :: 3.11
|
|
||||||
@@ -1202,7 +1217,7 @@ class TestCoreMetadataV22:
|
|
||||||
Metadata-Version: 2.2
|
|
||||||
Name: My.App
|
|
||||||
Version: 0.1.0
|
|
||||||
- License-Expression: MIT
|
|
||||||
+ License: MIT
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
|
|
||||||
@@ -1431,7 +1446,6 @@ class TestCoreMetadataV22:
|
|
||||||
Maintainer-email: foo <bar@domain>
|
|
||||||
License: foo
|
|
||||||
bar
|
|
||||||
- License-File: LICENSE.txt
|
|
||||||
Keywords: bar,foo
|
|
||||||
Classifier: Programming Language :: Python :: 3.9
|
|
||||||
Classifier: Programming Language :: Python :: 3.11
|
|
||||||
@@ -1664,7 +1678,7 @@ class TestCoreMetadataV23:
|
|
||||||
metadata = ProjectMetadata(
|
|
||||||
str(isolation),
|
|
||||||
None,
|
|
||||||
- {'project': {'name': 'My.App', 'version': '0.1.0', 'license': 'mit or apache-2.0'}},
|
|
||||||
+ {'project': {'name': 'My.App', 'version': '0.1.0', 'license': 'mit'}},
|
|
||||||
)
|
|
||||||
|
|
||||||
assert constructor(metadata) == helpers.dedent(
|
|
||||||
@@ -1672,6 +1686,445 @@ class TestCoreMetadataV23:
|
|
||||||
Metadata-Version: 2.3
|
|
||||||
Name: My.App
|
|
||||||
Version: 0.1.0
|
|
||||||
+ License: MIT
|
|
||||||
+ """
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ def test_keywords_single(self, constructor, isolation, helpers):
|
|
||||||
+ metadata = ProjectMetadata(
|
|
||||||
+ str(isolation), None, {'project': {'name': 'My.App', 'version': '0.1.0', 'keywords': ['foo']}}
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ assert constructor(metadata) == helpers.dedent(
|
|
||||||
+ """
|
|
||||||
+ Metadata-Version: 2.3
|
|
||||||
+ Name: My.App
|
|
||||||
+ Version: 0.1.0
|
|
||||||
+ Keywords: foo
|
|
||||||
+ """
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ def test_keywords_multiple(self, constructor, isolation, helpers):
|
|
||||||
+ metadata = ProjectMetadata(
|
|
||||||
+ str(isolation), None, {'project': {'name': 'My.App', 'version': '0.1.0', 'keywords': ['foo', 'bar']}}
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ assert constructor(metadata) == helpers.dedent(
|
|
||||||
+ """
|
|
||||||
+ Metadata-Version: 2.3
|
|
||||||
+ Name: My.App
|
|
||||||
+ Version: 0.1.0
|
|
||||||
+ Keywords: bar,foo
|
|
||||||
+ """
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ def test_classifiers(self, constructor, isolation, helpers):
|
|
||||||
+ classifiers = [
|
|
||||||
+ 'Programming Language :: Python :: 3.11',
|
|
||||||
+ 'Programming Language :: Python :: 3.9',
|
|
||||||
+ ]
|
|
||||||
+ metadata = ProjectMetadata(
|
|
||||||
+ str(isolation), None, {'project': {'name': 'My.App', 'version': '0.1.0', 'classifiers': classifiers}}
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ assert constructor(metadata) == helpers.dedent(
|
|
||||||
+ """
|
|
||||||
+ Metadata-Version: 2.3
|
|
||||||
+ Name: My.App
|
|
||||||
+ Version: 0.1.0
|
|
||||||
+ Classifier: Programming Language :: Python :: 3.9
|
|
||||||
+ Classifier: Programming Language :: Python :: 3.11
|
|
||||||
+ """
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ def test_requires_python(self, constructor, isolation, helpers):
|
|
||||||
+ metadata = ProjectMetadata(
|
|
||||||
+ str(isolation), None, {'project': {'name': 'My.App', 'version': '0.1.0', 'requires-python': '>=1,<2'}}
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ assert constructor(metadata) == helpers.dedent(
|
|
||||||
+ """
|
|
||||||
+ Metadata-Version: 2.3
|
|
||||||
+ Name: My.App
|
|
||||||
+ Version: 0.1.0
|
|
||||||
+ Requires-Python: <2,>=1
|
|
||||||
+ """
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ def test_dependencies(self, constructor, isolation, helpers):
|
|
||||||
+ metadata = ProjectMetadata(
|
|
||||||
+ str(isolation),
|
|
||||||
+ None,
|
|
||||||
+ {'project': {'name': 'My.App', 'version': '0.1.0', 'dependencies': ['foo==1', 'bar==5']}},
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ assert constructor(metadata) == helpers.dedent(
|
|
||||||
+ """
|
|
||||||
+ Metadata-Version: 2.3
|
|
||||||
+ Name: My.App
|
|
||||||
+ Version: 0.1.0
|
|
||||||
+ Requires-Dist: bar==5
|
|
||||||
+ Requires-Dist: foo==1
|
|
||||||
+ """
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ def test_optional_dependencies(self, constructor, isolation, helpers):
|
|
||||||
+ metadata = ProjectMetadata(
|
|
||||||
+ str(isolation),
|
|
||||||
+ None,
|
|
||||||
+ {
|
|
||||||
+ 'project': {
|
|
||||||
+ 'name': 'My.App',
|
|
||||||
+ 'version': '0.1.0',
|
|
||||||
+ 'optional-dependencies': {
|
|
||||||
+ 'feature2': ['foo==1; python_version < "3"', 'bar==5'],
|
|
||||||
+ 'feature1': ['foo==1', 'bar==5; python_version < "3"'],
|
|
||||||
+ },
|
|
||||||
+ }
|
|
||||||
+ },
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ assert constructor(metadata) == helpers.dedent(
|
|
||||||
+ """
|
|
||||||
+ Metadata-Version: 2.3
|
|
||||||
+ Name: My.App
|
|
||||||
+ Version: 0.1.0
|
|
||||||
+ Provides-Extra: feature1
|
|
||||||
+ Requires-Dist: bar==5; (python_version < '3') and extra == 'feature1'
|
|
||||||
+ Requires-Dist: foo==1; extra == 'feature1'
|
|
||||||
+ Provides-Extra: feature2
|
|
||||||
+ Requires-Dist: bar==5; extra == 'feature2'
|
|
||||||
+ Requires-Dist: foo==1; (python_version < '3') and extra == 'feature2'
|
|
||||||
+ """
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ def test_extra_runtime_dependencies(self, constructor, isolation, helpers):
|
|
||||||
+ metadata = ProjectMetadata(
|
|
||||||
+ str(isolation),
|
|
||||||
+ None,
|
|
||||||
+ {'project': {'name': 'My.App', 'version': '0.1.0', 'dependencies': ['foo==1', 'bar==5']}},
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ assert constructor(metadata, extra_dependencies=['baz==9']) == helpers.dedent(
|
|
||||||
+ """
|
|
||||||
+ Metadata-Version: 2.3
|
|
||||||
+ Name: My.App
|
|
||||||
+ Version: 0.1.0
|
|
||||||
+ Requires-Dist: bar==5
|
|
||||||
+ Requires-Dist: foo==1
|
|
||||||
+ Requires-Dist: baz==9
|
|
||||||
+ """
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ def test_readme(self, constructor, isolation, helpers):
|
|
||||||
+ metadata = ProjectMetadata(
|
|
||||||
+ str(isolation),
|
|
||||||
+ None,
|
|
||||||
+ {
|
|
||||||
+ 'project': {
|
|
||||||
+ 'name': 'My.App',
|
|
||||||
+ 'version': '0.1.0',
|
|
||||||
+ 'readme': {'content-type': 'text/markdown', 'text': 'test content\n'},
|
|
||||||
+ }
|
|
||||||
+ },
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ assert constructor(metadata) == helpers.dedent(
|
|
||||||
+ """
|
|
||||||
+ Metadata-Version: 2.3
|
|
||||||
+ Name: My.App
|
|
||||||
+ Version: 0.1.0
|
|
||||||
+ Description-Content-Type: text/markdown
|
|
||||||
+
|
|
||||||
+ test content
|
|
||||||
+ """
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ def test_all(self, constructor, temp_dir, helpers):
|
|
||||||
+ metadata = ProjectMetadata(
|
|
||||||
+ str(temp_dir),
|
|
||||||
+ None,
|
|
||||||
+ {
|
|
||||||
+ 'project': {
|
|
||||||
+ 'name': 'My.App',
|
|
||||||
+ 'version': '0.1.0',
|
|
||||||
+ 'description': 'foo',
|
|
||||||
+ 'urls': {'foo': 'bar', 'bar': 'baz'},
|
|
||||||
+ 'authors': [{'email': 'bar@domain', 'name': 'foo'}],
|
|
||||||
+ 'maintainers': [{'email': 'bar@domain', 'name': 'foo'}],
|
|
||||||
+ 'keywords': ['foo', 'bar'],
|
|
||||||
+ 'classifiers': [
|
|
||||||
+ 'Programming Language :: Python :: 3.11',
|
|
||||||
+ 'Programming Language :: Python :: 3.9',
|
|
||||||
+ ],
|
|
||||||
+ 'requires-python': '>=1,<2',
|
|
||||||
+ 'dependencies': ['foo==1', 'bar==5'],
|
|
||||||
+ 'optional-dependencies': {
|
|
||||||
+ 'feature2': ['foo==1; python_version < "3"', 'bar==5'],
|
|
||||||
+ 'feature1': ['foo==1', 'bar==5; python_version < "3"'],
|
|
||||||
+ 'feature3': ['baz @ file:///path/to/project'],
|
|
||||||
+ },
|
|
||||||
+ 'readme': {'content-type': 'text/markdown', 'text': 'test content\n'},
|
|
||||||
+ },
|
|
||||||
+ 'tool': {'hatch': {'metadata': {'allow-direct-references': True}}},
|
|
||||||
+ },
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ licenses_dir = temp_dir / 'LICENSES'
|
|
||||||
+ licenses_dir.mkdir()
|
|
||||||
+ (licenses_dir / 'MIT.txt').touch()
|
|
||||||
+ (licenses_dir / 'Apache-2.0.txt').touch()
|
|
||||||
+
|
|
||||||
+ assert constructor(metadata) == helpers.dedent(
|
|
||||||
+ """
|
|
||||||
+ Metadata-Version: 2.3
|
|
||||||
+ Name: My.App
|
|
||||||
+ Version: 0.1.0
|
|
||||||
+ Summary: foo
|
|
||||||
+ Project-URL: foo, bar
|
|
||||||
+ Project-URL: bar, baz
|
|
||||||
+ Author-email: foo <bar@domain>
|
|
||||||
+ Maintainer-email: foo <bar@domain>
|
|
||||||
+ Keywords: bar,foo
|
|
||||||
+ Classifier: Programming Language :: Python :: 3.9
|
|
||||||
+ Classifier: Programming Language :: Python :: 3.11
|
|
||||||
+ Requires-Python: <2,>=1
|
|
||||||
+ Requires-Dist: bar==5
|
|
||||||
+ Requires-Dist: foo==1
|
|
||||||
+ Provides-Extra: feature1
|
|
||||||
+ Requires-Dist: bar==5; (python_version < '3') and extra == 'feature1'
|
|
||||||
+ Requires-Dist: foo==1; extra == 'feature1'
|
|
||||||
+ Provides-Extra: feature2
|
|
||||||
+ Requires-Dist: bar==5; extra == 'feature2'
|
|
||||||
+ Requires-Dist: foo==1; (python_version < '3') and extra == 'feature2'
|
|
||||||
+ Provides-Extra: feature3
|
|
||||||
+ Requires-Dist: baz@ file:///path/to/project ; extra == 'feature3'
|
|
||||||
+ Description-Content-Type: text/markdown
|
|
||||||
+
|
|
||||||
+ test content
|
|
||||||
+ """
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+@pytest.mark.parametrize('constructor', [get_core_metadata_constructors()['2.4']])
|
|
||||||
+class TestCoreMetadataV24:
|
|
||||||
+ def test_default(self, constructor, isolation, helpers):
|
|
||||||
+ metadata = ProjectMetadata(str(isolation), None, {'project': {'name': 'My.App', 'version': '0.1.0'}})
|
|
||||||
+
|
|
||||||
+ assert constructor(metadata) == helpers.dedent(
|
|
||||||
+ """
|
|
||||||
+ Metadata-Version: 2.4
|
|
||||||
+ Name: My.App
|
|
||||||
+ Version: 0.1.0
|
|
||||||
+ """
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ def test_description(self, constructor, isolation, helpers):
|
|
||||||
+ metadata = ProjectMetadata(
|
|
||||||
+ str(isolation), None, {'project': {'name': 'My.App', 'version': '0.1.0', 'description': 'foo'}}
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ assert constructor(metadata) == helpers.dedent(
|
|
||||||
+ """
|
|
||||||
+ Metadata-Version: 2.4
|
|
||||||
+ Name: My.App
|
|
||||||
+ Version: 0.1.0
|
|
||||||
+ Summary: foo
|
|
||||||
+ """
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ def test_dynamic(self, constructor, isolation, helpers):
|
|
||||||
+ metadata = ProjectMetadata(
|
|
||||||
+ str(isolation),
|
|
||||||
+ None,
|
|
||||||
+ {'project': {'name': 'My.App', 'version': '0.1.0', 'dynamic': ['authors', 'classifiers']}},
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ assert constructor(metadata) == helpers.dedent(
|
|
||||||
+ """
|
|
||||||
+ Metadata-Version: 2.4
|
|
||||||
+ Name: My.App
|
|
||||||
+ Version: 0.1.0
|
|
||||||
+ Dynamic: Author
|
|
||||||
+ Dynamic: Author-email
|
|
||||||
+ Dynamic: Classifier
|
|
||||||
+ """
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ def test_urls(self, constructor, isolation, helpers):
|
|
||||||
+ metadata = ProjectMetadata(
|
|
||||||
+ str(isolation),
|
|
||||||
+ None,
|
|
||||||
+ {'project': {'name': 'My.App', 'version': '0.1.0', 'urls': {'foo': 'bar', 'bar': 'baz'}}},
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ assert constructor(metadata) == helpers.dedent(
|
|
||||||
+ """
|
|
||||||
+ Metadata-Version: 2.4
|
|
||||||
+ Name: My.App
|
|
||||||
+ Version: 0.1.0
|
|
||||||
+ Project-URL: foo, bar
|
|
||||||
+ Project-URL: bar, baz
|
|
||||||
+ """
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ def test_authors_name(self, constructor, isolation, helpers):
|
|
||||||
+ metadata = ProjectMetadata(
|
|
||||||
+ str(isolation), None, {'project': {'name': 'My.App', 'version': '0.1.0', 'authors': [{'name': 'foo'}]}}
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ assert constructor(metadata) == helpers.dedent(
|
|
||||||
+ """
|
|
||||||
+ Metadata-Version: 2.4
|
|
||||||
+ Name: My.App
|
|
||||||
+ Version: 0.1.0
|
|
||||||
+ Author: foo
|
|
||||||
+ """
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ def test_authors_email(self, constructor, isolation, helpers):
|
|
||||||
+ metadata = ProjectMetadata(
|
|
||||||
+ str(isolation),
|
|
||||||
+ None,
|
|
||||||
+ {'project': {'name': 'My.App', 'version': '0.1.0', 'authors': [{'email': 'foo@domain'}]}},
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ assert constructor(metadata) == helpers.dedent(
|
|
||||||
+ """
|
|
||||||
+ Metadata-Version: 2.4
|
|
||||||
+ Name: My.App
|
|
||||||
+ Version: 0.1.0
|
|
||||||
+ Author-email: foo@domain
|
|
||||||
+ """
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ def test_authors_name_and_email(self, constructor, isolation, helpers):
|
|
||||||
+ metadata = ProjectMetadata(
|
|
||||||
+ str(isolation),
|
|
||||||
+ None,
|
|
||||||
+ {'project': {'name': 'My.App', 'version': '0.1.0', 'authors': [{'email': 'bar@domain', 'name': 'foo'}]}},
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ assert constructor(metadata) == helpers.dedent(
|
|
||||||
+ """
|
|
||||||
+ Metadata-Version: 2.4
|
|
||||||
+ Name: My.App
|
|
||||||
+ Version: 0.1.0
|
|
||||||
+ Author-email: foo <bar@domain>
|
|
||||||
+ """
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ def test_authors_multiple(self, constructor, isolation, helpers):
|
|
||||||
+ metadata = ProjectMetadata(
|
|
||||||
+ str(isolation),
|
|
||||||
+ None,
|
|
||||||
+ {'project': {'name': 'My.App', 'version': '0.1.0', 'authors': [{'name': 'foo'}, {'name': 'bar'}]}},
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ assert constructor(metadata) == helpers.dedent(
|
|
||||||
+ """
|
|
||||||
+ Metadata-Version: 2.4
|
|
||||||
+ Name: My.App
|
|
||||||
+ Version: 0.1.0
|
|
||||||
+ Author: foo, bar
|
|
||||||
+ """
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ def test_maintainers_name(self, constructor, isolation, helpers):
|
|
||||||
+ metadata = ProjectMetadata(
|
|
||||||
+ str(isolation), None, {'project': {'name': 'My.App', 'version': '0.1.0', 'maintainers': [{'name': 'foo'}]}}
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ assert constructor(metadata) == helpers.dedent(
|
|
||||||
+ """
|
|
||||||
+ Metadata-Version: 2.4
|
|
||||||
+ Name: My.App
|
|
||||||
+ Version: 0.1.0
|
|
||||||
+ Maintainer: foo
|
|
||||||
+ """
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ def test_maintainers_email(self, constructor, isolation, helpers):
|
|
||||||
+ metadata = ProjectMetadata(
|
|
||||||
+ str(isolation),
|
|
||||||
+ None,
|
|
||||||
+ {'project': {'name': 'My.App', 'version': '0.1.0', 'maintainers': [{'email': 'foo@domain'}]}},
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ assert constructor(metadata) == helpers.dedent(
|
|
||||||
+ """
|
|
||||||
+ Metadata-Version: 2.4
|
|
||||||
+ Name: My.App
|
|
||||||
+ Version: 0.1.0
|
|
||||||
+ Maintainer-email: foo@domain
|
|
||||||
+ """
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ def test_maintainers_name_and_email(self, constructor, isolation, helpers):
|
|
||||||
+ metadata = ProjectMetadata(
|
|
||||||
+ str(isolation),
|
|
||||||
+ None,
|
|
||||||
+ {
|
|
||||||
+ 'project': {
|
|
||||||
+ 'name': 'My.App',
|
|
||||||
+ 'version': '0.1.0',
|
|
||||||
+ 'maintainers': [{'email': 'bar@domain', 'name': 'foo'}],
|
|
||||||
+ }
|
|
||||||
+ },
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ assert constructor(metadata) == helpers.dedent(
|
|
||||||
+ """
|
|
||||||
+ Metadata-Version: 2.4
|
|
||||||
+ Name: My.App
|
|
||||||
+ Version: 0.1.0
|
|
||||||
+ Maintainer-email: foo <bar@domain>
|
|
||||||
+ """
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ def test_maintainers_multiple(self, constructor, isolation, helpers):
|
|
||||||
+ metadata = ProjectMetadata(
|
|
||||||
+ str(isolation),
|
|
||||||
+ None,
|
|
||||||
+ {'project': {'name': 'My.App', 'version': '0.1.0', 'maintainers': [{'name': 'foo'}, {'name': 'bar'}]}},
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ assert constructor(metadata) == helpers.dedent(
|
|
||||||
+ """
|
|
||||||
+ Metadata-Version: 2.4
|
|
||||||
+ Name: My.App
|
|
||||||
+ Version: 0.1.0
|
|
||||||
+ Maintainer: foo, bar
|
|
||||||
+ """
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ def test_license(self, constructor, isolation, helpers):
|
|
||||||
+ metadata = ProjectMetadata(
|
|
||||||
+ str(isolation), None, {'project': {'name': 'My.App', 'version': '0.1.0', 'license': {'text': 'foo\nbar'}}}
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ assert constructor(metadata) == helpers.dedent(
|
|
||||||
+ """
|
|
||||||
+ Metadata-Version: 2.4
|
|
||||||
+ Name: My.App
|
|
||||||
+ Version: 0.1.0
|
|
||||||
+ License: foo
|
|
||||||
+ bar
|
|
||||||
+ """
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ def test_license_expression(self, constructor, isolation, helpers):
|
|
||||||
+ metadata = ProjectMetadata(
|
|
||||||
+ str(isolation),
|
|
||||||
+ None,
|
|
||||||
+ {'project': {'name': 'My.App', 'version': '0.1.0', 'license': 'mit or apache-2.0'}},
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
+ assert constructor(metadata) == helpers.dedent(
|
|
||||||
+ """
|
|
||||||
+ Metadata-Version: 2.4
|
|
||||||
+ Name: My.App
|
|
||||||
+ Version: 0.1.0
|
|
||||||
License-Expression: MIT OR Apache-2.0
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
@@ -1680,7 +2133,7 @@ class TestCoreMetadataV23:
|
|
||||||
metadata = ProjectMetadata(
|
|
||||||
str(temp_dir),
|
|
||||||
None,
|
|
||||||
- {'project': {'name': 'My.App', 'version': '0.1.0', 'license-files': {'globs': ['LICENSES/*']}}},
|
|
||||||
+ {'project': {'name': 'My.App', 'version': '0.1.0', 'license-files': ['LICENSES/*']}},
|
|
||||||
)
|
|
||||||
|
|
||||||
licenses_dir = temp_dir / 'LICENSES'
|
|
||||||
@@ -1690,7 +2143,7 @@ class TestCoreMetadataV23:
|
|
||||||
|
|
||||||
assert constructor(metadata) == helpers.dedent(
|
|
||||||
"""
|
|
||||||
- Metadata-Version: 2.3
|
|
||||||
+ Metadata-Version: 2.4
|
|
||||||
Name: My.App
|
|
||||||
Version: 0.1.0
|
|
||||||
License-File: LICENSES/Apache-2.0.txt
|
|
||||||
@@ -1705,7 +2158,7 @@ class TestCoreMetadataV23:
|
|
||||||
|
|
||||||
assert constructor(metadata) == helpers.dedent(
|
|
||||||
"""
|
|
||||||
- Metadata-Version: 2.3
|
|
||||||
+ Metadata-Version: 2.4
|
|
||||||
Name: My.App
|
|
||||||
Version: 0.1.0
|
|
||||||
Keywords: foo
|
|
||||||
@@ -1719,7 +2172,7 @@ class TestCoreMetadataV23:
|
|
||||||
|
|
||||||
assert constructor(metadata) == helpers.dedent(
|
|
||||||
"""
|
|
||||||
- Metadata-Version: 2.3
|
|
||||||
+ Metadata-Version: 2.4
|
|
||||||
Name: My.App
|
|
||||||
Version: 0.1.0
|
|
||||||
Keywords: bar,foo
|
|
||||||
@@ -1737,7 +2190,7 @@ class TestCoreMetadataV23:
|
|
||||||
|
|
||||||
assert constructor(metadata) == helpers.dedent(
|
|
||||||
"""
|
|
||||||
- Metadata-Version: 2.3
|
|
||||||
+ Metadata-Version: 2.4
|
|
||||||
Name: My.App
|
|
||||||
Version: 0.1.0
|
|
||||||
Classifier: Programming Language :: Python :: 3.9
|
|
||||||
@@ -1752,7 +2205,7 @@ class TestCoreMetadataV23:
|
|
||||||
|
|
||||||
assert constructor(metadata) == helpers.dedent(
|
|
||||||
"""
|
|
||||||
- Metadata-Version: 2.3
|
|
||||||
+ Metadata-Version: 2.4
|
|
||||||
Name: My.App
|
|
||||||
Version: 0.1.0
|
|
||||||
Requires-Python: <2,>=1
|
|
||||||
@@ -1768,7 +2221,7 @@ class TestCoreMetadataV23:
|
|
||||||
|
|
||||||
assert constructor(metadata) == helpers.dedent(
|
|
||||||
"""
|
|
||||||
- Metadata-Version: 2.3
|
|
||||||
+ Metadata-Version: 2.4
|
|
||||||
Name: My.App
|
|
||||||
Version: 0.1.0
|
|
||||||
Requires-Dist: bar==5
|
|
||||||
@@ -1794,7 +2247,7 @@ class TestCoreMetadataV23:
|
|
||||||
|
|
||||||
assert constructor(metadata) == helpers.dedent(
|
|
||||||
"""
|
|
||||||
- Metadata-Version: 2.3
|
|
||||||
+ Metadata-Version: 2.4
|
|
||||||
Name: My.App
|
|
||||||
Version: 0.1.0
|
|
||||||
Provides-Extra: feature1
|
|
||||||
@@ -1815,7 +2268,7 @@ class TestCoreMetadataV23:
|
|
||||||
|
|
||||||
assert constructor(metadata, extra_dependencies=['baz==9']) == helpers.dedent(
|
|
||||||
"""
|
|
||||||
- Metadata-Version: 2.3
|
|
||||||
+ Metadata-Version: 2.4
|
|
||||||
Name: My.App
|
|
||||||
Version: 0.1.0
|
|
||||||
Requires-Dist: bar==5
|
|
||||||
@@ -1839,7 +2292,7 @@ class TestCoreMetadataV23:
|
|
||||||
|
|
||||||
assert constructor(metadata) == helpers.dedent(
|
|
||||||
"""
|
|
||||||
- Metadata-Version: 2.3
|
|
||||||
+ Metadata-Version: 2.4
|
|
||||||
Name: My.App
|
|
||||||
Version: 0.1.0
|
|
||||||
Description-Content-Type: text/markdown
|
|
||||||
@@ -1861,7 +2314,7 @@ class TestCoreMetadataV23:
|
|
||||||
'authors': [{'email': 'bar@domain', 'name': 'foo'}],
|
|
||||||
'maintainers': [{'email': 'bar@domain', 'name': 'foo'}],
|
|
||||||
'license': 'mit or apache-2.0',
|
|
||||||
- 'license-files': {'globs': ['LICENSES/*']},
|
|
||||||
+ 'license-files': ['LICENSES/*'],
|
|
||||||
'keywords': ['foo', 'bar'],
|
|
||||||
'classifiers': [
|
|
||||||
'Programming Language :: Python :: 3.11',
|
|
||||||
@@ -1887,7 +2340,7 @@ class TestCoreMetadataV23:
|
|
||||||
|
|
||||||
assert constructor(metadata) == helpers.dedent(
|
|
||||||
"""
|
|
||||||
- Metadata-Version: 2.3
|
|
||||||
+ Metadata-Version: 2.4
|
|
||||||
Name: My.App
|
|
||||||
Version: 0.1.0
|
|
||||||
Summary: foo
|
|
||||||
3
flit_core-3.10.1-py3-none-any.whl
Normal file
3
flit_core-3.10.1-py3-none-any.whl
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:cb31a76e8b31ad3351bb89e531f64ef2b05d1e65bd939183250bf81ddf4922a8
|
||||||
|
size 36389
|
||||||
BIN
hatch-v1.14.1.tar.gz
LFS
BIN
hatch-v1.14.1.tar.gz
LFS
Binary file not shown.
3
hatch-v1.16.2.tar.gz
Normal file
3
hatch-v1.16.2.tar.gz
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:ce130f1e7b91f562c61932289146575e253e47affb2e018eb81fa6f9fcb08c4b
|
||||||
|
size 5297697
|
||||||
3
hatchling-1.28.0-py3-none-any.whl
Normal file
3
hatchling-1.28.0-py3-none-any.whl
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:dc48722b68b3f4bbfa3ff618ca07cdea6750e7d03481289ffa8be1521d18a961
|
||||||
|
size 76075
|
||||||
3
idna-3.11-py3-none-any.whl
Normal file
3
idna-3.11-py3-none-any.whl
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea
|
||||||
|
size 71008
|
||||||
3
packaging-25.0-py3-none-any.whl
Normal file
3
packaging-25.0-py3-none-any.whl
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484
|
||||||
|
size 66469
|
||||||
3
pathspec-0.12.1-py3-none-any.whl
Normal file
3
pathspec-0.12.1-py3-none-any.whl
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08
|
||||||
|
size 31191
|
||||||
3
pluggy-1.6.0-py3-none-any.whl
Normal file
3
pluggy-1.6.0-py3-none-any.whl
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746
|
||||||
|
size 20538
|
||||||
@@ -1,3 +1,88 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Jan 2 17:06:04 UTC 2026 - Ben Greiner <code@bnavigator.de>
|
||||||
|
|
||||||
|
- Update to 1.16.2
|
||||||
|
* Properly send informational output to stderr instead of stdout
|
||||||
|
* Implement documented support for sbom-files as build data for
|
||||||
|
the wheel build target
|
||||||
|
* Fix regression where environments no longer acknowledged the
|
||||||
|
project.optional-dependencies field
|
||||||
|
- Release 1.16.1
|
||||||
|
* Handle special characters correctly in path for editable
|
||||||
|
installs.
|
||||||
|
* Fix multiple calls to install on sync_dependencies to become a
|
||||||
|
single call.
|
||||||
|
* Fix context variable formatting in project dependencies to
|
||||||
|
prevent crashes when using variables like {root:parent:uri} in
|
||||||
|
the [project] section.
|
||||||
|
* Fix environment overrides for dependency-groups field to
|
||||||
|
properly support matrix and conditional configurations.
|
||||||
|
- Release 1.16.0
|
||||||
|
## Changed:
|
||||||
|
* Drop support for 3.9
|
||||||
|
* Environment type plugins are now no longer expected to support
|
||||||
|
a pseudo-build environment as any environment now may be used
|
||||||
|
for building. The following methods have been removed:
|
||||||
|
build_environment, build_environment_exists, run_builder,
|
||||||
|
construct_build_command
|
||||||
|
## Added:
|
||||||
|
* Support for workspaces inspired by Cargo Workspaces
|
||||||
|
* Dependency group support.
|
||||||
|
* The version and project metadata commands now support projects
|
||||||
|
that do not use Hatchling as the build backend
|
||||||
|
* The version command accepts a --force option, allowing for
|
||||||
|
downgrades when an explicit version number is given.
|
||||||
|
* Build environments can now be configured, the default build
|
||||||
|
environment is hatch-build
|
||||||
|
* The environment interface now has the following methods and
|
||||||
|
properties in order to better support builds on remote
|
||||||
|
machines: project_root, sep, pathsep, fs_context
|
||||||
|
* Bump the minimum supported version of packaging to 24.2
|
||||||
|
* Upgrade Ruff to 0.13.2
|
||||||
|
## Fixed:
|
||||||
|
* All HTTP requests now set an identifiable User-Agent header.
|
||||||
|
* Fix issue where terminal output would be out of sync during
|
||||||
|
build.
|
||||||
|
* Fix for Click Sentinel value when using run command
|
||||||
|
- Drop fix-with-latest-hatchling.patch
|
||||||
|
- Drop fix-tests.patch
|
||||||
|
- Provide some wheels for the test suite gh#pypa/hatch#2123
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Nov 17 08:20:59 UTC 2025 - John Paul Adrian Glaubitz <adrian.glaubitz@suse.com>
|
||||||
|
|
||||||
|
- Update to 1.15.1
|
||||||
|
* Fix compatibility with cached default CPython distributions
|
||||||
|
that were sourced from GitHub releases of the old owner
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Nov 10 01:24:10 UTC 2025 - Steve Kowalik <steven.kowalik@suse.com>
|
||||||
|
|
||||||
|
- Use python-uv for Requires, so it explicitly matches the Python version.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Oct 16 07:47:48 UTC 2025 - Nico Krapp <nico.krapp@suse.com>
|
||||||
|
|
||||||
|
- Update to 1.15.0
|
||||||
|
* Drop support for Python 3.8
|
||||||
|
* Support Python 3.14
|
||||||
|
* Upgrade default CPython distributions to 20251014
|
||||||
|
* Upgrade default PyPy distributions to 7.3.20
|
||||||
|
- Update to 1.14.2
|
||||||
|
* Fix compatibility with recent versions of Click
|
||||||
|
- drop click-8.2.patch, fixed upstream
|
||||||
|
- Add fix-tests.patch to fix tests
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Aug 21 08:22:26 UTC 2025 - Markéta Machová <mmachova@suse.com>
|
||||||
|
|
||||||
|
- Convert to libalternatives on SLE-16-based and newer systems only
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Jul 10 12:33:57 UTC 2025 - Markéta Machová <mmachova@suse.com>
|
||||||
|
|
||||||
|
- Convert to libalternatives
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Thu Jun 26 09:36:32 UTC 2025 - Daniel Garcia <daniel.garcia@suse.com>
|
Thu Jun 26 09:36:32 UTC 2025 - Daniel Garcia <daniel.garcia@suse.com>
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# spec file for package python-hatch
|
# spec file for package python-hatch
|
||||||
#
|
#
|
||||||
# Copyright (c) 2025 SUSE LLC
|
# Copyright (c) 2026 SUSE LLC and contributors
|
||||||
#
|
#
|
||||||
# All modifications and additions to the file contributed by third parties
|
# All modifications and additions to the file contributed by third parties
|
||||||
# remain the property of their copyright owners, unless otherwise agreed
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
@@ -24,47 +24,70 @@
|
|||||||
%define psuffix %{nil}
|
%define psuffix %{nil}
|
||||||
%bcond_with test
|
%bcond_with test
|
||||||
%endif
|
%endif
|
||||||
|
%if 0%{?suse_version} > 1500
|
||||||
|
%bcond_without libalternatives
|
||||||
|
%else
|
||||||
|
%bcond_with libalternatives
|
||||||
|
%endif
|
||||||
%{?sle15_python_module_pythons}
|
%{?sle15_python_module_pythons}
|
||||||
Name: python-hatch%{psuffix}
|
Name: python-hatch%{psuffix}
|
||||||
Version: 1.14.1
|
Version: 1.16.2
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: Modern, extensible Python project management
|
Summary: Modern, extensible Python project management
|
||||||
License: MIT
|
License: MIT
|
||||||
URL: https://hatch.pypa.io/latest/
|
URL: https://hatch.pypa.io/latest/
|
||||||
# SourceRepository: https://github.com/pypa/hatch
|
# SourceRepository: https://github.com/pypa/hatch
|
||||||
Source: https://github.com/pypa/hatch/archive/refs/tags/hatch-v%{version}.tar.gz
|
Source0: https://github.com/pypa/hatch/archive/refs/tags/hatch-v%{version}.tar.gz
|
||||||
# PATCH-FIX-UPSTREAM fix-with-latest-hatchling.patch gh#f8a2eaa gh#28f233c gh#fc25690
|
# For the tests gh#pypa/hatch#2123
|
||||||
Patch0: fix-with-latest-hatchling.patch
|
Source11: https://files.pythonhosted.org/packages/py3/b/binary/binary-1.0.2-py3-none-any.whl
|
||||||
# PATCH-FIX-UPSTREAM click-8.2.patch gh#pypa/hatch#2013
|
Source12: https://files.pythonhosted.org/packages/py3/c/certifi/certifi-2025.11.12-py3-none-any.whl
|
||||||
Patch1: click-8.2.patch
|
Source13: https://files.pythonhosted.org/packages/py3/c/charset_normalizer/charset_normalizer-3.4.4-py3-none-any.whl
|
||||||
BuildRequires: %{python_module base >= 3.8}
|
Source14: https://files.pythonhosted.org/packages/py3/c/click/click-8.3.1-py3-none-any.whl
|
||||||
|
Source15: https://files.pythonhosted.org/packages/py3/f/flit_core/flit_core-3.10.1-py3-none-any.whl
|
||||||
|
Source16: https://files.pythonhosted.org/packages/py3/h/hatchling/hatchling-1.28.0-py3-none-any.whl
|
||||||
|
Source17: https://files.pythonhosted.org/packages/py3/i/idna/idna-3.11-py3-none-any.whl
|
||||||
|
Source18: https://files.pythonhosted.org/packages/py3/p/packaging/packaging-25.0-py3-none-any.whl
|
||||||
|
Source19: https://files.pythonhosted.org/packages/py3/p/pathspec/pathspec-0.12.1-py3-none-any.whl
|
||||||
|
Source20: https://files.pythonhosted.org/packages/py3/p/pluggy/pluggy-1.6.0-py3-none-any.whl
|
||||||
|
Source21: https://files.pythonhosted.org/packages/py3/r/requests/requests-2.32.5-py3-none-any.whl
|
||||||
|
Source22: https://files.pythonhosted.org/packages/py3/s/setuptools/setuptools-80.9.0-py3-none-any.whl
|
||||||
|
Source23: https://files.pythonhosted.org/packages/py3/t/trove_classifiers/trove_classifiers-2025.12.1.14-py3-none-any.whl
|
||||||
|
Source24: https://files.pythonhosted.org/packages/py3/u/urllib3/urllib3-2.6.2-py3-none-any.whl
|
||||||
|
BuildRequires: %{python_module base >= 3.10}
|
||||||
BuildRequires: %{python_module hatch-vcs >= 0.3}
|
BuildRequires: %{python_module hatch-vcs >= 0.3}
|
||||||
BuildRequires: %{python_module hatchling >= 1.26.3}
|
BuildRequires: %{python_module hatchling >= 1.27}
|
||||||
BuildRequires: %{python_module pip}
|
BuildRequires: %{python_module pip}
|
||||||
BuildRequires: fdupes
|
BuildRequires: fdupes
|
||||||
BuildRequires: python-rpm-macros
|
BuildRequires: python-rpm-macros
|
||||||
Requires(post): update-alternatives
|
|
||||||
Requires(postun): update-alternatives
|
|
||||||
Requires: git-core
|
Requires: git-core
|
||||||
Requires: python-click >= 8.0.6
|
Requires: python-click >= 8.0.6
|
||||||
Requires: python-hatchling >= 1.21.0
|
Requires: python-hatchling >= 1.27.0
|
||||||
Requires: python-httpx >= 0.22.0
|
Requires: python-httpx >= 0.22.0
|
||||||
Requires: python-hyperlink >= 21.0.0
|
Requires: python-hyperlink >= 21.0.0
|
||||||
Requires: python-keyring >= 23.5.0
|
Requires: python-keyring >= 23.5.0
|
||||||
Requires: python-packaging >= 21.3
|
Requires: python-packaging >= 24.2
|
||||||
Requires: python-platformdirs >= 2.5.0
|
Requires: python-platformdirs >= 2.5.0
|
||||||
|
Requires: python-pyproject-hooks
|
||||||
Requires: python-rich >= 11.2.0
|
Requires: python-rich >= 11.2.0
|
||||||
Requires: python-shellingham >= 1.4.0
|
Requires: python-shellingham >= 1.4.0
|
||||||
Requires: python-tomli-w >= 1.0
|
Requires: python-tomli-w >= 1.0
|
||||||
Requires: python-tomlkit >= 0.11.1
|
Requires: python-tomlkit >= 0.11.1
|
||||||
Requires: python-virtualenv >= 20.16.2
|
Requires: python-uv >= 0.5.23
|
||||||
Requires: python-zstandard < 1
|
Requires: python-virtualenv >= 20.26.1
|
||||||
Requires: uv
|
Requires: (python-backports.zstd > 1 if python-base < 3.14)
|
||||||
Requires: (python-pexpect >= 4.8 with python-pexpect < 5)
|
Requires: (python-pexpect >= 4.8 with python-pexpect < 5)
|
||||||
Requires: (python-userpath >= 1.7 with python-userpath < 2)
|
Requires: (python-userpath >= 1.7 with python-userpath < 2)
|
||||||
|
%if %{with libalternatives}
|
||||||
|
BuildRequires: alts
|
||||||
|
Requires: alts
|
||||||
|
%else
|
||||||
|
Requires(post): update-alternatives
|
||||||
|
Requires(postun): update-alternatives
|
||||||
|
%endif
|
||||||
%if %{with test}
|
%if %{with test}
|
||||||
BuildRequires: %{python_module editables}
|
BuildRequires: %{python_module editables}
|
||||||
BuildRequires: %{python_module filelock >= 3.7.1}
|
BuildRequires: %{python_module filelock >= 3.7.1}
|
||||||
|
BuildRequires: %{python_module flit-core}
|
||||||
BuildRequires: %{python_module hatch = %{version}}
|
BuildRequires: %{python_module hatch = %{version}}
|
||||||
BuildRequires: %{python_module pyfakefs}
|
BuildRequires: %{python_module pyfakefs}
|
||||||
BuildRequires: %{python_module pytest-mock}
|
BuildRequires: %{python_module pytest-mock}
|
||||||
@@ -72,7 +95,9 @@ BuildRequires: %{python_module pytest-xdist}
|
|||||||
BuildRequires: %{python_module pytest}
|
BuildRequires: %{python_module pytest}
|
||||||
BuildRequires: %{python_module trustme}
|
BuildRequires: %{python_module trustme}
|
||||||
BuildRequires: cargo
|
BuildRequires: cargo
|
||||||
BuildRequires: uv
|
%if 0%{?suse_version} >= 1699
|
||||||
|
BuildRequires: python39-base
|
||||||
|
%endif
|
||||||
%else
|
%else
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
%endif
|
%endif
|
||||||
@@ -91,6 +116,11 @@ Features
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%autosetup -p1 -n hatch-hatch-v%{version}
|
%autosetup -p1 -n hatch-hatch-v%{version}
|
||||||
|
%if 0%{?suse_version} >= 1699
|
||||||
|
sed -e 's/Source: pip$/Source: system/' \
|
||||||
|
-e 's/Source: Pyenv$/Source: system/' \
|
||||||
|
-i tests/cli/self/test_report.py
|
||||||
|
%endif
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%if !%{with test}
|
%if !%{with test}
|
||||||
@@ -110,6 +140,9 @@ export LANG=en_US.UTF-8
|
|||||||
# tests expect this to be unset and use their own reproducible value. Nothing installed from here.
|
# tests expect this to be unset and use their own reproducible value. Nothing installed from here.
|
||||||
# https://hatch.pypa.io/latest/config/build/#reproducible-builds
|
# https://hatch.pypa.io/latest/config/build/#reproducible-builds
|
||||||
unset SOURCE_DATE_EPOCH
|
unset SOURCE_DATE_EPOCH
|
||||||
|
# Need to provide some wheels offline: gh#pypa/hatch#2123
|
||||||
|
export UV_FIND_LINKS=%{_sourcedir}
|
||||||
|
export UV_OFFLINE=1
|
||||||
# finds bash instead of expected sh as default shell inside obs
|
# finds bash instead of expected sh as default shell inside obs
|
||||||
donttest="(test_install and test_already_installed_update_prompt)"
|
donttest="(test_install and test_already_installed_update_prompt)"
|
||||||
donttest="$donttest or (test_install and test_already_installed_update_flag)"
|
donttest="$donttest or (test_install and test_already_installed_update_flag)"
|
||||||
@@ -117,22 +150,29 @@ donttest="$donttest or (test_install and test_all)"
|
|||||||
# platform distribution selection errors: https://github.com/pypa/hatch/issues/1145
|
# platform distribution selection errors: https://github.com/pypa/hatch/issues/1145
|
||||||
%ifnarch x86_64
|
%ifnarch x86_64
|
||||||
donttest="$donttest or (test_resolve and test_resolution_error)"
|
donttest="$donttest or (test_resolve and test_resolution_error)"
|
||||||
donttest+=" or test_custom_source or test_pypy_custom"
|
donttest="$donttest or (test_resolve and test_legacy_option)"
|
||||||
|
donttest="$donttest or (test_resolve and test_compatib)"
|
||||||
|
donttest="$donttest or test_custom_source or test_pypy_custom"
|
||||||
%endif
|
%endif
|
||||||
%ifarch s390x
|
%ifarch s390x
|
||||||
# Console width different
|
# Console width different
|
||||||
donttest="$donttest or test_context_formatting"
|
donttest="$donttest or test_context_formatting"
|
||||||
%endif
|
%endif
|
||||||
|
# This requires a hatchling not released yet (hatchling > 1.28)
|
||||||
# Requires network
|
donttest+=" or test_sbom_from_build_data"
|
||||||
donttest+=" or test_uv_env"
|
%if 0%{?suse_version} < 1699
|
||||||
# Fails with python 3.12
|
# Wants to create a Python 3.9 environment and would download the interpreter
|
||||||
donttest+=" or test_pyenv or test_no_open or test_open"
|
donttest+=" or test_workspace_overrides_matrix_conditional_members"
|
||||||
# Fails with hatchling >= 1.26
|
donttest+=" or test_workspace_overrides_combined_conditions"
|
||||||
|
%endif
|
||||||
# Ignore test_build.py it fails because output format difference.
|
# Would need to provide too many offline wheels
|
||||||
# https://github.com/pypa/hatch/commit/e843c42da2e71468b519a3aacdfeab31b14985a3
|
donttest+=" or test_workspace_member_features"
|
||||||
%pytest -v -k "not ($donttest)" --ignore tests/cli/build/test_build.py
|
donttest+=" or test_workspace_library_with_plugins"
|
||||||
|
donttest+=" or test_workspace_multi_service_application"
|
||||||
|
donttest+=" or test_workspace_documentation_generation"
|
||||||
|
donttest+=" or test_workspace_development_workflow"
|
||||||
|
donttest+=" or test_workspace_overrides_matrix_conditional_members"
|
||||||
|
%pytest -n auto -v -k "not ($donttest)"
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%post
|
%post
|
||||||
@@ -141,6 +181,9 @@ donttest+=" or test_pyenv or test_no_open or test_open"
|
|||||||
%postun
|
%postun
|
||||||
%python_uninstall_alternative hatch
|
%python_uninstall_alternative hatch
|
||||||
|
|
||||||
|
%pre
|
||||||
|
%python_libalternatives_reset_alternative hatch
|
||||||
|
|
||||||
%if !%{with test}
|
%if !%{with test}
|
||||||
%files %{python_files}
|
%files %{python_files}
|
||||||
%doc README.md
|
%doc README.md
|
||||||
|
|||||||
3
requests-2.32.5-py3-none-any.whl
Normal file
3
requests-2.32.5-py3-none-any.whl
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6
|
||||||
|
size 64738
|
||||||
3
setuptools-80.9.0-py3-none-any.whl
Normal file
3
setuptools-80.9.0-py3-none-any.whl
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922
|
||||||
|
size 1201486
|
||||||
3
trove_classifiers-2025.12.1.14-py3-none-any.whl
Normal file
3
trove_classifiers-2025.12.1.14-py3-none-any.whl
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:a8206978ede95937b9959c3aff3eb258bbf7b07dff391ddd4ea7e61f316635ab
|
||||||
|
size 14184
|
||||||
3
urllib3-2.6.2-py3-none-any.whl
Normal file
3
urllib3-2.6.2-py3-none-any.whl
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd
|
||||||
|
size 131182
|
||||||
Reference in New Issue
Block a user