recipetool: don't dump stack traces if a toml parser can't be found

If we can't find tomllib or tomli then we can just tell the user politely
that we can't parse the pyproject.toml file, there's no need to dump
exception stack traces.

Move the parser exception handler to catch the actual parse, as otherwise
it will never be used.

Whilst here, also add some debug statements to make it clear what of the
handlers is being called.

(From OE-Core rev: 1a3ba4c312844d80ae382912b319e60ad8b30737)

Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Ross Burton 2024-02-09 15:39:50 +00:00 committed by Richard Purdie
parent 398f27cc0b
commit c472b4ce59

View File

@ -573,12 +573,15 @@ class PythonSetupPyRecipeHandler(PythonRecipeHandler):
if 'buildsystem' in handled:
return False
logger.debug("Trying setup.py parser")
# Check for non-zero size setup.py files
setupfiles = RecipeHandler.checkfiles(srctree, ['setup.py'])
for fn in setupfiles:
if os.path.getsize(fn):
break
else:
logger.debug("No setup.py found")
return False
# setup.py is always parsed to get at certain required information, such as
@ -799,12 +802,15 @@ class PythonPyprojectTomlRecipeHandler(PythonRecipeHandler):
if 'buildsystem' in handled:
return False
logger.debug("Trying pyproject.toml parser")
# Check for non-zero size setup.py files
setupfiles = RecipeHandler.checkfiles(srctree, ["pyproject.toml"])
for fn in setupfiles:
if os.path.getsize(fn):
break
else:
logger.debug("No pyproject.toml found")
return False
setupscript = os.path.join(srctree, "pyproject.toml")
@ -816,14 +822,16 @@ class PythonPyprojectTomlRecipeHandler(PythonRecipeHandler):
try:
import tomli as tomllib
except ImportError:
logger.exception("Neither 'tomllib' nor 'tomli' could be imported. Please use python3.11 or above or install tomli module")
return False
except Exception:
logger.exception("Failed to parse pyproject.toml")
logger.error("Neither 'tomllib' nor 'tomli' could be imported, cannot scan pyproject.toml.")
return False
with open(setupscript, "rb") as f:
config = tomllib.load(f)
try:
with open(setupscript, "rb") as f:
config = tomllib.load(f)
except Exception:
logger.exception("Failed to parse pyproject.toml")
return False
build_backend = config["build-system"]["build-backend"]
if build_backend in self.build_backend_map:
classes.append(self.build_backend_map[build_backend])