tweag / FawltyDeps

Python dependency checker
Other
201 stars 14 forks source link

parse_setup_py: Handle string dependency when we expect list of strings #440

Closed jherland closed 4 months ago

jherland commented 5 months ago

As described in issue #429, the s3transfer package comes with setup.py where the extras_require dictionary does not map to a list of strings (extra requirements), but instead map to a string directly.

When s3transfer is installed with this extra (e.g. pip install s3transfer[crt]), the setuptools machinery handles this variation gracefully, i.e. it interprets the string as if it was a single-element list containing the same string.

An experiment reveals that the same interpretation occurs if a string is passed directly in the install_requires argument.

This commit teaches FawltyDeps to do the same.

Also, if parse_one_req() fails to parse a requirement string, catch that exception (likely an InvalidRequirement or some other subclass of ValueError), and convert it into a DependencyParsingError, which is handled more gracefully (i.e. print a warning message and continue).