Skip to content

Commit

Permalink
feat(build-project): rewrite script entries when using custom top nam…
Browse files Browse the repository at this point in the history
…espace (#50)

* feat(build-project): rewrite script entries when using custom top namespace

* add unit tests for the TOML generate functions

* bump version to 1.4.0
  • Loading branch information
DavidVujic committed Mar 6, 2024
1 parent 5ea83d8 commit 5ba524a
Show file tree
Hide file tree
Showing 4 changed files with 139 additions and 3 deletions.
66 changes: 64 additions & 2 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 13 additions & 0 deletions poetry_multiproject_plugin/components/toml/generate.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,12 @@ def to_valid_dist_packages(
return local + relative_packages


def to_valid_entry(entry: str, top_ns: str) -> str:
prefix = f"{top_ns}."

return entry if prefix in entry else f"{prefix}{entry}"


def generate_valid_dist_project_file(
data: TOMLDocument, top_ns: Union[str, None]
) -> str:
Expand All @@ -57,4 +63,11 @@ def generate_valid_dist_project_file(

copy["tool"]["poetry"]["packages"].multiline(True)

scripts = copy["tool"]["poetry"].get("scripts", {})

if top_ns and scripts:
rewritten_scripts = {k: to_valid_entry(v, top_ns) for k, v in scripts.items()}

copy["tool"]["poetry"]["scripts"] = rewritten_scripts

return tomlkit.dumps(copy)
3 changes: 2 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "poetry-multiproject-plugin"
version = "1.3.5"
version = "1.4.0"
description = "A Poetry plugin that makes it possible to use relative package includes."
authors = ["David Vujic"]
license = "MIT"
Expand All @@ -22,6 +22,7 @@ mypy = "1.*"
black = "^22.10.0"
isort = "^5.10.1"
flake8 = "^5.0.4"
pytest = "^8.0.2"

[tool.isort]
profile = "black"
Expand Down
60 changes: 60 additions & 0 deletions test/components/toml/generate_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
from typing import Union

import tomlkit

from poetry_multiproject_plugin.components.toml import generate

pyproject_lib = """\
[tool.poetry]
packages = [
{include = "hello", from = "../world"},
]
"""

pyproject_cli = """\
[tool.poetry]
packages = [
{include = "hello", from = "../world"},
]
[tool.poetry.scripts]
my_cli = "my.console.app:run"
"""


def generate_toml(pyproj: str, ns: Union[str, None]) -> tomlkit.TOMLDocument:
data = tomlkit.loads(pyproj)

res = generate.generate_valid_dist_project_file(data, ns)

return tomlkit.loads(res)


def test_generate_project_file_without_any_changes():
data = generate_toml(pyproject_lib, None)

assert data["tool"]["poetry"]["packages"] == [{"include": "hello"}]


def test_generate_project_file_with_custom_namespace_for_packages():
data = generate_toml(pyproject_lib, "xyz")

assert data["tool"]["poetry"]["packages"] == [{"include": "xyz"}]


def test_generate_project_file_with_custom_namespace_in_script_entry_point():
data = generate_toml(pyproject_cli, "xyz")

assert data["tool"]["poetry"]["scripts"] == {"my_cli": "xyz.my.console.app:run"}


def test_generate_project_file_with_unchanged_script_entry_point():
data = generate_toml(pyproject_cli, "my")

assert data["tool"]["poetry"]["scripts"] == {"my_cli": "my.console.app:run"}


def test_generate_project_file_with_unchanged_script_entry_point_when_ns_is_in_path():
data = generate_toml(pyproject_cli, "console")

assert data["tool"]["poetry"]["scripts"] == {"my_cli": "my.console.app:run"}

0 comments on commit 5ba524a

Please sign in to comment.