<86>Dec 30 04:27:47 userdel[81076]: delete user 'rooter' <86>Dec 30 04:27:47 userdel[81076]: removed group 'rooter' owned by 'rooter' <86>Dec 30 04:27:47 userdel[81076]: removed shadow group 'rooter' owned by 'rooter' <86>Dec 30 04:27:47 groupadd[81133]: group added to /etc/group: name=rooter, GID=1847 <86>Dec 30 04:27:47 groupadd[81133]: group added to /etc/gshadow: name=rooter <86>Dec 30 04:27:47 groupadd[81133]: new group: name=rooter, GID=1847 <86>Dec 30 04:27:47 useradd[81177]: new user: name=rooter, UID=1847, GID=1847, home=/root, shell=/bin/bash, from=none <86>Dec 30 04:27:47 userdel[81324]: delete user 'builder' <86>Dec 30 04:27:47 userdel[81324]: removed group 'builder' owned by 'builder' <86>Dec 30 04:27:47 userdel[81324]: removed shadow group 'builder' owned by 'builder' <86>Dec 30 04:27:47 groupadd[81376]: group added to /etc/group: name=builder, GID=1848 <86>Dec 30 04:27:47 groupadd[81376]: group added to /etc/gshadow: name=builder <86>Dec 30 04:27:47 groupadd[81376]: new group: name=builder, GID=1848 <86>Dec 30 04:27:47 useradd[81417]: new user: name=builder, UID=1848, GID=1848, home=/usr/src, shell=/bin/bash, from=none <13>Dec 30 04:27:50 rpmi: libmpdec3-2.5.1-alt3 sisyphus+314490.500.5.1 1675432004 installed <13>Dec 30 04:27:50 rpmi: libgdbm-1.8.3-alt10 sisyphus+346222.200.3.2 1716468404 installed <13>Dec 30 04:27:50 rpmi: libexpat-2.6.4-alt1 sisyphus+365521.100.1.1 1734700243 installed <13>Dec 30 04:27:50 rpmi: openssl-config-3.1.1-alt1 sisyphus+366628.500.5.1 1735237131 installed <13>Dec 30 04:27:50 rpmi: libb2-0.98.1-alt1_1 sisyphus+291614.100.1.1 1638962877 installed <13>Dec 30 04:27:50 rpmi: libp11-kit-1:0.25.5-alt1 sisyphus+352553.100.1.1 1720622573 installed <13>Dec 30 04:27:50 rpmi: libtasn1-4.19.0-alt3 sisyphus+327816.100.1.1 1692802615 installed <13>Dec 30 04:27:50 rpmi: rpm-macros-alternatives-0.5.2-alt2 sisyphus+315270.200.2.1 1676457367 installed <13>Dec 30 04:27:50 rpmi: alternatives-0.5.2-alt2 sisyphus+315270.200.2.1 1676457367 installed <13>Dec 30 04:27:50 rpmi: ca-certificates-2024.12.10-alt1 sisyphus+364633.200.3.1 1733918603 installed <13>Dec 30 04:27:50 rpmi: ca-trust-0.2.0-alt1 sisyphus+344843.100.1.1 1712743326 installed <13>Dec 30 04:27:50 rpmi: p11-kit-trust-1:0.25.5-alt1 sisyphus+352553.100.1.1 1720622573 installed <13>Dec 30 04:27:50 rpmi: libcrypto3-3.1.7-alt3 sisyphus+366628.200.2.1 1735232263 installed <13>Dec 30 04:27:50 rpmi: libssl3-3.1.7-alt3 sisyphus+366628.200.2.1 1735232263 installed <13>Dec 30 04:27:51 rpmi: python3-3.12.8-alt1 sisyphus+364336.100.1.1 1733526854 installed <13>Dec 30 04:27:51 rpmi: python3-base-3.12.8-alt1 sisyphus+364336.100.1.1 1733526854 installed <13>Dec 30 04:27:51 rpmi: python3-module-py3dephell-0.3.1-alt1 sisyphus+365261.200.1.1 1734463433 installed <13>Dec 30 04:27:51 rpmi: python3-module-pyproject-installer-0.5.5-alt2 sisyphus+366395.100.1.1 1735032014 installed <13>Dec 30 04:27:51 rpmi: rpm-macros-pyproject-0.0.9-alt1 sisyphus+362541.300.2.1 1731671840 installed <13>Dec 30 04:27:51 rpmi: tests-for-installed-python3-pkgs-0.1.26-alt2 sisyphus+365350.100.1.1 1734517486 installed <13>Dec 30 04:27:51 rpmi: rpm-build-python3-0.1.26-alt2 sisyphus+365350.100.1.1 1734517486 installed <13>Dec 30 04:27:51 rpmi: rpm-build-pyproject-0.0.9-alt1 sisyphus+362541.300.2.1 1731671840 installed <13>Dec 30 04:27:54 rpmi: python3-module-packaging-24.2-alt1 sisyphus+362183.100.1.1 1731315992 installed <13>Dec 30 04:27:54 rpmi: python3-module-typing_extensions-4.12.2-alt1 sisyphus+351501.100.1.2 1719296652 installed <13>Dec 30 04:27:54 rpmi: python3-module-more-itertools-10.5.0-alt1 sisyphus+357221.100.1.1 1725964420 installed <13>Dec 30 04:27:54 rpmi: python3-module-jaraco.functools-4.1.0-alt1 sisyphus+358564.100.1.1 1727528718 installed <13>Dec 30 04:27:54 rpmi: python3-module-Pygments-2.18.0-alt1 sisyphus+347552.100.1.1 1714992955 installed <13>Dec 30 04:27:54 rpmi: python3-module-mistletoe-1.4.0-alt1 sisyphus+358249.100.1.1 1727190762 installed <13>Dec 30 04:27:54 rpmi: python3-module-deprecation-2.1.0-alt2 sisyphus+307624.100.1.1 1664516496 installed <13>Dec 30 04:27:54 rpmi: python3-module-deprecation-alias-0.3.3-alt1 sisyphus+349514.100.1.1 1716802593 installed <13>Dec 30 04:27:54 rpmi: python3-module-wheel-0.45.1-alt1 sisyphus+363326.100.2.1 1732609968 installed <13>Dec 30 04:27:54 rpmi: python3-module-platformdirs-4.3.6-alt1 sisyphus+357787.200.1.1 1726664692 installed <13>Dec 30 04:27:54 rpmi: python3-module-nh3-0.2.20-alt1 sisyphus+365393.600.5.1 1734727492 installed <13>Dec 30 04:27:54 rpmi: python3-module-jaraco.context-6.0.1-alt1 sisyphus+357809.300.1.1 1726769204 installed <13>Dec 30 04:27:54 rpmi: python3-module-zipp-3.21.0-alt1 sisyphus+362195.100.2.1 1731487934 installed <13>Dec 30 04:27:54 rpmi: python3-module-tomli-2.2.1-alt1 sisyphus+363592.100.1.1 1732803942 installed <13>Dec 30 04:27:54 rpmi: python3-module-docutils-0.20.1-alt1 sisyphus+323438.100.1.1 1687370718 installed <13>Dec 30 04:27:54 rpmi: python3-module-pluggy-1.5.0-alt1 sisyphus+345632.100.2.1 1713864244 installed <13>Dec 30 04:27:54 rpmi: python3-module-iniconfig-2.0.0-alt1 sisyphus+314076.200.3.1 1674737275 installed <13>Dec 30 04:27:54 rpmi: python3-module-pytest-8.3.4-alt1 sisyphus+363889.100.1.1 1733152874 installed <13>Dec 30 04:27:54 rpmi: python3-module-pytest-datadir-1.5.0-alt1 sisyphus+330926.100.1.1 1696404893 installed <13>Dec 30 04:27:54 rpmi: python3-module-click-8.1.8-alt1 sisyphus+366297.100.1.1 1734946237 installed <13>Dec 30 04:27:54 rpmi: python3-module-autocommand-2.2.2-alt1.1 sisyphus+339714.100.1.1 1706968174 installed <13>Dec 30 04:27:54 rpmi: python3-module-jaraco.text-4.0.0-alt1 sisyphus+353877.400.2.1 1722250727 installed <13>Dec 30 04:27:54 rpmi: python3-module-jaraco.collections-5.1.0-alt1 sisyphus+357809.200.1.1 1726769173 installed <13>Dec 30 04:27:54 rpmi: python3-module-pkg_resources-1:75.6.0-alt1 sisyphus+363072.100.1.1 1732185054 installed <13>Dec 30 04:27:54 rpmi: python3-module-idna-3.10-alt1 sisyphus+358681.100.1.1 1727701241 installed <13>Dec 30 04:27:54 rpmi: python3-module-natsort-8.4.0-alt2 sisyphus+339213.100.1.1 1706453992 installed <13>Dec 30 04:27:54 rpmi: python3-module-domdf-python-tools-3.9.0-alt1 sisyphus+352392.100.1.1 1720436309 installed <13>Dec 30 04:27:54 rpmi: python3-module-dom-toml-2.0.0-alt1 sisyphus+344922.100.1.1 1712828221 installed <13>Dec 30 04:27:54 rpmi: libyaml2-0.2.5-alt1 sisyphus+278391.100.1.1 1626094928 installed <13>Dec 30 04:27:54 rpmi: python3-module-yaml-6.0.2-alt1 sisyphus+356896.100.1.1 1725541112 installed <13>Dec 30 04:27:54 rpmi: python3-module-pytest-regressions-2.6.0-alt1 sisyphus+365394.400.5.1 1734547404 installed <13>Dec 30 04:27:54 rpmi: python3-module-coincidence-0.6.6-alt1 sisyphus+342029.100.1.1 1709628632 installed <13>Dec 30 04:27:54 rpmi: python3-module-handy-archives-0.2.0-alt1.1 sisyphus+339276.100.1.1 1706530801 installed <13>Dec 30 04:27:54 rpmi: python3-module-dist-meta-0.8.1-alt1 sisyphus+348565.100.1.1 1716278995 installed <13>Dec 30 04:27:54 rpmi: libpython3-3.12.8-alt1 sisyphus+364336.100.1.1 1733526854 installed <13>Dec 30 04:27:55 rpmi: libncurses6-6.3.20220618-alt4 sisyphus+327286.4600.14.1 1711486705 installed <13>Dec 30 04:27:55 rpmi: libtinfo-devel-6.3.20220618-alt4 sisyphus+327286.4600.14.1 1711486705 installed <13>Dec 30 04:27:55 rpmi: libncurses-devel-6.3.20220618-alt4 sisyphus+327286.4600.14.1 1711486705 installed <13>Dec 30 04:27:55 rpmi: python3-dev-3.12.8-alt1 sisyphus+364336.100.1.1 1733526854 installed <13>Dec 30 04:27:55 rpmi: python3-module-setuptools-1:75.6.0-alt1 sisyphus+363072.100.1.1 1732185054 installed <13>Dec 30 04:27:55 rpmi: python3-module-shippinglabel-2.1.0-alt1 sisyphus+359666.200.1.1 1728824466 installed <13>Dec 30 04:27:55 rpmi: python3-module-consolekit-1.7.2-alt1 sisyphus+360375.100.1.1 1729580193 installed <13>Dec 30 04:27:55 rpmi: python3-module-pyproject-examples-2023.6.30-alt1 sisyphus+320174.464.4.1 1689945078 installed <13>Dec 30 04:27:55 rpmi: python3-module-apeye-core-1.1.5-alt1 sisyphus+340182.200.2.1 1707484287 installed <13>Dec 30 04:27:55 rpmi: python3-module-sdjson-0.5.0-alt1 sisyphus+359666.100.1.1 1728824439 installed <13>Dec 30 04:27:55 rpmi: python3-module-pytest-randomly-3.16.0-alt1 sisyphus+361006.100.1.1 1730122881 installed <13>Dec 30 04:27:55 rpmi: python3-module-pytest-timeout-2.3.1-alt1 sisyphus+342480.100.2.1 1710234858 installed <13>Dec 30 04:27:55 rpmi: python3-module-readme-renderer-43.0-alt1 sisyphus+341891.200.1.1 1709429892 installed <13>Dec 30 04:27:55 rpmi: python3-module-importlib-metadata-8.5.0-alt1 sisyphus+357362.100.1.1 1726136861 installed <13>Dec 30 04:27:55 rpmi: python3-module-attrs-24.2.0-alt2 sisyphus+355603.200.1.1 1724160494 installed warning: File /usr/src/in/source/python3-module-pyproject-parser-0.11.1-alt.patch is smaller than 8 bytes Building target platforms: x86_64 Building for target x86_64 Wrote: /usr/src/in/nosrpm/python3-module-pyproject-parser-0.11.1-alt1.nosrc.rpm (w1.gzdio) warning: File /usr/src/RPM/SOURCES/python3-module-pyproject-parser-0.11.1-alt.patch is smaller than 8 bytes Installing python3-module-pyproject-parser-0.11.1-alt1.src.rpm Building target platforms: x86_64 Building for target x86_64 Executing(%prep): /bin/sh -e /usr/src/tmp/rpm-tmp.61271 + umask 022 + /bin/mkdir -p /usr/src/RPM/BUILD + cd /usr/src/RPM/BUILD + cd /usr/src/RPM/BUILD + rm -rf python3-module-pyproject-parser-0.11.1 + echo 'Source #0 (python3-module-pyproject-parser-0.11.1.tar):' Source #0 (python3-module-pyproject-parser-0.11.1.tar): + /bin/tar -xf /usr/src/RPM/SOURCES/python3-module-pyproject-parser-0.11.1.tar + cd python3-module-pyproject-parser-0.11.1 + /bin/chmod -c -Rf u+rwX,go-w . + echo 'Patch #0 (python3-module-pyproject-parser-0.11.1-alt.patch):' Patch #0 (python3-module-pyproject-parser-0.11.1-alt.patch): + /usr/bin/patch -p1 + /usr/bin/python3 -m pyproject_installer deps --depsconfig /usr/src/RPM/SOURCES/pyproject_deps.json show pep518 + /usr/bin/python3 -m pyproject_installer deps --depsconfig /usr/src/RPM/SOURCES/pyproject_deps.json sync pep518 --verify --verify-exclude 'wheel$' + /usr/bin/python3 -m pyproject_installer deps --depsconfig /usr/src/RPM/SOURCES/pyproject_deps.json show pep517 + /usr/bin/python3 -m pyproject_installer deps --depsconfig /usr/src/RPM/SOURCES/pyproject_deps.json sync pep517 --verify --verify-exclude 'wheel$' + /usr/bin/python3 -m pyproject_installer deps --depsconfig /usr/src/RPM/SOURCES/pyproject_deps.json show metadata + /usr/bin/python3 -m pyproject_installer deps --depsconfig /usr/src/RPM/SOURCES/pyproject_deps.json sync metadata --verify INFO : Building metadata INFO : Building metadata with prepare_metadata_for_build_wheel INFO : Source tree: /usr/src/RPM/BUILD/python3-module-pyproject-parser-0.11.1 INFO : Output dir: /usr/src/tmp/tmpr3iuqaw0 + /usr/bin/python3 -m pyproject_installer deps --depsconfig /usr/src/RPM/SOURCES/pyproject_deps.json show check + /usr/bin/python3 -m pyproject_installer deps --depsconfig /usr/src/RPM/SOURCES/pyproject_deps.json sync check --verify + exit 0 Executing(%build): /bin/sh -e /usr/src/tmp/rpm-tmp.19188 + umask 022 + /bin/mkdir -p /usr/src/RPM/BUILD + cd /usr/src/RPM/BUILD + cd python3-module-pyproject-parser-0.11.1 + export 'CFLAGS=-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto' + CFLAGS='-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto' + export 'CXXFLAGS=-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto' + CXXFLAGS='-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto' + export 'FFLAGS=-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto' + FFLAGS='-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto' + /usr/bin/python3 -m pyproject_installer -v build INFO : pyproject_installer.build_cmd._build : Building wheel INFO : pyproject_installer.build_cmd._build : Source tree: /usr/src/RPM/BUILD/python3-module-pyproject-parser-0.11.1 INFO : pyproject_installer.build_cmd._build : Output dir: /usr/src/RPM/BUILD/python3-module-pyproject-parser-0.11.1/dist DEBUG : pyproject_installer.lib.build_backend : Validating source path DEBUG : pyproject_installer.lib.build_backend : Checking for PEP517 spec DEBUG : pyproject_installer.lib.build_backend : Parsing configuration file: /usr/src/RPM/BUILD/python3-module-pyproject-parser-0.11.1/pyproject.toml INFO : backend_caller.py : Calling hook build_wheel in subprocess INFO : backend_caller.py : Build backend: setuptools.build_meta INFO : backend_caller.py : Hook args: ['/usr/src/RPM/BUILD/python3-module-pyproject-parser-0.11.1/dist'] INFO : backend_caller.py : Hook kwargs: {'config_settings': None} /usr/lib64/python3/site-packages/setuptools/config/_apply_pyprojecttoml.py:79: SetuptoolsWarning: `extras_require` overwritten in `pyproject.toml` (optional-dependencies) corresp(dist, value, root_dir) INFO : root : running bdist_wheel INFO : root : running build INFO : root : running build_py INFO : root : creating build/lib/pyproject_parser INFO : root : copying pyproject_parser/__init__.py -> build/lib/pyproject_parser INFO : root : copying pyproject_parser/__main__.py -> build/lib/pyproject_parser INFO : root : copying pyproject_parser/classes.py -> build/lib/pyproject_parser INFO : root : copying pyproject_parser/parsers.py -> build/lib/pyproject_parser INFO : root : copying pyproject_parser/type_hints.py -> build/lib/pyproject_parser INFO : root : copying pyproject_parser/utils.py -> build/lib/pyproject_parser INFO : root : creating build/lib/pyproject_parser/cli INFO : root : copying pyproject_parser/cli/__init__.py -> build/lib/pyproject_parser/cli INFO : root : copying pyproject_parser/cli/_json_encoders.py -> build/lib/pyproject_parser/cli INFO : root : running egg_info INFO : root : creating pyproject_parser.egg-info INFO : root : writing pyproject_parser.egg-info/PKG-INFO INFO : root : writing dependency_links to pyproject_parser.egg-info/dependency_links.txt INFO : root : writing entry points to pyproject_parser.egg-info/entry_points.txt INFO : root : writing requirements to pyproject_parser.egg-info/requires.txt INFO : root : writing top-level names to pyproject_parser.egg-info/top_level.txt INFO : root : writing manifest file 'pyproject_parser.egg-info/SOURCES.txt' INFO : root : reading manifest file 'pyproject_parser.egg-info/SOURCES.txt' INFO : root : reading manifest template 'MANIFEST.in' WARNING : root : no previously-included directories found matching '**/__pycache__' WARNING : root : warning: no files found matching '*.pyi' under directory 'pyproject_parser' INFO : root : adding license file 'LICENSE' INFO : root : writing manifest file 'pyproject_parser.egg-info/SOURCES.txt' INFO : root : copying pyproject_parser/py.typed -> build/lib/pyproject_parser INFO : root : installing to build/bdist.linux-x86_64/wheel INFO : root : running install INFO : root : running install_lib INFO : root : creating build/bdist.linux-x86_64/wheel INFO : root : creating build/bdist.linux-x86_64/wheel/pyproject_parser INFO : root : copying build/lib/pyproject_parser/__init__.py -> build/bdist.linux-x86_64/wheel/./pyproject_parser INFO : root : copying build/lib/pyproject_parser/__main__.py -> build/bdist.linux-x86_64/wheel/./pyproject_parser INFO : root : copying build/lib/pyproject_parser/classes.py -> build/bdist.linux-x86_64/wheel/./pyproject_parser INFO : root : copying build/lib/pyproject_parser/parsers.py -> build/bdist.linux-x86_64/wheel/./pyproject_parser INFO : root : copying build/lib/pyproject_parser/type_hints.py -> build/bdist.linux-x86_64/wheel/./pyproject_parser INFO : root : copying build/lib/pyproject_parser/utils.py -> build/bdist.linux-x86_64/wheel/./pyproject_parser INFO : root : creating build/bdist.linux-x86_64/wheel/pyproject_parser/cli INFO : root : copying build/lib/pyproject_parser/cli/__init__.py -> build/bdist.linux-x86_64/wheel/./pyproject_parser/cli INFO : root : copying build/lib/pyproject_parser/cli/_json_encoders.py -> build/bdist.linux-x86_64/wheel/./pyproject_parser/cli INFO : root : copying build/lib/pyproject_parser/py.typed -> build/bdist.linux-x86_64/wheel/./pyproject_parser INFO : root : running install_egg_info INFO : root : Copying pyproject_parser.egg-info to build/bdist.linux-x86_64/wheel/./pyproject_parser-0.11.1-py3.12.egg-info INFO : root : running install_scripts INFO : root : creating build/bdist.linux-x86_64/wheel/pyproject_parser-0.11.1.dist-info/WHEEL INFO : wheel : creating '/usr/src/RPM/BUILD/python3-module-pyproject-parser-0.11.1/dist/.tmp-n5chnzoe/pyproject_parser-0.11.1-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it INFO : wheel : adding 'pyproject_parser/__init__.py' INFO : wheel : adding 'pyproject_parser/__main__.py' INFO : wheel : adding 'pyproject_parser/classes.py' INFO : wheel : adding 'pyproject_parser/parsers.py' INFO : wheel : adding 'pyproject_parser/py.typed' INFO : wheel : adding 'pyproject_parser/type_hints.py' INFO : wheel : adding 'pyproject_parser/utils.py' INFO : wheel : adding 'pyproject_parser/cli/__init__.py' INFO : wheel : adding 'pyproject_parser/cli/_json_encoders.py' INFO : wheel : adding 'pyproject_parser-0.11.1.dist-info/LICENSE' INFO : wheel : adding 'pyproject_parser-0.11.1.dist-info/METADATA' INFO : wheel : adding 'pyproject_parser-0.11.1.dist-info/WHEEL' INFO : wheel : adding 'pyproject_parser-0.11.1.dist-info/entry_points.txt' INFO : wheel : adding 'pyproject_parser-0.11.1.dist-info/top_level.txt' INFO : wheel : adding 'pyproject_parser-0.11.1.dist-info/RECORD' INFO : root : removing build/bdist.linux-x86_64/wheel INFO : pyproject_installer.build_cmd._build : Built wheel: pyproject_parser-0.11.1-py3-none-any.whl + exit 0 Executing(%install): /bin/sh -e /usr/src/tmp/rpm-tmp.86612 + umask 022 + /bin/mkdir -p /usr/src/RPM/BUILD + cd /usr/src/RPM/BUILD + /bin/chmod -Rf u+rwX -- /usr/src/tmp/python3-module-pyproject-parser-buildroot + : + /bin/rm -rf -- /usr/src/tmp/python3-module-pyproject-parser-buildroot + PATH=/usr/libexec/rpm-build:/usr/src/bin:/usr/bin:/bin:/usr/local/bin:/usr/games + cd python3-module-pyproject-parser-0.11.1 + /usr/bin/python3 -m pyproject_installer -v install --destdir=/usr/src/tmp/python3-module-pyproject-parser-buildroot INFO : pyproject_installer.install_cmd._install : Installing wheel INFO : pyproject_installer.install_cmd._install : Wheel directory: /usr/src/RPM/BUILD/python3-module-pyproject-parser-0.11.1/dist INFO : pyproject_installer.install_cmd._install : Wheel filename: pyproject_parser-0.11.1-py3-none-any.whl INFO : pyproject_installer.install_cmd._install : Destination: /usr/src/tmp/python3-module-pyproject-parser-buildroot DEBUG : pyproject_installer.lib.wheel : Parsing wheel filename DEBUG : pyproject_installer.lib.wheel : Validating wheel file DEBUG : pyproject_installer.lib.wheel : Validating wheel spec version DEBUG : pyproject_installer.lib.wheel : Parsing wheel spec metadata DEBUG : pyproject_installer.lib.wheel : Validating RECORD INFO : pyproject_installer.install_cmd._install : Wheel installation root: /usr/src/tmp/python3-module-pyproject-parser-buildroot/usr/lib/python3/site-packages INFO : pyproject_installer.install_cmd._install : Extracting wheel DEBUG : pyproject_installer.install_cmd._install : Filtering out not allowed file: pyproject_parser-0.11.1.dist-info/LICENSE DEBUG : pyproject_installer.install_cmd._install : Filtering out not allowed file: pyproject_parser-0.11.1.dist-info/WHEEL DEBUG : pyproject_installer.install_cmd._install : Filtering out not allowed file: pyproject_parser-0.11.1.dist-info/top_level.txt DEBUG : pyproject_installer.install_cmd._install : Filtering out not allowed file: pyproject_parser-0.11.1.dist-info/RECORD INFO : pyproject_installer.install_cmd._install : Generating entrypoints scripts DEBUG : pyproject_installer.lib.scripts : Installing console script: check-pyproject DEBUG : pyproject_installer.lib.scripts : Installing console script: pyproject-fmt DEBUG : pyproject_installer.lib.scripts : Installing console script: pyproject-info DEBUG : pyproject_installer.lib.scripts : Installing console script: pyproject-parser INFO : pyproject_installer.install_cmd._install : Wheel was installed + /usr/lib/rpm/brp-alt Cleaning files in /usr/src/tmp/python3-module-pyproject-parser-buildroot (auto) Verifying and fixing files in /usr/src/tmp/python3-module-pyproject-parser-buildroot (binconfig,pkgconfig,libtool,desktop,gnuconfig) Checking contents of files in /usr/src/tmp/python3-module-pyproject-parser-buildroot/ (default) Compressing files in /usr/src/tmp/python3-module-pyproject-parser-buildroot (auto) Adjusting library links in /usr/src/tmp/python3-module-pyproject-parser-buildroot ./usr/lib: (from :0) Verifying ELF objects in /usr/src/tmp/python3-module-pyproject-parser-buildroot (arch=normal,fhs=normal,lfs=relaxed,lint=relaxed,rpath=normal,stack=normal,textrel=normal,unresolved=normal) Splitting links to aliased files under /{,s}bin in /usr/src/tmp/python3-module-pyproject-parser-buildroot Bytecompiling python3 modules in /usr/src/tmp/python3-module-pyproject-parser-buildroot using /usr/bin/python3 compile /usr/src/tmp/python3-module-pyproject-parser-buildroot/usr/lib/python3/site-packages/pyproject_parser/cli/__init__.py compile /usr/src/tmp/python3-module-pyproject-parser-buildroot/usr/lib/python3/site-packages/pyproject_parser/cli/_json_encoders.py compile /usr/src/tmp/python3-module-pyproject-parser-buildroot/usr/lib/python3/site-packages/pyproject_parser/__init__.py compile /usr/src/tmp/python3-module-pyproject-parser-buildroot/usr/lib/python3/site-packages/pyproject_parser/__main__.py compile /usr/src/tmp/python3-module-pyproject-parser-buildroot/usr/lib/python3/site-packages/pyproject_parser/classes.py compile /usr/src/tmp/python3-module-pyproject-parser-buildroot/usr/lib/python3/site-packages/pyproject_parser/parsers.py compile /usr/src/tmp/python3-module-pyproject-parser-buildroot/usr/lib/python3/site-packages/pyproject_parser/type_hints.py compile /usr/src/tmp/python3-module-pyproject-parser-buildroot/usr/lib/python3/site-packages/pyproject_parser/utils.py Bytecompiling python3 modules with optimization in /usr/src/tmp/python3-module-pyproject-parser-buildroot using /usr/bin/python3 -O compile /usr/src/tmp/python3-module-pyproject-parser-buildroot/usr/lib/python3/site-packages/pyproject_parser/cli/__init__.py compile /usr/src/tmp/python3-module-pyproject-parser-buildroot/usr/lib/python3/site-packages/pyproject_parser/cli/_json_encoders.py compile /usr/src/tmp/python3-module-pyproject-parser-buildroot/usr/lib/python3/site-packages/pyproject_parser/__init__.py compile /usr/src/tmp/python3-module-pyproject-parser-buildroot/usr/lib/python3/site-packages/pyproject_parser/__main__.py compile /usr/src/tmp/python3-module-pyproject-parser-buildroot/usr/lib/python3/site-packages/pyproject_parser/classes.py compile /usr/src/tmp/python3-module-pyproject-parser-buildroot/usr/lib/python3/site-packages/pyproject_parser/parsers.py compile /usr/src/tmp/python3-module-pyproject-parser-buildroot/usr/lib/python3/site-packages/pyproject_parser/type_hints.py compile /usr/src/tmp/python3-module-pyproject-parser-buildroot/usr/lib/python3/site-packages/pyproject_parser/utils.py Bytecompiling python3 modules with optimization-2 in /usr/src/tmp/python3-module-pyproject-parser-buildroot using /usr/bin/python3 -OO compile /usr/src/tmp/python3-module-pyproject-parser-buildroot/usr/lib/python3/site-packages/pyproject_parser/cli/__init__.py compile /usr/src/tmp/python3-module-pyproject-parser-buildroot/usr/lib/python3/site-packages/pyproject_parser/cli/_json_encoders.py compile /usr/src/tmp/python3-module-pyproject-parser-buildroot/usr/lib/python3/site-packages/pyproject_parser/__init__.py compile /usr/src/tmp/python3-module-pyproject-parser-buildroot/usr/lib/python3/site-packages/pyproject_parser/__main__.py compile /usr/src/tmp/python3-module-pyproject-parser-buildroot/usr/lib/python3/site-packages/pyproject_parser/classes.py compile /usr/src/tmp/python3-module-pyproject-parser-buildroot/usr/lib/python3/site-packages/pyproject_parser/parsers.py compile /usr/src/tmp/python3-module-pyproject-parser-buildroot/usr/lib/python3/site-packages/pyproject_parser/type_hints.py compile /usr/src/tmp/python3-module-pyproject-parser-buildroot/usr/lib/python3/site-packages/pyproject_parser/utils.py Hardlinking identical .pyc and .opt-?.pyc files './usr/lib/python3/site-packages/pyproject_parser/__pycache__/__init__.cpython-312.opt-1.pyc' => './usr/lib/python3/site-packages/pyproject_parser/__pycache__/__init__.cpython-312.pyc' './usr/lib/python3/site-packages/pyproject_parser/__pycache__/__main__.cpython-312.opt-1.pyc' => './usr/lib/python3/site-packages/pyproject_parser/__pycache__/__main__.cpython-312.pyc' './usr/lib/python3/site-packages/pyproject_parser/__pycache__/classes.cpython-312.opt-1.pyc' => './usr/lib/python3/site-packages/pyproject_parser/__pycache__/classes.cpython-312.pyc' './usr/lib/python3/site-packages/pyproject_parser/__pycache__/parsers.cpython-312.opt-1.pyc' => './usr/lib/python3/site-packages/pyproject_parser/__pycache__/parsers.cpython-312.pyc' './usr/lib/python3/site-packages/pyproject_parser/__pycache__/type_hints.cpython-312.opt-1.pyc' => './usr/lib/python3/site-packages/pyproject_parser/__pycache__/type_hints.cpython-312.pyc' './usr/lib/python3/site-packages/pyproject_parser/__pycache__/utils.cpython-312.opt-1.pyc' => './usr/lib/python3/site-packages/pyproject_parser/__pycache__/utils.cpython-312.pyc' './usr/lib/python3/site-packages/pyproject_parser/cli/__pycache__/__init__.cpython-312.opt-1.pyc' => './usr/lib/python3/site-packages/pyproject_parser/cli/__pycache__/__init__.cpython-312.pyc' './usr/lib/python3/site-packages/pyproject_parser/cli/__pycache__/_json_encoders.cpython-312.opt-1.pyc' => './usr/lib/python3/site-packages/pyproject_parser/cli/__pycache__/_json_encoders.cpython-312.pyc' Executing(%check): /bin/sh -e /usr/src/tmp/rpm-tmp.86612 + umask 022 + /bin/mkdir -p /usr/src/RPM/BUILD + cd /usr/src/RPM/BUILD + cd python3-module-pyproject-parser-0.11.1 + export 'CFLAGS=-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto' + CFLAGS='-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto' + export 'CXXFLAGS=-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto' + CXXFLAGS='-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto' + export 'FFLAGS=-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto' + FFLAGS='-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto' + export NO_INTERNET=YES + NO_INTERNET=YES + /usr/bin/python3 -m pyproject_installer run -- python3 -m pytest -vra INFO : Creating venv INFO : Installing console scripts INFO : Installing package: /usr/src/RPM/BUILD/python3-module-pyproject-parser-0.11.1/dist/pyproject_parser-0.11.1-py3-none-any.whl INFO : Running command: ['/usr/src/RPM/BUILD/python3-module-pyproject-parser-0.11.1/.run_venv/bin/python3', '-m', 'pyproject_installer', 'install', '/usr/src/RPM/BUILD/python3-module-pyproject-parser-0.11.1/dist/pyproject_parser-0.11.1-py3-none-any.whl'] INFO : Running command: ['python3', '-m', 'pytest', '-vra'] ============================= test session starts ============================== platform linux -- Python 3.12.8, pytest-8.3.4, pluggy-1.5.0 -- /usr/src/RPM/BUILD/python3-module-pyproject-parser-0.11.1/.run_venv/bin/python3 cachedir: .pytest_cache Using --randomly-seed=2094355442 Test session started at 04:28:05 rootdir: /usr/src/RPM/BUILD/python3-module-pyproject-parser-0.11.1 configfile: tox.ini plugins: datadir-1.5.0, regressions-2.6.0, randomly-3.16.0, timeout-2.3.1 timeout: 300.0s timeout method: signal timeout func_only: False collecting ... collected 546 items tests/test_cli.py::test_traceback_handler_show_traceback[FileNotFoundError_path] PASSED [ 0%] tests/test_cli.py::test_handle_tracebacks_ignored_exceptions_click[exception0] PASSED [ 0%] tests/test_cli.py::test_info_readme_license[True-None-0-project.license.text] FAILED [ 0%] tests/test_cli.py::test_info_readme_license[False-None-0-project.license] FAILED [ 0%] tests/test_cli.py::test_check[optional-dependencies-empty-group] PASSED [ 0%] tests/test_cli.py::test_info_readme_license[True-4-0-project.readme] FAILED [ 1%] tests/test_cli.py::test_info_readme_license[False-None-1-project.license] FAILED [ 1%] tests/test_cli.py::test_check_error[project] PASSED [ 1%] tests/test_cli.py::test_info_readme_license[True-4-1-project.readme.text] FAILED [ 1%] tests/test_cli.py::test_check_error_caught[bad_version] PASSED [ 1%] tests/test_cli.py::test_info_readme_license[True-2-1-project.readme.text] FAILED [ 2%] tests/test_cli.py::test_info_readme_license[True-0-0-project.license.file] FAILED [ 2%] tests/test_cli.py::test_traceback_handler_show_traceback[ModuleNotFoundError] PASSED [ 2%] tests/test_cli.py::test_info_readme_license[False-0-0-project.readme] FAILED [ 2%] tests/test_cli.py::test_info_readme_license[True-0-0-project.license] FAILED [ 2%] tests/test_cli.py::test_info_readme_license[False-2-0-project.readme.file] FAILED [ 2%] tests/test_cli.py::test_check[optional-dependencies] PASSED [ 3%] tests/test_cli.py::test_reformat[True-UNORDERED] PASSED [ 3%] tests/test_cli.py::test_info_readme_license[False-0-1-project.readme.file] FAILED [ 3%] tests/test_cli.py::test_check[COMPLETE_B] PASSED [ 3%] tests/test_cli.py::test_check[complete] PASSED [ 3%] tests/test_cli.py::test_info_readme_license[True-4-1-project.readme] FAILED [ 4%] tests/test_cli.py::test_traceback_handler[FileNotFoundError_path_move_etc_win] PASSED [ 4%] tests/test_cli.py::test_check_error_caught[top_level_typo_caps] PASSED [ 4%] tests/test_cli.py::test_check_extra_deprecation_warning[duplicate_extra_2] PASSED [ 4%] tests/test_cli.py::test_check_error[build-system] PASSED [ 4%] tests/test_cli.py::test_handle_tracebacks_ignored_exceptions[SystemExit] PASSED [ 4%] tests/test_cli.py::test_check[requires_whey] PASSED [ 5%] tests/test_cli.py::test_info_readme_license[False-4-0-project.license.text] FAILED [ 5%] tests/test_cli.py::test_info_readme_license[True-None-1-project.readme.file] FAILED [ 5%] tests/test_cli.py::test_check[keywords] PASSED [ 5%] tests/test_cli.py::test_check_error_caught[project] PASSED [ 5%] tests/test_cli.py::test_traceback_handler_show_traceback[KeyError] PASSED [ 6%] tests/test_cli.py::test_info_readme_license[True-None-1-project.license.file] FAILED [ 6%] tests/test_cli.py::test_info_readme_license[True-None-1-project.license.text] FAILED [ 6%] tests/test_cli.py::test_info_readme_license[False-2-1-project.license.text] FAILED [ 6%] tests/test_cli.py::test_info[0-all] PASSED [ 6%] tests/test_cli.py::test_info_readme_license[False-None-1-project.readme] FAILED [ 6%] tests/test_cli.py::test_check[maintainers] FAILED [ 7%] tests/test_cli.py::test_info_readme_license[False-None-0-project.readme.file] FAILED [ 7%] tests/test_cli.py::test_info_readme_license[True-4-0-project.readme.file] FAILED [ 7%] tests/test_cli.py::test_check[backend_paths] PASSED [ 7%] tests/test_cli.py::test_reformat[True-COMPLETE_PROJECT_A] FAILED [ 7%] tests/test_cli.py::test_check[dependencies] PASSED [ 8%] tests/test_cli.py::test_info[4-tool.whey.base-classifiers] PASSED [ 8%] tests/test_cli.py::test_reformat[False-COMPLETE_A_WITH_FILES] FAILED [ 8%] tests/test_cli.py::test_info[0-project.authors] PASSED [ 8%] tests/test_cli.py::test_info_readme_license[False-2-0-project.readme.text] FAILED [ 8%] tests/test_cli.py::test_info[0-project] PASSED [ 8%] tests/test_cli.py::test_info[0-project.urls.Source Code] PASSED [ 9%] tests/test_cli.py::test_traceback_handler[FileNotFoundError_path_move_etc] PASSED [ 9%] tests/test_cli.py::test_info[0-tool.whey.base-classifiers] PASSED [ 9%] tests/test_cli.py::test_check_extra_deprecation_warning[duplicate_extra_1] PASSED [ 9%] tests/test_cli.py::test_info_readme_license[False-None-0-project.readme] FAILED [ 9%] tests/test_cli.py::test_info[4-project.urls.Source Code] PASSED [ 10%] tests/test_cli.py::test_traceback_handler[ModuleNotFoundError] PASSED [ 10%] tests/test_cli.py::test_traceback_handler[FileNotFoundError_path_win] PASSED [ 10%] tests/test_cli.py::test_info_readme_license[True-None-0-project.license] FAILED [ 10%] tests/test_cli.py::test_traceback_handler_show_traceback[FileNotFoundError] PASSED [ 10%] tests/test_cli.py::test_info_readme_license[False-2-1-project.readme] FAILED [ 10%] tests/test_cli.py::test_info_readme_license[False-None-1-project.readme.text] FAILED [ 11%] tests/test_cli.py::test_info_readme_license[False-None-0-project.license.text] FAILED [ 11%] tests/test_cli.py::test_info_readme_license[True-None-0-project.readme.text] FAILED [ 11%] tests/test_cli.py::test_traceback_handler[FileNotFoundError_path] PASSED [ 11%] tests/test_cli.py::test_info_readme_license[True-None-0-project.readme] FAILED [ 11%] tests/test_cli.py::test_info_readme_license[False-None-1-project.readme.file] FAILED [ 12%] tests/test_cli.py::test_info_readme_license[True-0-0-project.readme.file] FAILED [ 12%] tests/test_cli.py::test_reformat[True-COMPLETE_UNDERSCORE_NAME] PASSED [ 12%] tests/test_cli.py::test_info[0-first_build_requirement] PASSED [ 12%] tests/test_cli.py::test_info_readme_license[True-4-0-project.license.file] FAILED [ 12%] tests/test_cli.py::test_info_readme_license[False-0-1-project.readme] FAILED [ 13%] tests/test_cli.py::test_info_readme_license[False-0-0-project.license] FAILED [ 13%] tests/test_cli.py::test_check_error[top_level_typo_caps] PASSED [ 13%] tests/test_cli.py::test_reformat[False-UNORDERED] PASSED [ 13%] tests/test_cli.py::test_info_readme_license[True-0-1-project.readme] FAILED [ 13%] tests/test_cli.py::test_check_error_caught[top_level_typo_underscore] PASSED [ 13%] tests/test_cli.py::test_info_readme_license[True-4-1-project.readme.file] FAILED [ 14%] tests/test_cli.py::test_info_readme_license[True-4-1-project.license.text] FAILED [ 14%] tests/test_cli.py::test_info_readme_license[False-0-0-project.readme.text] FAILED [ 14%] tests/test_cli.py::test_traceback_handler_show_traceback[Exception] PASSED [ 14%] tests/test_cli.py::test_info_readme_license[False-None-1-project.license.file] FAILED [ 14%] tests/test_cli.py::test_handle_tracebacks_ignored_exceptions_click[exception2] PASSED [ 15%] tests/test_cli.py::test_traceback_handler_show_traceback[FileNotFoundError_path_move_etc_win] PASSED [ 15%] tests/test_cli.py::test_info_readme_license[True-2-1-project.license.file] FAILED [ 15%] tests/test_cli.py::test_traceback_handler[ValueError] PASSED [ 15%] tests/test_cli.py::test_reformat[True-COMPLETE_A] PASSED [ 15%] tests/test_cli.py::test_info_readme_license[True-None-1-project.readme] FAILED [ 15%] tests/test_cli.py::test_info_readme_license[True-4-0-project.readme.text] FAILED [ 16%] tests/test_cli.py::test_traceback_handler[AttributeError] PASSED [ 16%] tests/test_cli.py::test_info_readme_license[False-0-1-project.readme.text] FAILED [ 16%] tests/test_cli.py::test_info_readme_license[False-2-1-project.readme.text] FAILED [ 16%] tests/test_cli.py::test_info_readme_license[False-2-1-project.readme.file] FAILED [ 16%] tests/test_cli.py::test_check[classifiers] PASSED [ 17%] tests/test_cli.py::test_check[authors] FAILED [ 17%] tests/test_cli.py::test_traceback_handler_show_traceback[FileExistsError] PASSED [ 17%] tests/test_cli.py::test_info[2-all] PASSED [ 17%] tests/test_cli.py::test_info_readme_license[False-None-0-project.license.file] FAILED [ 17%] tests/test_cli.py::test_info[None-project.urls.Source Code] PASSED [ 17%] tests/test_cli.py::test_traceback_handler_show_traceback[FileNotFoundError_path_win] PASSED [ 18%] tests/test_cli.py::test_reformat[False-COMPLETE_PROJECT_A] FAILED [ 18%] tests/test_cli.py::test_check[COMPLETE_A] PASSED [ 18%] tests/test_cli.py::test_info_readme_license[False-0-1-project.license.file] FAILED [ 18%] tests/test_cli.py::test_info_readme_license[True-4-1-project.license.file] FAILED [ 18%] tests/test_cli.py::test_info_readme_license[True-2-1-project.license.text] FAILED [ 19%] tests/test_cli.py::test_info_readme_license[True-None-1-project.readme.text] FAILED [ 19%] tests/test_cli.py::test_info_readme_license[False-0-0-project.readme.file] FAILED [ 19%] tests/test_cli.py::test_info_readme_license[False-2-1-project.license] FAILED [ 19%] tests/test_cli.py::test_info[2-tool.whey.base-classifiers] PASSED [ 19%] tests/test_cli.py::test_info_readme_license[True-None-0-project.readme.file] FAILED [ 19%] tests/test_cli.py::test_check[unicode] FAILED [ 20%] tests/test_cli.py::test_info_readme_license[True-0-0-project.license.text] FAILED [ 20%] tests/test_cli.py::test_traceback_handler[FileNotFoundError_win] PASSED [ 20%] tests/test_cli.py::test_info[None-fourth_keyword] PASSED [ 20%] tests/test_cli.py::test_info[2-first_author] PASSED [ 20%] tests/test_cli.py::test_info_readme_license[True-4-1-project.license] FAILED [ 21%] tests/test_cli.py::test_info[2-project.urls.Source Code] PASSED [ 21%] tests/test_cli.py::test_traceback_handler[ImportError] PASSED [ 21%] tests/test_cli.py::test_check_error[top_level_typo_underscore] PASSED [ 21%] tests/test_cli.py::test_info[0-first_author] PASSED [ 21%] tests/test_cli.py::test_info[None-tool.whey.base-classifiers] PASSED [ 21%] tests/test_cli.py::test_info[0-build-system] PASSED [ 22%] tests/test_cli.py::test_info_readme_license[True-2-0-project.readme.file] FAILED [ 22%] tests/test_cli.py::test_traceback_handler[SyntaxError] PASSED [ 22%] tests/test_cli.py::test_info_readme_license[True-0-1-project.readme.file] FAILED [ 22%] tests/test_cli.py::test_handle_tracebacks_ignored_exceptions[EOFError] PASSED [ 22%] tests/test_cli.py::test_check[COMPLETE_PROJECT_A] FAILED [ 23%] tests/test_cli.py::test_reformat[False-COMPLETE_B] PASSED [ 23%] tests/test_cli.py::test_info[None-build-system] PASSED [ 23%] tests/test_cli.py::test_traceback_handler_show_traceback[FileNotFoundError_path_move_etc] PASSED [ 23%] tests/test_cli.py::test_info[4-build-system.requires] PASSED [ 23%] tests/test_cli.py::test_info_readme_license[True-0-0-project.readme.text] FAILED [ 23%] tests/test_cli.py::test_info_readme_license[True-2-0-project.readme.text] FAILED [ 24%] tests/test_cli.py::test_info_readme_license[False-4-0-project.readme.file] FAILED [ 24%] tests/test_cli.py::test_info_readme_license[False-4-1-project.readme.file] FAILED [ 24%] tests/test_cli.py::test_info_readme_license[False-0-0-project.license.file] FAILED [ 24%] tests/test_cli.py::test_info_readme_license[False-4-1-project.license.text] FAILED [ 24%] tests/test_cli.py::test_info_readme_license[False-0-1-project.license] FAILED [ 25%] tests/test_cli.py::test_info_readme_license[True-2-1-project.readme.file] FAILED [ 25%] tests/test_cli.py::test_info[2-build-system.requires] PASSED [ 25%] tests/test_cli.py::test_traceback_handler_show_traceback[TypeError] PASSED [ 25%] tests/test_cli.py::test_info[None-build-system.requires] PASSED [ 25%] tests/test_cli.py::test_check[requires-python_complex] PASSED [ 26%] tests/test_cli.py::test_check[requires_setuptools] PASSED [ 26%] tests/test_cli.py::test_info[4-first_author] PASSED [ 26%] tests/test_cli.py::test_info_readme_license[False-None-1-project.license.text] FAILED [ 26%] tests/test_cli.py::test_traceback_handler[BadConfigError] PASSED [ 26%] tests/test_cli.py::test_info_readme_license[False-4-1-project.license] FAILED [ 26%] tests/test_cli.py::test_traceback_handler_show_traceback[NameError] PASSED [ 27%] tests/test_cli.py::test_check[minimal] PASSED [ 27%] tests/test_cli.py::test_reformat[False-COMPLETE_UNDERSCORE_NAME] PASSED [ 27%] tests/test_cli.py::test_info[None-project.authors] PASSED [ 27%] tests/test_cli.py::test_check_extra_deprecation[duplicate_extra_1] PASSED [ 27%] tests/test_cli.py::test_info_readme_license[True-0-0-project.readme] FAILED [ 28%] tests/test_cli.py::test_info_readme_license[False-None-0-project.readme.text] FAILED [ 28%] tests/test_cli.py::test_info_readme_license[False-2-0-project.license.file] FAILED [ 28%] tests/test_cli.py::test_info[0-build-system.requires] PASSED [ 28%] tests/test_cli.py::test_traceback_handler[Exception] PASSED [ 28%] tests/test_cli.py::test_reformat[True-COMPLETE_B] PASSED [ 28%] tests/test_cli.py::test_info[0-fourth_keyword] PASSED [ 29%] tests/test_cli.py::test_info_readme_license[False-2-0-project.license] FAILED [ 29%] tests/test_cli.py::test_info[4-first_build_requirement] PASSED [ 29%] tests/test_cli.py::test_info[None-first_build_requirement] PASSED [ 29%] tests/test_cli.py::test_info_readme_license[True-2-0-project.license.text] FAILED [ 29%] tests/test_cli.py::test_check_error_caught[author_comma] FAILED [ 30%] tests/test_cli.py::test_info_readme_license[True-4-0-project.license.text] FAILED [ 30%] tests/test_cli.py::test_info[4-all] PASSED [ 30%] tests/test_cli.py::test_info[None-project] PASSED [ 30%] tests/test_cli.py::test_info[2-build-system] PASSED [ 30%] tests/test_cli.py::test_traceback_handler_show_traceback[SyntaxError] PASSED [ 30%] tests/test_cli.py::test_check_extra_deprecation[duplicate_extra_2] PASSED [ 31%] tests/test_cli.py::test_info_readme_license[False-4-0-project.license.file] FAILED [ 31%] tests/test_cli.py::test_traceback_handler_show_traceback[ValueError] PASSED [ 31%] tests/test_cli.py::test_info[2-first_build_requirement] PASSED [ 31%] tests/test_cli.py::test_info_readme_license[True-0-1-project.license.text] FAILED [ 31%] tests/test_cli.py::test_info_readme_license[True-0-1-project.license] FAILED [ 32%] tests/test_cli.py::test_info_readme_license[False-2-0-project.license.text] FAILED [ 32%] tests/test_cli.py::test_info[None-all] PASSED [ 32%] tests/test_cli.py::test_check[entry_points] PASSED [ 32%] tests/test_cli.py::test_handle_tracebacks_ignored_exceptions_click[exception1] PASSED [ 32%] tests/test_cli.py::test_check_error_caught[top-level] PASSED [ 32%] tests/test_cli.py::test_reformat[False-COMPLETE_A] PASSED [ 33%] tests/test_cli.py::test_check_extra_deprecation_warning[duplicate_extra_3] PASSED [ 33%] tests/test_cli.py::test_info_readme_license[False-4-1-project.readme] FAILED [ 33%] tests/test_cli.py::test_info_readme_license[False-4-0-project.readme.text] FAILED [ 33%] tests/test_cli.py::test_check[requires-python] PASSED [ 33%] tests/test_cli.py::test_handle_tracebacks_ignored_exceptions[Abort] PASSED [ 34%] tests/test_cli.py::test_info[4-fourth_keyword] PASSED [ 34%] tests/test_cli.py::test_check_error_caught[build-system] PASSED [ 34%] tests/test_cli.py::test_info_readme_license[True-None-0-project.license.file] FAILED [ 34%] tests/test_cli.py::test_info_readme_license[False-4-0-project.license] FAILED [ 34%] tests/test_cli.py::test_info_readme_license[False-2-0-project.readme] FAILED [ 34%] tests/test_cli.py::test_info[2-fourth_keyword] PASSED [ 35%] tests/test_cli.py::test_info_readme_license[False-0-1-project.license.text] FAILED [ 35%] tests/test_cli.py::test_check[urls] PASSED [ 35%] tests/test_cli.py::test_info[4-build-system] PASSED [ 35%] tests/test_cli.py::test_info_readme_license[True-None-1-project.license] FAILED [ 35%] tests/test_cli.py::test_check_extra_deprecation[duplicate_extra_3] PASSED [ 36%] tests/test_cli.py::test_check[requires_nothing] PASSED [ 36%] tests/test_cli.py::test_traceback_handler_show_traceback[FileNotFoundError_win] PASSED [ 36%] tests/test_cli.py::test_info[2-project] PASSED [ 36%] tests/test_cli.py::test_traceback_handler_show_traceback[AttributeError] PASSED [ 36%] tests/test_cli.py::test_info_readme_license[False-0-0-project.license.text] FAILED [ 36%] tests/test_cli.py::test_traceback_handler[FileNotFoundError] PASSED [ 37%] tests/test_cli.py::test_check_error_caught[bad_requires_python] PASSED [ 37%] tests/test_cli.py::test_check_error_caught[bad_name] PASSED [ 37%] tests/test_cli.py::test_info_readme_license[True-2-0-project.license] FAILED [ 37%] tests/test_cli.py::test_check[description] PASSED [ 37%] tests/test_cli.py::test_handle_tracebacks_ignored_exceptions[KeyboardInterrupt] PASSED [ 38%] tests/test_cli.py::test_check_error[top-level] PASSED [ 38%] tests/test_cli.py::test_info_readme_license[False-4-0-project.readme] FAILED [ 38%] tests/test_cli.py::test_traceback_handler[TypeError] PASSED [ 38%] tests/test_cli.py::test_info_readme_license[True-2-1-project.readme] FAILED [ 38%] tests/test_cli.py::test_traceback_handler[FileExistsError] PASSED [ 39%] tests/test_cli.py::test_info_readme_license[True-0-1-project.license.file] FAILED [ 39%] tests/test_cli.py::test_info_readme_license[False-4-1-project.readme.text] FAILED [ 39%] tests/test_cli.py::test_info_readme_license[False-4-1-project.license.file] FAILED [ 39%] tests/test_cli.py::test_info[4-project] PASSED [ 39%] tests/test_cli.py::test_info[4-project.authors] PASSED [ 39%] tests/test_cli.py::test_info_readme_license[False-2-1-project.license.file] FAILED [ 40%] tests/test_cli.py::test_check[backend_path] PASSED [ 40%] tests/test_cli.py::test_info_readme_license[True-4-0-project.license] FAILED [ 40%] tests/test_cli.py::test_info_readme_license[True-2-0-project.readme] FAILED [ 40%] tests/test_cli.py::test_info[None-first_author] PASSED [ 40%] tests/test_cli.py::test_traceback_handler_show_traceback[ImportError] PASSED [ 41%] tests/test_cli.py::test_info_readme_license[True-2-1-project.license] FAILED [ 41%] tests/test_cli.py::test_info_readme_license[True-0-1-project.readme.text] FAILED [ 41%] tests/test_cli.py::test_reformat[True-COMPLETE_A_WITH_FILES] FAILED [ 41%] tests/test_cli.py::test_info[2-project.authors] PASSED [ 41%] tests/test_cli.py::test_traceback_handler[NameError] PASSED [ 41%] tests/test_cli.py::test_traceback_handler[KeyError] PASSED [ 42%] tests/test_cli.py::test_info_readme_license[True-2-0-project.license.file] FAILED [ 42%] tests/test_cli.py::test_traceback_handler_show_traceback[BadConfigError] PASSED [ 42%] tests/test_cli_module.py::test_handle_tracebacks_ignored_exceptions[EOFError] PASSED [ 42%] tests/test_cli_module.py::test_traceback_handler_show_traceback[Exception] PASSED [ 42%] tests/test_cli_module.py::test_traceback_handler[BadConfigError] PASSED [ 43%] tests/test_cli_module.py::test_traceback_handler[TypeError] PASSED [ 43%] tests/test_cli_module.py::test_traceback_handler[NameError] PASSED [ 43%] tests/test_cli_module.py::test_handle_tracebacks_ignored_exceptions_click[exception2] PASSED [ 43%] tests/test_cli_module.py::test_traceback_handler_show_traceback[FileExistsError] PASSED [ 43%] tests/test_cli_module.py::test_traceback_handler[SyntaxError] PASSED [ 43%] tests/test_cli_module.py::test_handle_tracebacks_ignored_exceptions[Abort] PASSED [ 44%] tests/test_cli_module.py::test_handle_tracebacks_ignored_exceptions[KeyboardInterrupt] PASSED [ 44%] tests/test_cli_module.py::test_traceback_handler_show_traceback[SyntaxError] PASSED [ 44%] tests/test_cli_module.py::test_traceback_handler_show_traceback[ValueError] PASSED [ 44%] tests/test_cli_module.py::test_traceback_handler_show_traceback[NameError] PASSED [ 44%] tests/test_cli_module.py::test_resolve_class PASSED [ 45%] tests/test_cli_module.py::test_traceback_handler[Exception] PASSED [ 45%] tests/test_cli_module.py::test_traceback_handler[FileExistsError] PASSED [ 45%] tests/test_cli_module.py::test_traceback_handler[ValueError] PASSED [ 45%] tests/test_cli_module.py::test_handle_tracebacks_ignored_exceptions_click[exception0] PASSED [ 45%] tests/test_cli_module.py::test_prettify_deprecation_warning PASSED [ 45%] tests/test_cli_module.py::test_handle_tracebacks_ignored_exceptions[SystemExit] PASSED [ 46%] tests/test_cli_module.py::test_handle_tracebacks_ignored_exceptions_click[exception1] PASSED [ 46%] tests/test_cli_module.py::test_traceback_handler_show_traceback[FileNotFoundError] PASSED [ 46%] tests/test_cli_module.py::test_traceback_handler_show_traceback[BadConfigError] PASSED [ 46%] tests/test_cli_module.py::test_traceback_handler[KeyError] PASSED [ 46%] tests/test_cli_module.py::test_traceback_handler[FileNotFoundError] PASSED [ 47%] tests/test_cli_module.py::test_traceback_handler_show_traceback[TypeError] PASSED [ 47%] tests/test_cli_module.py::test_traceback_handler_show_traceback[KeyError] PASSED [ 47%] tests/test_classes.py::TestLicense::test_resolve_inplace PASSED [ 47%] tests/test_classes.py::TestLicense::test_to_dict PASSED [ 47%] tests/test_classes.py::TestLicense::test_no_test_or_file PASSED [ 47%] tests/test_classes.py::TestLicense::test_to_pep621_dict PASSED [ 48%] tests/test_classes.py::TestLicense::test_resolve PASSED [ 48%] tests/test_classes.py::TestReadme::test_invalid_content_types PASSED [ 48%] tests/test_classes.py::TestReadme::test_from_file_bad_filetype PASSED [ 48%] tests/test_classes.py::TestReadme::test_to_dict PASSED [ 48%] tests/test_classes.py::TestReadme::test_to_pep621_dict PASSED [ 49%] tests/test_classes.py::TestReadme::test_resolve PASSED [ 49%] tests/test_classes.py::TestReadme::test_from_file_charset PASSED [ 49%] tests/test_classes.py::TestReadme::test_content_type_sole_arg PASSED [ 49%] tests/test_classes.py::TestReadme::test_no_test_or_file PASSED [ 49%] tests/test_classes.py::TestReadme::test_resolve_inplace PASSED [ 50%] tests/test_classes.py::TestReadme::test_from_file PASSED [ 50%] tests/test_dumping.py::test_dumps_readme[dict_file] PASSED [ 50%] tests/test_dumping.py::test_reformat[COMPLETE_UNDERSCORE_NAME] PASSED [ 50%] tests/test_dumping.py::test_reformat[COMPLETE_A_WITH_FILES] FAILED [ 50%] tests/test_dumping.py::test_dumps[COMPLETE_A] PASSED [ 50%] tests/test_dumping.py::test_dumps_readme[string] PASSED [ 51%] tests/test_dumping.py::test_reformat[COMPLETE_A] PASSED [ 51%] tests/test_dumping.py::test_dumps[COMPLETE_B] PASSED [ 51%] tests/test_dumping.py::test_reformat[COMPLETE_PROJECT_A] FAILED [ 51%] tests/test_dumping.py::test_dumps[COMPLETE_PROJECT_A] FAILED [ 51%] tests/test_dumping.py::test_reformat[UNORDERED] PASSED [ 52%] tests/test_dumping.py::test_dumps_readme[dict_text] PASSED [ 52%] tests/test_dumping.py::test_reformat[COMPLETE_B] PASSED [ 52%] tests/test_config.py::test_pep621_class_bad_config[maintainer_comma] FAILED [ 52%] tests/test_config.py::test_pep621_class_bad_config_license[empty] FAILED [ 52%] tests/test_config.py::test_pep621_class_valid_config[dependencies-True] PASSED [ 52%] tests/test_config.py::test_pep621_class_bad_config[missing_readme_file_win32] SKIPPED [ 53%] tests/test_config.py::test_pep621_class_bad_config_readme[unknown_key] FAILED [ 53%] tests/test_config.py::test_pep621_class_valid_config[COMPLETE_A-True] PASSED [ 53%] tests/test_config.py::test_buildsystem_parser_valid_config[backend_path-True] PASSED [ 53%] tests/test_config.py::test_pep621_class_valid_config[urls-False] PASSED [ 53%] tests/test_config.py::test_pep621_class_valid_config[requires-python-True] PASSED [ 54%] tests/test_config.py::test_pep621_class_valid_config[keywords-True] PASSED [ 54%] tests/test_config.py::test_pep621_class_valid_config_readme[README.md] PASSED [ 54%] tests/test_config.py::test_pep621_class_valid_config[description-False] PASSED [ 54%] tests/test_config.py::test_pep621_subclass[optional-dependencies] PASSED [ 54%] tests/test_config.py::test_buildsystem_parser_valid_config[complete-True] PASSED [ 54%] tests/test_config.py::test_pep621_class_valid_config[unicode-False] FAILED [ 55%] tests/test_config.py::test_pep621_class_valid_config_license[LICENSE.md] FAILED [ 55%] tests/test_config.py::test_pep621_class_valid_config[optional-dependencies-True] PASSED [ 55%] tests/test_config.py::test_pep621_class_valid_config[urls-True] PASSED [ 55%] tests/test_config.py::test_pep621_subclass[authors] FAILED [ 55%] tests/test_config.py::test_pep621_class_bad_config[keywords_wrong_type] PASSED [ 56%] tests/test_config.py::test_buildsystem_parser_valid_config[requires_whey-True] PASSED [ 56%] tests/test_config.py::test_pep621_class_bad_config[bad_name] PASSED [ 56%] tests/test_config.py::test_buildsystem_parser_valid_config[backend_paths-True] PASSED [ 56%] tests/test_config.py::test_pep621_class_bad_config[dependencies_wrong_type] PASSED [ 56%] tests/test_config.py::test_pep621_subclass[dependencies] PASSED [ 56%] tests/test_config.py::test_pep621_class_valid_config[maintainers-False] FAILED [ 57%] tests/test_config.py::test_buildsystem_parser_valid_config[backend_paths-False] PASSED [ 57%] tests/test_config.py::test_pep621_class_valid_config[COMPLETE_B-True] PASSED [ 57%] tests/test_config.py::test_pep621_class_valid_config[keywords-False] PASSED [ 57%] tests/test_config.py::test_pep621_class_bad_config_readme[content_type_charset] FAILED [ 57%] tests/test_config.py::test_pep621_class_valid_config[entry_points-False] PASSED [ 58%] tests/test_config.py::test_pep621_class_valid_config[unicode-True] FAILED [ 58%] tests/test_config.py::test_pep621_unnormalized PASSED [ 58%] tests/test_config.py::test_pep621_class_bad_config[missing_license_file_win32] SKIPPED [ 58%] tests/test_config.py::test_parse_config_readme_errors[README] PASSED [ 58%] tests/test_config.py::test_pep621_class_valid_config[maintainers-True] FAILED [ 58%] tests/test_config.py::test_buildsystem_parser_valid_config[requires_setuptools-False] PASSED [ 59%] tests/test_config.py::test_pep621_class_valid_config_readme_dict[text_content_type_md] FAILED [ 59%] tests/test_config.py::test_buildsystem_parser_errors[requires_invalid_requirement0] PASSED [ 59%] tests/test_config.py::test_extra_deprecation[duplicate_extra_2] PASSED [ 59%] tests/test_config.py::test_pep621_class_valid_config_license[LICENSE.rst] FAILED [ 59%] tests/test_config.py::test_pep621_class_valid_config_license[LICENSE.txt] FAILED [ 60%] tests/test_config.py::test_pep621_class_bad_config[bad_version] PASSED [ 60%] tests/test_config.py::test_pep621_class_valid_config_license[LICENSE] FAILED [ 60%] tests/test_config.py::test_pep621_class_valid_config[optional-dependencies-False] PASSED [ 60%] tests/test_config.py::test_parse_config_readme_errors[README.rtf] PASSED [ 60%] tests/test_config.py::test_pep621_subclass[description] PASSED [ 60%] tests/test_config.py::test_pep621_class_valid_config[authors-False] FAILED [ 61%] tests/test_config.py::test_pep621_class_bad_config_readme[empty] FAILED [ 61%] tests/test_config.py::test_pep621_class_bad_config[extra_invalid_c] PASSED [ 61%] tests/test_config.py::test_pep621_subclass[unicode] FAILED [ 61%] tests/test_config.py::test_buildsystem_parser_valid_config[requires_whey-False] PASSED [ 61%] tests/test_config.py::test_pep621_class_valid_config[entry_points-True] PASSED [ 62%] tests/test_config.py::test_pep621_class_valid_config[COMPLETE_PROJECT_A-False] FAILED [ 62%] tests/test_config.py::test_pep621_class_valid_config_readme[README.rst] PASSED [ 62%] tests/test_config.py::test_pep621_class_bad_config[missing_readme_file] PASSED [ 62%] tests/test_config.py::test_pep621_class_bad_config[dependencies_invalid_requirement1] SKIPPED [ 62%] tests/test_config.py::test_buildsystem_parser_errors[requires_list_int] PASSED [ 63%] tests/test_config.py::test_pep621_class_valid_config[optional-dependencies-hyphen-True] PASSED [ 63%] tests/test_config.py::test_pep621_subclass[COMPLETE_B] PASSED [ 63%] tests/test_config.py::test_buildsystem_unnormalized PASSED [ 63%] tests/test_config.py::test_pep621_class_valid_config[authors-True] FAILED [ 63%] tests/test_config.py::test_pep621_class_bad_config_readme[charset_only] FAILED [ 63%] tests/test_config.py::test_buildsystem_parser_errors[requires_str] PASSED [ 64%] tests/test_config.py::test_pep621_class_valid_config[optional-dependencies-hyphen-False] PASSED [ 64%] tests/test_config.py::test_pep621_class_bad_config_readme[content_type_only] FAILED [ 64%] tests/test_config.py::test_pep621_class_valid_config_readme[INTRODUCTION.md] PASSED [ 64%] tests/test_config.py::test_buildsystem_parser_errors[backend_path_list_int] PASSED [ 64%] tests/test_config.py::test_pep621_class_valid_config_readme_dict[text_content_type_rst] FAILED [ 65%] tests/test_config.py::test_pep621_normalize_keep_dot PASSED [ 65%] tests/test_config.py::test_pep621_class_valid_config[minimal-True] PASSED [ 65%] tests/test_config.py::test_extra_deprecation[duplicate_extra_3] PASSED [ 65%] tests/test_config.py::test_pep621_class_valid_config[optional-dependencies-empty-group-True] PASSED [ 65%] tests/test_config.py::test_pep621_subclass[COMPLETE_A] PASSED [ 65%] tests/test_config.py::test_pep621_class_valid_config_readme_dict[md_file] FAILED [ 66%] tests/test_config.py::test_pep621_class_bad_config[classifiers_wrong_type] PASSED [ 66%] tests/test_config.py::test_pep621_class_valid_config_license_dict FAILED [ 66%] tests/test_config.py::test_pep621_class_bad_config[author_comma] FAILED [ 66%] tests/test_config.py::test_buildsystem_parser_valid_config[requires_setuptools-True] PASSED [ 66%] tests/test_config.py::test_pep621_class_bad_config[no_name] PASSED [ 67%] tests/test_config.py::test_pep621_class_bad_config[bad_requires_python] PASSED [ 67%] tests/test_config.py::test_pep621_class_valid_config[COMPLETE_A-False] PASSED [ 67%] tests/test_config.py::test_pep621_class_bad_config_readme[file_and_readme] FAILED [ 67%] tests/test_config.py::test_pep621_subclass[entry_points] PASSED [ 67%] tests/test_config.py::test_buildsystem_parser_valid_config[requires_nothing-False] PASSED [ 67%] tests/test_config.py::test_pep621_subclass[COMPLETE_PROJECT_A] FAILED [ 68%] tests/test_config.py::test_buildsystem_parser_valid_config[requires_nothing-True] PASSED [ 68%] tests/test_config.py::test_buildsystem_parser_valid_config[backend_path-False] PASSED [ 68%] tests/test_config.py::test_pep621_class_valid_config[requires-python_complex-True] PASSED [ 68%] tests/test_config.py::test_pep621_subclass[requires-python_complex] PASSED [ 68%] tests/test_config.py::test_pep621_class_bad_config_readme[bad_content_type] FAILED [ 69%] tests/test_config.py::test_pep621_subclass[classifiers] PASSED [ 69%] tests/test_config.py::test_buildsystem_normalize PASSED [ 69%] tests/test_config.py::test_pep621_class_bad_config[extra_invalid_b] PASSED [ 69%] tests/test_config.py::test_pep621_class_bad_config_readme[no_extension] FAILED [ 69%] tests/test_config.py::test_pep621_class_bad_config[dynamic_name] PASSED [ 69%] tests/test_config.py::test_pep621_class_valid_config[COMPLETE_B-False] PASSED [ 70%] tests/test_config.py::test_pep621_class_bad_config_readme[text_only] FAILED [ 70%] tests/test_config.py::test_pep621_subclass[maintainers] FAILED [ 70%] tests/test_config.py::test_pep621_class_valid_config_readme[readme.txt] PASSED [ 70%] tests/test_config.py::test_buildsystem_parser_errors[backend_path_without_backend] PASSED [ 70%] tests/test_config.py::test_pep621_class_valid_config[requires-python_complex-False] PASSED [ 71%] tests/test_config.py::test_buildsystem_parser_errors[no_requires] PASSED [ 71%] tests/test_config.py::test_pep621_class_valid_config[description-True] PASSED [ 71%] tests/test_config.py::test_pep621_normalize PASSED [ 71%] tests/test_config.py::test_pep621_class_valid_config[classifiers-False] PASSED [ 71%] tests/test_config.py::test_pep621_class_bad_config[dependencies_invalid_requirement0] PASSED [ 71%] tests/test_config.py::test_pep621_subclass[keywords] PASSED [ 72%] tests/test_config.py::test_pep621_class_valid_config[classifiers-True] PASSED [ 72%] tests/test_config.py::test_pep621_subclass[minimal] PASSED [ 72%] tests/test_config.py::test_pep621_subclass[optional-dependencies-empty-group] PASSED [ 72%] tests/test_config.py::test_pep621_class_valid_config[dependencies-False] PASSED [ 72%] tests/test_config.py::test_pep621_class_bad_config[missing_license_file] FAILED [ 73%] tests/test_config.py::test_pep621_class_valid_config_readme_dict[txt_file] FAILED [ 73%] tests/test_config.py::test_pep621_class_bad_config[label_too_long] PASSED [ 73%] tests/test_config.py::test_buildsystem_parser_valid_config[complete-False] PASSED [ 73%] tests/test_config.py::test_pep621_class_bad_config_license[double_license] FAILED [ 73%] tests/test_config.py::test_pep621_class_valid_config[COMPLETE_PROJECT_A-True] FAILED [ 73%] tests/test_config.py::test_pep621_subclass[urls] PASSED [ 74%] tests/test_config.py::test_pep621_class_valid_config_readme_dict[text_content_type_plain] FAILED [ 74%] tests/test_config.py::test_pep621_class_valid_config[minimal-False] PASSED [ 74%] tests/test_config.py::test_extra_deprecation[duplicate_extra_1] PASSED [ 74%] tests/test_config.py::test_pep621_class_valid_config_readme_dict[rst_file] FAILED [ 74%] tests/test_config.py::test_pep621_class_valid_config[optional-dependencies-empty-group-False] PASSED [ 75%] tests/test_config.py::test_pep621_class_valid_config[requires-python-False] PASSED [ 75%] tests/test_config.py::test_pep621_subclass[requires-python] PASSED [ 75%] tests/test_config.py::test_buildsystem_parser_errors[requires_invalid_requirement1] SKIPPED [ 75%] tests/test_config.py::test_RequiredKeysConfigParser PASSED [ 75%] tests/test_config.py::test_pep621_class_bad_config_readme[bad_extension] FAILED [ 76%] tests/test_config.py::test_buildsystem_parser_errors[backend_path_str] PASSED [ 76%] tests/test_config.py::test_buildsystem_normalize_keep_dot PASSED [ 76%] tests/test_utils.py::test_content_type_from_filename[foo.rst-text/x-rst] PASSED [ 76%] tests/test_utils.py::test_content_type_from_filename[filename9-text/x-rst] PASSED [ 76%] tests/test_utils.py::test_content_type_from_filename[filename7-text/markdown] PASSED [ 76%] tests/test_utils.py::test_content_type_from_filename[filename8-text/x-rst] PASSED [ 77%] tests/test_utils.py::test_render_rst_error PASSED [ 77%] tests/test_utils.py::test_content_type_from_filename[filename11-text/plain] PASSED [ 77%] tests/test_utils.py::test_content_type_from_filename[foo/bar.md-text/markdown] PASSED [ 77%] tests/test_utils.py::test_content_type_from_filename[filename6-text/markdown] PASSED [ 77%] tests/test_utils.py::test_content_type_from_filename[foo/bar.txt-text/plain] PASSED [ 78%] tests/test_utils.py::test_render_rst_error_filename PASSED [ 78%] tests/test_utils.py::test_content_type_from_filename[foo.md-text/markdown] PASSED [ 78%] tests/test_utils.py::test_content_type_from_filename[foo/bar.rst-text/x-rst] PASSED [ 78%] tests/test_utils.py::test_content_type_from_filename[foo.txt-text/plain] PASSED [ 78%] tests/test_utils.py::test_content_type_from_filename[filename10-text/plain] PASSED [ 78%] tests/test_pyproject_class.py::test_valid_config[keywords] PASSED [ 79%] tests/test_pyproject_class.py::test_valid_config[backend_paths] PASSED [ 79%] tests/test_pyproject_class.py::test_bad_config[invalid_optional_dependencies_type_dict_list_int] PASSED [ 79%] tests/test_pyproject_class.py::test_from_dict[requires_whey] PASSED [ 79%] tests/test_pyproject_class.py::test_valid_config_resolve_files[requires_whey] PASSED [ 79%] tests/test_pyproject_class.py::test_bad_config[requires_str] PASSED [ 80%] tests/test_pyproject_class.py::test_bad_config[invalid_optional_dependencies_type_str] PASSED [ 80%] tests/test_pyproject_class.py::test_from_dict[minimal] PASSED [ 80%] tests/test_pyproject_class.py::test_valid_config[COMPLETE_PROJECT_A] FAILED [ 80%] tests/test_pyproject_class.py::test_custom_pyproject_class[COMPLETE_B] PASSED [ 80%] tests/test_pyproject_class.py::test_valid_config[requires_nothing] PASSED [ 80%] tests/test_pyproject_class.py::test_from_dict[requires_nothing] PASSED [ 81%] tests/test_pyproject_class.py::test_bad_config[backend_path_str] PASSED [ 81%] tests/test_pyproject_class.py::test_bad_config[bad_email] PASSED [ 81%] tests/test_pyproject_class.py::test_bad_config[top_level_typo_underscore] PASSED [ 81%] tests/test_pyproject_class.py::test_bad_config[author_comma] FAILED [ 81%] tests/test_pyproject_class.py::test_bad_config[label_too_long] PASSED [ 82%] tests/test_pyproject_class.py::test_valid_config[COMPLETE_A] PASSED [ 82%] tests/test_pyproject_class.py::test_from_dict[dependencies] PASSED [ 82%] tests/test_pyproject_class.py::test_valid_config[urls] PASSED [ 82%] tests/test_pyproject_class.py::test_bad_config[requires_invalid_requirement1] SKIPPED [ 82%] tests/test_pyproject_class.py::test_valid_config_resolve_files[authors] FAILED [ 82%] tests/test_pyproject_class.py::test_bad_config[missing_readme_file_win32] SKIPPED [ 83%] tests/test_pyproject_class.py::test_valid_config_resolve_files[requires_nothing] PASSED [ 83%] tests/test_pyproject_class.py::test_valid_config[minimal] PASSED [ 83%] tests/test_pyproject_class.py::test_valid_config_resolve_files[maintainers] FAILED [ 83%] tests/test_pyproject_class.py::test_from_dict[unicode] FAILED [ 83%] tests/test_pyproject_class.py::test_valid_config_resolve_files[classifiers] PASSED [ 84%] tests/test_pyproject_class.py::test_bad_config[gui_scripts_hyphen_entry_point] PASSED [ 84%] tests/test_pyproject_class.py::test_bad_config[unexpected_top_level] PASSED [ 84%] tests/test_pyproject_class.py::test_from_dict[optional-dependencies] PASSED [ 84%] tests/test_pyproject_class.py::test_from_dict[entry_points] PASSED [ 84%] tests/test_pyproject_class.py::test_valid_config[backend_path] PASSED [ 84%] tests/test_pyproject_class.py::test_bad_config[bad_name] PASSED [ 85%] tests/test_pyproject_class.py::test_valid_config[requires-python] PASSED [ 85%] tests/test_pyproject_class.py::test_from_dict[requires-python_complex] PASSED [ 85%] tests/test_pyproject_class.py::test_valid_config[description] PASSED [ 85%] tests/test_pyproject_class.py::test_bad_config[dependencies_invalid_requirement0] PASSED [ 85%] tests/test_pyproject_class.py::test_bad_config[invalid_optional_dependencies_type_list] PASSED [ 86%] tests/test_pyproject_class.py::test_bad_config[top-level] PASSED [ 86%] tests/test_pyproject_class.py::test_bad_config[gui_scripts_entry_point] PASSED [ 86%] tests/test_pyproject_class.py::test_valid_config[unicode] FAILED [ 86%] tests/test_pyproject_class.py::test_bad_config[classifiers_wrong_type] PASSED [ 86%] tests/test_pyproject_class.py::test_bad_config[bad_requires_python] PASSED [ 86%] tests/test_pyproject_class.py::test_bad_config[missing_license_file_win32] SKIPPED [ 87%] tests/test_pyproject_class.py::test_bad_config[invalid_optional_dependencies_type_dict_str] PASSED [ 87%] tests/test_pyproject_class.py::test_valid_config_resolve_files[requires_setuptools] PASSED [ 87%] tests/test_pyproject_class.py::test_from_dict[backend_paths] PASSED [ 87%] tests/test_pyproject_class.py::test_bad_config[requires_list_int] PASSED [ 87%] tests/test_pyproject_class.py::test_bad_config[dynamic_name] PASSED [ 88%] tests/test_pyproject_class.py::test_valid_config_resolve_files[COMPLETE_B] PASSED [ 88%] tests/test_pyproject_class.py::test_valid_config[classifiers] PASSED [ 88%] tests/test_pyproject_class.py::test_valid_config[requires-python_complex] PASSED [ 88%] tests/test_pyproject_class.py::test_valid_config_resolve_files[description] PASSED [ 88%] tests/test_pyproject_class.py::test_valid_config_resolve_files[urls] PASSED [ 89%] tests/test_pyproject_class.py::test_bad_config[extra_invalid_b] PASSED [ 89%] tests/test_pyproject_class.py::test_bad_config[console_scripts_hyphen_entry_point] PASSED [ 89%] tests/test_pyproject_class.py::test_custom_pyproject_class[COMPLETE_PROJECT_A] FAILED [ 89%] tests/test_pyproject_class.py::test_from_dict[backend_path] PASSED [ 89%] tests/test_pyproject_class.py::test_bad_config[dependencies_invalid_requirement1] SKIPPED [ 89%] tests/test_pyproject_class.py::test_bad_config[backend_path_without_backend] PASSED [ 90%] tests/test_pyproject_class.py::test_valid_config_resolve_files[entry_points] PASSED [ 90%] tests/test_pyproject_class.py::test_valid_config_resolve_files[dependencies] PASSED [ 90%] tests/test_pyproject_class.py::test_from_dict[authors] FAILED [ 90%] tests/test_pyproject_class.py::test_bad_config[dependencies_wrong_type] PASSED [ 90%] tests/test_pyproject_class.py::test_bad_config[no_requires] PASSED [ 91%] tests/test_pyproject_class.py::test_valid_config[complete] PASSED [ 91%] tests/test_pyproject_class.py::test_valid_config[maintainers] FAILED [ 91%] tests/test_pyproject_class.py::test_bad_config[bad_version] PASSED [ 91%] tests/test_pyproject_class.py::test_bad_config[keywords_wrong_type] PASSED [ 91%] tests/test_pyproject_class.py::test_custom_pyproject_class[COMPLETE_A] PASSED [ 91%] tests/test_pyproject_class.py::test_bad_config[no_name] PASSED [ 92%] tests/test_pyproject_class.py::test_from_dict[COMPLETE_B] PASSED [ 92%] tests/test_pyproject_class.py::test_valid_config[dependencies] PASSED [ 92%] tests/test_pyproject_class.py::test_bad_config[top_level_typo_caps] PASSED [ 92%] tests/test_pyproject_class.py::test_valid_config_resolve_files[minimal] PASSED [ 92%] tests/test_pyproject_class.py::test_valid_config_resolve_files[COMPLETE_A_WITH_FILES] FAILED [ 93%] tests/test_pyproject_class.py::test_valid_config[requires_setuptools] PASSED [ 93%] tests/test_pyproject_class.py::test_valid_config_resolve_files[requires-python] PASSED [ 93%] tests/test_pyproject_class.py::test_bad_config[backend_path_list_int] PASSED [ 93%] tests/test_pyproject_class.py::test_valid_config_resolve_files[COMPLETE_A] PASSED [ 93%] tests/test_pyproject_class.py::test_valid_config_resolve_files[keywords] PASSED [ 93%] tests/test_pyproject_class.py::test_from_dict[maintainers] FAILED [ 94%] tests/test_pyproject_class.py::test_from_dict[requires-python] PASSED [ 94%] tests/test_pyproject_class.py::test_valid_config[optional-dependencies-empty-group] PASSED [ 94%] tests/test_pyproject_class.py::test_valid_config[authors] FAILED [ 94%] tests/test_pyproject_class.py::test_from_dict[classifiers] PASSED [ 94%] tests/test_pyproject_class.py::test_valid_config[COMPLETE_B] PASSED [ 95%] tests/test_pyproject_class.py::test_valid_config_resolve_files[backend_paths] PASSED [ 95%] tests/test_pyproject_class.py::test_from_dict[COMPLETE_A] PASSED [ 95%] tests/test_pyproject_class.py::test_from_dict[complete] PASSED [ 95%] tests/test_pyproject_class.py::test_bad_config[requires_invalid_requirement0] PASSED [ 95%] tests/test_pyproject_class.py::test_bad_config[console_scripts_entry_point] PASSED [ 95%] tests/test_pyproject_class.py::test_from_dict[description] PASSED [ 96%] tests/test_pyproject_class.py::test_valid_config_resolve_files[optional-dependencies-empty-group] PASSED [ 96%] tests/test_pyproject_class.py::test_from_dict[keywords] PASSED [ 96%] tests/test_pyproject_class.py::test_bad_config[invalid_optional_dependencies_type_dict_int] PASSED [ 96%] tests/test_pyproject_class.py::test_valid_config_resolve_files[complete] PASSED [ 96%] tests/test_pyproject_class.py::test_valid_config_resolve_files[requires-python_complex] PASSED [ 97%] tests/test_pyproject_class.py::test_from_dict[optional-dependencies-empty-group] PASSED [ 97%] tests/test_pyproject_class.py::test_valid_config_resolve_files[optional-dependencies] PASSED [ 97%] tests/test_pyproject_class.py::test_from_dict[urls] PASSED [ 97%] tests/test_pyproject_class.py::test_bad_config[missing_readme_file] PASSED [ 97%] tests/test_pyproject_class.py::test_valid_config_resolve_files[COMPLETE_PROJECT_A] FAILED [ 97%] tests/test_pyproject_class.py::test_valid_config_resolve_files[unicode] FAILED [ 98%] tests/test_pyproject_class.py::test_bad_config[maintainer_comma] FAILED [ 98%] tests/test_pyproject_class.py::test_valid_config[optional-dependencies] PASSED [ 98%] tests/test_pyproject_class.py::test_valid_config[requires_whey] PASSED [ 98%] tests/test_pyproject_class.py::test_from_dict[COMPLETE_PROJECT_A] FAILED [ 98%] tests/test_pyproject_class.py::test_bad_config[missing_license_file] FAILED [ 99%] tests/test_pyproject_class.py::test_bad_config[extra_invalid_c] PASSED [ 99%] tests/test_pyproject_class.py::test_valid_config[entry_points] PASSED [ 99%] tests/test_pyproject_class.py::test_from_dict[requires_setuptools] PASSED [ 99%] tests/test_pyproject_class.py::test_valid_config_resolve_files[backend_path] PASSED [ 99%] tests/test_pyproject_class.py::test_bad_config[invalid_optional_dependencies_type_int] PASSED [100%] =================================== FAILURES =================================== __________ test_info_readme_license[True-None-0-project.license.text] __________ path = 'project.license.text', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_0') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f439a69f350> resolve = True, indent = None @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ____________ test_info_readme_license[False-None-0-project.license] ____________ path = 'project.license', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False0') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f439a3b2db0> resolve = False, indent = None @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ______________ test_info_readme_license[True-4-0-project.readme] _______________ path = 'project.readme', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_1') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f439a377860> resolve = True, indent = 4 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ____________ test_info_readme_license[False-None-1-project.license] ____________ path = 'project.license', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False1') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f439a3b20c0> resolve = False, indent = None @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ____________ test_info_readme_license[True-4-1-project.readme.text] ____________ path = 'project.readme.text', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_2') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f439a3b3590> resolve = True, indent = 4 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ____________ test_info_readme_license[True-2-1-project.readme.text] ____________ path = 'project.readme.text', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_3') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f439a18c680> resolve = True, indent = 2 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[True-0-0-project.license.file] ____________ path = 'project.license.file', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_4') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f439a18d850> resolve = True, indent = 0 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ______________ test_info_readme_license[False-0-0-project.readme] ______________ path = 'project.readme', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False2') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f439a18ec30> resolve = False, indent = 0 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ______________ test_info_readme_license[True-0-0-project.license] ______________ path = 'project.license', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_5') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f439a18ff50> resolve = True, indent = 0 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[False-2-0-project.readme.file] ____________ path = 'project.readme.file', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False3') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f439a218f80> resolve = False, indent = 2 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[False-0-1-project.readme.file] ____________ path = 'project.readme.file', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False4') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399fdc560> resolve = False, indent = 0 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ______________ test_info_readme_license[True-4-1-project.readme] _______________ path = 'project.readme', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_6') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f439a69cef0> resolve = True, indent = 4 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[False-4-0-project.license.text] ___________ path = 'project.license.text', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False5') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f439a21ae70> resolve = False, indent = 4 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! __________ test_info_readme_license[True-None-1-project.readme.file] ___________ path = 'project.readme.file', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_7') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399fdc110> resolve = True, indent = None @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! __________ test_info_readme_license[True-None-1-project.license.file] __________ path = 'project.license.file', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_8') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f439a039fd0> resolve = True, indent = None @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! __________ test_info_readme_license[True-None-1-project.license.text] __________ path = 'project.license.text', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_9') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f439a03ae70> resolve = True, indent = None @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[False-2-1-project.license.text] ___________ path = 'project.license.text', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False6') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399fe8110> resolve = False, indent = 2 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ____________ test_info_readme_license[False-None-1-project.readme] _____________ path = 'project.readme', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False7') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399ecc0e0> resolve = False, indent = None @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________________________ test_check[maintainers] ____________________________ toml_string = '[project]\nname = "spam"\nversion = "2020.0.0"\nmaintainers = [\n {name = "Brett Cannon", email = "brett@python.org"}\n]\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_check_maintainers_0') cli_runner = @pytest.mark.parametrize("toml_string", [*valid_pep621_config, *valid_buildsystem_config]) def test_check( toml_string: str, tmp_pathplus: PathPlus, cli_runner: CliRunner, ): (tmp_pathplus / "pyproject.toml").write_clean(toml_string)  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(check, catch_exceptions=False)  > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:88: AssertionError __________ test_info_readme_license[False-None-0-project.readme.file] __________ path = 'project.readme.file', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False8') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399fea360> resolve = False, indent = None @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ____________ test_info_readme_license[True-4-0-project.readme.file] ____________ path = 'project.readme.file', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_10') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f439a03ad50> resolve = True, indent = 4 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ____________________ test_reformat[True-COMPLETE_PROJECT_A] ____________________ tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_reformat_True_COMPLETE_PR0') toml_string = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Lovely Spam! Wonderful Spam!"\nrequires-python = ">=3....t.gui-scripts]\nspam-gui = "spam:main_gui"\n\n[project.entry-points."spam.magical"]\ntomatoes = "spam:main_tomatoes"\n' cli_runner = advanced_file_regression = show_diff = True @pytest.mark.parametrize( "toml_string", [ pytest.param(COMPLETE_A, id="COMPLETE_A"), pytest.param(COMPLETE_A_WITH_FILES, id="COMPLETE_A_WITH_FILES"), pytest.param(COMPLETE_B, id="COMPLETE_B"), pytest.param(COMPLETE_PROJECT_A, id="COMPLETE_PROJECT_A"), pytest.param(UNORDERED, id="UNORDERED"), pytest.param(COMPLETE_UNDERSCORE_NAME, id="COMPLETE_UNDERSCORE_NAME"), ] ) @pytest.mark.parametrize("show_diff", [True, False]) def test_reformat( tmp_pathplus: PathPlus, toml_string: str, cli_runner: CliRunner, advanced_file_regression: AdvancedFileRegressionFixture, show_diff: bool, ): (tmp_pathplus / "pyproject.toml").write_clean(toml_string) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  if show_diff: args = ["--no-colour", "--show-diff"] else: args = []  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(reformat, args=args, catch_exceptions=False)  assert result.exit_code == 1  > advanced_file_regression.check_file(tmp_pathplus / "pyproject.toml") E AssertionError: FILES DIFFER: E /usr/src/tmp/pytest-of-builder/pytest-0/test_reformat_True_COMPLETE_PR0/test_cli_/test_reformat_True_COMPLETE_PROJECT_A_.toml E /usr/src/tmp/pytest-of-builder/pytest-0/test_reformat_True_COMPLETE_PR0/test_cli_/test_reformat_True_COMPLETE_PROJECT_A_.obtained.toml E HTML DIFF: /usr/src/tmp/pytest-of-builder/pytest-0/test_reformat_True_COMPLETE_PR0/test_cli_/test_reformat_True_COMPLETE_PROJECT_A_.obtained.diff.html E ---  E +++  E @@ -3,20 +3,31 @@ E version = "2020.0.0" E description = "Lovely Spam! Wonderful Spam!" E requires-python = ">=3.8" E -keywords = [ "bacon", "egg", "Lobster Thermidor", "sausage", "tomatoes",] E -classifiers = [ "Development Status :: 4 - Beta", "Programming Language :: Python",] E -dependencies = [ 'django>2.1; os_name != "nt"', 'django>2.0; os_name == "nt"', "gidgethub[httpx]>4.0.0", "httpx",] E -dynamic = [] E +keywords = ["egg", "bacon", "sausage", "tomatoes", "Lobster Thermidor"] E +authors = [ E + {email = "hi@pradyunsg.me"}, E + {name = "Tzu-Ping Chung"} E +] E +maintainers = [ E + {name = "Brett Cannon", email = "brett@python.org"} E +] E +classifiers = [ E + "Development Status :: 4 - Beta", E + "Programming Language :: Python" E +] E  E -[[project.authors]] E -email = "hi@pradyunsg.me" E +dependencies = [ E + "httpx", E + "gidgethub[httpx]>4.0.0", E + "django>2.1; os_name != 'nt'", E + "django>2.0; os_name == 'nt'" E +] E  E -[[project.authors]] E -name = "Tzu-Ping Chung" E - E -[[project.maintainers]] E -name = "Brett Cannon" E -email = "brett@python.org" E +[project.optional-dependencies] E +test = [ E + "pytest < 5.0.0", E + "pytest-cov[all]" E +] E  E [project.urls] E homepage = "example.com" E @@ -32,8 +43,3 @@ E  E [project.entry-points."spam.magical"] E tomatoes = "spam:main_tomatoes" E - E -[project.optional-dependencies] E -test = [ "pytest<5.0.0", "pytest-cov[all]",] E - E -[tool] tests/test_cli.py:64: AssertionError __________________ test_reformat[False-COMPLETE_A_WITH_FILES] __________________ tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_reformat_False_COMPLETE_A0') toml_string = '[build-system]\nrequires = [ "whey",]\nbuild-backend = "whey"\n\n[project]\nname = "whey"\nversion = "2021.0.0"\ndesc...,]\npython-implementations = [ "CPython", "PyPy",]\nplatforms = [ "Windows", "macOS", "Linux",]\nlicense-key = "MIT"\n' cli_runner = advanced_file_regression = show_diff = False @pytest.mark.parametrize( "toml_string", [ pytest.param(COMPLETE_A, id="COMPLETE_A"), pytest.param(COMPLETE_A_WITH_FILES, id="COMPLETE_A_WITH_FILES"), pytest.param(COMPLETE_B, id="COMPLETE_B"), pytest.param(COMPLETE_PROJECT_A, id="COMPLETE_PROJECT_A"), pytest.param(UNORDERED, id="UNORDERED"), pytest.param(COMPLETE_UNDERSCORE_NAME, id="COMPLETE_UNDERSCORE_NAME"), ] ) @pytest.mark.parametrize("show_diff", [True, False]) def test_reformat( tmp_pathplus: PathPlus, toml_string: str, cli_runner: CliRunner, advanced_file_regression: AdvancedFileRegressionFixture, show_diff: bool, ): (tmp_pathplus / "pyproject.toml").write_clean(toml_string) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  if show_diff: args = ["--no-colour", "--show-diff"] else: args = []  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(reformat, args=args, catch_exceptions=False)  assert result.exit_code == 1  > advanced_file_regression.check_file(tmp_pathplus / "pyproject.toml") E AssertionError: FILES DIFFER: E /usr/src/tmp/pytest-of-builder/pytest-0/test_reformat_False_COMPLETE_A0/test_cli_/test_reformat_False_COMPLETE_A_WITH_FILES_.toml E /usr/src/tmp/pytest-of-builder/pytest-0/test_reformat_False_COMPLETE_A0/test_cli_/test_reformat_False_COMPLETE_A_WITH_FILES_.obtained.toml E HTML DIFF: /usr/src/tmp/pytest-of-builder/pytest-0/test_reformat_False_COMPLETE_A0/test_cli_/test_reformat_False_COMPLETE_A_WITH_FILES_.obtained.diff.html E ---  E +++  E @@ -6,17 +6,20 @@ E name = "whey" E version = "2021.0.0" E description = "A simple Python wheel builder for simple projects." E +keywords = [ "pep517", "pep621", "build", "sdist", "wheel", "packaging", "distribution",] E +dynamic = [ "classifiers", "requires-python",] E +dependencies = [ E + "httpx", E + "gidgethub[httpx]>4.0.0", E + "django>2.1; os_name != 'nt'", E + "django>2.0; os_name == 'nt'" E +] E +license = { file = "LICENSE" } E readme = "README.rst" E -keywords = [ "build", "distribution", "packaging", "pep517", "pep621", "sdist", "wheel",] E -dependencies = [ 'django>2.1; os_name != "nt"', 'django>2.0; os_name == "nt"', "gidgethub[httpx]>4.0.0", "httpx",] E -dynamic = [ "classifiers", "requires-python",] E - E -[project.license] E -file = "LICENSE" E  E [[project.authors]] E +email = "dominic@davis-foster.co.uk" E name = "Dominic Davis-Foster" E -email = "dominic@davis-foster.co.uk" E  E [project.urls] E Homepage = "https://whey.readthedocs.io/en/latest" tests/test_cli.py:64: AssertionError ___________ test_info_readme_license[False-2-0-project.readme.text] ____________ path = 'project.readme.text', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False9') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399f14320> resolve = False, indent = 2 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ____________ test_info_readme_license[False-None-0-project.readme] _____________ path = 'project.readme', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False10') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399ef44d0> resolve = False, indent = None @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ____________ test_info_readme_license[True-None-0-project.license] _____________ path = 'project.license', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_11') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399f29610> resolve = True, indent = None @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ______________ test_info_readme_license[False-2-1-project.readme] ______________ path = 'project.readme', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False11') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399f28fe0> resolve = False, indent = 2 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! __________ test_info_readme_license[False-None-1-project.readme.text] __________ path = 'project.readme.text', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False12') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399f2cb30> resolve = False, indent = None @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! _________ test_info_readme_license[False-None-0-project.license.text] __________ path = 'project.license.text', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False13') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399f2dca0> resolve = False, indent = None @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! __________ test_info_readme_license[True-None-0-project.readme.text] ___________ path = 'project.readme.text', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_12') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399f2ef60> resolve = True, indent = None @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! _____________ test_info_readme_license[True-None-0-project.readme] _____________ path = 'project.readme', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_13') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399f70590> resolve = True, indent = None @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! __________ test_info_readme_license[False-None-1-project.readme.file] __________ path = 'project.readme.file', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False14') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399f73bf0> resolve = False, indent = None @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ____________ test_info_readme_license[True-0-0-project.readme.file] ____________ path = 'project.readme.file', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_14') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399f72810> resolve = True, indent = 0 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[True-4-0-project.license.file] ____________ path = 'project.license.file', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_15') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399db4c50> resolve = True, indent = 4 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ______________ test_info_readme_license[False-0-1-project.readme] ______________ path = 'project.readme', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False15') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399db4590> resolve = False, indent = 0 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! _____________ test_info_readme_license[False-0-0-project.license] ______________ path = 'project.license', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False16') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399dd00b0> resolve = False, indent = 0 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ______________ test_info_readme_license[True-0-1-project.readme] _______________ path = 'project.readme', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_16') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399dcc4d0> resolve = True, indent = 0 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ____________ test_info_readme_license[True-4-1-project.readme.file] ____________ path = 'project.readme.file', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_17') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399dcd9d0> resolve = True, indent = 4 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[True-4-1-project.license.text] ____________ path = 'project.license.text', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_18') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399dd2fc0> resolve = True, indent = 4 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[False-0-0-project.readme.text] ____________ path = 'project.readme.text', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False17') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399dceb40> resolve = False, indent = 0 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! _________ test_info_readme_license[False-None-1-project.license.file] __________ path = 'project.license.file', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False18') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399dd2e10> resolve = False, indent = None @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[True-2-1-project.license.file] ____________ path = 'project.license.file', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_19') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399e38fe0> resolve = True, indent = 2 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! _____________ test_info_readme_license[True-None-1-project.readme] _____________ path = 'project.readme', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_20') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399e08dd0> resolve = True, indent = None @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ____________ test_info_readme_license[True-4-0-project.readme.text] ____________ path = 'project.readme.text', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_21') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399e39e80> resolve = True, indent = 4 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[False-0-1-project.readme.text] ____________ path = 'project.readme.text', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False19') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399e3a240> resolve = False, indent = 0 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[False-2-1-project.readme.text] ____________ path = 'project.readme.text', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False20') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399e08710> resolve = False, indent = 2 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[False-2-1-project.readme.file] ____________ path = 'project.readme.file', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False21') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399e5c5f0> resolve = False, indent = 2 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! _____________________________ test_check[authors] ______________________________ toml_string = '[project]\nname = "spam"\nversion = "2020.0.0"\nauthors = [\n {email = "hi@pradyunsg.me"},\n {name = "Tzu-Ping Chung"}\n]\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_check_authors_0') cli_runner = @pytest.mark.parametrize("toml_string", [*valid_pep621_config, *valid_buildsystem_config]) def test_check( toml_string: str, tmp_pathplus: PathPlus, cli_runner: CliRunner, ): (tmp_pathplus / "pyproject.toml").write_clean(toml_string)  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(check, catch_exceptions=False)  > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:88: AssertionError _________ test_info_readme_license[False-None-0-project.license.file] __________ path = 'project.license.file', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False22') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399cc8f50> resolve = False, indent = None @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________________ test_reformat[False-COMPLETE_PROJECT_A] ____________________ tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_reformat_False_COMPLETE_P0') toml_string = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Lovely Spam! Wonderful Spam!"\nrequires-python = ">=3....t.gui-scripts]\nspam-gui = "spam:main_gui"\n\n[project.entry-points."spam.magical"]\ntomatoes = "spam:main_tomatoes"\n' cli_runner = advanced_file_regression = show_diff = False @pytest.mark.parametrize( "toml_string", [ pytest.param(COMPLETE_A, id="COMPLETE_A"), pytest.param(COMPLETE_A_WITH_FILES, id="COMPLETE_A_WITH_FILES"), pytest.param(COMPLETE_B, id="COMPLETE_B"), pytest.param(COMPLETE_PROJECT_A, id="COMPLETE_PROJECT_A"), pytest.param(UNORDERED, id="UNORDERED"), pytest.param(COMPLETE_UNDERSCORE_NAME, id="COMPLETE_UNDERSCORE_NAME"), ] ) @pytest.mark.parametrize("show_diff", [True, False]) def test_reformat( tmp_pathplus: PathPlus, toml_string: str, cli_runner: CliRunner, advanced_file_regression: AdvancedFileRegressionFixture, show_diff: bool, ): (tmp_pathplus / "pyproject.toml").write_clean(toml_string) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  if show_diff: args = ["--no-colour", "--show-diff"] else: args = []  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(reformat, args=args, catch_exceptions=False)  assert result.exit_code == 1  > advanced_file_regression.check_file(tmp_pathplus / "pyproject.toml") E AssertionError: FILES DIFFER: E /usr/src/tmp/pytest-of-builder/pytest-0/test_reformat_False_COMPLETE_P0/test_cli_/test_reformat_False_COMPLETE_PROJECT_A_.toml E /usr/src/tmp/pytest-of-builder/pytest-0/test_reformat_False_COMPLETE_P0/test_cli_/test_reformat_False_COMPLETE_PROJECT_A_.obtained.toml E HTML DIFF: /usr/src/tmp/pytest-of-builder/pytest-0/test_reformat_False_COMPLETE_P0/test_cli_/test_reformat_False_COMPLETE_PROJECT_A_.obtained.diff.html E ---  E +++  E @@ -3,20 +3,31 @@ E version = "2020.0.0" E description = "Lovely Spam! Wonderful Spam!" E requires-python = ">=3.8" E -keywords = [ "bacon", "egg", "Lobster Thermidor", "sausage", "tomatoes",] E -classifiers = [ "Development Status :: 4 - Beta", "Programming Language :: Python",] E -dependencies = [ 'django>2.1; os_name != "nt"', 'django>2.0; os_name == "nt"', "gidgethub[httpx]>4.0.0", "httpx",] E -dynamic = [] E +keywords = ["egg", "bacon", "sausage", "tomatoes", "Lobster Thermidor"] E +authors = [ E + {email = "hi@pradyunsg.me"}, E + {name = "Tzu-Ping Chung"} E +] E +maintainers = [ E + {name = "Brett Cannon", email = "brett@python.org"} E +] E +classifiers = [ E + "Development Status :: 4 - Beta", E + "Programming Language :: Python" E +] E  E -[[project.authors]] E -email = "hi@pradyunsg.me" E +dependencies = [ E + "httpx", E + "gidgethub[httpx]>4.0.0", E + "django>2.1; os_name != 'nt'", E + "django>2.0; os_name == 'nt'" E +] E  E -[[project.authors]] E -name = "Tzu-Ping Chung" E - E -[[project.maintainers]] E -name = "Brett Cannon" E -email = "brett@python.org" E +[project.optional-dependencies] E +test = [ E + "pytest < 5.0.0", E + "pytest-cov[all]" E +] E  E [project.urls] E homepage = "example.com" E @@ -32,8 +43,3 @@ E  E [project.entry-points."spam.magical"] E tomatoes = "spam:main_tomatoes" E - E -[project.optional-dependencies] E -test = [ "pytest<5.0.0", "pytest-cov[all]",] E - E -[tool] tests/test_cli.py:64: AssertionError ___________ test_info_readme_license[False-0-1-project.license.file] ___________ path = 'project.license.file', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False23') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399cce6c0> resolve = False, indent = 0 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[True-4-1-project.license.file] ____________ path = 'project.license.file', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_22') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399e5e360> resolve = True, indent = 4 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[True-2-1-project.license.text] ____________ path = 'project.license.text', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_23') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399cceb40> resolve = True, indent = 2 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! __________ test_info_readme_license[True-None-1-project.readme.text] ___________ path = 'project.readme.text', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_24') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399cc8d10> resolve = True, indent = None @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[False-0-0-project.readme.file] ____________ path = 'project.readme.file', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False24') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399cec5f0> resolve = False, indent = 0 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! _____________ test_info_readme_license[False-2-1-project.license] ______________ path = 'project.license', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False25') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399ced790> resolve = False, indent = 2 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! __________ test_info_readme_license[True-None-0-project.readme.file] ___________ path = 'project.readme.file', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_25') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399cf95e0> resolve = True, indent = None @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! _____________________________ test_check[unicode] ______________________________ toml_string = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Factory ⸻ A code generator 🏭"\nauthors = [{name = "Łukasz Langa"}]\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_check_unicode_0') cli_runner = @pytest.mark.parametrize("toml_string", [*valid_pep621_config, *valid_buildsystem_config]) def test_check( toml_string: str, tmp_pathplus: PathPlus, cli_runner: CliRunner, ): (tmp_pathplus / "pyproject.toml").write_clean(toml_string)  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(check, catch_exceptions=False)  > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:88: AssertionError ___________ test_info_readme_license[True-0-0-project.license.text] ____________ path = 'project.license.text', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_26') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399cef560> resolve = True, indent = 0 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ______________ test_info_readme_license[True-4-1-project.license] ______________ path = 'project.license', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_27') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399cf97c0> resolve = True, indent = 4 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ____________ test_info_readme_license[True-2-0-project.readme.file] ____________ path = 'project.readme.file', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_28') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399d4ce30> resolve = True, indent = 2 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ____________ test_info_readme_license[True-0-1-project.readme.file] ____________ path = 'project.readme.file', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_29') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399d68440> resolve = True, indent = 0 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ________________________ test_check[COMPLETE_PROJECT_A] ________________________ toml_string = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Lovely Spam! Wonderful Spam!"\nrequires-python = ">=3....t.gui-scripts]\nspam-gui = "spam:main_gui"\n\n[project.entry-points."spam.magical"]\ntomatoes = "spam:main_tomatoes"\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_check_COMPLETE_PROJECT_A_0') cli_runner = @pytest.mark.parametrize("toml_string", [*valid_pep621_config, *valid_buildsystem_config]) def test_check( toml_string: str, tmp_pathplus: PathPlus, cli_runner: CliRunner, ): (tmp_pathplus / "pyproject.toml").write_clean(toml_string)  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(check, catch_exceptions=False)  > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:88: AssertionError ____________ test_info_readme_license[True-0-0-project.readme.text] ____________ path = 'project.readme.text', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_30') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399d6d2e0> resolve = True, indent = 0 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ____________ test_info_readme_license[True-2-0-project.readme.text] ____________ path = 'project.readme.text', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_31') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399d6b320> resolve = True, indent = 2 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[False-4-0-project.readme.file] ____________ path = 'project.readme.file', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False26') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399d6ec30> resolve = False, indent = 4 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[False-4-1-project.readme.file] ____________ path = 'project.readme.file', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False27') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399bc49e0> resolve = False, indent = 4 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[False-0-0-project.license.file] ___________ path = 'project.license.file', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False28') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399bc5bb0> resolve = False, indent = 0 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[False-4-1-project.license.text] ___________ path = 'project.license.text', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False29') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399bc5280> resolve = False, indent = 4 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! _____________ test_info_readme_license[False-0-1-project.license] ______________ path = 'project.license', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False30') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399bc7e00> resolve = False, indent = 0 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ____________ test_info_readme_license[True-2-1-project.readme.file] ____________ path = 'project.readme.file', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_32') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399bfce00> resolve = True, indent = 2 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! _________ test_info_readme_license[False-None-1-project.license.text] __________ path = 'project.license.text', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False31') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399ba8e00> resolve = False, indent = None @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! _____________ test_info_readme_license[False-4-1-project.license] ______________ path = 'project.license', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False32') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399baa810> resolve = False, indent = 4 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ______________ test_info_readme_license[True-0-0-project.readme] _______________ path = 'project.readme', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_33') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399c28440> resolve = True, indent = 0 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! __________ test_info_readme_license[False-None-0-project.readme.text] __________ path = 'project.readme.text', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False33') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399c35eb0> resolve = False, indent = None @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[False-2-0-project.license.file] ___________ path = 'project.license.file', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False34') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399c36b40> resolve = False, indent = 2 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! _____________ test_info_readme_license[False-2-0-project.license] ______________ path = 'project.license', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False35') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399ef4950> resolve = False, indent = 2 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[True-2-0-project.license.text] ____________ path = 'project.license.text', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_34') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399cc8830> resolve = True, indent = 2 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ____________________ test_check_error_caught[author_comma] _____________________ toml_string = '[project]\nname = "spam"\nversion = "2020.0.0"\nauthors = [{name = "Bob, Alice"}]' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_check_error_caught_author0') cli_runner = advanced_file_regression = @pytest.mark.parametrize( "toml_string", [ pytest.param( "[build-system]\nrequires = []\nfoo = 'bar'", id="build-system", ), pytest.param( "[project]\nname = 'whey'\nfoo = 'bar'\nbar = 123\ndynamic = ['version']", id="project", ), pytest.param( "[coverage]\nomit = 'demo.py'\n[flake8]\nselect = ['F401']", id="top-level", ), pytest.param( "[build_system]\nbackend = 'whey'", id="top_level_typo_underscore", ), pytest.param( "[Build-System]\nbackend = 'whey'", id="top_level_typo_caps", ), pytest.param( '[project]\nname = "???????12345=============☃"\nversion = "2020.0.0"', id="bad_name" ), pytest.param('[project]\nname = "spam"\nversion = "???????12345=============☃"', id="bad_version"), pytest.param( f'{MINIMAL_CONFIG}\nrequires-python = "???????12345=============☃"', id="bad_requires_python" ), pytest.param(f'{MINIMAL_CONFIG}\nauthors = [{{name = "Bob, Alice"}}]', id="author_comma"), ] ) def test_check_error_caught( toml_string: str, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_file_regression: AdvancedFileRegressionFixture, ): (tmp_pathplus / "pyproject.toml").write_clean(toml_string) cli_runner.mix_stderr = False  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(check)  assert result.exit_code == 1 assert result.stdout == "Validating 'pyproject.toml'\n" > advanced_file_regression.check(result.stderr) E AssertionError: FILES DIFFER: E /usr/src/tmp/pytest-of-builder/pytest-0/test_check_error_caught_author0/test_cli_/test_check_error_caught_author_comma_.txt E /usr/src/tmp/pytest-of-builder/pytest-0/test_check_error_caught_author0/test_cli_/test_check_error_caught_author_comma_.obtained.txt E HTML DIFF: /usr/src/tmp/pytest-of-builder/pytest-0/test_check_error_caught_author0/test_cli_/test_check_error_caught_author_comma_.obtained.diff.html E ---  E +++  E @@ -1,4 +1,3 @@ E -BadConfigError: The 'project.authors[0].name' key cannot contain commas. E - Documentation: https://whey.readthedocs.io/en/latest/configuration.html#tconf-project.authors E +TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given E Use '--traceback' to view the full traceback. E Aborted! tests/test_cli.py:255: AssertionError ___________ test_info_readme_license[True-4-0-project.license.text] ____________ path = 'project.license.text', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_35') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399e3b650> resolve = True, indent = 4 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[False-4-0-project.license.file] ___________ path = 'project.license.file', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False36') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399f176e0> resolve = False, indent = 4 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[True-0-1-project.license.text] ____________ path = 'project.license.text', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_36') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399ba8500> resolve = True, indent = 0 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ______________ test_info_readme_license[True-0-1-project.license] ______________ path = 'project.license', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_37') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399d66fc0> resolve = True, indent = 0 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[False-2-0-project.license.text] ___________ path = 'project.license.text', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False37') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399c65190> resolve = False, indent = 2 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ______________ test_info_readme_license[False-4-1-project.readme] ______________ path = 'project.readme', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False38') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399d6bc80> resolve = False, indent = 4 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[False-4-0-project.readme.text] ____________ path = 'project.readme.text', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False39') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399c35400> resolve = False, indent = 4 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! __________ test_info_readme_license[True-None-0-project.license.file] __________ path = 'project.license.file', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_38') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399c2a2a0> resolve = True, indent = None @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! _____________ test_info_readme_license[False-4-0-project.license] ______________ path = 'project.license', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False40') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399c67530> resolve = False, indent = 4 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ______________ test_info_readme_license[False-2-0-project.readme] ______________ path = 'project.readme', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False41') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399c292b0> resolve = False, indent = 2 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[False-0-1-project.license.text] ___________ path = 'project.license.text', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False42') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399aec350> resolve = False, indent = 0 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ____________ test_info_readme_license[True-None-1-project.license] _____________ path = 'project.license', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_39') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399b543e0> resolve = True, indent = None @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[False-0-0-project.license.text] ___________ path = 'project.license.text', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False43') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399aee8d0> resolve = False, indent = 0 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ______________ test_info_readme_license[True-2-0-project.license] ______________ path = 'project.license', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_40') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399b56930> resolve = True, indent = 2 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ______________ test_info_readme_license[False-4-0-project.readme] ______________ path = 'project.readme', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False44') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399b62210> resolve = False, indent = 4 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ______________ test_info_readme_license[True-2-1-project.readme] _______________ path = 'project.readme', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_41') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399b63050> resolve = True, indent = 2 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[True-0-1-project.license.file] ____________ path = 'project.license.file', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_42') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f43999985c0> resolve = True, indent = 0 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[False-4-1-project.readme.text] ____________ path = 'project.readme.text', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False45') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399999cd0> resolve = False, indent = 4 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[False-4-1-project.license.file] ___________ path = 'project.license.file', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False46') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f439999b020> resolve = False, indent = 4 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ___________ test_info_readme_license[False-2-1-project.license.file] ___________ path = 'project.license.file', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_False47') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399a0c620> resolve = False, indent = 2 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ______________ test_info_readme_license[True-4-0-project.license] ______________ path = 'project.license', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_43') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f43999d9460> resolve = True, indent = 4 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ______________ test_info_readme_license[True-2-0-project.readme] _______________ path = 'project.readme', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_44') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399a0da90> resolve = True, indent = 2 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ______________ test_info_readme_license[True-2-1-project.license] ______________ path = 'project.license', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_45') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399a28590> resolve = True, indent = 2 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! ____________ test_info_readme_license[True-0-1-project.readme.text] ____________ path = 'project.readme.text', check_readme = 1 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_46') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399a0e870> resolve = True, indent = 0 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! __________________ test_reformat[True-COMPLETE_A_WITH_FILES] ___________________ tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_reformat_True_COMPLETE_A_1') toml_string = '[build-system]\nrequires = [ "whey",]\nbuild-backend = "whey"\n\n[project]\nname = "whey"\nversion = "2021.0.0"\ndesc...,]\npython-implementations = [ "CPython", "PyPy",]\nplatforms = [ "Windows", "macOS", "Linux",]\nlicense-key = "MIT"\n' cli_runner = advanced_file_regression = show_diff = True @pytest.mark.parametrize( "toml_string", [ pytest.param(COMPLETE_A, id="COMPLETE_A"), pytest.param(COMPLETE_A_WITH_FILES, id="COMPLETE_A_WITH_FILES"), pytest.param(COMPLETE_B, id="COMPLETE_B"), pytest.param(COMPLETE_PROJECT_A, id="COMPLETE_PROJECT_A"), pytest.param(UNORDERED, id="UNORDERED"), pytest.param(COMPLETE_UNDERSCORE_NAME, id="COMPLETE_UNDERSCORE_NAME"), ] ) @pytest.mark.parametrize("show_diff", [True, False]) def test_reformat( tmp_pathplus: PathPlus, toml_string: str, cli_runner: CliRunner, advanced_file_regression: AdvancedFileRegressionFixture, show_diff: bool, ): (tmp_pathplus / "pyproject.toml").write_clean(toml_string) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  if show_diff: args = ["--no-colour", "--show-diff"] else: args = []  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(reformat, args=args, catch_exceptions=False)  assert result.exit_code == 1  > advanced_file_regression.check_file(tmp_pathplus / "pyproject.toml") E AssertionError: FILES DIFFER: E /usr/src/tmp/pytest-of-builder/pytest-0/test_reformat_True_COMPLETE_A_1/test_cli_/test_reformat_True_COMPLETE_A_WITH_FILES_.toml E /usr/src/tmp/pytest-of-builder/pytest-0/test_reformat_True_COMPLETE_A_1/test_cli_/test_reformat_True_COMPLETE_A_WITH_FILES_.obtained.toml E HTML DIFF: /usr/src/tmp/pytest-of-builder/pytest-0/test_reformat_True_COMPLETE_A_1/test_cli_/test_reformat_True_COMPLETE_A_WITH_FILES_.obtained.diff.html E ---  E +++  E @@ -6,17 +6,20 @@ E name = "whey" E version = "2021.0.0" E description = "A simple Python wheel builder for simple projects." E +keywords = [ "pep517", "pep621", "build", "sdist", "wheel", "packaging", "distribution",] E +dynamic = [ "classifiers", "requires-python",] E +dependencies = [ E + "httpx", E + "gidgethub[httpx]>4.0.0", E + "django>2.1; os_name != 'nt'", E + "django>2.0; os_name == 'nt'" E +] E +license = { file = "LICENSE" } E readme = "README.rst" E -keywords = [ "build", "distribution", "packaging", "pep517", "pep621", "sdist", "wheel",] E -dependencies = [ 'django>2.1; os_name != "nt"', 'django>2.0; os_name == "nt"', "gidgethub[httpx]>4.0.0", "httpx",] E -dynamic = [ "classifiers", "requires-python",] E - E -[project.license] E -file = "LICENSE" E  E [[project.authors]] E +email = "dominic@davis-foster.co.uk" E name = "Dominic Davis-Foster" E -email = "dominic@davis-foster.co.uk" E  E [project.urls] E Homepage = "https://whey.readthedocs.io/en/latest" tests/test_cli.py:64: AssertionError ___________ test_info_readme_license[True-2-0-project.license.file] ____________ path = 'project.license.file', check_readme = 0 tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_info_readme_license_True_47') cli_runner = advanced_data_regression = advanced_file_regression = monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f4399a6c680> resolve = True, indent = 2 @pytest.mark.parametrize( "path", [ "project.readme", "project.readme.file", "project.readme.text", "project.license", "project.license.file", "project.license.text", ] ) @pytest.mark.parametrize("check_readme", [0, 1]) @pytest.mark.parametrize("indent", [None, 0, 2, 4]) @pytest.mark.parametrize("resolve", [True, False]) def test_info_readme_license( path: str, check_readme: int, tmp_pathplus: PathPlus, cli_runner: CliRunner, advanced_data_regression: AdvancedDataRegressionFixture, advanced_file_regression: AdvancedFileRegressionFixture, monkeypatch, resolve: bool, indent: Optional[int], ):  monkeypatch.setenv("CHECK_README", str(check_readme))  (tmp_pathplus / "pyproject.toml").write_clean(COMPLETE_A_WITH_FILES) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  args = [path]  if resolve: args.append("--resolve") elif indent: args.append("--indent") args.append(str(indent))  with in_directory(tmp_pathplus): result: Result = cli_runner.invoke(info, catch_exceptions=False, args=args)  print(result.stdout) > assert result.exit_code == 0 E assert 1 == 0 E + where 1 = .exit_code tests/test_cli.py:478: AssertionError ----------------------------- Captured stdout call ----------------------------- TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given Use '--traceback' to view the full traceback. Aborted! _____________________ test_reformat[COMPLETE_A_WITH_FILES] _____________________ tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_reformat_COMPLETE_A_WITH_0') toml_string = '[build-system]\nrequires = [ "whey",]\nbuild-backend = "whey"\n\n[project]\nname = "whey"\nversion = "2021.0.0"\ndesc...,]\npython-implementations = [ "CPython", "PyPy",]\nplatforms = [ "Windows", "macOS", "Linux",]\nlicense-key = "MIT"\n' advanced_file_regression = @pytest.mark.parametrize( "toml_string", [ pytest.param(COMPLETE_A, id="COMPLETE_A"), pytest.param(COMPLETE_A_WITH_FILES, id="COMPLETE_A_WITH_FILES"), pytest.param(COMPLETE_B, id="COMPLETE_B"), pytest.param(COMPLETE_PROJECT_A, id="COMPLETE_PROJECT_A"), pytest.param(UNORDERED, id="UNORDERED"), pytest.param(COMPLETE_UNDERSCORE_NAME, id="COMPLETE_UNDERSCORE_NAME"), ] ) def test_reformat( tmp_pathplus: PathPlus, toml_string: str, advanced_file_regression: AdvancedFileRegressionFixture, ): (tmp_pathplus / "pyproject.toml").write_clean(toml_string) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  > PyProject.reformat(tmp_pathplus / "pyproject.toml") tests/test_dumping.py:196: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/__init__.py:442: in reformat config = cls.load(filename, set_defaults=False) pyproject_parser/__init__.py:311: in load config = _load_toml(filename) pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[build-system]\nrequires = [ "whey",]\nbuild-backend = "whey"\n\n[project]\nname = "whey"\nversion = "2021.0.0"\ndesc...,]\npython-implementations = [ "CPython", "PyPy",]\nplatforms = [ "Windows", "macOS", "Linux",]\nlicense-key = "MIT"\n' pos = 443, parse_float = , nest_lvl = 0 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ______________________ test_reformat[COMPLETE_PROJECT_A] _______________________ tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_reformat_COMPLETE_PROJECT0') toml_string = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Lovely Spam! Wonderful Spam!"\nrequires-python = ">=3....t.gui-scripts]\nspam-gui = "spam:main_gui"\n\n[project.entry-points."spam.magical"]\ntomatoes = "spam:main_tomatoes"\n' advanced_file_regression = @pytest.mark.parametrize( "toml_string", [ pytest.param(COMPLETE_A, id="COMPLETE_A"), pytest.param(COMPLETE_A_WITH_FILES, id="COMPLETE_A_WITH_FILES"), pytest.param(COMPLETE_B, id="COMPLETE_B"), pytest.param(COMPLETE_PROJECT_A, id="COMPLETE_PROJECT_A"), pytest.param(UNORDERED, id="UNORDERED"), pytest.param(COMPLETE_UNDERSCORE_NAME, id="COMPLETE_UNDERSCORE_NAME"), ] ) def test_reformat( tmp_pathplus: PathPlus, toml_string: str, advanced_file_regression: AdvancedFileRegressionFixture, ): (tmp_pathplus / "pyproject.toml").write_clean(toml_string) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  > PyProject.reformat(tmp_pathplus / "pyproject.toml") tests/test_dumping.py:196: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/__init__.py:442: in reformat config = cls.load(filename, set_defaults=False) pyproject_parser/__init__.py:311: in load config = _load_toml(filename) pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Lovely Spam! Wonderful Spam!"\nrequires-python = ">=3....t.gui-scripts]\nspam-gui = "spam:main_gui"\n\n[project.entry-points."spam.magical"]\ntomatoes = "spam:main_tomatoes"\n' pos = 202, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ________________________ test_dumps[COMPLETE_PROJECT_A] ________________________ tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_dumps_COMPLETE_PROJECT_A_0') toml_string = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Lovely Spam! Wonderful Spam!"\nrequires-python = ">=3....t.gui-scripts]\nspam-gui = "spam:main_gui"\n\n[project.entry-points."spam.magical"]\ntomatoes = "spam:main_tomatoes"\n' advanced_file_regression = @pytest.mark.parametrize( "toml_string", [ pytest.param(COMPLETE_A, id="COMPLETE_A"), pytest.param(COMPLETE_B, id="COMPLETE_B"), pytest.param(COMPLETE_PROJECT_A, id="COMPLETE_PROJECT_A"), ] ) def test_dumps( tmp_pathplus: PathPlus, toml_string: str, advanced_file_regression: AdvancedFileRegressionFixture, ): (tmp_pathplus / "pyproject.toml").write_clean(toml_string)  > config = PyProject.load(filename=tmp_pathplus / "pyproject.toml") tests/test_dumping.py:134: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/__init__.py:311: in load config = _load_toml(filename) pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Lovely Spam! Wonderful Spam!"\nrequires-python = ">=3....t.gui-scripts]\nspam-gui = "spam:main_gui"\n\n[project.entry-points."spam.magical"]\ntomatoes = "spam:main_tomatoes"\n' pos = 202, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ________________ test_pep621_class_bad_config[maintainer_comma] ________________ config = '[project]\nname = "spam"\nversion = "2020.0.0"\nmaintainers = [{name = "Bob, Alice"}]' expects = match = "The 'project.maintainers\\[0\\].name' key cannot contain commas." tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_bad_config_m0') @pytest.mark.parametrize( "config, expects, match", [ *bad_pep621_config, # pytest.param( # '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\nwith-hyphen = []', # TypeError, # "Invalid extra name 'with-hyphen'", # id="extra_invalid_a", # ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\n"quoted?" = []', TypeError, r"Invalid extra name 'quoted\?'", id="extra_invalid_b", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\n"number#1" = []', TypeError, "Invalid extra name 'number#1'", id="extra_invalid_c", ), ] ) def test_pep621_class_bad_config( config: str, expects: Type[Exception], match: str, tmp_pathplus: PathPlus, ): (tmp_pathplus / "pyproject.toml").write_clean(config)  with in_directory(tmp_pathplus), pytest.raises(expects, match=match): > PEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:396: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nmaintainers = [{name = "Bob, Alice"}]\n' pos = 60, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError _________________ test_pep621_class_bad_config_license[empty] __________________ license_key = 'license = {}' expected = "The 'project.license' table should contain one of 'text' or 'file'." tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_bad_config_l0') @pytest.mark.parametrize( "license_key, expected", [ pytest.param( "license = {}", "The 'project.license' table should contain one of 'text' or 'file'.", id="empty" ), pytest.param( 'license = {text = "MIT", file = "LICENSE.txt"}', "The 'project.license.file' and 'project.license.text' keys are mutually exclusive.", id="double_license" ), ] ) def test_pep621_class_bad_config_license( license_key: str, expected: str, tmp_pathplus: PathPlus, ):  (tmp_pathplus / "pyproject.toml").write_lines([ f'[project]', f'name = "spam"', f'version = "2020.0.0"', license_key, ])  with in_directory(tmp_pathplus), pytest.raises(BadConfigError, match=expected): > PEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:360: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nlicense = {}\n', pos = 55 parse_float = , nest_lvl = 0 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError _______________ test_pep621_class_bad_config_readme[unknown_key] _______________ readme = "readme = {fil = 'README.md'}" expected = "Unknown format for 'project.readme': {'fil': 'README.md'}" exception = tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_bad_config_r0') @pytest.mark.parametrize( "readme, expected, exception", [ pytest.param( "readme = {}", "The 'project.readme' table cannot be empty.", BadConfigError, id="empty", ), pytest.param( "readme = {fil = 'README.md'}", "Unknown format for 'project.readme': {'fil': 'README.md'}", BadConfigError, id="unknown_key", ), pytest.param( 'readme = {text = "This is the inline README."}', "The 'project.readme.content-type' key must be provided when 'project.readme.text' is given.", BadConfigError, id="text_only" ), pytest.param( 'readme = {content-type = "text/x-rst"}', "The 'project.readme.content-type' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="content_type_only" ), pytest.param( 'readme = {charset = "cp1252"}', "The 'project.readme.charset' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="charset_only" ), pytest.param( 'readme = {charset = "cp1252", content-type = "text/x-rst"}', "The 'project.readme.content-type' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="content_type_charset" ), pytest.param( 'readme = {text = "This is the inline README", content-type = "application/x-abiword"}', "Unrecognised value for 'project.readme.content-type': 'application/x-abiword'", BadConfigError, id="bad_content_type" ), pytest.param( 'readme = {file = "README"}', "Unsupported extension for 'README'", ValueError, id="no_extension", ), pytest.param( 'readme = {file = "README.doc"}', "Unsupported extension for 'README.doc'", ValueError, id="bad_extension" ), pytest.param( 'readme = {file = "README.doc", text = "This is the README"}', "The 'project.readme.file' and 'project.readme.text' keys are mutually exclusive.", BadConfigError, id="file_and_readme" ), ] ) def test_pep621_class_bad_config_readme( readme: str, expected: str, exception: Type[Exception], tmp_pathplus: PathPlus, ):  (tmp_pathplus / "pyproject.toml").write_lines([ "[project]", 'name = "spam"', 'version = "2020.0.0"', readme, ])  with in_directory(tmp_pathplus), pytest.raises(exception, match=expected): > PEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:289: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nreadme = {fil = \'README.md\'}\n' pos = 54, parse_float = , nest_lvl = 0 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ________________ test_pep621_class_valid_config[unicode-False] _________________ toml_config = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Factory ⸻ A code generator 🏭"\nauthors = [{name = "Łukasz Langa"}]\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_valid_config7') advanced_data_regression = set_defaults = False @pytest.mark.parametrize("set_defaults", [True, False]) @pytest.mark.parametrize( "toml_config", [ *valid_pep621_config, pytest.param(f"{OPTIONAL_DEPENDENCIES}dev-test = ['black']\n", id="optional-dependencies-hyphen"), ] ) def test_pep621_class_valid_config( toml_config: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, set_defaults: bool, ):  (tmp_pathplus / "pyproject.toml").write_clean(toml_config)  with in_directory(tmp_pathplus): config = PEP621Parser().parse( > _load_toml(tmp_pathplus / "pyproject.toml")["project"], set_defaults=set_defaults, ) tests/test_config.py:44: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Factory ⸻ A code generator 🏭"\nauthors = [{name = "Łukasz Langa"}]\n' pos = 101, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ______________ test_pep621_class_valid_config_license[LICENSE.md] ______________ filename = 'LICENSE.md' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_valid_config8') advanced_data_regression = @pytest.mark.parametrize("filename", ["LICENSE.rst", "LICENSE.md", "LICENSE.txt", "LICENSE"]) def test_pep621_class_valid_config_license( filename: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, ):  (tmp_pathplus / "pyproject.toml").write_lines([ f'[project]', f'name = "spam"', f'version = "2020.0.0"', f'license = {{file = "{filename}"}}', ]) (tmp_pathplus / filename).write_text("This is the license.")  with in_directory(tmp_pathplus): > config = PEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:308: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nlicense = {file = "LICENSE.md"}\n' pos = 55, parse_float = , nest_lvl = 0 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ________________________ test_pep621_subclass[authors] _________________________ toml_config = '[project]\nname = "spam"\nversion = "2020.0.0"\nauthors = [\n {email = "hi@pradyunsg.me"},\n {name = "Tzu-Ping Chung"}\n]\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_subclass_authors_0') advanced_data_regression = @pytest.mark.parametrize("toml_config", valid_pep621_config) def test_pep621_subclass( toml_config: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, ):  (tmp_pathplus / "pyproject.toml").write_clean(toml_config)  with in_directory(tmp_pathplus): > config = ReducedPEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:65: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nauthors = [\n {email = "hi@pradyunsg.me"},\n {name = "Tzu-Ping Chung"}\n]\n' pos = 59, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ______________ test_pep621_class_valid_config[maintainers-False] _______________ toml_config = '[project]\nname = "spam"\nversion = "2020.0.0"\nmaintainers = [\n {name = "Brett Cannon", email = "brett@python.org"}\n]\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_valid_config11') advanced_data_regression = set_defaults = False @pytest.mark.parametrize("set_defaults", [True, False]) @pytest.mark.parametrize( "toml_config", [ *valid_pep621_config, pytest.param(f"{OPTIONAL_DEPENDENCIES}dev-test = ['black']\n", id="optional-dependencies-hyphen"), ] ) def test_pep621_class_valid_config( toml_config: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, set_defaults: bool, ):  (tmp_pathplus / "pyproject.toml").write_clean(toml_config)  with in_directory(tmp_pathplus): config = PEP621Parser().parse( > _load_toml(tmp_pathplus / "pyproject.toml")["project"], set_defaults=set_defaults, ) tests/test_config.py:44: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nmaintainers = [\n {name = "Brett Cannon", email = "brett@python.org"}\n]\n' pos = 63, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError __________ test_pep621_class_bad_config_readme[content_type_charset] ___________ readme = 'readme = {charset = "cp1252", content-type = "text/x-rst"}' expected = "The 'project.readme.content-type' key cannot be provided on its own; Please provide the 'project.readme.text' key too." exception = tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_bad_config_r1') @pytest.mark.parametrize( "readme, expected, exception", [ pytest.param( "readme = {}", "The 'project.readme' table cannot be empty.", BadConfigError, id="empty", ), pytest.param( "readme = {fil = 'README.md'}", "Unknown format for 'project.readme': {'fil': 'README.md'}", BadConfigError, id="unknown_key", ), pytest.param( 'readme = {text = "This is the inline README."}', "The 'project.readme.content-type' key must be provided when 'project.readme.text' is given.", BadConfigError, id="text_only" ), pytest.param( 'readme = {content-type = "text/x-rst"}', "The 'project.readme.content-type' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="content_type_only" ), pytest.param( 'readme = {charset = "cp1252"}', "The 'project.readme.charset' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="charset_only" ), pytest.param( 'readme = {charset = "cp1252", content-type = "text/x-rst"}', "The 'project.readme.content-type' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="content_type_charset" ), pytest.param( 'readme = {text = "This is the inline README", content-type = "application/x-abiword"}', "Unrecognised value for 'project.readme.content-type': 'application/x-abiword'", BadConfigError, id="bad_content_type" ), pytest.param( 'readme = {file = "README"}', "Unsupported extension for 'README'", ValueError, id="no_extension", ), pytest.param( 'readme = {file = "README.doc"}', "Unsupported extension for 'README.doc'", ValueError, id="bad_extension" ), pytest.param( 'readme = {file = "README.doc", text = "This is the README"}', "The 'project.readme.file' and 'project.readme.text' keys are mutually exclusive.", BadConfigError, id="file_and_readme" ), ] ) def test_pep621_class_bad_config_readme( readme: str, expected: str, exception: Type[Exception], tmp_pathplus: PathPlus, ):  (tmp_pathplus / "pyproject.toml").write_lines([ "[project]", 'name = "spam"', 'version = "2020.0.0"', readme, ])  with in_directory(tmp_pathplus), pytest.raises(exception, match=expected): > PEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:289: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nreadme = {charset = "cp1252", content-type = "text/x-rst"}\n' pos = 54, parse_float = , nest_lvl = 0 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError _________________ test_pep621_class_valid_config[unicode-True] _________________ toml_config = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Factory ⸻ A code generator 🏭"\nauthors = [{name = "Łukasz Langa"}]\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_valid_config15') advanced_data_regression = set_defaults = True @pytest.mark.parametrize("set_defaults", [True, False]) @pytest.mark.parametrize( "toml_config", [ *valid_pep621_config, pytest.param(f"{OPTIONAL_DEPENDENCIES}dev-test = ['black']\n", id="optional-dependencies-hyphen"), ] ) def test_pep621_class_valid_config( toml_config: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, set_defaults: bool, ):  (tmp_pathplus / "pyproject.toml").write_clean(toml_config)  with in_directory(tmp_pathplus): config = PEP621Parser().parse( > _load_toml(tmp_pathplus / "pyproject.toml")["project"], set_defaults=set_defaults, ) tests/test_config.py:44: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Factory ⸻ A code generator 🏭"\nauthors = [{name = "Łukasz Langa"}]\n' pos = 101, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError _______________ test_pep621_class_valid_config[maintainers-True] _______________ toml_config = '[project]\nname = "spam"\nversion = "2020.0.0"\nmaintainers = [\n {name = "Brett Cannon", email = "brett@python.org"}\n]\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_valid_config16') advanced_data_regression = set_defaults = True @pytest.mark.parametrize("set_defaults", [True, False]) @pytest.mark.parametrize( "toml_config", [ *valid_pep621_config, pytest.param(f"{OPTIONAL_DEPENDENCIES}dev-test = ['black']\n", id="optional-dependencies-hyphen"), ] ) def test_pep621_class_valid_config( toml_config: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, set_defaults: bool, ):  (tmp_pathplus / "pyproject.toml").write_clean(toml_config)  with in_directory(tmp_pathplus): config = PEP621Parser().parse( > _load_toml(tmp_pathplus / "pyproject.toml")["project"], set_defaults=set_defaults, ) tests/test_config.py:44: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nmaintainers = [\n {name = "Brett Cannon", email = "brett@python.org"}\n]\n' pos = 63, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError _______ test_pep621_class_valid_config_readme_dict[text_content_type_md] _______ readme = 'readme = {text = "This is the inline markdown README.", content-type = "text/markdown"}' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_valid_config17') advanced_data_regression = @pytest.mark.parametrize( "readme", [ pytest.param('readme = {file = "README.rst"}', id="rst_file"), pytest.param('readme = {file = "README.md"}', id="md_file"), pytest.param('readme = {file = "README.txt"}', id="txt_file"), pytest.param( 'readme = {text = "This is the inline README README.", content-type = "text/x-rst"}', id="text_content_type_rst" ), pytest.param( 'readme = {text = "This is the inline markdown README.", content-type = "text/markdown"}', id="text_content_type_md" ), pytest.param( 'readme = {text = "This is the inline README.", content-type = "text/plain"}', id="text_content_type_plain" ), ] ) def test_pep621_class_valid_config_readme_dict( readme: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, ):  (tmp_pathplus / "pyproject.toml").write_lines([ "[project]", 'name = "spam"', 'version = "2020.0.0"', readme, ]) (tmp_pathplus / "README.rst").write_text("This is the reStructuredText README.") (tmp_pathplus / "README.md").write_text("This is the markdown README.") (tmp_pathplus / "README.txt").write_text("This is the plaintext README.") (tmp_pathplus / "README").write_text("This is the README.")  with in_directory(tmp_pathplus): > config = PEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:201: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nreadme = {text = "This is the inline markdown README.", content-type = "text/markdown"}\n' pos = 54, parse_float = , nest_lvl = 0 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError _____________ test_pep621_class_valid_config_license[LICENSE.rst] ______________ filename = 'LICENSE.rst' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_valid_config18') advanced_data_regression = @pytest.mark.parametrize("filename", ["LICENSE.rst", "LICENSE.md", "LICENSE.txt", "LICENSE"]) def test_pep621_class_valid_config_license( filename: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, ):  (tmp_pathplus / "pyproject.toml").write_lines([ f'[project]', f'name = "spam"', f'version = "2020.0.0"', f'license = {{file = "{filename}"}}', ]) (tmp_pathplus / filename).write_text("This is the license.")  with in_directory(tmp_pathplus): > config = PEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:308: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nlicense = {file = "LICENSE.rst"}\n' pos = 55, parse_float = , nest_lvl = 0 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError _____________ test_pep621_class_valid_config_license[LICENSE.txt] ______________ filename = 'LICENSE.txt' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_valid_config19') advanced_data_regression = @pytest.mark.parametrize("filename", ["LICENSE.rst", "LICENSE.md", "LICENSE.txt", "LICENSE"]) def test_pep621_class_valid_config_license( filename: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, ):  (tmp_pathplus / "pyproject.toml").write_lines([ f'[project]', f'name = "spam"', f'version = "2020.0.0"', f'license = {{file = "{filename}"}}', ]) (tmp_pathplus / filename).write_text("This is the license.")  with in_directory(tmp_pathplus): > config = PEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:308: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nlicense = {file = "LICENSE.txt"}\n' pos = 55, parse_float = , nest_lvl = 0 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError _______________ test_pep621_class_valid_config_license[LICENSE] ________________ filename = 'LICENSE' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_valid_config20') advanced_data_regression = @pytest.mark.parametrize("filename", ["LICENSE.rst", "LICENSE.md", "LICENSE.txt", "LICENSE"]) def test_pep621_class_valid_config_license( filename: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, ):  (tmp_pathplus / "pyproject.toml").write_lines([ f'[project]', f'name = "spam"', f'version = "2020.0.0"', f'license = {{file = "{filename}"}}', ]) (tmp_pathplus / filename).write_text("This is the license.")  with in_directory(tmp_pathplus): > config = PEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:308: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nlicense = {file = "LICENSE"}\n' pos = 55, parse_float = , nest_lvl = 0 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ________________ test_pep621_class_valid_config[authors-False] _________________ toml_config = '[project]\nname = "spam"\nversion = "2020.0.0"\nauthors = [\n {email = "hi@pradyunsg.me"},\n {name = "Tzu-Ping Chung"}\n]\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_valid_config22') advanced_data_regression = set_defaults = False @pytest.mark.parametrize("set_defaults", [True, False]) @pytest.mark.parametrize( "toml_config", [ *valid_pep621_config, pytest.param(f"{OPTIONAL_DEPENDENCIES}dev-test = ['black']\n", id="optional-dependencies-hyphen"), ] ) def test_pep621_class_valid_config( toml_config: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, set_defaults: bool, ):  (tmp_pathplus / "pyproject.toml").write_clean(toml_config)  with in_directory(tmp_pathplus): config = PEP621Parser().parse( > _load_toml(tmp_pathplus / "pyproject.toml")["project"], set_defaults=set_defaults, ) tests/test_config.py:44: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nauthors = [\n {email = "hi@pradyunsg.me"},\n {name = "Tzu-Ping Chung"}\n]\n' pos = 59, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError __________________ test_pep621_class_bad_config_readme[empty] __________________ readme = 'readme = {}', expected = "The 'project.readme' table cannot be empty." exception = tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_bad_config_r2') @pytest.mark.parametrize( "readme, expected, exception", [ pytest.param( "readme = {}", "The 'project.readme' table cannot be empty.", BadConfigError, id="empty", ), pytest.param( "readme = {fil = 'README.md'}", "Unknown format for 'project.readme': {'fil': 'README.md'}", BadConfigError, id="unknown_key", ), pytest.param( 'readme = {text = "This is the inline README."}', "The 'project.readme.content-type' key must be provided when 'project.readme.text' is given.", BadConfigError, id="text_only" ), pytest.param( 'readme = {content-type = "text/x-rst"}', "The 'project.readme.content-type' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="content_type_only" ), pytest.param( 'readme = {charset = "cp1252"}', "The 'project.readme.charset' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="charset_only" ), pytest.param( 'readme = {charset = "cp1252", content-type = "text/x-rst"}', "The 'project.readme.content-type' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="content_type_charset" ), pytest.param( 'readme = {text = "This is the inline README", content-type = "application/x-abiword"}', "Unrecognised value for 'project.readme.content-type': 'application/x-abiword'", BadConfigError, id="bad_content_type" ), pytest.param( 'readme = {file = "README"}', "Unsupported extension for 'README'", ValueError, id="no_extension", ), pytest.param( 'readme = {file = "README.doc"}', "Unsupported extension for 'README.doc'", ValueError, id="bad_extension" ), pytest.param( 'readme = {file = "README.doc", text = "This is the README"}', "The 'project.readme.file' and 'project.readme.text' keys are mutually exclusive.", BadConfigError, id="file_and_readme" ), ] ) def test_pep621_class_bad_config_readme( readme: str, expected: str, exception: Type[Exception], tmp_pathplus: PathPlus, ):  (tmp_pathplus / "pyproject.toml").write_lines([ "[project]", 'name = "spam"', 'version = "2020.0.0"', readme, ])  with in_directory(tmp_pathplus), pytest.raises(exception, match=expected): > PEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:289: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nreadme = {}\n', pos = 54 parse_float = , nest_lvl = 0 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ________________________ test_pep621_subclass[unicode] _________________________ toml_config = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Factory ⸻ A code generator 🏭"\nauthors = [{name = "Łukasz Langa"}]\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_subclass_unicode_0') advanced_data_regression = @pytest.mark.parametrize("toml_config", valid_pep621_config) def test_pep621_subclass( toml_config: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, ):  (tmp_pathplus / "pyproject.toml").write_clean(toml_config)  with in_directory(tmp_pathplus): > config = ReducedPEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:65: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Factory ⸻ A code generator 🏭"\nauthors = [{name = "Łukasz Langa"}]\n' pos = 101, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ___________ test_pep621_class_valid_config[COMPLETE_PROJECT_A-False] ___________ toml_config = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Lovely Spam! Wonderful Spam!"\nrequires-python = ">=3....t.gui-scripts]\nspam-gui = "spam:main_gui"\n\n[project.entry-points."spam.magical"]\ntomatoes = "spam:main_tomatoes"\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_valid_config24') advanced_data_regression = set_defaults = False @pytest.mark.parametrize("set_defaults", [True, False]) @pytest.mark.parametrize( "toml_config", [ *valid_pep621_config, pytest.param(f"{OPTIONAL_DEPENDENCIES}dev-test = ['black']\n", id="optional-dependencies-hyphen"), ] ) def test_pep621_class_valid_config( toml_config: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, set_defaults: bool, ):  (tmp_pathplus / "pyproject.toml").write_clean(toml_config)  with in_directory(tmp_pathplus): config = PEP621Parser().parse( > _load_toml(tmp_pathplus / "pyproject.toml")["project"], set_defaults=set_defaults, ) tests/test_config.py:44: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Lovely Spam! Wonderful Spam!"\nrequires-python = ">=3....t.gui-scripts]\nspam-gui = "spam:main_gui"\n\n[project.entry-points."spam.magical"]\ntomatoes = "spam:main_tomatoes"\n' pos = 202, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError _________________ test_pep621_class_valid_config[authors-True] _________________ toml_config = '[project]\nname = "spam"\nversion = "2020.0.0"\nauthors = [\n {email = "hi@pradyunsg.me"},\n {name = "Tzu-Ping Chung"}\n]\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_valid_config27') advanced_data_regression = set_defaults = True @pytest.mark.parametrize("set_defaults", [True, False]) @pytest.mark.parametrize( "toml_config", [ *valid_pep621_config, pytest.param(f"{OPTIONAL_DEPENDENCIES}dev-test = ['black']\n", id="optional-dependencies-hyphen"), ] ) def test_pep621_class_valid_config( toml_config: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, set_defaults: bool, ):  (tmp_pathplus / "pyproject.toml").write_clean(toml_config)  with in_directory(tmp_pathplus): config = PEP621Parser().parse( > _load_toml(tmp_pathplus / "pyproject.toml")["project"], set_defaults=set_defaults, ) tests/test_config.py:44: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nauthors = [\n {email = "hi@pradyunsg.me"},\n {name = "Tzu-Ping Chung"}\n]\n' pos = 59, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ______________ test_pep621_class_bad_config_readme[charset_only] _______________ readme = 'readme = {charset = "cp1252"}' expected = "The 'project.readme.charset' key cannot be provided on its own; Please provide the 'project.readme.text' key too." exception = tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_bad_config_r3') @pytest.mark.parametrize( "readme, expected, exception", [ pytest.param( "readme = {}", "The 'project.readme' table cannot be empty.", BadConfigError, id="empty", ), pytest.param( "readme = {fil = 'README.md'}", "Unknown format for 'project.readme': {'fil': 'README.md'}", BadConfigError, id="unknown_key", ), pytest.param( 'readme = {text = "This is the inline README."}', "The 'project.readme.content-type' key must be provided when 'project.readme.text' is given.", BadConfigError, id="text_only" ), pytest.param( 'readme = {content-type = "text/x-rst"}', "The 'project.readme.content-type' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="content_type_only" ), pytest.param( 'readme = {charset = "cp1252"}', "The 'project.readme.charset' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="charset_only" ), pytest.param( 'readme = {charset = "cp1252", content-type = "text/x-rst"}', "The 'project.readme.content-type' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="content_type_charset" ), pytest.param( 'readme = {text = "This is the inline README", content-type = "application/x-abiword"}', "Unrecognised value for 'project.readme.content-type': 'application/x-abiword'", BadConfigError, id="bad_content_type" ), pytest.param( 'readme = {file = "README"}', "Unsupported extension for 'README'", ValueError, id="no_extension", ), pytest.param( 'readme = {file = "README.doc"}', "Unsupported extension for 'README.doc'", ValueError, id="bad_extension" ), pytest.param( 'readme = {file = "README.doc", text = "This is the README"}', "The 'project.readme.file' and 'project.readme.text' keys are mutually exclusive.", BadConfigError, id="file_and_readme" ), ] ) def test_pep621_class_bad_config_readme( readme: str, expected: str, exception: Type[Exception], tmp_pathplus: PathPlus, ):  (tmp_pathplus / "pyproject.toml").write_lines([ "[project]", 'name = "spam"', 'version = "2020.0.0"', readme, ])  with in_directory(tmp_pathplus), pytest.raises(exception, match=expected): > PEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:289: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nreadme = {charset = "cp1252"}\n' pos = 54, parse_float = , nest_lvl = 0 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ____________ test_pep621_class_bad_config_readme[content_type_only] ____________ readme = 'readme = {content-type = "text/x-rst"}' expected = "The 'project.readme.content-type' key cannot be provided on its own; Please provide the 'project.readme.text' key too." exception = tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_bad_config_r4') @pytest.mark.parametrize( "readme, expected, exception", [ pytest.param( "readme = {}", "The 'project.readme' table cannot be empty.", BadConfigError, id="empty", ), pytest.param( "readme = {fil = 'README.md'}", "Unknown format for 'project.readme': {'fil': 'README.md'}", BadConfigError, id="unknown_key", ), pytest.param( 'readme = {text = "This is the inline README."}', "The 'project.readme.content-type' key must be provided when 'project.readme.text' is given.", BadConfigError, id="text_only" ), pytest.param( 'readme = {content-type = "text/x-rst"}', "The 'project.readme.content-type' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="content_type_only" ), pytest.param( 'readme = {charset = "cp1252"}', "The 'project.readme.charset' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="charset_only" ), pytest.param( 'readme = {charset = "cp1252", content-type = "text/x-rst"}', "The 'project.readme.content-type' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="content_type_charset" ), pytest.param( 'readme = {text = "This is the inline README", content-type = "application/x-abiword"}', "Unrecognised value for 'project.readme.content-type': 'application/x-abiword'", BadConfigError, id="bad_content_type" ), pytest.param( 'readme = {file = "README"}', "Unsupported extension for 'README'", ValueError, id="no_extension", ), pytest.param( 'readme = {file = "README.doc"}', "Unsupported extension for 'README.doc'", ValueError, id="bad_extension" ), pytest.param( 'readme = {file = "README.doc", text = "This is the README"}', "The 'project.readme.file' and 'project.readme.text' keys are mutually exclusive.", BadConfigError, id="file_and_readme" ), ] ) def test_pep621_class_bad_config_readme( readme: str, expected: str, exception: Type[Exception], tmp_pathplus: PathPlus, ):  (tmp_pathplus / "pyproject.toml").write_lines([ "[project]", 'name = "spam"', 'version = "2020.0.0"', readme, ])  with in_directory(tmp_pathplus), pytest.raises(exception, match=expected): > PEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:289: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nreadme = {content-type = "text/x-rst"}\n' pos = 54, parse_float = , nest_lvl = 0 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ______ test_pep621_class_valid_config_readme_dict[text_content_type_rst] _______ readme = 'readme = {text = "This is the inline README README.", content-type = "text/x-rst"}' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_valid_config30') advanced_data_regression = @pytest.mark.parametrize( "readme", [ pytest.param('readme = {file = "README.rst"}', id="rst_file"), pytest.param('readme = {file = "README.md"}', id="md_file"), pytest.param('readme = {file = "README.txt"}', id="txt_file"), pytest.param( 'readme = {text = "This is the inline README README.", content-type = "text/x-rst"}', id="text_content_type_rst" ), pytest.param( 'readme = {text = "This is the inline markdown README.", content-type = "text/markdown"}', id="text_content_type_md" ), pytest.param( 'readme = {text = "This is the inline README.", content-type = "text/plain"}', id="text_content_type_plain" ), ] ) def test_pep621_class_valid_config_readme_dict( readme: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, ):  (tmp_pathplus / "pyproject.toml").write_lines([ "[project]", 'name = "spam"', 'version = "2020.0.0"', readme, ]) (tmp_pathplus / "README.rst").write_text("This is the reStructuredText README.") (tmp_pathplus / "README.md").write_text("This is the markdown README.") (tmp_pathplus / "README.txt").write_text("This is the plaintext README.") (tmp_pathplus / "README").write_text("This is the README.")  with in_directory(tmp_pathplus): > config = PEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:201: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nreadme = {text = "This is the inline README README.", content-type = "text/x-rst"}\n' pos = 54, parse_float = , nest_lvl = 0 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError _____________ test_pep621_class_valid_config_readme_dict[md_file] ______________ readme = 'readme = {file = "README.md"}' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_valid_config33') advanced_data_regression = @pytest.mark.parametrize( "readme", [ pytest.param('readme = {file = "README.rst"}', id="rst_file"), pytest.param('readme = {file = "README.md"}', id="md_file"), pytest.param('readme = {file = "README.txt"}', id="txt_file"), pytest.param( 'readme = {text = "This is the inline README README.", content-type = "text/x-rst"}', id="text_content_type_rst" ), pytest.param( 'readme = {text = "This is the inline markdown README.", content-type = "text/markdown"}', id="text_content_type_md" ), pytest.param( 'readme = {text = "This is the inline README.", content-type = "text/plain"}', id="text_content_type_plain" ), ] ) def test_pep621_class_valid_config_readme_dict( readme: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, ):  (tmp_pathplus / "pyproject.toml").write_lines([ "[project]", 'name = "spam"', 'version = "2020.0.0"', readme, ]) (tmp_pathplus / "README.rst").write_text("This is the reStructuredText README.") (tmp_pathplus / "README.md").write_text("This is the markdown README.") (tmp_pathplus / "README.txt").write_text("This is the plaintext README.") (tmp_pathplus / "README").write_text("This is the README.")  with in_directory(tmp_pathplus): > config = PEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:201: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nreadme = {file = "README.md"}\n' pos = 54, parse_float = , nest_lvl = 0 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError _________________ test_pep621_class_valid_config_license_dict __________________ tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_valid_config34') advanced_data_regression = def test_pep621_class_valid_config_license_dict( tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, ):  (tmp_pathplus / "pyproject.toml").write_lines([ f'[project]', f'name = "spam"', f'version = "2020.0.0"', f'license = {{text = "This is the MIT License"}}', ])  with in_directory(tmp_pathplus): > config = PEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:326: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nlicense = {text = "This is the MIT License"}\n' pos = 55, parse_float = , nest_lvl = 0 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError __________________ test_pep621_class_bad_config[author_comma] __________________ config = '[project]\nname = "spam"\nversion = "2020.0.0"\nauthors = [{name = "Bob, Alice"}]' expects = match = "The 'project.authors\\[0\\].name' key cannot contain commas." tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_bad_config_a0') @pytest.mark.parametrize( "config, expects, match", [ *bad_pep621_config, # pytest.param( # '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\nwith-hyphen = []', # TypeError, # "Invalid extra name 'with-hyphen'", # id="extra_invalid_a", # ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\n"quoted?" = []', TypeError, r"Invalid extra name 'quoted\?'", id="extra_invalid_b", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\n"number#1" = []', TypeError, "Invalid extra name 'number#1'", id="extra_invalid_c", ), ] ) def test_pep621_class_bad_config( config: str, expects: Type[Exception], match: str, tmp_pathplus: PathPlus, ): (tmp_pathplus / "pyproject.toml").write_clean(config)  with in_directory(tmp_pathplus), pytest.raises(expects, match=match): > PEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:396: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nauthors = [{name = "Bob, Alice"}]\n' pos = 56, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError _____________ test_pep621_class_bad_config_readme[file_and_readme] _____________ readme = 'readme = {file = "README.doc", text = "This is the README"}' expected = "The 'project.readme.file' and 'project.readme.text' keys are mutually exclusive." exception = tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_bad_config_r5') @pytest.mark.parametrize( "readme, expected, exception", [ pytest.param( "readme = {}", "The 'project.readme' table cannot be empty.", BadConfigError, id="empty", ), pytest.param( "readme = {fil = 'README.md'}", "Unknown format for 'project.readme': {'fil': 'README.md'}", BadConfigError, id="unknown_key", ), pytest.param( 'readme = {text = "This is the inline README."}', "The 'project.readme.content-type' key must be provided when 'project.readme.text' is given.", BadConfigError, id="text_only" ), pytest.param( 'readme = {content-type = "text/x-rst"}', "The 'project.readme.content-type' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="content_type_only" ), pytest.param( 'readme = {charset = "cp1252"}', "The 'project.readme.charset' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="charset_only" ), pytest.param( 'readme = {charset = "cp1252", content-type = "text/x-rst"}', "The 'project.readme.content-type' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="content_type_charset" ), pytest.param( 'readme = {text = "This is the inline README", content-type = "application/x-abiword"}', "Unrecognised value for 'project.readme.content-type': 'application/x-abiword'", BadConfigError, id="bad_content_type" ), pytest.param( 'readme = {file = "README"}', "Unsupported extension for 'README'", ValueError, id="no_extension", ), pytest.param( 'readme = {file = "README.doc"}', "Unsupported extension for 'README.doc'", ValueError, id="bad_extension" ), pytest.param( 'readme = {file = "README.doc", text = "This is the README"}', "The 'project.readme.file' and 'project.readme.text' keys are mutually exclusive.", BadConfigError, id="file_and_readme" ), ] ) def test_pep621_class_bad_config_readme( readme: str, expected: str, exception: Type[Exception], tmp_pathplus: PathPlus, ):  (tmp_pathplus / "pyproject.toml").write_lines([ "[project]", 'name = "spam"', 'version = "2020.0.0"', readme, ])  with in_directory(tmp_pathplus), pytest.raises(exception, match=expected): > PEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:289: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nreadme = {file = "README.doc", text = "This is the README"}\n' pos = 54, parse_float = , nest_lvl = 0 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ___________________ test_pep621_subclass[COMPLETE_PROJECT_A] ___________________ toml_config = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Lovely Spam! Wonderful Spam!"\nrequires-python = ">=3....t.gui-scripts]\nspam-gui = "spam:main_gui"\n\n[project.entry-points."spam.magical"]\ntomatoes = "spam:main_tomatoes"\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_subclass_COMPLETE_2') advanced_data_regression = @pytest.mark.parametrize("toml_config", valid_pep621_config) def test_pep621_subclass( toml_config: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, ):  (tmp_pathplus / "pyproject.toml").write_clean(toml_config)  with in_directory(tmp_pathplus): > config = ReducedPEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:65: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Lovely Spam! Wonderful Spam!"\nrequires-python = ">=3....t.gui-scripts]\nspam-gui = "spam:main_gui"\n\n[project.entry-points."spam.magical"]\ntomatoes = "spam:main_tomatoes"\n' pos = 202, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ____________ test_pep621_class_bad_config_readme[bad_content_type] _____________ readme = 'readme = {text = "This is the inline README", content-type = "application/x-abiword"}' expected = "Unrecognised value for 'project.readme.content-type': 'application/x-abiword'" exception = tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_bad_config_r6') @pytest.mark.parametrize( "readme, expected, exception", [ pytest.param( "readme = {}", "The 'project.readme' table cannot be empty.", BadConfigError, id="empty", ), pytest.param( "readme = {fil = 'README.md'}", "Unknown format for 'project.readme': {'fil': 'README.md'}", BadConfigError, id="unknown_key", ), pytest.param( 'readme = {text = "This is the inline README."}', "The 'project.readme.content-type' key must be provided when 'project.readme.text' is given.", BadConfigError, id="text_only" ), pytest.param( 'readme = {content-type = "text/x-rst"}', "The 'project.readme.content-type' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="content_type_only" ), pytest.param( 'readme = {charset = "cp1252"}', "The 'project.readme.charset' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="charset_only" ), pytest.param( 'readme = {charset = "cp1252", content-type = "text/x-rst"}', "The 'project.readme.content-type' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="content_type_charset" ), pytest.param( 'readme = {text = "This is the inline README", content-type = "application/x-abiword"}', "Unrecognised value for 'project.readme.content-type': 'application/x-abiword'", BadConfigError, id="bad_content_type" ), pytest.param( 'readme = {file = "README"}', "Unsupported extension for 'README'", ValueError, id="no_extension", ), pytest.param( 'readme = {file = "README.doc"}', "Unsupported extension for 'README.doc'", ValueError, id="bad_extension" ), pytest.param( 'readme = {file = "README.doc", text = "This is the README"}', "The 'project.readme.file' and 'project.readme.text' keys are mutually exclusive.", BadConfigError, id="file_and_readme" ), ] ) def test_pep621_class_bad_config_readme( readme: str, expected: str, exception: Type[Exception], tmp_pathplus: PathPlus, ):  (tmp_pathplus / "pyproject.toml").write_lines([ "[project]", 'name = "spam"', 'version = "2020.0.0"', readme, ])  with in_directory(tmp_pathplus), pytest.raises(exception, match=expected): > PEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:289: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nreadme = {text = "This is the inline README", content-type = "application/x-abiword"}\n' pos = 54, parse_float = , nest_lvl = 0 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ______________ test_pep621_class_bad_config_readme[no_extension] _______________ readme = 'readme = {file = "README"}' expected = "Unsupported extension for 'README'" exception = tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_bad_config_r7') @pytest.mark.parametrize( "readme, expected, exception", [ pytest.param( "readme = {}", "The 'project.readme' table cannot be empty.", BadConfigError, id="empty", ), pytest.param( "readme = {fil = 'README.md'}", "Unknown format for 'project.readme': {'fil': 'README.md'}", BadConfigError, id="unknown_key", ), pytest.param( 'readme = {text = "This is the inline README."}', "The 'project.readme.content-type' key must be provided when 'project.readme.text' is given.", BadConfigError, id="text_only" ), pytest.param( 'readme = {content-type = "text/x-rst"}', "The 'project.readme.content-type' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="content_type_only" ), pytest.param( 'readme = {charset = "cp1252"}', "The 'project.readme.charset' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="charset_only" ), pytest.param( 'readme = {charset = "cp1252", content-type = "text/x-rst"}', "The 'project.readme.content-type' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="content_type_charset" ), pytest.param( 'readme = {text = "This is the inline README", content-type = "application/x-abiword"}', "Unrecognised value for 'project.readme.content-type': 'application/x-abiword'", BadConfigError, id="bad_content_type" ), pytest.param( 'readme = {file = "README"}', "Unsupported extension for 'README'", ValueError, id="no_extension", ), pytest.param( 'readme = {file = "README.doc"}', "Unsupported extension for 'README.doc'", ValueError, id="bad_extension" ), pytest.param( 'readme = {file = "README.doc", text = "This is the README"}', "The 'project.readme.file' and 'project.readme.text' keys are mutually exclusive.", BadConfigError, id="file_and_readme" ), ] ) def test_pep621_class_bad_config_readme( readme: str, expected: str, exception: Type[Exception], tmp_pathplus: PathPlus, ):  (tmp_pathplus / "pyproject.toml").write_lines([ "[project]", 'name = "spam"', 'version = "2020.0.0"', readme, ])  with in_directory(tmp_pathplus), pytest.raises(exception, match=expected): > PEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:289: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nreadme = {file = "README"}\n' pos = 54, parse_float = , nest_lvl = 0 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ________________ test_pep621_class_bad_config_readme[text_only] ________________ readme = 'readme = {text = "This is the inline README."}' expected = "The 'project.readme.content-type' key must be provided when 'project.readme.text' is given." exception = tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_bad_config_r8') @pytest.mark.parametrize( "readme, expected, exception", [ pytest.param( "readme = {}", "The 'project.readme' table cannot be empty.", BadConfigError, id="empty", ), pytest.param( "readme = {fil = 'README.md'}", "Unknown format for 'project.readme': {'fil': 'README.md'}", BadConfigError, id="unknown_key", ), pytest.param( 'readme = {text = "This is the inline README."}', "The 'project.readme.content-type' key must be provided when 'project.readme.text' is given.", BadConfigError, id="text_only" ), pytest.param( 'readme = {content-type = "text/x-rst"}', "The 'project.readme.content-type' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="content_type_only" ), pytest.param( 'readme = {charset = "cp1252"}', "The 'project.readme.charset' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="charset_only" ), pytest.param( 'readme = {charset = "cp1252", content-type = "text/x-rst"}', "The 'project.readme.content-type' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="content_type_charset" ), pytest.param( 'readme = {text = "This is the inline README", content-type = "application/x-abiword"}', "Unrecognised value for 'project.readme.content-type': 'application/x-abiword'", BadConfigError, id="bad_content_type" ), pytest.param( 'readme = {file = "README"}', "Unsupported extension for 'README'", ValueError, id="no_extension", ), pytest.param( 'readme = {file = "README.doc"}', "Unsupported extension for 'README.doc'", ValueError, id="bad_extension" ), pytest.param( 'readme = {file = "README.doc", text = "This is the README"}', "The 'project.readme.file' and 'project.readme.text' keys are mutually exclusive.", BadConfigError, id="file_and_readme" ), ] ) def test_pep621_class_bad_config_readme( readme: str, expected: str, exception: Type[Exception], tmp_pathplus: PathPlus, ):  (tmp_pathplus / "pyproject.toml").write_lines([ "[project]", 'name = "spam"', 'version = "2020.0.0"', readme, ])  with in_directory(tmp_pathplus), pytest.raises(exception, match=expected): > PEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:289: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nreadme = {text = "This is the inline README."}\n' pos = 54, parse_float = , nest_lvl = 0 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ______________________ test_pep621_subclass[maintainers] _______________________ toml_config = '[project]\nname = "spam"\nversion = "2020.0.0"\nmaintainers = [\n {name = "Brett Cannon", email = "brett@python.org"}\n]\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_subclass_maintaine0') advanced_data_regression = @pytest.mark.parametrize("toml_config", valid_pep621_config) def test_pep621_subclass( toml_config: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, ):  (tmp_pathplus / "pyproject.toml").write_clean(toml_config)  with in_directory(tmp_pathplus): > config = ReducedPEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:65: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nmaintainers = [\n {name = "Brett Cannon", email = "brett@python.org"}\n]\n' pos = 63, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ______________ test_pep621_class_bad_config[missing_license_file] ______________ config = '[project]\nname = "spam"\nversion = "2020.0.0"\nlicense = {file = "LICENSE.txt"}' expects = match = "No such file or directory: ((Windows|Posix)Path(Plus)?\\('LICENSE.txt'\\)|'LICENSE.txt')" tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_bad_config_m2') @pytest.mark.parametrize( "config, expects, match", [ *bad_pep621_config, # pytest.param( # '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\nwith-hyphen = []', # TypeError, # "Invalid extra name 'with-hyphen'", # id="extra_invalid_a", # ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\n"quoted?" = []', TypeError, r"Invalid extra name 'quoted\?'", id="extra_invalid_b", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\n"number#1" = []', TypeError, "Invalid extra name 'number#1'", id="extra_invalid_c", ), ] ) def test_pep621_class_bad_config( config: str, expects: Type[Exception], match: str, tmp_pathplus: PathPlus, ): (tmp_pathplus / "pyproject.toml").write_clean(config)  with in_directory(tmp_pathplus), pytest.raises(expects, match=match): > PEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:396: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nlicense = {file = "LICENSE.txt"}\n' pos = 55, parse_float = , nest_lvl = 0 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError _____________ test_pep621_class_valid_config_readme_dict[txt_file] _____________ readme = 'readme = {file = "README.txt"}' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_valid_config44') advanced_data_regression = @pytest.mark.parametrize( "readme", [ pytest.param('readme = {file = "README.rst"}', id="rst_file"), pytest.param('readme = {file = "README.md"}', id="md_file"), pytest.param('readme = {file = "README.txt"}', id="txt_file"), pytest.param( 'readme = {text = "This is the inline README README.", content-type = "text/x-rst"}', id="text_content_type_rst" ), pytest.param( 'readme = {text = "This is the inline markdown README.", content-type = "text/markdown"}', id="text_content_type_md" ), pytest.param( 'readme = {text = "This is the inline README.", content-type = "text/plain"}', id="text_content_type_plain" ), ] ) def test_pep621_class_valid_config_readme_dict( readme: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, ):  (tmp_pathplus / "pyproject.toml").write_lines([ "[project]", 'name = "spam"', 'version = "2020.0.0"', readme, ]) (tmp_pathplus / "README.rst").write_text("This is the reStructuredText README.") (tmp_pathplus / "README.md").write_text("This is the markdown README.") (tmp_pathplus / "README.txt").write_text("This is the plaintext README.") (tmp_pathplus / "README").write_text("This is the README.")  with in_directory(tmp_pathplus): > config = PEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:201: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nreadme = {file = "README.txt"}\n' pos = 54, parse_float = , nest_lvl = 0 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError _____________ test_pep621_class_bad_config_license[double_license] _____________ license_key = 'license = {text = "MIT", file = "LICENSE.txt"}' expected = "The 'project.license.file' and 'project.license.text' keys are mutually exclusive." tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_bad_config_l2') @pytest.mark.parametrize( "license_key, expected", [ pytest.param( "license = {}", "The 'project.license' table should contain one of 'text' or 'file'.", id="empty" ), pytest.param( 'license = {text = "MIT", file = "LICENSE.txt"}', "The 'project.license.file' and 'project.license.text' keys are mutually exclusive.", id="double_license" ), ] ) def test_pep621_class_bad_config_license( license_key: str, expected: str, tmp_pathplus: PathPlus, ):  (tmp_pathplus / "pyproject.toml").write_lines([ f'[project]', f'name = "spam"', f'version = "2020.0.0"', license_key, ])  with in_directory(tmp_pathplus), pytest.raises(BadConfigError, match=expected): > PEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:360: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nlicense = {text = "MIT", file = "LICENSE.txt"}\n' pos = 55, parse_float = , nest_lvl = 0 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ___________ test_pep621_class_valid_config[COMPLETE_PROJECT_A-True] ____________ toml_config = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Lovely Spam! Wonderful Spam!"\nrequires-python = ">=3....t.gui-scripts]\nspam-gui = "spam:main_gui"\n\n[project.entry-points."spam.magical"]\ntomatoes = "spam:main_tomatoes"\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_valid_config45') advanced_data_regression = set_defaults = True @pytest.mark.parametrize("set_defaults", [True, False]) @pytest.mark.parametrize( "toml_config", [ *valid_pep621_config, pytest.param(f"{OPTIONAL_DEPENDENCIES}dev-test = ['black']\n", id="optional-dependencies-hyphen"), ] ) def test_pep621_class_valid_config( toml_config: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, set_defaults: bool, ):  (tmp_pathplus / "pyproject.toml").write_clean(toml_config)  with in_directory(tmp_pathplus): config = PEP621Parser().parse( > _load_toml(tmp_pathplus / "pyproject.toml")["project"], set_defaults=set_defaults, ) tests/test_config.py:44: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Lovely Spam! Wonderful Spam!"\nrequires-python = ">=3....t.gui-scripts]\nspam-gui = "spam:main_gui"\n\n[project.entry-points."spam.magical"]\ntomatoes = "spam:main_tomatoes"\n' pos = 202, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError _____ test_pep621_class_valid_config_readme_dict[text_content_type_plain] ______ readme = 'readme = {text = "This is the inline README.", content-type = "text/plain"}' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_valid_config46') advanced_data_regression = @pytest.mark.parametrize( "readme", [ pytest.param('readme = {file = "README.rst"}', id="rst_file"), pytest.param('readme = {file = "README.md"}', id="md_file"), pytest.param('readme = {file = "README.txt"}', id="txt_file"), pytest.param( 'readme = {text = "This is the inline README README.", content-type = "text/x-rst"}', id="text_content_type_rst" ), pytest.param( 'readme = {text = "This is the inline markdown README.", content-type = "text/markdown"}', id="text_content_type_md" ), pytest.param( 'readme = {text = "This is the inline README.", content-type = "text/plain"}', id="text_content_type_plain" ), ] ) def test_pep621_class_valid_config_readme_dict( readme: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, ):  (tmp_pathplus / "pyproject.toml").write_lines([ "[project]", 'name = "spam"', 'version = "2020.0.0"', readme, ]) (tmp_pathplus / "README.rst").write_text("This is the reStructuredText README.") (tmp_pathplus / "README.md").write_text("This is the markdown README.") (tmp_pathplus / "README.txt").write_text("This is the plaintext README.") (tmp_pathplus / "README").write_text("This is the README.")  with in_directory(tmp_pathplus): > config = PEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:201: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nreadme = {text = "This is the inline README.", content-type = "text/plain"}\n' pos = 54, parse_float = , nest_lvl = 0 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError _____________ test_pep621_class_valid_config_readme_dict[rst_file] _____________ readme = 'readme = {file = "README.rst"}' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_valid_config48') advanced_data_regression = @pytest.mark.parametrize( "readme", [ pytest.param('readme = {file = "README.rst"}', id="rst_file"), pytest.param('readme = {file = "README.md"}', id="md_file"), pytest.param('readme = {file = "README.txt"}', id="txt_file"), pytest.param( 'readme = {text = "This is the inline README README.", content-type = "text/x-rst"}', id="text_content_type_rst" ), pytest.param( 'readme = {text = "This is the inline markdown README.", content-type = "text/markdown"}', id="text_content_type_md" ), pytest.param( 'readme = {text = "This is the inline README.", content-type = "text/plain"}', id="text_content_type_plain" ), ] ) def test_pep621_class_valid_config_readme_dict( readme: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, ):  (tmp_pathplus / "pyproject.toml").write_lines([ "[project]", 'name = "spam"', 'version = "2020.0.0"', readme, ]) (tmp_pathplus / "README.rst").write_text("This is the reStructuredText README.") (tmp_pathplus / "README.md").write_text("This is the markdown README.") (tmp_pathplus / "README.txt").write_text("This is the plaintext README.") (tmp_pathplus / "README").write_text("This is the README.")  with in_directory(tmp_pathplus): > config = PEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:201: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nreadme = {file = "README.rst"}\n' pos = 54, parse_float = , nest_lvl = 0 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ______________ test_pep621_class_bad_config_readme[bad_extension] ______________ readme = 'readme = {file = "README.doc"}' expected = "Unsupported extension for 'README.doc'" exception = tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_pep621_class_bad_config_r9') @pytest.mark.parametrize( "readme, expected, exception", [ pytest.param( "readme = {}", "The 'project.readme' table cannot be empty.", BadConfigError, id="empty", ), pytest.param( "readme = {fil = 'README.md'}", "Unknown format for 'project.readme': {'fil': 'README.md'}", BadConfigError, id="unknown_key", ), pytest.param( 'readme = {text = "This is the inline README."}', "The 'project.readme.content-type' key must be provided when 'project.readme.text' is given.", BadConfigError, id="text_only" ), pytest.param( 'readme = {content-type = "text/x-rst"}', "The 'project.readme.content-type' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="content_type_only" ), pytest.param( 'readme = {charset = "cp1252"}', "The 'project.readme.charset' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="charset_only" ), pytest.param( 'readme = {charset = "cp1252", content-type = "text/x-rst"}', "The 'project.readme.content-type' key cannot be provided on its own; " "Please provide the 'project.readme.text' key too.", BadConfigError, id="content_type_charset" ), pytest.param( 'readme = {text = "This is the inline README", content-type = "application/x-abiword"}', "Unrecognised value for 'project.readme.content-type': 'application/x-abiword'", BadConfigError, id="bad_content_type" ), pytest.param( 'readme = {file = "README"}', "Unsupported extension for 'README'", ValueError, id="no_extension", ), pytest.param( 'readme = {file = "README.doc"}', "Unsupported extension for 'README.doc'", ValueError, id="bad_extension" ), pytest.param( 'readme = {file = "README.doc", text = "This is the README"}', "The 'project.readme.file' and 'project.readme.text' keys are mutually exclusive.", BadConfigError, id="file_and_readme" ), ] ) def test_pep621_class_bad_config_readme( readme: str, expected: str, exception: Type[Exception], tmp_pathplus: PathPlus, ):  (tmp_pathplus / "pyproject.toml").write_lines([ "[project]", 'name = "spam"', 'version = "2020.0.0"', readme, ])  with in_directory(tmp_pathplus), pytest.raises(exception, match=expected): > PEP621Parser().parse(_load_toml(tmp_pathplus / "pyproject.toml")["project"]) tests/test_config.py:289: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nreadme = {file = "README.doc"}\n' pos = 54, parse_float = , nest_lvl = 0 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ____________________ test_valid_config[COMPLETE_PROJECT_A] _____________________ toml_config = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Lovely Spam! Wonderful Spam!"\nrequires-python = ">=3....t.gui-scripts]\nspam-gui = "spam:main_gui"\n\n[project.entry-points."spam.magical"]\ntomatoes = "spam:main_tomatoes"\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_valid_config_COMPLETE_PRO0') advanced_data_regression = @pytest.mark.parametrize("toml_config", [*valid_pep621_config, *valid_buildsystem_config]) def test_valid_config( toml_config: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, ):  (tmp_pathplus / "pyproject.toml").write_clean(toml_config)  with in_directory(tmp_pathplus): > config = PyProject.load(tmp_pathplus / "pyproject.toml") tests/test_pyproject_class.py:31: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/__init__.py:311: in load config = _load_toml(filename) pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Lovely Spam! Wonderful Spam!"\nrequires-python = ">=3....t.gui-scripts]\nspam-gui = "spam:main_gui"\n\n[project.entry-points."spam.magical"]\ntomatoes = "spam:main_tomatoes"\n' pos = 202, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ________________________ test_bad_config[author_comma] _________________________ config = '[project]\nname = "spam"\nversion = "2020.0.0"\nauthors = [{name = "Bob, Alice"}]' expects = match = "The 'project.authors\\[0\\].name' key cannot contain commas." tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_bad_config_author_comma_0') @pytest.mark.parametrize( "config, expects, match", [ *bad_pep621_config, *bad_buildsystem_config, pytest.param( 'banana = "fruit"\n[project]\nname = "food"', BadConfigError, "Unexpected top-level key 'banana'. Only 'build-system', 'project' and 'tool' are allowed.", id="unexpected_top_level" ), pytest.param( "[coverage]\nomit = 'demo.py'\n[flake8]\nselect = ['F401']", BadConfigError, "Unexpected top-level key 'coverage'. Only 'build-system', 'project' and 'tool' are allowed.", id="top-level", ), pytest.param( "[build_system]\nbackend = 'whey'", BadConfigError, "Unexpected top-level key 'build_system'. Did you mean 'build-system'", id="top_level_typo_underscore", ), pytest.param( "[Build-System]\nbackend = 'whey'", BadConfigError, "Unexpected top-level key 'Build-System'. Did you mean 'build-system'", id="top_level_typo_caps", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[[project.authors]]\nemail = "foo.bar"', BadConfigError, "Invalid email 'foo.bar': The email address is not valid. It must have exactly one @-sign.", id="bad_email", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\noptional-dependencies = 123', TypeError, "Invalid type for 'project.optional-dependencies': expected , got ", id="invalid_optional_dependencies_type_int", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\noptional-dependencies = "123"', TypeError, "Invalid type for 'project.optional-dependencies': expected , got ", id="invalid_optional_dependencies_type_str", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\noptional-dependencies = ["123"]', TypeError, "Invalid type for 'project.optional-dependencies': expected , got ", id="invalid_optional_dependencies_type_list", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\nfoo = 123', TypeError, "Invalid type for 'project.optional-dependencies.foo': expected , got ", id="invalid_optional_dependencies_type_dict_int", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\nfoo = [123]', TypeError, r"Invalid type for 'project.optional-dependencies.foo\[0\]': expected , got ", id="invalid_optional_dependencies_type_dict_list_int", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\nfoo = "123"', TypeError, "Invalid type for 'project.optional-dependencies.foo': expected , got ", id="invalid_optional_dependencies_type_dict_str", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.entry-points.console_scripts]', BadConfigError, "'project.entry-points' may not contain a 'console_scripts' sub-table. Use 'project.scripts' instead.", id="console_scripts_entry_point", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.entry-points.gui_scripts]', BadConfigError, "'project.entry-points' may not contain a 'gui_scripts' sub-table. Use 'project.gui-scripts' instead.", id="gui_scripts_entry_point", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.entry-points.console-scripts]', BadConfigError, "'project.entry-points' may not contain a 'console-scripts' sub-table. Use 'project.scripts' instead.", id="console_scripts_hyphen_entry_point", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.entry-points.gui-scripts]', BadConfigError, "'project.entry-points' may not contain a 'gui-scripts' sub-table. Use 'project.gui-scripts' instead.", id="gui_scripts_hyphen_entry_point", ), # pytest.param( # '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\nwith-hyphen = []', # TypeError, # "Invalid extra name 'with-hyphen'", # id="extra_invalid_a", # ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\n"quoted?" = []', TypeError, r"Invalid extra name 'quoted\?'", id="extra_invalid_b", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\n"number#1" = []', TypeError, "Invalid extra name 'number#1'", id="extra_invalid_c", ), # For Part 2 # pytest.param( # '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\n"dev_test" = []\n"dev-test" = []', # BadConfigError, # "'project.optional-dependencies.dev-test': Multiple extras were defined with the same normalized name of 'dev-test'", # id="duplicate_extra_1", # ), # pytest.param( # '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\n"dev-test" = []\n"dev_test" = []', # BadConfigError, # "'project.optional-dependencies.dev_test': Multiple extras were defined with the same normalized name of 'dev-test'", # id="duplicate_extra_2", # ), # pytest.param( # '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\n"dev.test" = []\n"dev_test" = []', # BadConfigError, # "'project.optional-dependencies.dev_test': Multiple extras were defined with the same normalized name of 'dev-test'", # id="duplicate_extra_3", # ), ] ) def test_bad_config( config: str, expects: Type[Exception], match: str, tmp_pathplus: PathPlus, ):  (tmp_pathplus / "pyproject.toml").write_clean(config)  with in_directory(tmp_pathplus), pytest.raises(expects, match=match): > PyProject.load(tmp_pathplus / "pyproject.toml").resolve_files() tests/test_pyproject_class.py:220: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/__init__.py:311: in load config = _load_toml(filename) pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nauthors = [{name = "Bob, Alice"}]\n' pos = 56, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ___________________ test_valid_config_resolve_files[authors] ___________________ toml_config = '[project]\nname = "spam"\nversion = "2020.0.0"\nauthors = [\n {email = "hi@pradyunsg.me"},\n {name = "Tzu-Ping Chung"}\n]\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_valid_config_resolve_file1') advanced_data_regression = @pytest.mark.parametrize( "toml_config", [ *valid_pep621_config, *valid_buildsystem_config, pytest.param(COMPLETE_A_WITH_FILES, id="COMPLETE_A_WITH_FILES") ] ) def test_valid_config_resolve_files( toml_config: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, ):  (tmp_pathplus / "pyproject.toml").write_clean(toml_config) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  with in_directory(tmp_pathplus): > config = PyProject.load(tmp_pathplus / "pyproject.toml") tests/test_pyproject_class.py:70: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/__init__.py:311: in load config = _load_toml(filename) pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nauthors = [\n {email = "hi@pradyunsg.me"},\n {name = "Tzu-Ping Chung"}\n]\n' pos = 59, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError _________________ test_valid_config_resolve_files[maintainers] _________________ toml_config = '[project]\nname = "spam"\nversion = "2020.0.0"\nmaintainers = [\n {name = "Brett Cannon", email = "brett@python.org"}\n]\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_valid_config_resolve_file3') advanced_data_regression = @pytest.mark.parametrize( "toml_config", [ *valid_pep621_config, *valid_buildsystem_config, pytest.param(COMPLETE_A_WITH_FILES, id="COMPLETE_A_WITH_FILES") ] ) def test_valid_config_resolve_files( toml_config: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, ):  (tmp_pathplus / "pyproject.toml").write_clean(toml_config) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  with in_directory(tmp_pathplus): > config = PyProject.load(tmp_pathplus / "pyproject.toml") tests/test_pyproject_class.py:70: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/__init__.py:311: in load config = _load_toml(filename) pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nmaintainers = [\n {name = "Brett Cannon", email = "brett@python.org"}\n]\n' pos = 63, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ___________________________ test_from_dict[unicode] ____________________________ toml_config = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Factory ⸻ A code generator 🏭"\nauthors = [{name = "Łukasz Langa"}]\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_from_dict_unicode_0') @pytest.mark.parametrize("toml_config", [*valid_pep621_config, *valid_buildsystem_config]) def test_from_dict(toml_config: str, tmp_pathplus: PathPlus):  (tmp_pathplus / "pyproject.toml").write_clean(toml_config)  with in_directory(tmp_pathplus): > config = PyProject.load(tmp_pathplus / "pyproject.toml") tests/test_pyproject_class.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/__init__.py:311: in load config = _load_toml(filename) pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Factory ⸻ A code generator 🏭"\nauthors = [{name = "Łukasz Langa"}]\n' pos = 101, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError __________________________ test_valid_config[unicode] __________________________ toml_config = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Factory ⸻ A code generator 🏭"\nauthors = [{name = "Łukasz Langa"}]\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_valid_config_unicode_0') advanced_data_regression = @pytest.mark.parametrize("toml_config", [*valid_pep621_config, *valid_buildsystem_config]) def test_valid_config( toml_config: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, ):  (tmp_pathplus / "pyproject.toml").write_clean(toml_config)  with in_directory(tmp_pathplus): > config = PyProject.load(tmp_pathplus / "pyproject.toml") tests/test_pyproject_class.py:31: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/__init__.py:311: in load config = _load_toml(filename) pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Factory ⸻ A code generator 🏭"\nauthors = [{name = "Łukasz Langa"}]\n' pos = 101, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError _______________ test_custom_pyproject_class[COMPLETE_PROJECT_A] ________________ toml_config = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Lovely Spam! Wonderful Spam!"\nrequires-python = ">=3....t.gui-scripts]\nspam-gui = "spam:main_gui"\n\n[project.entry-points."spam.magical"]\ntomatoes = "spam:main_tomatoes"\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_custom_pyproject_class_CO1') advanced_data_regression = @pytest.mark.parametrize( "toml_config", [ pytest.param(COMPLETE_PROJECT_A, id="COMPLETE_PROJECT_A"), pytest.param(COMPLETE_A, id="COMPLETE_A"), pytest.param(COMPLETE_B, id="COMPLETE_B"), ] ) def test_custom_pyproject_class( toml_config: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, ):  (tmp_pathplus / "pyproject.toml").write_clean(toml_config)  with in_directory(tmp_pathplus): > config = WheyPyProject.load(tmp_pathplus / "pyproject.toml") tests/test_pyproject_class.py:248: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/__init__.py:311: in load config = _load_toml(filename) pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Lovely Spam! Wonderful Spam!"\nrequires-python = ">=3....t.gui-scripts]\nspam-gui = "spam:main_gui"\n\n[project.entry-points."spam.magical"]\ntomatoes = "spam:main_tomatoes"\n' pos = 202, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ___________________________ test_from_dict[authors] ____________________________ toml_config = '[project]\nname = "spam"\nversion = "2020.0.0"\nauthors = [\n {email = "hi@pradyunsg.me"},\n {name = "Tzu-Ping Chung"}\n]\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_from_dict_authors_0') @pytest.mark.parametrize("toml_config", [*valid_pep621_config, *valid_buildsystem_config]) def test_from_dict(toml_config: str, tmp_pathplus: PathPlus):  (tmp_pathplus / "pyproject.toml").write_clean(toml_config)  with in_directory(tmp_pathplus): > config = PyProject.load(tmp_pathplus / "pyproject.toml") tests/test_pyproject_class.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/__init__.py:311: in load config = _load_toml(filename) pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nauthors = [\n {email = "hi@pradyunsg.me"},\n {name = "Tzu-Ping Chung"}\n]\n' pos = 59, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ________________________ test_valid_config[maintainers] ________________________ toml_config = '[project]\nname = "spam"\nversion = "2020.0.0"\nmaintainers = [\n {name = "Brett Cannon", email = "brett@python.org"}\n]\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_valid_config_maintainers_0') advanced_data_regression = @pytest.mark.parametrize("toml_config", [*valid_pep621_config, *valid_buildsystem_config]) def test_valid_config( toml_config: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, ):  (tmp_pathplus / "pyproject.toml").write_clean(toml_config)  with in_directory(tmp_pathplus): > config = PyProject.load(tmp_pathplus / "pyproject.toml") tests/test_pyproject_class.py:31: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/__init__.py:311: in load config = _load_toml(filename) pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nmaintainers = [\n {name = "Brett Cannon", email = "brett@python.org"}\n]\n' pos = 63, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ____________ test_valid_config_resolve_files[COMPLETE_A_WITH_FILES] ____________ toml_config = '[build-system]\nrequires = [ "whey",]\nbuild-backend = "whey"\n\n[project]\nname = "whey"\nversion = "2021.0.0"\ndesc...,]\npython-implementations = [ "CPython", "PyPy",]\nplatforms = [ "Windows", "macOS", "Linux",]\nlicense-key = "MIT"\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_valid_config_resolve_file12') advanced_data_regression = @pytest.mark.parametrize( "toml_config", [ *valid_pep621_config, *valid_buildsystem_config, pytest.param(COMPLETE_A_WITH_FILES, id="COMPLETE_A_WITH_FILES") ] ) def test_valid_config_resolve_files( toml_config: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, ):  (tmp_pathplus / "pyproject.toml").write_clean(toml_config) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  with in_directory(tmp_pathplus): > config = PyProject.load(tmp_pathplus / "pyproject.toml") tests/test_pyproject_class.py:70: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/__init__.py:311: in load config = _load_toml(filename) pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[build-system]\nrequires = [ "whey",]\nbuild-backend = "whey"\n\n[project]\nname = "whey"\nversion = "2021.0.0"\ndesc...,]\npython-implementations = [ "CPython", "PyPy",]\nplatforms = [ "Windows", "macOS", "Linux",]\nlicense-key = "MIT"\n' pos = 443, parse_float = , nest_lvl = 0 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError _________________________ test_from_dict[maintainers] __________________________ toml_config = '[project]\nname = "spam"\nversion = "2020.0.0"\nmaintainers = [\n {name = "Brett Cannon", email = "brett@python.org"}\n]\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_from_dict_maintainers_0') @pytest.mark.parametrize("toml_config", [*valid_pep621_config, *valid_buildsystem_config]) def test_from_dict(toml_config: str, tmp_pathplus: PathPlus):  (tmp_pathplus / "pyproject.toml").write_clean(toml_config)  with in_directory(tmp_pathplus): > config = PyProject.load(tmp_pathplus / "pyproject.toml") tests/test_pyproject_class.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/__init__.py:311: in load config = _load_toml(filename) pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nmaintainers = [\n {name = "Brett Cannon", email = "brett@python.org"}\n]\n' pos = 63, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError __________________________ test_valid_config[authors] __________________________ toml_config = '[project]\nname = "spam"\nversion = "2020.0.0"\nauthors = [\n {email = "hi@pradyunsg.me"},\n {name = "Tzu-Ping Chung"}\n]\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_valid_config_authors_0') advanced_data_regression = @pytest.mark.parametrize("toml_config", [*valid_pep621_config, *valid_buildsystem_config]) def test_valid_config( toml_config: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, ):  (tmp_pathplus / "pyproject.toml").write_clean(toml_config)  with in_directory(tmp_pathplus): > config = PyProject.load(tmp_pathplus / "pyproject.toml") tests/test_pyproject_class.py:31: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/__init__.py:311: in load config = _load_toml(filename) pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nauthors = [\n {email = "hi@pradyunsg.me"},\n {name = "Tzu-Ping Chung"}\n]\n' pos = 59, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError _____________ test_valid_config_resolve_files[COMPLETE_PROJECT_A] ______________ toml_config = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Lovely Spam! Wonderful Spam!"\nrequires-python = ">=3....t.gui-scripts]\nspam-gui = "spam:main_gui"\n\n[project.entry-points."spam.magical"]\ntomatoes = "spam:main_tomatoes"\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_valid_config_resolve_file21') advanced_data_regression = @pytest.mark.parametrize( "toml_config", [ *valid_pep621_config, *valid_buildsystem_config, pytest.param(COMPLETE_A_WITH_FILES, id="COMPLETE_A_WITH_FILES") ] ) def test_valid_config_resolve_files( toml_config: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, ):  (tmp_pathplus / "pyproject.toml").write_clean(toml_config) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  with in_directory(tmp_pathplus): > config = PyProject.load(tmp_pathplus / "pyproject.toml") tests/test_pyproject_class.py:70: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/__init__.py:311: in load config = _load_toml(filename) pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Lovely Spam! Wonderful Spam!"\nrequires-python = ">=3....t.gui-scripts]\nspam-gui = "spam:main_gui"\n\n[project.entry-points."spam.magical"]\ntomatoes = "spam:main_tomatoes"\n' pos = 202, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ___________________ test_valid_config_resolve_files[unicode] ___________________ toml_config = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Factory ⸻ A code generator 🏭"\nauthors = [{name = "Łukasz Langa"}]\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_valid_config_resolve_file22') advanced_data_regression = @pytest.mark.parametrize( "toml_config", [ *valid_pep621_config, *valid_buildsystem_config, pytest.param(COMPLETE_A_WITH_FILES, id="COMPLETE_A_WITH_FILES") ] ) def test_valid_config_resolve_files( toml_config: str, tmp_pathplus: PathPlus, advanced_data_regression: AdvancedDataRegressionFixture, ):  (tmp_pathplus / "pyproject.toml").write_clean(toml_config) (tmp_pathplus / "README.rst").write_clean("This is the README") (tmp_pathplus / "LICENSE").write_clean("This is the LICENSE")  with in_directory(tmp_pathplus): > config = PyProject.load(tmp_pathplus / "pyproject.toml") tests/test_pyproject_class.py:70: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/__init__.py:311: in load config = _load_toml(filename) pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Factory ⸻ A code generator 🏭"\nauthors = [{name = "Łukasz Langa"}]\n' pos = 101, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ______________________ test_bad_config[maintainer_comma] _______________________ config = '[project]\nname = "spam"\nversion = "2020.0.0"\nmaintainers = [{name = "Bob, Alice"}]' expects = match = "The 'project.maintainers\\[0\\].name' key cannot contain commas." tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_bad_config_maintainer_com0') @pytest.mark.parametrize( "config, expects, match", [ *bad_pep621_config, *bad_buildsystem_config, pytest.param( 'banana = "fruit"\n[project]\nname = "food"', BadConfigError, "Unexpected top-level key 'banana'. Only 'build-system', 'project' and 'tool' are allowed.", id="unexpected_top_level" ), pytest.param( "[coverage]\nomit = 'demo.py'\n[flake8]\nselect = ['F401']", BadConfigError, "Unexpected top-level key 'coverage'. Only 'build-system', 'project' and 'tool' are allowed.", id="top-level", ), pytest.param( "[build_system]\nbackend = 'whey'", BadConfigError, "Unexpected top-level key 'build_system'. Did you mean 'build-system'", id="top_level_typo_underscore", ), pytest.param( "[Build-System]\nbackend = 'whey'", BadConfigError, "Unexpected top-level key 'Build-System'. Did you mean 'build-system'", id="top_level_typo_caps", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[[project.authors]]\nemail = "foo.bar"', BadConfigError, "Invalid email 'foo.bar': The email address is not valid. It must have exactly one @-sign.", id="bad_email", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\noptional-dependencies = 123', TypeError, "Invalid type for 'project.optional-dependencies': expected , got ", id="invalid_optional_dependencies_type_int", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\noptional-dependencies = "123"', TypeError, "Invalid type for 'project.optional-dependencies': expected , got ", id="invalid_optional_dependencies_type_str", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\noptional-dependencies = ["123"]', TypeError, "Invalid type for 'project.optional-dependencies': expected , got ", id="invalid_optional_dependencies_type_list", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\nfoo = 123', TypeError, "Invalid type for 'project.optional-dependencies.foo': expected , got ", id="invalid_optional_dependencies_type_dict_int", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\nfoo = [123]', TypeError, r"Invalid type for 'project.optional-dependencies.foo\[0\]': expected , got ", id="invalid_optional_dependencies_type_dict_list_int", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\nfoo = "123"', TypeError, "Invalid type for 'project.optional-dependencies.foo': expected , got ", id="invalid_optional_dependencies_type_dict_str", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.entry-points.console_scripts]', BadConfigError, "'project.entry-points' may not contain a 'console_scripts' sub-table. Use 'project.scripts' instead.", id="console_scripts_entry_point", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.entry-points.gui_scripts]', BadConfigError, "'project.entry-points' may not contain a 'gui_scripts' sub-table. Use 'project.gui-scripts' instead.", id="gui_scripts_entry_point", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.entry-points.console-scripts]', BadConfigError, "'project.entry-points' may not contain a 'console-scripts' sub-table. Use 'project.scripts' instead.", id="console_scripts_hyphen_entry_point", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.entry-points.gui-scripts]', BadConfigError, "'project.entry-points' may not contain a 'gui-scripts' sub-table. Use 'project.gui-scripts' instead.", id="gui_scripts_hyphen_entry_point", ), # pytest.param( # '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\nwith-hyphen = []', # TypeError, # "Invalid extra name 'with-hyphen'", # id="extra_invalid_a", # ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\n"quoted?" = []', TypeError, r"Invalid extra name 'quoted\?'", id="extra_invalid_b", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\n"number#1" = []', TypeError, "Invalid extra name 'number#1'", id="extra_invalid_c", ), # For Part 2 # pytest.param( # '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\n"dev_test" = []\n"dev-test" = []', # BadConfigError, # "'project.optional-dependencies.dev-test': Multiple extras were defined with the same normalized name of 'dev-test'", # id="duplicate_extra_1", # ), # pytest.param( # '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\n"dev-test" = []\n"dev_test" = []', # BadConfigError, # "'project.optional-dependencies.dev_test': Multiple extras were defined with the same normalized name of 'dev-test'", # id="duplicate_extra_2", # ), # pytest.param( # '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\n"dev.test" = []\n"dev_test" = []', # BadConfigError, # "'project.optional-dependencies.dev_test': Multiple extras were defined with the same normalized name of 'dev-test'", # id="duplicate_extra_3", # ), ] ) def test_bad_config( config: str, expects: Type[Exception], match: str, tmp_pathplus: PathPlus, ):  (tmp_pathplus / "pyproject.toml").write_clean(config)  with in_directory(tmp_pathplus), pytest.raises(expects, match=match): > PyProject.load(tmp_pathplus / "pyproject.toml").resolve_files() tests/test_pyproject_class.py:220: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/__init__.py:311: in load config = _load_toml(filename) pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nmaintainers = [{name = "Bob, Alice"}]\n' pos = 60, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1[39;49;00m)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ______________________ test_from_dict[COMPLETE_PROJECT_A] ______________________ toml_config = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Lovely Spam! Wonderful Spam!"\nrequires-python = ">=3....t.gui-scripts]\nspam-gui = "spam:main_gui"\n\n[project.entry-points."spam.magical"]\ntomatoes = "spam:main_tomatoes"\n' tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_from_dict_COMPLETE_PROJEC0') @pytest.mark.parametrize("toml_config", [*valid_pep621_config, *valid_buildsystem_config]) def test_from_dict(toml_config: str, tmp_pathplus: PathPlus):  (tmp_pathplus / "pyproject.toml").write_clean(toml_config)  with in_directory(tmp_pathplus): > config = PyProject.load(tmp_pathplus / "pyproject.toml") tests/test_pyproject_class.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/__init__.py:311: in load config = _load_toml(filename) pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) /usr/lib/python3/site-packages/tomli/_parser.py:712: in parse_value return parse_array(src, pos, parse_float, nest_lvl + 1) /usr/lib/python3/site-packages/tomli/_parser.py:504: in parse_array pos, val = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\ndescription = "Lovely Spam! Wonderful Spam!"\nrequires-python = ">=3....t.gui-scripts]\nspam-gui = "spam:main_gui"\n\n[project.entry-points."spam.magical"]\ntomatoes = "spam:main_tomatoes"\n' pos = 202, parse_float = , nest_lvl = 1 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ____________________ test_bad_config[missing_license_file] _____________________ config = '[project]\nname = "spam"\nversion = "2020.0.0"\nlicense = {file = "LICENSE.txt"}' expects = match = "No such file or directory: ((Windows|Posix)Path(Plus)?\\('LICENSE.txt'\\)|'LICENSE.txt')" tmp_pathplus = PosixPathPlus('/usr/src/tmp/pytest-of-builder/pytest-0/test_bad_config_missing_licens0') @pytest.mark.parametrize( "config, expects, match", [ *bad_pep621_config, *bad_buildsystem_config, pytest.param( 'banana = "fruit"\n[project]\nname = "food"', BadConfigError, "Unexpected top-level key 'banana'. Only 'build-system', 'project' and 'tool' are allowed.", id="unexpected_top_level" ), pytest.param( "[coverage]\nomit = 'demo.py'\n[flake8]\nselect = ['F401']", BadConfigError, "Unexpected top-level key 'coverage'. Only 'build-system', 'project' and 'tool' are allowed.", id="top-level", ), pytest.param( "[build_system]\nbackend = 'whey'", BadConfigError, "Unexpected top-level key 'build_system'. Did you mean 'build-system'", id="top_level_typo_underscore", ), pytest.param( "[Build-System]\nbackend = 'whey'", BadConfigError, "Unexpected top-level key 'Build-System'. Did you mean 'build-system'", id="top_level_typo_caps", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[[project.authors]]\nemail = "foo.bar"', BadConfigError, "Invalid email 'foo.bar': The email address is not valid. It must have exactly one @-sign.", id="bad_email", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\noptional-dependencies = 123', TypeError, "Invalid type for 'project.optional-dependencies': expected , got ", id="invalid_optional_dependencies_type_int", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\noptional-dependencies = "123"', TypeError, "Invalid type for 'project.optional-dependencies': expected , got ", id="invalid_optional_dependencies_type_str", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\noptional-dependencies = ["123"]', TypeError, "Invalid type for 'project.optional-dependencies': expected , got ", id="invalid_optional_dependencies_type_list", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\nfoo = 123', TypeError, "Invalid type for 'project.optional-dependencies.foo': expected , got ", id="invalid_optional_dependencies_type_dict_int", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\nfoo = [123]', TypeError, r"Invalid type for 'project.optional-dependencies.foo\[0\]': expected , got ", id="invalid_optional_dependencies_type_dict_list_int", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\nfoo = "123"', TypeError, "Invalid type for 'project.optional-dependencies.foo': expected , got ", id="invalid_optional_dependencies_type_dict_str", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.entry-points.console_scripts]', BadConfigError, "'project.entry-points' may not contain a 'console_scripts' sub-table. Use 'project.scripts' instead.", id="console_scripts_entry_point", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.entry-points.gui_scripts]', BadConfigError, "'project.entry-points' may not contain a 'gui_scripts' sub-table. Use 'project.gui-scripts' instead.", id="gui_scripts_entry_point", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.entry-points.console-scripts]', BadConfigError, "'project.entry-points' may not contain a 'console-scripts' sub-table. Use 'project.scripts' instead.", id="console_scripts_hyphen_entry_point", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.entry-points.gui-scripts]', BadConfigError, "'project.entry-points' may not contain a 'gui-scripts' sub-table. Use 'project.gui-scripts' instead.", id="gui_scripts_hyphen_entry_point", ), # pytest.param( # '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\nwith-hyphen = []', # TypeError, # "Invalid extra name 'with-hyphen'", # id="extra_invalid_a", # ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\n"quoted?" = []', TypeError, r"Invalid extra name 'quoted\?'", id="extra_invalid_b", ), pytest.param( '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\n"number#1" = []', TypeError, "Invalid extra name 'number#1'", id="extra_invalid_c", ), # For Part 2 # pytest.param( # '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\n"dev_test" = []\n"dev-test" = []', # BadConfigError, # "'project.optional-dependencies.dev-test': Multiple extras were defined with the same normalized name of 'dev-test'", # id="duplicate_extra_1", # ), # pytest.param( # '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\n"dev-test" = []\n"dev_test" = []', # BadConfigError, # "'project.optional-dependencies.dev_test': Multiple extras were defined with the same normalized name of 'dev-test'", # id="duplicate_extra_2", # ), # pytest.param( # '[project]\nname = "foo"\nversion = "1.2.3"\n[project.optional-dependencies]\n"dev.test" = []\n"dev_test" = []', # BadConfigError, # "'project.optional-dependencies.dev_test': Multiple extras were defined with the same normalized name of 'dev-test'", # id="duplicate_extra_3", # ), ] ) def test_bad_config( config: str, expects: Type[Exception], match: str, tmp_pathplus: PathPlus, ):  (tmp_pathplus / "pyproject.toml").write_clean(config)  with in_directory(tmp_pathplus), pytest.raises(expects, match=match): > PyProject.load(tmp_pathplus / "pyproject.toml").resolve_files() tests/test_pyproject_class.py:220: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ pyproject_parser/__init__.py:311: in load config = _load_toml(filename) pyproject_parser/utils.py:189: in _load_toml return dom_toml.load(filename) /usr/lib/python3/site-packages/dom_toml/__init__.py:143: in load return loads( /usr/lib/python3/site-packages/dom_toml/__init__.py:125: in loads return decoder.loads(s) /usr/lib/python3/site-packages/dom_toml/decoder.py:84: in loads return tomli.loads(s) /usr/lib/python3/site-packages/tomli/_parser.py:180: in loads pos = key_value_rule(src, pos, out, header, parse_float) /usr/lib/python3/site-packages/tomli/_parser.py:408: in key_value_rule pos, key, value = parse_key_value_pair(src, pos, parse_float, nest_lvl=0) /usr/lib/python3/site-packages/tomli/_parser.py:451: in parse_key_value_pair pos, value = parse_value(src, pos, parse_float, nest_lvl) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src = '[project]\nname = "spam"\nversion = "2020.0.0"\nlicense = {file = "LICENSE.txt"}\n' pos = 55, parse_float = , nest_lvl = 0 def parse_value( # noqa: C901 src: str, pos: Pos, parse_float: ParseFloat, nest_lvl: int ) -> tuple[Pos, Any]: if nest_lvl > MAX_INLINE_NESTING: # Pure Python should have raised RecursionError already. # This ensures mypyc binaries eventually do the same. raise RecursionError( # pragma: no cover "TOML inline arrays/tables are nested more than the allowed" f" {MAX_INLINE_NESTING} levels" )  try: char: str | None = src[pos] except IndexError: char = None  # IMPORTANT: order conditions based on speed of checking and likelihood  # Basic strings if char == '"': if src.startswith('"""', pos): return parse_multiline_str(src, pos, literal=False) return parse_one_line_basic_str(src, pos)  # Literal strings if char == "'": if src.startswith("'''", pos): return parse_multiline_str(src, pos, literal=True) return parse_literal_str(src, pos)  # Booleans if char == "t": if src.startswith("true", pos): return pos + 4, True if char == "f": if src.startswith("false", pos): return pos + 5, False  # Arrays if char == "[": return parse_array(src, pos, parse_float, nest_lvl + 1)  # Inline tables if char == "{": > return parse_inline_table(src, pos, parse_float, nest_lvl + 1) E TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positional arguments but 4 were given /usr/lib/python3/site-packages/tomli/_parser.py:716: TypeError ============================= slowest 25 durations ============================= 0.30s call tests/test_cli.py::test_check_extra_deprecation_warning[duplicate_extra_2] 0.30s call tests/test_cli.py::test_check_extra_deprecation_warning[duplicate_extra_3] 0.30s call tests/test_cli.py::test_check_extra_deprecation_warning[duplicate_extra_1] 0.15s call tests/test_dumping.py::test_dumps_readme[dict_file] 0.03s setup tests/test_cli.py::test_reformat[True-COMPLETE_B] 0.03s setup tests/test_cli.py::test_info_readme_license[False-4-0-project.license.text] 0.02s setup tests/test_cli.py::test_info_readme_license[False-0-1-project.license] 0.02s setup tests/test_cli.py::test_info_readme_license[False-2-1-project.readme.file] 0.02s setup tests/test_cli.py::test_info_readme_license[False-None-0-project.readme] 0.02s setup tests/test_cli.py::test_info[None-project.urls.Source Code] 0.02s setup tests/test_cli.py::test_info_readme_license[True-2-0-project.readme.file] 0.02s setup tests/test_cli.py::test_info_readme_license[False-None-0-project.license.file] 0.02s setup tests/test_cli.py::test_info_readme_license[True-2-1-project.readme.file] 0.02s setup tests/test_cli.py::test_info[None-build-system.requires] 0.02s setup tests/test_cli.py::test_info[None-build-system] 0.02s setup tests/test_cli.py::test_info_readme_license[True-None-0-project.license.text] 0.02s setup tests/test_cli.py::test_info[0-build-system] 0.02s setup tests/test_cli.py::test_info_readme_license[False-0-0-project.license.file] 0.02s setup tests/test_cli.py::test_info_readme_license[True-0-1-project.readme.file] 0.02s setup tests/test_cli.py::test_info[None-tool.whey.base-classifiers] 0.02s setup tests/test_cli.py::test_info[0-first_author] 0.02s setup tests/test_cli.py::test_info[4-build-system.requires] 0.02s setup tests/test_cli.py::test_info[2-all] 0.02s setup tests/test_cli.py::test_info_readme_license[False-4-1-project.readme] 0.02s setup tests/test_cli.py::test_reformat[False-COMPLETE_A_WITH_FILES] =========================== short test summary info ============================ SKIPPED [2] tests/test_config.py:363: Message differs on Windows. SKIPPED [1] tests/test_config.py:363: Error differs on 3.6 SKIPPED [1] tests/test_config.py:465: Error differs on 3.6 SKIPPED [2] tests/test_pyproject_class.py:76: Error differs on 3.6 SKIPPED [2] tests/test_pyproject_class.py:76: Message differs on Windows. FAILED tests/test_cli.py::test_info_readme_license[True-None-0-project.license.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-None-0-project.license] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-4-0-project.readme] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-None-1-project.license] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-4-1-project.readme.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-2-1-project.readme.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-0-0-project.license.file] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-0-0-project.readme] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-0-0-project.license] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-2-0-project.readme.file] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-0-1-project.readme.file] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-4-1-project.readme] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-4-0-project.license.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-None-1-project.readme.file] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-None-1-project.license.file] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-None-1-project.license.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-2-1-project.license.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-None-1-project.readme] - assert 1 == 0 FAILED tests/test_cli.py::test_check[maintainers] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-None-0-project.readme.file] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-4-0-project.readme.file] - assert 1 == 0 FAILED tests/test_cli.py::test_reformat[True-COMPLETE_PROJECT_A] - AssertionError: FILES DIFFER: FAILED tests/test_cli.py::test_reformat[False-COMPLETE_A_WITH_FILES] - AssertionError: FILES DIFFER: FAILED tests/test_cli.py::test_info_readme_license[False-2-0-project.readme.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-None-0-project.readme] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-None-0-project.license] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-2-1-project.readme] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-None-1-project.readme.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-None-0-project.license.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-None-0-project.readme.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-None-0-project.readme] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-None-1-project.readme.file] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-0-0-project.readme.file] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-4-0-project.license.file] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-0-1-project.readme] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-0-0-project.license] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-0-1-project.readme] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-4-1-project.readme.file] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-4-1-project.license.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-0-0-project.readme.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-None-1-project.license.file] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-2-1-project.license.file] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-None-1-project.readme] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-4-0-project.readme.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-0-1-project.readme.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-2-1-project.readme.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-2-1-project.readme.file] - assert 1 == 0 FAILED tests/test_cli.py::test_check[authors] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-None-0-project.license.file] - assert 1 == 0 FAILED tests/test_cli.py::test_reformat[False-COMPLETE_PROJECT_A] - AssertionError: FILES DIFFER: FAILED tests/test_cli.py::test_info_readme_license[False-0-1-project.license.file] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-4-1-project.license.file] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-2-1-project.license.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-None-1-project.readme.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-0-0-project.readme.file] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-2-1-project.license] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-None-0-project.readme.file] - assert 1 == 0 FAILED tests/test_cli.py::test_check[unicode] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-0-0-project.license.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-4-1-project.license] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-2-0-project.readme.file] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-0-1-project.readme.file] - assert 1 == 0 FAILED tests/test_cli.py::test_check[COMPLETE_PROJECT_A] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-0-0-project.readme.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-2-0-project.readme.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-4-0-project.readme.file] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-4-1-project.readme.file] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-0-0-project.license.file] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-4-1-project.license.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-0-1-project.license] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-2-1-project.readme.file] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-None-1-project.license.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-4-1-project.license] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-0-0-project.readme] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-None-0-project.readme.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-2-0-project.license.file] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-2-0-project.license] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-2-0-project.license.text] - assert 1 == 0 FAILED tests/test_cli.py::test_check_error_caught[author_comma] - AssertionError: FILES DIFFER: FAILED tests/test_cli.py::test_info_readme_license[True-4-0-project.license.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-4-0-project.license.file] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-0-1-project.license.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-0-1-project.license] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-2-0-project.license.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-4-1-project.readme] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-4-0-project.readme.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-None-0-project.license.file] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-4-0-project.license] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-2-0-project.readme] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-0-1-project.license.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-None-1-project.license] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-0-0-project.license.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-2-0-project.license] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-4-0-project.readme] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-2-1-project.readme] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-0-1-project.license.file] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-4-1-project.readme.text] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-4-1-project.license.file] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[False-2-1-project.license.file] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-4-0-project.license] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-2-0-project.readme] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-2-1-project.license] - assert 1 == 0 FAILED tests/test_cli.py::test_info_readme_license[True-0-1-project.readme.text] - assert 1 == 0 FAILED tests/test_cli.py::test_reformat[True-COMPLETE_A_WITH_FILES] - AssertionError: FILES DIFFER: FAILED tests/test_cli.py::test_info_readme_license[True-2-0-project.license.file] - assert 1 == 0 FAILED tests/test_dumping.py::test_reformat[COMPLETE_A_WITH_FILES] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_dumping.py::test_reformat[COMPLETE_PROJECT_A] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_dumping.py::test_dumps[COMPLETE_PROJECT_A] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_bad_config[maintainer_comma] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_bad_config_license[empty] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_bad_config_readme[unknown_key] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_valid_config[unicode-False] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_valid_config_license[LICENSE.md] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_subclass[authors] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_valid_config[maintainers-False] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_bad_config_readme[content_type_charset] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_valid_config[unicode-True] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_valid_config[maintainers-True] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_valid_config_readme_dict[text_content_type_md] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_valid_config_license[LICENSE.rst] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_valid_config_license[LICENSE.txt] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_valid_config_license[LICENSE] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_valid_config[authors-False] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_bad_config_readme[empty] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_subclass[unicode] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_valid_config[COMPLETE_PROJECT_A-False] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_valid_config[authors-True] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_bad_config_readme[charset_only] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_bad_config_readme[content_type_only] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_valid_config_readme_dict[text_content_type_rst] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_valid_config_readme_dict[md_file] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_valid_config_license_dict - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_bad_config[author_comma] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_bad_config_readme[file_and_readme] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_subclass[COMPLETE_PROJECT_A] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_bad_config_readme[bad_content_type] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_bad_config_readme[no_extension] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_bad_config_readme[text_only] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_subclass[maintainers] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_bad_config[missing_license_file] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_valid_config_readme_dict[txt_file] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_bad_config_license[double_license] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_valid_config[COMPLETE_PROJECT_A-True] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_valid_config_readme_dict[text_content_type_plain] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_valid_config_readme_dict[rst_file] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_config.py::test_pep621_class_bad_config_readme[bad_extension] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_pyproject_class.py::test_valid_config[COMPLETE_PROJECT_A] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_pyproject_class.py::test_bad_config[author_comma] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_pyproject_class.py::test_valid_config_resolve_files[authors] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_pyproject_class.py::test_valid_config_resolve_files[maintainers] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_pyproject_class.py::test_from_dict[unicode] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_pyproject_class.py::test_valid_config[unicode] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_pyproject_class.py::test_custom_pyproject_class[COMPLETE_PROJECT_A] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_pyproject_class.py::test_from_dict[authors] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_pyproject_class.py::test_valid_config[maintainers] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_pyproject_class.py::test_valid_config_resolve_files[COMPLETE_A_WITH_FILES] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_pyproject_class.py::test_from_dict[maintainers] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_pyproject_class.py::test_valid_config[authors] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_pyproject_class.py::test_valid_config_resolve_files[COMPLETE_PROJECT_A] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_pyproject_class.py::test_valid_config_resolve_files[unicode] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_pyproject_class.py::test_bad_config[maintainer_comma] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_pyproject_class.py::test_from_dict[COMPLETE_PROJECT_A] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... FAILED tests/test_pyproject_class.py::test_bad_config[missing_license_file] - TypeError: TomlDecoder.loads.._parse_inline_table() takes 3 positio... ================== 163 failed, 375 passed, 8 skipped in 8.85s ================== INFO : Command's result: FAILURE INFO : Command's error: Command '['python3', '-m', 'pytest', '-vra']' returned non-zero exit status 1. error: Bad exit status from /usr/src/tmp/rpm-tmp.86612 (%check) RPM build errors: File /usr/src/RPM/SOURCES/python3-module-pyproject-parser-0.11.1-alt.patch is smaller than 8 bytes Bad exit status from /usr/src/tmp/rpm-tmp.86612 (%check) Command exited with non-zero status 1 10.08user 3.50system 0:13.74elapsed 98%CPU (0avgtext+0avgdata 65880maxresident)k 0inputs+0outputs (0major+195168minor)pagefaults 0swaps hsh-rebuild: rebuild of `python3-module-pyproject-parser-0.11.1-alt1.src.rpm' failed. Command exited with non-zero status 1 5.19user 3.41system 0:30.51elapsed 28%CPU (0avgtext+0avgdata 137308maxresident)k 2736inputs+0outputs (0major+287914minor)pagefaults 0swaps