From 3386811b3297e1193fd493a65a6716035fc09c01 Mon Sep 17 00:00:00 2001 From: Frost Ming Date: Sat, 11 Apr 2020 16:37:01 +0800 Subject: [PATCH] Fix toml parsing error --- news/101.bugfix | 1 + pdm/formats/flit.py | 6 +++++- pdm/formats/poetry.py | 6 +++++- tests/cli/test_cli.py | 16 ++++++++++++++++ 4 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 news/101.bugfix diff --git a/news/101.bugfix b/news/101.bugfix new file mode 100644 index 00000000..e9e34e8d --- /dev/null +++ b/news/101.bugfix @@ -0,0 +1 @@ +Fix a bug that TOML parsing error is not correctly captured. diff --git a/pdm/formats/flit.py b/pdm/formats/flit.py index 9756fb37..88699559 100644 --- a/pdm/formats/flit.py +++ b/pdm/formats/flit.py @@ -2,6 +2,7 @@ import re from pathlib import Path import tomlkit +import tomlkit.exceptions from pdm.formats.base import MetaConverter, convert_from from pdm.models.requirements import parse_requirement @@ -9,7 +10,10 @@ from pdm.models.requirements import parse_requirement def check_fingerprint(project, filename): with open(filename, encoding="utf-8") as fp: - data = tomlkit.parse(fp.read()) + try: + data = tomlkit.parse(fp.read()) + except tomlkit.exceptions.TOMLKitError: + return False return "tool" in data and "flit" in data["tool"] diff --git a/pdm/formats/poetry.py b/pdm/formats/poetry.py index 9a4e7741..b26ea4d7 100644 --- a/pdm/formats/poetry.py +++ b/pdm/formats/poetry.py @@ -3,6 +3,7 @@ import operator import re import tomlkit +import tomlkit.exceptions from pdm.formats.base import MetaConverter, convert_from from pdm.models.markers import Marker @@ -11,7 +12,10 @@ from pdm.models.specifiers import PySpecSet def check_fingerprint(project, filename): with open(filename, encoding="utf-8") as fp: - data = tomlkit.parse(fp.read()) + try: + data = tomlkit.parse(fp.read()) + except tomlkit.exceptions.TOMLKitError: + return False return "tool" in data and "poetry" in data["tool"] diff --git a/tests/cli/test_cli.py b/tests/cli/test_cli.py index f9fca914..a25bcbbd 100644 --- a/tests/cli/test_cli.py +++ b/tests/cli/test_cli.py @@ -8,6 +8,7 @@ import pytest from pdm.cli import actions from pdm.models.requirements import parse_requirement from pdm.utils import get_python_version, temp_environ +from tests import FIXTURES def test_help_option(invoke): @@ -239,3 +240,18 @@ def test_cache_clear_command(project, invoke, mocker): result = invoke(["cache", "clear"], obj=project) assert result.exit_code == 0 m.assert_called_once() + + +@pytest.mark.parametrize( + "filename", + [ + "requirements.txt", + "Pipfile", + "pyproject-poetry.toml", + "projects/flit-demo/pyproject.toml", + ], +) +def test_import_other_format_file(project, invoke, filename): + requirements_file = FIXTURES / filename + result = invoke(["import", str(requirements_file)], obj=project) + assert result.exit_code == 0 -- GitLab