diff --git a/CHANGELOG.md b/CHANGELOG.md index 1293470..e4ad5b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## Unreleased + +* Fixed: + * The `enable` command would fail when the pyproject.toml tables were out of order. + ## v1.4.0 (2024-06-17) * Added: diff --git a/poetry_dynamic_versioning/cli.py b/poetry_dynamic_versioning/cli.py index 91f6e4b..bf0a69f 100644 --- a/poetry_dynamic_versioning/cli.py +++ b/poetry_dynamic_versioning/cli.py @@ -105,9 +105,9 @@ def _enable_in_doc(doc: tomlkit.TOMLDocument) -> tomlkit.TOMLDocument: tool_table = tomlkit.table().add(Key.pdv, pdv_table) if doc.get(Key.tool) is None: - doc.add(Key.tool, tool_table) + doc[Key.tool] = tool_table elif doc[Key.tool].get(Key.pdv) is None: # type: ignore - doc[Key.tool].add(Key.pdv, pdv_table) # type: ignore + doc[Key.tool][Key.pdv] = pdv_table # type: ignore else: doc[Key.tool][Key.pdv].update(pdv_table) # type: ignore @@ -116,7 +116,7 @@ def _enable_in_doc(doc: tomlkit.TOMLDocument) -> tomlkit.TOMLDocument: ) if doc.get(Key.build_system) is None: - doc.add(Key.build_system, build_system_table) + doc[Key.build_system] = build_system_table else: doc[Key.build_system].update(build_system_table) # type: ignore diff --git a/tests/test_unit.py b/tests/test_unit.py index 74fba79..9ea7792 100644 --- a/tests/test_unit.py +++ b/tests/test_unit.py @@ -111,9 +111,6 @@ def test__get_override_version__combined(): def test__enable_in_doc__empty(): doc = tomlkit.parse("") updated = cli._enable_in_doc(doc) - assert updated[cli.Key.tool][cli.Key.pdv][cli.Key.enable] is True - assert updated[cli.Key.build_system][cli.Key.requires] == cli._DEFAULT_REQUIRES - assert updated[cli.Key.build_system][cli.Key.build_backend] == cli._DEFAULT_BUILD_BACKEND assert ( tomlkit.dumps(updated) == textwrap.dedent( @@ -139,9 +136,19 @@ def test__enable_in_doc__added_pdv(): ) ) updated = cli._enable_in_doc(doc) - assert updated[cli.Key.tool][cli.Key.pdv][cli.Key.enable] is True - assert updated[cli.Key.build_system][cli.Key.requires] == cli._DEFAULT_REQUIRES - assert updated[cli.Key.build_system][cli.Key.build_backend] == cli._DEFAULT_BUILD_BACKEND + assert tomlkit.dumps(updated) == textwrap.dedent( + """ + [tool] + foo = 1 + + [tool.poetry-dynamic-versioning] + enable = true + + [build-system] + requires = ["poetry-core>=1.0.0", "poetry-dynamic-versioning>=1.0.0,<2.0.0"] + build-backend = "poetry_dynamic_versioning.backend" + """ + ) def test__enable_in_doc__updated_enable(): @@ -154,9 +161,16 @@ def test__enable_in_doc__updated_enable(): ) ) updated = cli._enable_in_doc(doc) - assert updated[cli.Key.tool][cli.Key.pdv][cli.Key.enable] is True - assert updated[cli.Key.build_system][cli.Key.requires] == cli._DEFAULT_REQUIRES - assert updated[cli.Key.build_system][cli.Key.build_backend] == cli._DEFAULT_BUILD_BACKEND + assert tomlkit.dumps(updated) == textwrap.dedent( + """ + [tool.poetry-dynamic-versioning] + enable = true + + [build-system] + requires = ["poetry-core>=1.0.0", "poetry-dynamic-versioning>=1.0.0,<2.0.0"] + build-backend = "poetry_dynamic_versioning.backend" + """ + ) def test__enable_in_doc__updated_requires(): @@ -169,9 +183,16 @@ def test__enable_in_doc__updated_requires(): ) ) updated = cli._enable_in_doc(doc) - assert updated[cli.Key.tool][cli.Key.pdv][cli.Key.enable] is True - assert updated[cli.Key.build_system][cli.Key.requires] == cli._DEFAULT_REQUIRES - assert updated[cli.Key.build_system][cli.Key.build_backend] == cli._DEFAULT_BUILD_BACKEND + assert tomlkit.dumps(updated) == textwrap.dedent( + """ + [build-system] + requires = ["poetry-core>=1.0.0", "poetry-dynamic-versioning>=1.0.0,<2.0.0"] + build-backend = "poetry_dynamic_versioning.backend" + + [tool.poetry-dynamic-versioning] + enable = true + """ + ) def test__enable_in_doc__updated_build_backend(): @@ -184,9 +205,49 @@ def test__enable_in_doc__updated_build_backend(): ) ) updated = cli._enable_in_doc(doc) - assert updated[cli.Key.tool][cli.Key.pdv][cli.Key.enable] is True - assert updated[cli.Key.build_system][cli.Key.requires] == cli._DEFAULT_REQUIRES - assert updated[cli.Key.build_system][cli.Key.build_backend] == cli._DEFAULT_BUILD_BACKEND + assert tomlkit.dumps(updated) == textwrap.dedent( + """ + [build-system] + build-backend = "poetry_dynamic_versioning.backend" + requires = ["poetry-core>=1.0.0", "poetry-dynamic-versioning>=1.0.0,<2.0.0"] + + [tool.poetry-dynamic-versioning] + enable = true + """ + ) + + +def test__enable_in_doc__out_of_order_tables(): + doc = tomlkit.parse( + textwrap.dedent( + """ + [tool.poetry] + name = "foo" + + [build-system] + build-backend = "" + + [tool.poetry.dependencies] + python = "^3.10" + """ + ) + ) + updated = cli._enable_in_doc(doc) + assert tomlkit.dumps(updated) == textwrap.dedent( + """ + [tool.poetry] + name = "foo" + + [tool.poetry-dynamic-versioning] + enable = true + [build-system] + build-backend = "poetry_dynamic_versioning.backend" + requires = ["poetry-core>=1.0.0", "poetry-dynamic-versioning>=1.0.0,<2.0.0"] + + [tool.poetry.dependencies] + python = "^3.10" + """ + ) def test__substitute_version_in_text__integers_only():