From 2295a029fdc0053448b1a76defc933cc1f90dce6 Mon Sep 17 00:00:00 2001 From: Jadon Gaertner Date: Tue, 3 Dec 2024 18:17:32 -0800 Subject: [PATCH 1/7] add git, path, url dependencies --- .idea/.gitignore | 8 ++ .idea/inspectionProfiles/Project_Default.xml | 25 ++++ .../inspectionProfiles/profiles_settings.xml | 6 + .idea/jsonSchemas.xml | 119 ++++++++++++++++++ .idea/metadata-please.iml | 14 +++ .idea/misc.xml | 4 + .idea/modules.xml | 8 ++ .idea/tbe-PST.xml | 8 ++ .idea/vcs.xml | 6 + metadata_please/source_checkout.py | 20 +++ 10 files changed, 218 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/jsonSchemas.xml create mode 100644 .idea/metadata-please.iml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/tbe-PST.xml create mode 100644 .idea/vcs.xml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..818b2d3 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,25 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/jsonSchemas.xml b/.idea/jsonSchemas.xml new file mode 100644 index 0000000..9d8760e --- /dev/null +++ b/.idea/jsonSchemas.xml @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/metadata-please.iml b/.idea/metadata-please.iml new file mode 100644 index 0000000..ba68dd0 --- /dev/null +++ b/.idea/metadata-please.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..3a80523 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..f7ecb79 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/tbe-PST.xml b/.idea/tbe-PST.xml new file mode 100644 index 0000000..18d096d --- /dev/null +++ b/.idea/tbe-PST.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/metadata_please/source_checkout.py b/metadata_please/source_checkout.py index 497e643..a1f0246 100644 --- a/metadata_please/source_checkout.py +++ b/metadata_please/source_checkout.py @@ -214,6 +214,26 @@ def from_poetry_checkout(path: Path) -> bytes: if not version: # e.g. git, path or url dependencies, skip for now + # e.g. git, path or url dependencies: + if "path" in v: + buf.append(v["path"]) + + elif "url" in v: + buf.append(v["url"]) + + elif "git" in v: + git_link = f"git+{v['git']}" + + # from both poetry and pypa docs, seems like only one of the following should be specified + revision = v.get("rev") or v.get("tag") or v.get("branch") + if revision: + git_link += f"@{revision}" + + if "subdirectory" in v: + git_link += f"#subdirectory={v['subdirectory']}" + + buf.append(f"{k} @ {git_link}") + continue # https://python-poetry.org/docs/dependency-specification/#version-constraints From 72202418f262aff959597138d015821dc3bdd6ae Mon Sep 17 00:00:00 2001 From: Jadon Gaertner Date: Wed, 4 Dec 2024 09:42:12 -0800 Subject: [PATCH 2/7] Revert "add git, path, url dependencies" This reverts commit 2295a029fdc0053448b1a76defc933cc1f90dce6. --- .idea/.gitignore | 8 -- .idea/inspectionProfiles/Project_Default.xml | 25 ---- .../inspectionProfiles/profiles_settings.xml | 6 - .idea/jsonSchemas.xml | 119 ------------------ .idea/metadata-please.iml | 14 --- .idea/misc.xml | 4 - .idea/modules.xml | 8 -- .idea/tbe-PST.xml | 8 -- .idea/vcs.xml | 6 - metadata_please/source_checkout.py | 20 --- 10 files changed, 218 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/inspectionProfiles/Project_Default.xml delete mode 100644 .idea/inspectionProfiles/profiles_settings.xml delete mode 100644 .idea/jsonSchemas.xml delete mode 100644 .idea/metadata-please.iml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/tbe-PST.xml delete mode 100644 .idea/vcs.xml diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 13566b8..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100644 index 818b2d3..0000000 --- a/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 105ce2d..0000000 --- a/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/jsonSchemas.xml b/.idea/jsonSchemas.xml deleted file mode 100644 index 9d8760e..0000000 --- a/.idea/jsonSchemas.xml +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/metadata-please.iml b/.idea/metadata-please.iml deleted file mode 100644 index ba68dd0..0000000 --- a/.idea/metadata-please.iml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 3a80523..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index f7ecb79..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/tbe-PST.xml b/.idea/tbe-PST.xml deleted file mode 100644 index 18d096d..0000000 --- a/.idea/tbe-PST.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1dd..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/metadata_please/source_checkout.py b/metadata_please/source_checkout.py index a1f0246..497e643 100644 --- a/metadata_please/source_checkout.py +++ b/metadata_please/source_checkout.py @@ -214,26 +214,6 @@ def from_poetry_checkout(path: Path) -> bytes: if not version: # e.g. git, path or url dependencies, skip for now - # e.g. git, path or url dependencies: - if "path" in v: - buf.append(v["path"]) - - elif "url" in v: - buf.append(v["url"]) - - elif "git" in v: - git_link = f"git+{v['git']}" - - # from both poetry and pypa docs, seems like only one of the following should be specified - revision = v.get("rev") or v.get("tag") or v.get("branch") - if revision: - git_link += f"@{revision}" - - if "subdirectory" in v: - git_link += f"#subdirectory={v['subdirectory']}" - - buf.append(f"{k} @ {git_link}") - continue # https://python-poetry.org/docs/dependency-specification/#version-constraints From 199be2583d32427e3023ed1d13160237ab0fd795 Mon Sep 17 00:00:00 2001 From: Jadon Gaertner Date: Wed, 4 Dec 2024 10:16:00 -0800 Subject: [PATCH 3/7] fixed poetry git, url, path deps to pass tests --- metadata_please/source_checkout.py | 21 ++++++++++++++++++++- metadata_please/tests/source_checkout.py | 7 ++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/metadata_please/source_checkout.py b/metadata_please/source_checkout.py index 497e643..1592835 100644 --- a/metadata_please/source_checkout.py +++ b/metadata_please/source_checkout.py @@ -213,7 +213,26 @@ def from_poetry_checkout(path: Path) -> bytes: optional = False if not version: - # e.g. git, path or url dependencies, skip for now + # e.g. git, path or url dependencies + if "path" in v: + buf.append(f"Requires-Dist: {v['path']}\n") + + elif "url" in v: + buf.append(f"Requires-Dist: {v['url']}\n") + + elif "git" in v: + git_link = f"git+{v['git']}" + + # from both poetry and pypa docs, seems like only one of the following should be specified + revision = v.get("rev") or v.get("tag") or v.get("branch") + if revision: + git_link += f"@{revision}" + + if "subdirectory" in v: + git_link += f"#subdirectory={v['subdirectory']}" + + buf.append(f"Requires-Dist: {k} @ {git_link}\n") + continue # https://python-poetry.org/docs/dependency-specification/#version-constraints diff --git a/metadata_please/tests/source_checkout.py b/metadata_please/tests/source_checkout.py index 8fb0191..2ab2857 100644 --- a/metadata_please/tests/source_checkout.py +++ b/metadata_please/tests/source_checkout.py @@ -110,7 +110,9 @@ def test_poetry_full(self) -> None: c3 = "~1" d = {version="2", python="<3.11"} e = {version="2", markers="sys_platform == 'darwin'"} -skipped = {git = "..."} +skipped = {git = "...", tag = "12345"} +my-package = { url = "https://example.com/my-package-0.1.0.tar.gz" } +my-other-package = { path = "../my-package/dist/my-other-package-0.1.0.tar.gz" } complex = {extras=["bar", "baz"], version="2"} opt = { version = "^2.9", optional = true} unused-extra = { version = "2", optional = true } @@ -131,6 +133,9 @@ def test_poetry_full(self) -> None: "c3>=1,<2", "d==2 ; python_version < '3.11'", "e==2 ; sys_platform == 'darwin'", + "skipped @ git+...@12345", + "https://example.com/my-package-0.1.0.tar.gz", + "../my-package/dist/my-other-package-0.1.0.tar.gz", "complex[bar,baz]==2", 'opt>=2.9,<3 ; extra == "foo"', ], From 2a30d32620b31d24159c4bd6046d74e43fa1d4ab Mon Sep 17 00:00:00 2001 From: Jadon Gaertner Date: Wed, 4 Dec 2024 11:01:03 -0800 Subject: [PATCH 4/7] more accurate translation logic --- metadata_please/source_checkout.py | 44 ++++++++++++++++-------- metadata_please/tests/source_checkout.py | 8 +++-- 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/metadata_please/source_checkout.py b/metadata_please/source_checkout.py index 1592835..bcfdaeb 100644 --- a/metadata_please/source_checkout.py +++ b/metadata_please/source_checkout.py @@ -25,6 +25,7 @@ from configparser import NoOptionError, NoSectionError, RawConfigParser from packaging.utils import canonicalize_name +from packaging.version import Version from .source_checkout_ast import SetupFindingVisitor, UNKNOWN @@ -139,22 +140,35 @@ def _translate_caret(specifier: str) -> str: Given a string like "^0.2.3" returns ">=0.2.3,<0.3.0". """ assert "," not in specifier - parts = specifier[1:].split(".") - while len(parts) < 3: - parts.append("0") - - for i in range(len(parts)): - if parts[i] != "0": - # The docs are not super clear about how this behaves, but let's - # assume integer-valued parts and just let the exception raise - # otherwise. - incremented = parts[:] - incremented[i] = str(int(parts[i]) + 1) - del incremented[i + 1 :] - incremented_version = ".".join(incremented) - break + + version = Version(specifier[1:]) + version_parts = list(version.release) + if version.is_prerelease or version.is_postrelease: + # Return next version, incrementing the least significant number + version_parts[-1] += 1 + else: - raise ValueError("All components were zero?") + if version.major > 0 or version.minor == 0: + # Next major version + version_parts[0] += 1 + + # Set the rest of the values to 0 + for i in range(1, len(version_parts)): + version_parts[i] = 0 + + elif version.minor > 0 or version.micro == 0: + # Next minor version. + version_parts[1] += 1 + + # Set the rest of the values to 0 + for i in range(2, len(version_parts)): + version_parts[i] = 0 + + else: + # Next patch version + version_parts[2] += 1 + + incremented_version = ".".join([str(i) for i in version_parts]) return f">={specifier[1:]},<{incremented_version}" diff --git a/metadata_please/tests/source_checkout.py b/metadata_please/tests/source_checkout.py index 2ab2857..4a2d6b0 100644 --- a/metadata_please/tests/source_checkout.py +++ b/metadata_please/tests/source_checkout.py @@ -105,6 +105,7 @@ def test_poetry_full(self) -> None: a2 = "*" b = "^1.2.3" b2 = "^0.2.3" +b3 = "^0.44b0" c = "~1.2.3" c2 = "~1.2" c3 = "~1" @@ -126,8 +127,9 @@ def test_poetry_full(self) -> None: [ "a==1.0", "a2", - "b>=1.2.3,<2", - "b2>=0.2.3,<0.3", + "b>=1.2.3,<2.0.0", + "b2>=0.2.3,<0.3.0", + "b3>=0.44b0,<0.45", "c>=1.2.3,<1.3", "c2>=1.2,<1.3", "c3>=1,<2", @@ -137,7 +139,7 @@ def test_poetry_full(self) -> None: "https://example.com/my-package-0.1.0.tar.gz", "../my-package/dist/my-other-package-0.1.0.tar.gz", "complex[bar,baz]==2", - 'opt>=2.9,<3 ; extra == "foo"', + 'opt>=2.9,<3.0 ; extra == "foo"', ], rv.reqs, ) From c6b94cacf2ddaf8b80b8dd92f30abd63890e9c92 Mon Sep 17 00:00:00 2001 From: Jadon Gaertner Date: Wed, 4 Dec 2024 11:22:05 -0800 Subject: [PATCH 5/7] added comment to clarify only numeric parts --- metadata_please/source_checkout.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/metadata_please/source_checkout.py b/metadata_please/source_checkout.py index bcfdaeb..c94e32a 100644 --- a/metadata_please/source_checkout.py +++ b/metadata_please/source_checkout.py @@ -142,7 +142,10 @@ def _translate_caret(specifier: str) -> str: assert "," not in specifier version = Version(specifier[1:]) + + # version.release takes out the pre- and post- parts and leaves only numbers version_parts = list(version.release) + if version.is_prerelease or version.is_postrelease: # Return next version, incrementing the least significant number version_parts[-1] += 1 From 8d1807ea5147dd899cb993e5a52f082b998be8d2 Mon Sep 17 00:00:00 2001 From: Jadon Gaertner Date: Wed, 4 Dec 2024 11:52:47 -0800 Subject: [PATCH 6/7] Revert "fixed poetry git, url, path deps to pass tests" This reverts commit 199be2583d32427e3023ed1d13160237ab0fd795. --- metadata_please/source_checkout.py | 21 +-------------------- metadata_please/tests/source_checkout.py | 7 +------ 2 files changed, 2 insertions(+), 26 deletions(-) diff --git a/metadata_please/source_checkout.py b/metadata_please/source_checkout.py index c94e32a..2e576da 100644 --- a/metadata_please/source_checkout.py +++ b/metadata_please/source_checkout.py @@ -230,26 +230,7 @@ def from_poetry_checkout(path: Path) -> bytes: optional = False if not version: - # e.g. git, path or url dependencies - if "path" in v: - buf.append(f"Requires-Dist: {v['path']}\n") - - elif "url" in v: - buf.append(f"Requires-Dist: {v['url']}\n") - - elif "git" in v: - git_link = f"git+{v['git']}" - - # from both poetry and pypa docs, seems like only one of the following should be specified - revision = v.get("rev") or v.get("tag") or v.get("branch") - if revision: - git_link += f"@{revision}" - - if "subdirectory" in v: - git_link += f"#subdirectory={v['subdirectory']}" - - buf.append(f"Requires-Dist: {k} @ {git_link}\n") - + # e.g. git, path or url dependencies, skip for now continue # https://python-poetry.org/docs/dependency-specification/#version-constraints diff --git a/metadata_please/tests/source_checkout.py b/metadata_please/tests/source_checkout.py index 4a2d6b0..bedebc8 100644 --- a/metadata_please/tests/source_checkout.py +++ b/metadata_please/tests/source_checkout.py @@ -111,9 +111,7 @@ def test_poetry_full(self) -> None: c3 = "~1" d = {version="2", python="<3.11"} e = {version="2", markers="sys_platform == 'darwin'"} -skipped = {git = "...", tag = "12345"} -my-package = { url = "https://example.com/my-package-0.1.0.tar.gz" } -my-other-package = { path = "../my-package/dist/my-other-package-0.1.0.tar.gz" } +skipped = {git = "..."} complex = {extras=["bar", "baz"], version="2"} opt = { version = "^2.9", optional = true} unused-extra = { version = "2", optional = true } @@ -135,9 +133,6 @@ def test_poetry_full(self) -> None: "c3>=1,<2", "d==2 ; python_version < '3.11'", "e==2 ; sys_platform == 'darwin'", - "skipped @ git+...@12345", - "https://example.com/my-package-0.1.0.tar.gz", - "../my-package/dist/my-other-package-0.1.0.tar.gz", "complex[bar,baz]==2", 'opt>=2.9,<3.0 ; extra == "foo"', ], From 8e9ffb9a984dc569d5ed61d33fdac5879e37f29d Mon Sep 17 00:00:00 2001 From: Jadon Gaertner Date: Wed, 4 Dec 2024 15:18:26 -0800 Subject: [PATCH 7/7] raise error for version all zeroes --- metadata_please/source_checkout.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/metadata_please/source_checkout.py b/metadata_please/source_checkout.py index 2e576da..48837ea 100644 --- a/metadata_please/source_checkout.py +++ b/metadata_please/source_checkout.py @@ -151,6 +151,9 @@ def _translate_caret(specifier: str) -> str: version_parts[-1] += 1 else: + if version.major == version.minor == version.micro == 0: + raise ValueError("All components were zero?") + if version.major > 0 or version.minor == 0: # Next major version version_parts[0] += 1