From 0acf0eea952fc667d10d85489f16ab83448711ed Mon Sep 17 00:00:00 2001 From: David Hotham Date: Sat, 24 Sep 2022 13:58:23 +0100 Subject: [PATCH] removing tomlkit from poetry-core --- src/poetry/config/config.py | 2 +- src/poetry/config/file_config_source.py | 3 +- src/poetry/console/commands/add.py | 4 +- src/poetry/console/commands/check.py | 3 +- src/poetry/console/commands/config.py | 2 +- src/poetry/console/commands/init.py | 2 +- src/poetry/console/commands/remove.py | 4 +- .../console/commands/self/self_command.py | 2 +- src/poetry/console/commands/version.py | 4 +- src/poetry/factory.py | 4 +- src/poetry/inspection/info.py | 2 +- src/poetry/installation/executor.py | 4 +- src/poetry/installation/pip_installer.py | 2 +- src/poetry/layouts/layout.py | 3 +- src/poetry/masonry/builders/editable.py | 2 +- src/poetry/packages/locker.py | 2 + src/poetry/poetry.py | 14 ++- src/poetry/pyproject/toml.py | 59 ++++++++++ src/poetry/toml/__init__.py | 7 ++ src/poetry/toml/exceptions.py | 8 ++ src/poetry/toml/file.py | 42 +++++++ src/poetry/utils/env.py | 2 +- tests/console/commands/env/test_list.py | 2 +- tests/console/commands/env/test_use.py | 2 +- tests/console/commands/self/utils.py | 2 +- tests/console/commands/test_add.py | 104 +++++++++--------- tests/console/commands/test_lock.py | 8 +- tests/console/commands/test_remove.py | 32 +++--- tests/console/commands/test_update.py | 4 +- tests/console/commands/test_version.py | 4 +- tests/helpers.py | 4 +- tests/installation/test_installer.py | 2 +- tests/installation/test_installer_old.py | 2 +- tests/integration/test_utils_vcs_git.py | 2 +- tests/json/test_schema_sources.py | 3 +- .../masonry/builders/test_editable_builder.py | 4 +- tests/pyproject/__init__.py | 0 tests/pyproject/conftest.py | 43 ++++++++ tests/pyproject/test_pyproject_toml.py | 47 ++++++++ tests/pyproject/test_pyproject_toml_file.py | 28 +++++ tests/test_factory.py | 2 +- tests/utils/test_env.py | 1 + 42 files changed, 361 insertions(+), 112 deletions(-) create mode 100644 src/poetry/pyproject/toml.py create mode 100644 src/poetry/toml/__init__.py create mode 100644 src/poetry/toml/exceptions.py create mode 100644 src/poetry/toml/file.py create mode 100644 tests/pyproject/__init__.py create mode 100644 tests/pyproject/conftest.py create mode 100644 tests/pyproject/test_pyproject_toml.py create mode 100644 tests/pyproject/test_pyproject_toml_file.py diff --git a/src/poetry/config/config.py b/src/poetry/config/config.py index 7cbcba3fc10..312d9d661e1 100644 --- a/src/poetry/config/config.py +++ b/src/poetry/config/config.py @@ -11,12 +11,12 @@ from typing import Any from packaging.utils import canonicalize_name -from poetry.core.toml import TOMLFile from poetry.config.dict_config_source import DictConfigSource from poetry.config.file_config_source import FileConfigSource from poetry.locations import CONFIG_DIR from poetry.locations import DEFAULT_CACHE_DIR +from poetry.toml import TOMLFile if TYPE_CHECKING: diff --git a/src/poetry/config/file_config_source.py b/src/poetry/config/file_config_source.py index 7119fa19911..b3ccbb2f925 100644 --- a/src/poetry/config/file_config_source.py +++ b/src/poetry/config/file_config_source.py @@ -13,9 +13,10 @@ if TYPE_CHECKING: from collections.abc import Iterator - from poetry.core.toml.file import TOMLFile from tomlkit.toml_document import TOMLDocument + from poetry.toml.file import TOMLFile + class FileConfigSource(ConfigSource): def __init__(self, file: TOMLFile, auth_config: bool = False) -> None: diff --git a/src/poetry/console/commands/add.py b/src/poetry/console/commands/add.py index d4a85bc6d90..978c742ec63 100644 --- a/src/poetry/console/commands/add.py +++ b/src/poetry/console/commands/add.py @@ -119,7 +119,7 @@ def handle(self) -> int: # tomlkit types are awkward to work with, treat content as a mostly untyped # dictionary. - content: dict[str, Any] = self.poetry.file.read() + content: dict[str, Any] = self.poetry.toml_file.read() poetry_content = content["tool"]["poetry"] if group == MAIN_GROUP: @@ -253,7 +253,7 @@ def handle(self) -> int: if status == 0 and not self.option("dry-run"): assert isinstance(content, TOMLDocument) - self.poetry.file.write(content) + self.poetry.toml_file.write(content) return status diff --git a/src/poetry/console/commands/check.py b/src/poetry/console/commands/check.py index 30812883523..ae0500a7a90 100644 --- a/src/poetry/console/commands/check.py +++ b/src/poetry/console/commands/check.py @@ -56,9 +56,8 @@ def validate_classifiers( return errors, warnings def handle(self) -> int: - from poetry.core.pyproject.toml import PyProjectTOML - from poetry.factory import Factory + from poetry.pyproject.toml import PyProjectTOML # Load poetry config and display errors, if any poetry_file = Factory.locate(Path.cwd()) diff --git a/src/poetry/console/commands/config.py b/src/poetry/console/commands/config.py index 03773a5ef0d..cf86f097bc9 100644 --- a/src/poetry/console/commands/config.py +++ b/src/poetry/console/commands/config.py @@ -129,11 +129,11 @@ def handle(self) -> int: from pathlib import Path from poetry.core.pyproject.exceptions import PyProjectException - from poetry.core.toml.file import TOMLFile from poetry.config.config import Config from poetry.config.file_config_source import FileConfigSource from poetry.locations import CONFIG_DIR + from poetry.toml.file import TOMLFile config = Config.create() config_file = TOMLFile(CONFIG_DIR / "config.toml") diff --git a/src/poetry/console/commands/init.py b/src/poetry/console/commands/init.py index e2ebf9cf9b7..43c33ae5838 100644 --- a/src/poetry/console/commands/init.py +++ b/src/poetry/console/commands/init.py @@ -71,10 +71,10 @@ def __init__(self) -> None: def handle(self) -> int: from pathlib import Path - from poetry.core.pyproject.toml import PyProjectTOML from poetry.core.vcs.git import GitConfig from poetry.layouts import layout + from poetry.pyproject.toml import PyProjectTOML from poetry.utils.env import SystemEnv pyproject = PyProjectTOML(Path.cwd() / "pyproject.toml") diff --git a/src/poetry/console/commands/remove.py b/src/poetry/console/commands/remove.py index 29e3021684b..cb89e1a655d 100644 --- a/src/poetry/console/commands/remove.py +++ b/src/poetry/console/commands/remove.py @@ -51,7 +51,7 @@ def handle(self) -> int: else: group = self.option("group", self.default_group) - content: dict[str, Any] = self.poetry.file.read() + content: dict[str, Any] = self.poetry.toml_file.read() poetry_content = content["tool"]["poetry"] if group is None: @@ -117,7 +117,7 @@ def handle(self) -> int: if not self.option("dry-run") and status == 0: assert isinstance(content, TOMLDocument) - self.poetry.file.write(content) + self.poetry.toml_file.write(content) return status diff --git a/src/poetry/console/commands/self/self_command.py b/src/poetry/console/commands/self/self_command.py index 0c1a4ec3f79..cd997ceb012 100644 --- a/src/poetry/console/commands/self/self_command.py +++ b/src/poetry/console/commands/self/self_command.py @@ -5,11 +5,11 @@ from poetry.core.packages.dependency import Dependency from poetry.core.packages.project_package import ProjectPackage -from poetry.core.pyproject.toml import PyProjectTOML from poetry.__version__ import __version__ from poetry.console.commands.installer_command import InstallerCommand from poetry.factory import Factory +from poetry.pyproject.toml import PyProjectTOML from poetry.utils.env import EnvManager from poetry.utils.env import SystemEnv from poetry.utils.helpers import directory diff --git a/src/poetry/console/commands/version.py b/src/poetry/console/commands/version.py index c494879c4df..0796b008419 100644 --- a/src/poetry/console/commands/version.py +++ b/src/poetry/console/commands/version.py @@ -73,12 +73,12 @@ def handle(self) -> int: ) if not self.option("dry-run"): - content: dict[str, Any] = self.poetry.file.read() + content: dict[str, Any] = self.poetry.toml_file.read() poetry_content = content["tool"]["poetry"] poetry_content["version"] = version.text assert isinstance(content, TOMLDocument) - self.poetry.file.write(content) + self.poetry.toml_file.write(content) else: if self.option("short"): self.line(self.poetry.package.pretty_version) diff --git a/src/poetry/factory.py b/src/poetry/factory.py index 46856736354..34f39ab2617 100644 --- a/src/poetry/factory.py +++ b/src/poetry/factory.py @@ -12,7 +12,6 @@ from poetry.core.factory import Factory as BaseFactory from poetry.core.packages.dependency_group import MAIN_GROUP from poetry.core.packages.project_package import ProjectPackage -from poetry.core.toml.file import TOMLFile from poetry.config.config import Config from poetry.json import validate_object @@ -20,6 +19,7 @@ from poetry.plugins.plugin import Plugin from poetry.plugins.plugin_manager import PluginManager from poetry.poetry import Poetry +from poetry.toml.file import TOMLFile if TYPE_CHECKING: @@ -81,7 +81,7 @@ def create_poetry( config.merge({"repositories": repositories}) poetry = Poetry( - base_poetry.file.path, + base_poetry.file, base_poetry.local_config, base_poetry.package, locker, diff --git a/src/poetry/inspection/info.py b/src/poetry/inspection/info.py index 665fd641c84..23268d3e9cd 100644 --- a/src/poetry/inspection/info.py +++ b/src/poetry/inspection/info.py @@ -17,11 +17,11 @@ from poetry.core.factory import Factory from poetry.core.packages.dependency import Dependency from poetry.core.packages.package import Package -from poetry.core.pyproject.toml import PyProjectTOML from poetry.core.utils.helpers import parse_requires from poetry.core.utils.helpers import temporary_directory from poetry.core.version.markers import InvalidMarker +from poetry.pyproject.toml import PyProjectTOML from poetry.utils.env import EnvCommandError from poetry.utils.env import ephemeral_environment from poetry.utils.setup_reader import SetupReader diff --git a/src/poetry/installation/executor.py b/src/poetry/installation/executor.py index 2dc53d53016..bca88cdfa63 100644 --- a/src/poetry/installation/executor.py +++ b/src/poetry/installation/executor.py @@ -18,13 +18,13 @@ from cleo.io.null_io import NullIO from poetry.core.packages.file_dependency import FileDependency from poetry.core.packages.utils.link import Link -from poetry.core.pyproject.toml import PyProjectTOML from poetry.installation.chef import Chef from poetry.installation.chooser import Chooser from poetry.installation.operations import Install from poetry.installation.operations import Uninstall from poetry.installation.operations import Update +from poetry.pyproject.toml import PyProjectTOML from poetry.utils._compat import decode from poetry.utils.authenticator import Authenticator from poetry.utils.env import EnvCommandError @@ -558,7 +558,7 @@ def _install_directory(self, operation: Install | Update) -> int: package_poetry = None if pyproject.is_poetry_project(): with contextlib.suppress(RuntimeError): - package_poetry = Factory().create_poetry(pyproject.file.path.parent) + package_poetry = Factory().create_poetry(pyproject.file.parent) if package_poetry is not None: # Even if there is a build system specified diff --git a/src/poetry/installation/pip_installer.py b/src/poetry/installation/pip_installer.py index 7ee24915f62..725bcb2a106 100644 --- a/src/poetry/installation/pip_installer.py +++ b/src/poetry/installation/pip_installer.py @@ -226,7 +226,7 @@ def install_directory(self, package: Package) -> str | int: package_poetry = None if pyproject.is_poetry_project(): with contextlib.suppress(RuntimeError): - package_poetry = Factory().create_poetry(pyproject.file.path.parent) + package_poetry = Factory().create_poetry(pyproject.file.parent) if package_poetry is not None: # Even if there is a build system specified diff --git a/src/poetry/layouts/layout.py b/src/poetry/layouts/layout.py index 66b5ea946ca..01fe82dbad7 100644 --- a/src/poetry/layouts/layout.py +++ b/src/poetry/layouts/layout.py @@ -5,13 +5,14 @@ from typing import Any from packaging.utils import canonicalize_name -from poetry.core.pyproject.toml import PyProjectTOML from poetry.core.utils.helpers import module_name from tomlkit import inline_table from tomlkit import loads from tomlkit import table from tomlkit.toml_document import TOMLDocument +from poetry.pyproject.toml import PyProjectTOML + if TYPE_CHECKING: from typing import Mapping diff --git a/src/poetry/masonry/builders/editable.py b/src/poetry/masonry/builders/editable.py index 1b38c2bee03..c5cc759667b 100644 --- a/src/poetry/masonry/builders/editable.py +++ b/src/poetry/masonry/builders/editable.py @@ -249,7 +249,7 @@ def _add_dist_info(self, added_files: list[Path]) -> None: json.dumps( { "dir_info": {"editable": True}, - "url": self._poetry.file.path.parent.as_uri(), + "url": self._poetry.file.parent.as_uri(), } ) ) diff --git a/src/poetry/packages/locker.py b/src/poetry/packages/locker.py index cc31be7c6fc..00fba770fe2 100644 --- a/src/poetry/packages/locker.py +++ b/src/poetry/packages/locker.py @@ -22,6 +22,8 @@ from poetry.core.version.markers import parse_marker from poetry.core.version.requirements import InvalidRequirement +from poetry.toml.file import TOMLFile + if TYPE_CHECKING: from poetry.core.packages.directory_dependency import DirectoryDependency diff --git a/src/poetry/poetry.py b/src/poetry/poetry.py index 42ceff2e47e..d3e71ce6db6 100644 --- a/src/poetry/poetry.py +++ b/src/poetry/poetry.py @@ -2,11 +2,13 @@ from typing import TYPE_CHECKING from typing import Any +from typing import cast from poetry.core.poetry import Poetry as BasePoetry from poetry.__version__ import __version__ from poetry.config.source import Source +from poetry.pyproject.toml import PyProjectTOML if TYPE_CHECKING: @@ -18,6 +20,7 @@ from poetry.packages.locker import Locker from poetry.plugins.plugin_manager import PluginManager from poetry.repositories.pool import Pool + from poetry.toml import TOMLFile class Poetry(BasePoetry): @@ -34,7 +37,7 @@ def __init__( ) -> None: from poetry.repositories.pool import Pool - super().__init__(file, local_config, package) + super().__init__(file, local_config, package, pyproject_type=PyProjectTOML) self._locker = locker self._config = config @@ -42,6 +45,15 @@ def __init__( self._plugin_manager: PluginManager | None = None self._disable_cache = disable_cache + @property + def pyproject(self) -> PyProjectTOML: + pyproject = super().pyproject + return cast(PyProjectTOML, pyproject) + + @property + def toml_file(self) -> TOMLFile: + return self.pyproject.toml_file + @property def locker(self) -> Locker: return self._locker diff --git a/src/poetry/pyproject/toml.py b/src/poetry/pyproject/toml.py new file mode 100644 index 00000000000..71cc55f4c22 --- /dev/null +++ b/src/poetry/pyproject/toml.py @@ -0,0 +1,59 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING + +from poetry.core.pyproject.toml import PyProjectTOML as BasePyProjectTOML +from tomlkit.api import table +from tomlkit.items import Table +from tomlkit.toml_document import TOMLDocument + +from poetry.toml import TOMLFile + + +if TYPE_CHECKING: + from pathlib import Path + + +# Enhanced version of poetry-core's PyProjectTOML which is capable of writing +# pyproject.toml +# +# The poetry-core class uses tomli to read the file, here we use tomlkit so as to +# preserve comments and formatting when writing. +class PyProjectTOML(BasePyProjectTOML): + def __init__(self, path: str | Path) -> None: + super().__init__(path) + self._toml_file = TOMLFile(path=path) + self._toml_document: TOMLDocument | None = None + + @property + def toml_file(self) -> TOMLFile: + return self._toml_file + + @property + def data(self) -> TOMLDocument: + if self._toml_document is None: + if not self._file.exists(): + self._toml_document = TOMLDocument() + else: + self._toml_document = self.toml_file.read() + + return self._toml_document + + def save(self) -> None: + data = self.data + + if self._build_system is not None: + if "build-system" not in data: + data["build-system"] = table() + + build_system = data["build-system"] + assert isinstance(build_system, Table) + + build_system["requires"] = self._build_system.requires + build_system["build-backend"] = self._build_system.build_backend + + self.toml_file.write(data=data) + + def reload(self) -> None: + self._toml_document = None + self._build_system = None diff --git a/src/poetry/toml/__init__.py b/src/poetry/toml/__init__.py new file mode 100644 index 00000000000..32aee9a2f04 --- /dev/null +++ b/src/poetry/toml/__init__.py @@ -0,0 +1,7 @@ +from __future__ import annotations + +from poetry.toml.exceptions import TOMLError +from poetry.toml.file import TOMLFile + + +__all__ = ["TOMLError", "TOMLFile"] diff --git a/src/poetry/toml/exceptions.py b/src/poetry/toml/exceptions.py new file mode 100644 index 00000000000..66fcec0063b --- /dev/null +++ b/src/poetry/toml/exceptions.py @@ -0,0 +1,8 @@ +from __future__ import annotations + +from poetry.core.exceptions import PoetryCoreException +from tomlkit.exceptions import TOMLKitError + + +class TOMLError(TOMLKitError, PoetryCoreException): + pass diff --git a/src/poetry/toml/file.py b/src/poetry/toml/file.py new file mode 100644 index 00000000000..e6befd1ad68 --- /dev/null +++ b/src/poetry/toml/file.py @@ -0,0 +1,42 @@ +from __future__ import annotations + +from pathlib import Path +from typing import TYPE_CHECKING +from typing import Any + +from tomlkit.toml_file import TOMLFile as BaseTOMLFile + + +if TYPE_CHECKING: + from tomlkit.toml_document import TOMLDocument + + +class TOMLFile(BaseTOMLFile): + def __init__(self, path: str | Path) -> None: + if isinstance(path, str): + path = Path(path) + super().__init__(path.as_posix()) + self.__path = path + + @property + def path(self) -> Path: + return self.__path + + def exists(self) -> bool: + return self.__path.exists() + + def read(self) -> TOMLDocument: + from tomlkit.exceptions import TOMLKitError + + from poetry.toml import TOMLError + + try: + return super().read() + except (ValueError, TOMLKitError) as e: + raise TOMLError(f"Invalid TOML file {self.path.as_posix()}: {e}") + + def __getattr__(self, item: str) -> Any: + return getattr(self.__path, item) + + def __str__(self) -> str: + return self.__path.as_posix() diff --git a/src/poetry/utils/env.py b/src/poetry/utils/env.py index d76972ca50d..a49713596d0 100644 --- a/src/poetry/utils/env.py +++ b/src/poetry/utils/env.py @@ -32,10 +32,10 @@ from packaging.tags import sys_tags from poetry.core.constraints.version import Version from poetry.core.constraints.version import parse_constraint -from poetry.core.toml.file import TOMLFile from poetry.core.utils.helpers import temporary_directory from virtualenv.seed.wheels.embed import get_embed_wheel +from poetry.toml.file import TOMLFile from poetry.utils._compat import WINDOWS from poetry.utils._compat import decode from poetry.utils._compat import encode diff --git a/tests/console/commands/env/test_list.py b/tests/console/commands/env/test_list.py index 2f284470bbd..ce079d23fe1 100644 --- a/tests/console/commands/env/test_list.py +++ b/tests/console/commands/env/test_list.py @@ -5,7 +5,7 @@ import pytest import tomlkit -from poetry.core.toml.file import TOMLFile +from poetry.toml.file import TOMLFile if TYPE_CHECKING: diff --git a/tests/console/commands/env/test_use.py b/tests/console/commands/env/test_use.py index ad05e1e73b1..1f2ed7d5876 100644 --- a/tests/console/commands/env/test_use.py +++ b/tests/console/commands/env/test_use.py @@ -9,8 +9,8 @@ import tomlkit from poetry.core.constraints.version import Version -from poetry.core.toml.file import TOMLFile +from poetry.toml.file import TOMLFile from poetry.utils.env import MockEnv from tests.console.commands.env.helpers import build_venv from tests.console.commands.env.helpers import check_output_wrapper diff --git a/tests/console/commands/self/utils.py b/tests/console/commands/self/utils.py index 793f36a021d..b17bac8f88d 100644 --- a/tests/console/commands/self/utils.py +++ b/tests/console/commands/self/utils.py @@ -24,7 +24,7 @@ def get_self_command_dependencies(locked: bool = True) -> TOMLTable: poetry = Factory().create_poetry(system_pyproject_file.parent, disable_plugins=True) - content = poetry.file.read()["tool"]["poetry"] + content = poetry.toml_file.read()["tool"]["poetry"] assert "group" in content assert SelfCommand.ADDITIONAL_PACKAGE_GROUP in content["group"] diff --git a/tests/console/commands/test_add.py b/tests/console/commands/test_add.py index fedaacc020e..298f94f68e4 100644 --- a/tests/console/commands/test_add.py +++ b/tests/console/commands/test_add.py @@ -78,7 +78,7 @@ def test_add_no_constraint( assert tester.io.fetch_output() == expected assert tester.command.installer.executor.installations_count == 1 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "cachy" in content["dependencies"] assert content["dependencies"]["cachy"] == "^0.2.0" @@ -107,7 +107,7 @@ def test_add_replace_by_constraint( assert tester.io.fetch_output() == expected assert tester.command.installer.executor.installations_count == 1 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "cachy" in content["dependencies"] assert content["dependencies"]["cachy"] == "^0.2.0" @@ -125,7 +125,7 @@ def test_add_replace_by_constraint( """ assert tester.io.fetch_output() == expected - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "cachy" in content["dependencies"] assert content["dependencies"]["cachy"] == "0.1.0" @@ -134,7 +134,7 @@ def test_add_replace_by_constraint( def test_add_no_constraint_editable_error( app: PoetryTestApplication, repo: TestRepository, tester: CommandTester ): - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] repo.add_package(get_package("cachy", "0.2.0")) @@ -149,7 +149,7 @@ def test_add_no_constraint_editable_error( assert tester.status_code == 1 assert tester.io.fetch_error() == expected assert tester.command.installer.executor.installations_count == 0 - assert content == app.poetry.file.read()["tool"]["poetry"] + assert content == app.poetry.toml_file.read()["tool"]["poetry"] def test_add_equal_constraint( @@ -294,7 +294,7 @@ def test_add_git_constraint( assert tester.io.fetch_output() == expected assert tester.command.installer.executor.installations_count == 2 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "demo" in content["dependencies"] assert content["dependencies"]["demo"] == { @@ -365,7 +365,7 @@ def test_add_git_constraint_with_extras( assert tester.io.fetch_output().strip() == expected.strip() assert tester.command.installer.executor.installations_count == 4 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "demo" in content["dependencies"] assert content["dependencies"]["demo"] == { @@ -407,7 +407,7 @@ def test_add_git_constraint_with_subdirectory( assert tester.io.fetch_output().strip() == expected.strip() assert tester.command.installer.executor.installations_count == 1 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] constraint = { "git": "https://github.com/demo/subdirectories.git", @@ -453,7 +453,7 @@ def test_add_git_ssh_constraint( assert tester.io.fetch_output() == expected assert tester.command.installer.executor.installations_count == 2 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "demo" in content["dependencies"] @@ -500,7 +500,7 @@ def test_add_directory_constraint( assert tester.io.fetch_output() == expected assert tester.command.installer.executor.installations_count == 2 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "demo" in content["dependencies"] @@ -573,7 +573,7 @@ def test_add_file_constraint_wheel( assert tester.io.fetch_output() == expected assert tester.command.installer.executor.installations_count == 2 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "demo" in content["dependencies"] assert content["dependencies"]["demo"] == {"path": path} @@ -609,7 +609,7 @@ def test_add_file_constraint_sdist( assert tester.io.fetch_output() == expected assert tester.command.installer.executor.installations_count == 2 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "demo" in content["dependencies"] assert content["dependencies"]["demo"] == {"path": path} @@ -649,7 +649,7 @@ def test_add_constraint_with_extras_option( assert tester.io.fetch_output() == expected assert tester.command.installer.executor.installations_count == 2 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "cachy" in content["dependencies"] assert content["dependencies"]["cachy"] == { @@ -690,7 +690,7 @@ def test_add_url_constraint_wheel( assert tester.io.fetch_output() == expected assert tester.command.installer.executor.installations_count == 2 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "demo" in content["dependencies"] assert content["dependencies"]["demo"] == { @@ -736,7 +736,7 @@ def test_add_url_constraint_wheel_with_extras( assert output == expected assert tester.command.installer.executor.installations_count == 4 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "demo" in content["dependencies"] assert content["dependencies"]["demo"] == { @@ -772,7 +772,7 @@ def test_add_constraint_with_python( assert tester.io.fetch_output() == expected assert tester.command.installer.executor.installations_count == 1 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "cachy" in content["dependencies"] assert content["dependencies"]["cachy"] == {"version": "0.2.0", "python": ">=2.7"} @@ -809,7 +809,7 @@ def test_add_constraint_with_platform( assert tester.io.fetch_output() == expected assert tester.command.installer.executor.installations_count == 1 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "cachy" in content["dependencies"] assert content["dependencies"]["cachy"] == { @@ -846,7 +846,7 @@ def test_add_constraint_with_source( assert tester.io.fetch_output() == expected assert tester.command.installer.executor.installations_count == 1 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "cachy" in content["dependencies"] assert content["dependencies"]["cachy"] == { @@ -908,7 +908,7 @@ def test_add_to_section_that_does_not_exist_yet( assert tester.io.fetch_output() == expected assert tester.command.installer.executor.installations_count == 1 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "cachy" in content["group"]["dev"]["dependencies"] assert content["group"]["dev"]["dependencies"]["cachy"] == "^0.2.0" @@ -956,7 +956,7 @@ def test_add_to_dev_section_deprecated( assert tester.io.fetch_output() == expected assert tester.command.installer.executor.installations_count == 1 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "cachy" in content["group"]["dev"]["dependencies"] assert content["group"]["dev"]["dependencies"]["cachy"] == "^0.2.0" @@ -986,7 +986,7 @@ def test_add_should_not_select_prereleases( assert tester.io.fetch_output() == expected assert tester.command.installer.executor.installations_count == 1 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "pyyaml" in content["dependencies"] assert content["dependencies"]["pyyaml"] == "^3.13" @@ -995,9 +995,9 @@ def test_add_should_not_select_prereleases( def test_add_should_skip_when_adding_existing_package_with_no_constraint( app: PoetryTestApplication, repo: TestRepository, tester: CommandTester ): - content = app.poetry.file.read() + content = app.poetry.toml_file.read() content["tool"]["poetry"]["dependencies"]["foo"] = "^1.0" - app.poetry.file.write(content) + app.poetry.toml_file.write(content) repo.add_package(get_package("foo", "1.1.2")) tester.execute("foo") @@ -1019,9 +1019,9 @@ def test_add_should_skip_when_adding_existing_package_with_no_constraint( def test_add_should_skip_when_adding_canonicalized_existing_package_with_no_constraint( app: PoetryTestApplication, repo: TestRepository, tester: CommandTester ): - content = app.poetry.file.read() + content = app.poetry.toml_file.read() content["tool"]["poetry"]["dependencies"]["foo-bar"] = "^1.0" - app.poetry.file.write(content) + app.poetry.toml_file.write(content) repo.add_package(get_package("foo-bar", "1.1.2")) tester.execute("Foo_Bar") @@ -1043,9 +1043,9 @@ def test_add_should_skip_when_adding_canonicalized_existing_package_with_no_cons def test_add_should_work_when_adding_existing_package_with_latest_constraint( app: PoetryTestApplication, repo: TestRepository, tester: CommandTester ): - content = app.poetry.file.read() + content = app.poetry.toml_file.read() content["tool"]["poetry"]["dependencies"]["foo"] = "^1.0" - app.poetry.file.write(content) + app.poetry.toml_file.write(content) repo.add_package(get_package("foo", "1.1.2")) @@ -1066,7 +1066,7 @@ def test_add_should_work_when_adding_existing_package_with_latest_constraint( assert expected in tester.io.fetch_output() - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "foo" in content["dependencies"] assert content["dependencies"]["foo"] == "^1.1.2" @@ -1168,7 +1168,7 @@ def test_add_no_constraint_old_installer( assert len(installer.installs) == 1 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "cachy" in content["dependencies"] assert content["dependencies"]["cachy"] == "^0.2.0" @@ -1329,7 +1329,7 @@ def test_add_git_constraint_old_installer( assert len(installer.installs) == 2 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "demo" in content["dependencies"] assert content["dependencies"]["demo"] == { @@ -1398,7 +1398,7 @@ def test_add_git_constraint_with_extras_old_installer( assert len(installer.installs) == 4 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "demo" in content["dependencies"] assert content["dependencies"]["demo"] == { @@ -1435,7 +1435,7 @@ def test_add_git_ssh_constraint_old_installer( assert len(installer.installs) == 2 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "demo" in content["dependencies"] assert content["dependencies"]["demo"] == { @@ -1477,7 +1477,7 @@ def test_add_directory_constraint_old_installer( assert len(installer.installs) == 2 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "demo" in content["dependencies"] assert content["dependencies"]["demo"] == {"path": path} @@ -1548,7 +1548,7 @@ def test_add_file_constraint_wheel_old_installer( assert len(installer.installs) == 2 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "demo" in content["dependencies"] assert content["dependencies"]["demo"] == {"path": path} @@ -1586,7 +1586,7 @@ def test_add_file_constraint_sdist_old_installer( assert len(installer.installs) == 2 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "demo" in content["dependencies"] assert content["dependencies"]["demo"] == {"path": path} @@ -1628,7 +1628,7 @@ def test_add_constraint_with_extras_option_old_installer( assert len(installer.installs) == 2 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "cachy" in content["dependencies"] assert content["dependencies"]["cachy"] == { @@ -1671,7 +1671,7 @@ def test_add_url_constraint_wheel_old_installer( assert len(installer.installs) == 2 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "demo" in content["dependencies"] assert content["dependencies"]["demo"] == { @@ -1716,7 +1716,7 @@ def test_add_url_constraint_wheel_with_extras_old_installer( assert len(installer.installs) == 4 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "demo" in content["dependencies"] assert content["dependencies"]["demo"] == { @@ -1756,7 +1756,7 @@ def test_add_constraint_with_python_old_installer( assert len(installer.installs) == 1 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "cachy" in content["dependencies"] assert content["dependencies"]["cachy"] == {"version": "0.2.0", "python": ">=2.7"} @@ -1795,7 +1795,7 @@ def test_add_constraint_with_platform_old_installer( assert len(installer.installs) == 1 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "cachy" in content["dependencies"] assert content["dependencies"]["cachy"] == { @@ -1836,7 +1836,7 @@ def test_add_constraint_with_source_old_installer( assert len(installer.installs) == 1 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "cachy" in content["dependencies"] assert content["dependencies"]["cachy"] == { @@ -1902,7 +1902,7 @@ def test_add_to_section_that_does_no_exist_yet_old_installer( assert len(installer.installs) == 1 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "cachy" in content["group"]["dev"]["dependencies"] assert content["group"]["dev"]["dependencies"]["cachy"] == "^0.2.0" @@ -1936,7 +1936,7 @@ def test_add_should_not_select_prereleases_old_installer( assert len(installer.installs) == 1 - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "pyyaml" in content["dependencies"] assert content["dependencies"]["pyyaml"] == "^3.13" @@ -1948,9 +1948,9 @@ def test_add_should_skip_when_adding_existing_package_with_no_constraint_old_ins installer: NoopInstaller, old_tester: CommandTester, ): - content = app.poetry.file.read() + content = app.poetry.toml_file.read() content["tool"]["poetry"]["dependencies"]["foo"] = "^1.0" - app.poetry.file.write(content) + app.poetry.toml_file.write(content) repo.add_package(get_package("foo", "1.1.2")) @@ -1976,9 +1976,9 @@ def test_add_should_work_when_adding_existing_package_with_latest_constraint_old installer: NoopInstaller, old_tester: CommandTester, ): - content = app.poetry.file.read() + content = app.poetry.toml_file.read() content["tool"]["poetry"]["dependencies"]["foo"] = "^1.0" - app.poetry.file.write(content) + app.poetry.toml_file.write(content) repo.add_package(get_package("foo", "1.1.2")) @@ -1999,7 +1999,7 @@ def test_add_should_work_when_adding_existing_package_with_latest_constraint_old assert expected in old_tester.io.fetch_output() - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "foo" in content["dependencies"] assert content["dependencies"]["foo"] == "^1.1.2" @@ -2091,7 +2091,7 @@ def test_add_keyboard_interrupt_restore_content( mocker.patch( "poetry.installation.installer.Installer.run", side_effect=KeyboardInterrupt() ) - original_pyproject_content = poetry_with_up_to_date_lockfile.file.read() + original_pyproject_content = poetry_with_up_to_date_lockfile.toml_file.read() original_lockfile_content = poetry_with_up_to_date_lockfile._locker.lock_data repo.add_package(get_package("cachy", "0.2.0")) @@ -2099,7 +2099,7 @@ def test_add_keyboard_interrupt_restore_content( tester.execute("cachy") - assert poetry_with_up_to_date_lockfile.file.read() == original_pyproject_content + assert poetry_with_up_to_date_lockfile.toml_file.read() == original_pyproject_content assert ( poetry_with_up_to_date_lockfile._locker.lock_data == original_lockfile_content ) @@ -2120,7 +2120,7 @@ def test_add_with_dry_run_keep_files_intact( ): tester = command_tester_factory("add", poetry=poetry_with_up_to_date_lockfile) - original_pyproject_content = poetry_with_up_to_date_lockfile.file.read() + original_pyproject_content = poetry_with_up_to_date_lockfile.toml_file.read() original_lockfile_content = poetry_with_up_to_date_lockfile._locker.lock_data repo.add_package(get_package("cachy", "0.2.0")) @@ -2128,7 +2128,7 @@ def test_add_with_dry_run_keep_files_intact( tester.execute(command) - assert poetry_with_up_to_date_lockfile.file.read() == original_pyproject_content + assert poetry_with_up_to_date_lockfile.toml_file.read() == original_pyproject_content assert ( poetry_with_up_to_date_lockfile._locker.lock_data == original_lockfile_content ) diff --git a/tests/console/commands/test_lock.py b/tests/console/commands/test_lock.py index 5d6eb53887e..08a05660f69 100644 --- a/tests/console/commands/test_lock.py +++ b/tests/console/commands/test_lock.py @@ -75,7 +75,7 @@ def test_lock_check_outdated( http.disable() locker = Locker( - lock=poetry_with_outdated_lockfile.pyproject.file.path.parent / "poetry.lock", + lock=poetry_with_outdated_lockfile.pyproject.file.parent / "poetry.lock", local_config=poetry_with_outdated_lockfile.locker._local_config, ) poetry_with_outdated_lockfile.set_locker(locker) @@ -101,7 +101,7 @@ def test_lock_check_up_to_date( http.disable() locker = Locker( - lock=poetry_with_up_to_date_lockfile.pyproject.file.path.parent / "poetry.lock", + lock=poetry_with_up_to_date_lockfile.pyproject.file.parent / "poetry.lock", local_config=poetry_with_up_to_date_lockfile.locker._local_config, ) poetry_with_up_to_date_lockfile.set_locker(locker) @@ -124,7 +124,7 @@ def test_lock_no_update( repo.add_package(get_package("sampleproject", "2.0.0")) locker = Locker( - lock=poetry_with_old_lockfile.pyproject.file.path.parent / "poetry.lock", + lock=poetry_with_old_lockfile.pyproject.file.parent / "poetry.lock", local_config=poetry_with_old_lockfile.locker._local_config, ) poetry_with_old_lockfile.set_locker(locker) @@ -139,7 +139,7 @@ def test_lock_no_update( tester.execute("--no-update") locker = Locker( - lock=poetry_with_old_lockfile.pyproject.file.path.parent / "poetry.lock", + lock=poetry_with_old_lockfile.pyproject.file.parent / "poetry.lock", local_config={}, ) packages = locker.locked_repository().packages diff --git a/tests/console/commands/test_remove.py b/tests/console/commands/test_remove.py index 0a2fa1b6c00..b5c5ccc1a15 100644 --- a/tests/console/commands/test_remove.py +++ b/tests/console/commands/test_remove.py @@ -56,7 +56,7 @@ def test_remove_without_specific_group_removes_from_all_groups( repo.add_package(Package("foo", "2.0.0")) repo.add_package(Package("baz", "1.0.0")) - content = app.poetry.file.read() + content = app.poetry.toml_file.read() groups_content = tomlkit.parse( """\ @@ -68,7 +68,7 @@ def test_remove_without_specific_group_removes_from_all_groups( ) content["tool"]["poetry"]["dependencies"]["foo"] = "^2.0.0" content["tool"]["poetry"]["group"] = groups_content["tool"]["poetry"]["group"] - app.poetry.file.write(content) + app.poetry.toml_file.write(content) app.poetry.package.add_dependency(Factory.create_dependency("foo", "^2.0.0")) app.poetry.package.add_dependency( @@ -80,7 +80,7 @@ def test_remove_without_specific_group_removes_from_all_groups( tester.execute("foo") - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "foo" not in content["dependencies"] assert "foo" not in content["group"]["bar"]["dependencies"] assert "baz" in content["group"]["bar"]["dependencies"] @@ -113,7 +113,7 @@ def test_remove_without_specific_group_removes_from_specific_groups( repo.add_package(Package("foo", "2.0.0")) repo.add_package(Package("baz", "1.0.0")) - content = app.poetry.file.read() + content = app.poetry.toml_file.read() groups_content = tomlkit.parse( """\ @@ -125,7 +125,7 @@ def test_remove_without_specific_group_removes_from_specific_groups( ) content["tool"]["poetry"]["dependencies"]["foo"] = "^2.0.0" content["tool"]["poetry"]["group"] = groups_content["tool"]["poetry"]["group"] - app.poetry.file.write(content) + app.poetry.toml_file.write(content) app.poetry.package.add_dependency(Factory.create_dependency("foo", "^2.0.0")) app.poetry.package.add_dependency( @@ -137,7 +137,7 @@ def test_remove_without_specific_group_removes_from_specific_groups( tester.execute("foo --group bar") - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "foo" in content["dependencies"] assert "foo" not in content["group"]["bar"]["dependencies"] assert "baz" in content["group"]["bar"]["dependencies"] @@ -170,7 +170,7 @@ def test_remove_does_not_live_empty_groups( repo.add_package(Package("foo", "2.0.0")) repo.add_package(Package("baz", "1.0.0")) - content = app.poetry.file.read() + content = app.poetry.toml_file.read() groups_content = tomlkit.parse( """\ @@ -182,7 +182,7 @@ def test_remove_does_not_live_empty_groups( ) content["tool"]["poetry"]["dependencies"]["foo"] = "^2.0.0" content["tool"]["poetry"]["group"] = groups_content["tool"]["poetry"]["group"] - app.poetry.file.write(content) + app.poetry.toml_file.write(content) app.poetry.package.add_dependency(Factory.create_dependency("foo", "^2.0.0")) app.poetry.package.add_dependency( @@ -194,7 +194,7 @@ def test_remove_does_not_live_empty_groups( tester.execute("foo baz --group bar") - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "foo" in content["dependencies"] assert "foo" not in content["group"]["bar"]["dependencies"] assert "baz" not in content["group"]["bar"]["dependencies"] @@ -216,7 +216,7 @@ def test_remove_canonicalized_named_removes_dependency_correctly( repo.add_package(Package("foo-bar", "2.0.0")) repo.add_package(Package("baz", "1.0.0")) - content = app.poetry.file.read() + content = app.poetry.toml_file.read() groups_content = tomlkit.parse( """\ @@ -230,7 +230,7 @@ def test_remove_canonicalized_named_removes_dependency_correctly( content["tool"]["poetry"].value._insert_after( "dependencies", "group", groups_content["tool"]["poetry"]["group"] ) - app.poetry.file.write(content) + app.poetry.toml_file.write(content) app.poetry.package.add_dependency(Factory.create_dependency("foo-bar", "^2.0.0")) app.poetry.package.add_dependency( @@ -242,7 +242,7 @@ def test_remove_canonicalized_named_removes_dependency_correctly( tester.execute("Foo_Bar") - content = app.poetry.file.read()["tool"]["poetry"] + content = app.poetry.toml_file.read()["tool"]["poetry"] assert "foo-bar" not in content["dependencies"] assert "foo-bar" not in content["group"]["bar"]["dependencies"] assert "baz" in content["group"]["bar"]["dependencies"] @@ -274,11 +274,11 @@ def test_remove_command_should_not_write_changes_upon_installer_errors( mocker.patch("poetry.installation.installer.Installer.run", return_value=1) - original_content = app.poetry.file.read().as_string() + original_content = app.poetry.toml_file.read().as_string() tester.execute("foo") - assert app.poetry.file.read().as_string() == original_content + assert app.poetry.toml_file.read().as_string() == original_content def test_remove_with_dry_run_keep_files_intact( @@ -288,14 +288,14 @@ def test_remove_with_dry_run_keep_files_intact( ): tester = command_tester_factory("remove", poetry=poetry_with_up_to_date_lockfile) - original_pyproject_content = poetry_with_up_to_date_lockfile.file.read() + original_pyproject_content = poetry_with_up_to_date_lockfile.toml_file.read() original_lockfile_content = poetry_with_up_to_date_lockfile._locker.lock_data repo.add_package(get_package("docker", "4.3.1")) tester.execute("docker --dry-run") - assert poetry_with_up_to_date_lockfile.file.read() == original_pyproject_content + assert poetry_with_up_to_date_lockfile.toml_file.read() == original_pyproject_content assert ( poetry_with_up_to_date_lockfile._locker.lock_data == original_lockfile_content ) diff --git a/tests/console/commands/test_update.py b/tests/console/commands/test_update.py index dd3306cf2ba..29ee280e013 100644 --- a/tests/console/commands/test_update.py +++ b/tests/console/commands/test_update.py @@ -43,7 +43,7 @@ def test_update_with_dry_run_keep_files_intact( ): tester = command_tester_factory("update", poetry=poetry_with_up_to_date_lockfile) - original_pyproject_content = poetry_with_up_to_date_lockfile.file.read() + original_pyproject_content = poetry_with_up_to_date_lockfile.toml_file.read() original_lockfile_content = poetry_with_up_to_date_lockfile._locker.lock_data repo.add_package(get_package("docker", "4.3.0")) @@ -51,7 +51,7 @@ def test_update_with_dry_run_keep_files_intact( tester.execute(command) - assert poetry_with_up_to_date_lockfile.file.read() == original_pyproject_content + assert poetry_with_up_to_date_lockfile.toml_file.read() == original_pyproject_content assert ( poetry_with_up_to_date_lockfile._locker.lock_data == original_lockfile_content ) diff --git a/tests/console/commands/test_version.py b/tests/console/commands/test_version.py index d578b7fd918..394d91ee8dc 100644 --- a/tests/console/commands/test_version.py +++ b/tests/console/commands/test_version.py @@ -76,9 +76,9 @@ def test_short_version_update(tester: CommandTester): def test_dry_run(tester: CommandTester): - old_pyproject = tester.command.poetry.file.path.read_text() + old_pyproject = tester.command.poetry.file.read_text() tester.execute("--dry-run major") - new_pyproject = tester.command.poetry.file.path.read_text() + new_pyproject = tester.command.poetry.file.read_text() assert tester.io.fetch_output() == "Bumping version from 1.2.3 to 2.0.0\n" assert old_pyproject == new_pyproject diff --git a/tests/helpers.py b/tests/helpers.py index 9ccb9e7730e..b082a9e0c9e 100644 --- a/tests/helpers.py +++ b/tests/helpers.py @@ -13,7 +13,6 @@ from poetry.core.packages.package import Package from poetry.core.packages.utils.link import Link -from poetry.core.toml.file import TOMLFile from poetry.core.vcs.git import ParsedUrl from poetry.config.config import Config @@ -23,6 +22,7 @@ from poetry.packages import Locker from poetry.repositories import Repository from poetry.repositories.exceptions import PackageNotFound +from poetry.toml.file import TOMLFile from poetry.utils._compat import metadata @@ -177,7 +177,7 @@ def __init__(self, poetry: Poetry) -> None: def reset_poetry(self) -> None: poetry = self._poetry - self._poetry = Factory().create_poetry(self._poetry.file.path.parent) + self._poetry = Factory().create_poetry(self._poetry.file.parent) self._poetry.set_pool(poetry.pool) self._poetry.set_config(poetry.config) self._poetry.set_locker( diff --git a/tests/installation/test_installer.py b/tests/installation/test_installer.py index f7fd6213c58..97fee974846 100644 --- a/tests/installation/test_installer.py +++ b/tests/installation/test_installer.py @@ -18,7 +18,6 @@ from poetry.core.packages.dependency_group import DependencyGroup from poetry.core.packages.package import Package from poetry.core.packages.project_package import ProjectPackage -from poetry.core.toml.file import TOMLFile from poetry.factory import Factory from poetry.installation import Installer as BaseInstaller @@ -28,6 +27,7 @@ from poetry.repositories import Pool from poetry.repositories import Repository from poetry.repositories.installed_repository import InstalledRepository +from poetry.toml.file import TOMLFile from poetry.utils.env import MockEnv from poetry.utils.env import NullEnv from tests.helpers import MOCK_DEFAULT_GIT_REVISION diff --git a/tests/installation/test_installer_old.py b/tests/installation/test_installer_old.py index 3c7fe7f2e6f..af78df703bb 100644 --- a/tests/installation/test_installer_old.py +++ b/tests/installation/test_installer_old.py @@ -9,7 +9,6 @@ from cleo.io.null_io import NullIO from poetry.core.packages.project_package import ProjectPackage -from poetry.core.toml.file import TOMLFile from poetry.factory import Factory from poetry.installation import Installer as BaseInstaller @@ -18,6 +17,7 @@ from poetry.repositories import Pool from poetry.repositories import Repository from poetry.repositories.installed_repository import InstalledRepository +from poetry.toml.file import TOMLFile from poetry.utils.env import MockEnv from poetry.utils.env import NullEnv from tests.helpers import get_dependency diff --git a/tests/integration/test_utils_vcs_git.py b/tests/integration/test_utils_vcs_git.py index 334ae04a268..d6017c262e9 100644 --- a/tests/integration/test_utils_vcs_git.py +++ b/tests/integration/test_utils_vcs_git.py @@ -14,9 +14,9 @@ from dulwich.client import get_transport_and_path from dulwich.config import ConfigFile from dulwich.repo import Repo -from poetry.core.pyproject.toml import PyProjectTOML from poetry.console.exceptions import PoetrySimpleConsoleException +from poetry.pyproject.toml import PyProjectTOML from poetry.utils.authenticator import Authenticator from poetry.vcs.git import Git from poetry.vcs.git.backend import GitRefSpec diff --git a/tests/json/test_schema_sources.py b/tests/json/test_schema_sources.py index 4f20a0b3884..22769922e1c 100644 --- a/tests/json/test_schema_sources.py +++ b/tests/json/test_schema_sources.py @@ -2,9 +2,8 @@ from pathlib import Path -from poetry.core.toml import TOMLFile - from poetry.factory import Factory +from poetry.toml import TOMLFile FIXTURE_DIR = Path(__file__).parent / "fixtures" / "source" diff --git a/tests/masonry/builders/test_editable_builder.py b/tests/masonry/builders/test_editable_builder.py index effefb4c816..b6dbf070800 100644 --- a/tests/masonry/builders/test_editable_builder.py +++ b/tests/masonry/builders/test_editable_builder.py @@ -114,7 +114,7 @@ def test_builder_installs_proper_files_for_standard_packages( assert not DeepDiff( { "dir_info": {"editable": True}, - "url": simple_poetry.file.path.parent.as_uri(), + "url": simple_poetry.file.parent.as_uri(), }, json.loads(dist_info.joinpath("direct_url.json").read_text()), ) @@ -221,7 +221,7 @@ def test_builder_falls_back_on_setup_and_pip_for_packages_with_build_scripts( builder.build() pip_install.assert_called_once_with( - extended_poetry.pyproject.file.path.parent, env, upgrade=True, editable=True + extended_poetry.pyproject.file.parent, env, upgrade=True, editable=True ) assert [] == env.executed diff --git a/tests/pyproject/__init__.py b/tests/pyproject/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/pyproject/conftest.py b/tests/pyproject/conftest.py new file mode 100644 index 00000000000..82ff2198389 --- /dev/null +++ b/tests/pyproject/conftest.py @@ -0,0 +1,43 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING + +import pytest + + +if TYPE_CHECKING: + from pathlib import Path + + +@pytest.fixture +def pyproject_toml(tmp_path: Path) -> Path: + path = tmp_path / "pyproject.toml" + with path.open(mode="w"): + pass + return path + + +@pytest.fixture +def build_system_section(pyproject_toml: Path) -> str: + content = """ +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" +""" + with pyproject_toml.open(mode="a") as f: + f.write(content) + return content + + +@pytest.fixture +def poetry_section(pyproject_toml: Path) -> str: + content = """ +[tool.poetry] +name = "poetry" + +[tool.poetry.dependencies] +python = "^3.5" +""" + with pyproject_toml.open(mode="a") as f: + f.write(content) + return content diff --git a/tests/pyproject/test_pyproject_toml.py b/tests/pyproject/test_pyproject_toml.py new file mode 100644 index 00000000000..4f85d91c18f --- /dev/null +++ b/tests/pyproject/test_pyproject_toml.py @@ -0,0 +1,47 @@ +from __future__ import annotations + +import uuid + +from typing import TYPE_CHECKING + +from poetry.pyproject.toml import PyProjectTOML + + +if TYPE_CHECKING: + from pathlib import Path + + +def test_pyproject_toml_reload(pyproject_toml: Path, poetry_section: str) -> None: + pyproject = PyProjectTOML(pyproject_toml) + name_original = pyproject.poetry_config["name"] + name_new = str(uuid.uuid4()) + + pyproject.poetry_config["name"] = name_new + assert isinstance(pyproject.poetry_config["name"], str) + assert pyproject.poetry_config["name"] == name_new + + pyproject.reload() + assert pyproject.poetry_config["name"] == name_original + + +def test_pyproject_toml_save( + pyproject_toml: Path, poetry_section: str, build_system_section: str +) -> None: + pyproject = PyProjectTOML(pyproject_toml) + + name = str(uuid.uuid4()) + build_backend = str(uuid.uuid4()) + build_requires = str(uuid.uuid4()) + + pyproject.poetry_config["name"] = name + pyproject.build_system.build_backend = build_backend + pyproject.build_system.requires.append(build_requires) + + pyproject.save() + + pyproject = PyProjectTOML(pyproject_toml) + + assert isinstance(pyproject.poetry_config["name"], str) + assert pyproject.poetry_config["name"] == name + assert pyproject.build_system.build_backend == build_backend + assert build_requires in pyproject.build_system.requires diff --git a/tests/pyproject/test_pyproject_toml_file.py b/tests/pyproject/test_pyproject_toml_file.py new file mode 100644 index 00000000000..1c7c02a1439 --- /dev/null +++ b/tests/pyproject/test_pyproject_toml_file.py @@ -0,0 +1,28 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING + +import pytest + +from poetry.core.exceptions import PoetryCoreException + +from poetry.toml import TOMLFile + + +if TYPE_CHECKING: + from pathlib import Path + + +def test_pyproject_toml_file_invalid(pyproject_toml: Path) -> None: + with pyproject_toml.open(mode="a") as f: + f.write("<<<<<<<<<<<") + + with pytest.raises(PoetryCoreException) as excval: + _ = TOMLFile(pyproject_toml).read() + + assert f"Invalid TOML file {pyproject_toml.as_posix()}" in str(excval.value) + + +def test_pyproject_toml_file_getattr(tmp_path: Path, pyproject_toml: Path) -> None: + file = TOMLFile(pyproject_toml) + assert file.parent == tmp_path diff --git a/tests/test_factory.py b/tests/test_factory.py index 5671fdc5edf..e7f6b3fb8c2 100644 --- a/tests/test_factory.py +++ b/tests/test_factory.py @@ -8,12 +8,12 @@ from deepdiff import DeepDiff from packaging.utils import canonicalize_name from poetry.core.constraints.version import parse_constraint -from poetry.core.toml.file import TOMLFile from poetry.factory import Factory from poetry.plugins.plugin import Plugin from poetry.repositories.legacy_repository import LegacyRepository from poetry.repositories.pypi_repository import PyPiRepository +from poetry.toml.file import TOMLFile from tests.helpers import mock_metadata_entry_points diff --git a/tests/utils/test_env.py b/tests/utils/test_env.py index 52f1352dd5b..1ba6e9e2fb5 100644 --- a/tests/utils/test_env.py +++ b/tests/utils/test_env.py @@ -17,6 +17,7 @@ from poetry.factory import Factory from poetry.repositories.installed_repository import InstalledRepository +from poetry.toml.file import TOMLFile from poetry.utils._compat import WINDOWS from poetry.utils.env import GET_BASE_PREFIX from poetry.utils.env import EnvCommandError