| Viewing file:  test_pyprojecttoml_dynamic_deps.py (3.19 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
from inspect import cleandoc
 import pytest
 from jaraco import path
 
 from setuptools.config.pyprojecttoml import apply_configuration
 from setuptools.dist import Distribution
 from setuptools.warnings import SetuptoolsWarning
 
 
 def test_dynamic_dependencies(tmp_path):
 files = {
 "requirements.txt": "six\n  # comment\n",
 "pyproject.toml": cleandoc(
 """
 [project]
 name = "myproj"
 version = "1.0"
 dynamic = ["dependencies"]
 
 [build-system]
 requires = ["setuptools", "wheel"]
 build-backend = "setuptools.build_meta"
 
 [tool.setuptools.dynamic.dependencies]
 file = ["requirements.txt"]
 """
 ),
 }
 path.build(files, prefix=tmp_path)
 dist = Distribution()
 dist = apply_configuration(dist, tmp_path / "pyproject.toml")
 assert dist.install_requires == ["six"]
 
 
 def test_dynamic_optional_dependencies(tmp_path):
 files = {
 "requirements-docs.txt": "sphinx\n  # comment\n",
 "pyproject.toml": cleandoc(
 """
 [project]
 name = "myproj"
 version = "1.0"
 dynamic = ["optional-dependencies"]
 
 [tool.setuptools.dynamic.optional-dependencies.docs]
 file = ["requirements-docs.txt"]
 
 [build-system]
 requires = ["setuptools", "wheel"]
 build-backend = "setuptools.build_meta"
 """
 ),
 }
 path.build(files, prefix=tmp_path)
 dist = Distribution()
 dist = apply_configuration(dist, tmp_path / "pyproject.toml")
 assert dist.extras_require == {"docs": ["sphinx"]}
 
 
 def test_mixed_dynamic_optional_dependencies(tmp_path):
 """
 Test that if PEP 621 was loosened to allow mixing of dynamic and static
 configurations in the case of fields containing sub-fields (groups),
 things would work out.
 """
 files = {
 "requirements-images.txt": "pillow~=42.0\n  # comment\n",
 "pyproject.toml": cleandoc(
 """
 [project]
 name = "myproj"
 version = "1.0"
 dynamic = ["optional-dependencies"]
 
 [project.optional-dependencies]
 docs = ["sphinx"]
 
 [tool.setuptools.dynamic.optional-dependencies.images]
 file = ["requirements-images.txt"]
 """
 ),
 }
 
 path.build(files, prefix=tmp_path)
 pyproject = tmp_path / "pyproject.toml"
 with pytest.raises(ValueError, match="project.optional-dependencies"):
 apply_configuration(Distribution(), pyproject)
 
 
 def test_mixed_extras_require_optional_dependencies(tmp_path):
 files = {
 "pyproject.toml": cleandoc(
 """
 [project]
 name = "myproj"
 version = "1.0"
 optional-dependencies.docs = ["sphinx"]
 """
 ),
 }
 
 path.build(files, prefix=tmp_path)
 pyproject = tmp_path / "pyproject.toml"
 
 with pytest.warns(SetuptoolsWarning, match=".extras_require. overwritten"):
 dist = Distribution({"extras_require": {"hello": ["world"]}})
 dist = apply_configuration(dist, pyproject)
 assert dist.extras_require == {"docs": ["sphinx"]}
 
 |