From d52660671b733aaabe9933eb512702fa821c0d4a Mon Sep 17 00:00:00 2001 From: Frost Ming Date: Wed, 17 Feb 2021 09:39:52 +0800 Subject: [PATCH 1/2] Use the absolute path for destination path --- news/262.bugfix.md | 1 + pdm/cli/actions.py | 1 + pdm/formats/poetry.py | 4 +++- pdm/project/core.py | 2 +- 4 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 news/262.bugfix.md diff --git a/news/262.bugfix.md b/news/262.bugfix.md new file mode 100644 index 0000000000..45dc148070 --- /dev/null +++ b/news/262.bugfix.md @@ -0,0 +1 @@ +Use the absolute path when importing from a Poetry pyproject.toml. diff --git a/pdm/cli/actions.py b/pdm/cli/actions.py index b9e436992e..7327be40ae 100644 --- a/pdm/cli/actions.py +++ b/pdm/cli/actions.py @@ -475,6 +475,7 @@ def do_info( env: bool = False, ) -> None: """Show project information.""" + check_project_file(project) python_path = project.environment.python_executable python_version, is_64bit = get_python_version(python_path, True) if not python and not show_project and not env: diff --git a/pdm/formats/poetry.py b/pdm/formats/poetry.py index 577dd3f930..b33044d562 100644 --- a/pdm/formats/poetry.py +++ b/pdm/formats/poetry.py @@ -168,7 +168,9 @@ def source(self, value): def convert(project, filename): - with open(filename, encoding="utf-8") as fp, cd(os.path.dirname(filename)): + with open(filename, encoding="utf-8") as fp, cd( + os.path.dirname(os.path.abspath(filename)) + ): converter = PoetryMetaConverter(tomlkit.parse(fp.read())["tool"]["poetry"]) return dict(converter), converter.settings diff --git a/pdm/project/core.py b/pdm/project/core.py index 340275f0a7..e76278f827 100644 --- a/pdm/project/core.py +++ b/pdm/project/core.py @@ -409,7 +409,7 @@ def write_pyproject(self, show_message: bool = True) -> None: def meta(self) -> Optional[Metadata]: if not self.pyproject: self.pyproject = {"project": tomlkit.table()} - return Metadata(self.pyproject_file, self.pyproject["project"]) + return Metadata(self.pyproject_file, self.pyproject.get("project")) def init_global_project(self) -> None: if not self.is_global: From addfd8f938590075970bae3fa35c35805ca75696 Mon Sep 17 00:00:00 2001 From: Frost Ming Date: Wed, 17 Feb 2021 10:13:13 +0800 Subject: [PATCH 2/2] change from tomlkit to toml for reading --- news/263.bugfix.md | 1 + pdm/cli/actions.py | 1 - pdm/formats/legacy.py | 11 ++++------- pdm/formats/pipfile.py | 4 ++-- pdm/formats/poetry.py | 11 +++++------ 5 files changed, 12 insertions(+), 16 deletions(-) create mode 100644 news/263.bugfix.md diff --git a/news/263.bugfix.md b/news/263.bugfix.md new file mode 100644 index 0000000000..dd5a255501 --- /dev/null +++ b/news/263.bugfix.md @@ -0,0 +1 @@ +Fix a bug that old toml table head is kept when converting to PEP 621 metadata format. diff --git a/pdm/cli/actions.py b/pdm/cli/actions.py index 7327be40ae..0c3fbc1be4 100644 --- a/pdm/cli/actions.py +++ b/pdm/cli/actions.py @@ -533,7 +533,6 @@ def do_import(project: Project, filename: str, format: Optional[str] = None) -> ) pyproject["project"].update(project_data) - pyproject["build-system"] = { "requires": ["pdm-pep517"], "build-backend": "pdm.pep517.api", diff --git a/pdm/formats/legacy.py b/pdm/formats/legacy.py index f0c5e33aba..d1e9c138d4 100644 --- a/pdm/formats/legacy.py +++ b/pdm/formats/legacy.py @@ -1,7 +1,6 @@ import functools -import tomlkit -import tomlkit.exceptions +import toml from pdm.formats.base import ( MetaConverter, @@ -17,8 +16,8 @@ def check_fingerprint(project, filename): with open(filename, encoding="utf-8") as fp: try: - data = tomlkit.parse(fp.read()) - except tomlkit.exceptions.TOMLKitError: + data = toml.load(fp) + except toml.TomlDecodeError: return False return ( @@ -133,9 +132,7 @@ def allow_prereleases(self, value): def convert(project, filename): with open(filename, encoding="utf-8") as fp: - converter = LegacyMetaConverter( - tomlkit.parse(fp.read())["tool"]["pdm"], filename - ) + converter = LegacyMetaConverter(toml.load(fp)["tool"]["pdm"], filename) return dict(converter), converter.settings diff --git a/pdm/formats/pipfile.py b/pdm/formats/pipfile.py index ed8c82a534..1b3176c3e8 100644 --- a/pdm/formats/pipfile.py +++ b/pdm/formats/pipfile.py @@ -2,7 +2,7 @@ import operator import os -import tomlkit +import toml from packaging.markers import default_environment from pdm.formats.base import make_array @@ -35,7 +35,7 @@ def check_fingerprint(project, filename): def convert(project, filename): with open(filename, encoding="utf-8") as fp: - data = tomlkit.parse(fp.read()) + data = toml.load(fp) result = {} settings = {} if "pipenv" in data: diff --git a/pdm/formats/poetry.py b/pdm/formats/poetry.py index b33044d562..d32b1f7b1f 100644 --- a/pdm/formats/poetry.py +++ b/pdm/formats/poetry.py @@ -3,8 +3,7 @@ import os import re -import tomlkit -import tomlkit.exceptions +import toml from pdm.formats.base import ( MetaConverter, @@ -23,8 +22,8 @@ def check_fingerprint(project, filename): with open(filename, encoding="utf-8") as fp: try: - data = tomlkit.parse(fp.read()) - except tomlkit.exceptions.TOMLKitError: + data = toml.load(fp) + except toml.TomlDecodeError: return False return "tool" in data and "poetry" in data["tool"] @@ -51,7 +50,7 @@ def _convert_specifier(version): def _convert_python(python): if not python: - return "" + return PySpecSet() parts = [PySpecSet(_convert_specifier(s)) for s in python.split("||")] return functools.reduce(operator.or_, parts) @@ -171,7 +170,7 @@ def convert(project, filename): with open(filename, encoding="utf-8") as fp, cd( os.path.dirname(os.path.abspath(filename)) ): - converter = PoetryMetaConverter(tomlkit.parse(fp.read())["tool"]["poetry"]) + converter = PoetryMetaConverter(toml.load(fp)["tool"]["poetry"]) return dict(converter), converter.settings