summaryrefslogtreecommitdiff
path: root/setuptools
diff options
context:
space:
mode:
authorAnderson Bravalheri <andersonbravalheri@gmail.com>2022-03-27 16:57:26 +0100
committerAnderson Bravalheri <andersonbravalheri@gmail.com>2022-03-27 17:07:48 +0100
commit603bb9852f3a6a53c97beaccc9f58dc47771a486 (patch)
treecd341f56a70f4551d583ece22d70e087630f3ac7 /setuptools
parent2304d9992b74c3080955563cac24af0670db652b (diff)
downloadpython-setuptools-git-603bb9852f3a6a53c97beaccc9f58dc47771a486.tar.gz
Fix previous detection of empty arrays
Diffstat (limited to 'setuptools')
-rw-r--r--setuptools/config/_apply_pyprojecttoml.py2
-rw-r--r--setuptools/config/pyprojecttoml.py5
-rw-r--r--setuptools/tests/config/test_apply_pyprojecttoml.py8
3 files changed, 9 insertions, 6 deletions
diff --git a/setuptools/config/_apply_pyprojecttoml.py b/setuptools/config/_apply_pyprojecttoml.py
index 5d34cdb7..fce5c40e 100644
--- a/setuptools/config/_apply_pyprojecttoml.py
+++ b/setuptools/config/_apply_pyprojecttoml.py
@@ -303,7 +303,7 @@ def _some_attrgetter(*items):
"""
def _acessor(obj):
values = (_attrgetter(i)(obj) for i in items)
- return next((i for i in values if i), None)
+ return next((i for i in values if i is not None), None)
return _acessor
diff --git a/setuptools/config/pyprojecttoml.py b/setuptools/config/pyprojecttoml.py
index 0ee1b8f9..e20d71d2 100644
--- a/setuptools/config/pyprojecttoml.py
+++ b/setuptools/config/pyprojecttoml.py
@@ -282,11 +282,12 @@ class _ConfigExpander:
)
# `None` indicates there is nothing in `tool.setuptools.dynamic` but the value
# might have already been set by setup.py/extensions, so avoid overwriting.
- self.project_cfg.update({k: v for k, v in obtained_dynamic.items() if v})
+ updates = {k: v for k, v in obtained_dynamic.items() if v is not None}
+ self.project_cfg.update(updates)
def _ensure_previously_set(self, dist: "Distribution", field: str):
previous = _PREVIOUSLY_DEFINED[field](dist)
- if not previous and not self.ignore_option_errors:
+ if previous is None and not self.ignore_option_errors:
msg = (
f"No configuration found for dynamic {field!r}.\n"
"Some dynamic fields need to be specified via `tool.setuptools.dynamic`"
diff --git a/setuptools/tests/config/test_apply_pyprojecttoml.py b/setuptools/tests/config/test_apply_pyprojecttoml.py
index a88bc1ec..b8220963 100644
--- a/setuptools/tests/config/test_apply_pyprojecttoml.py
+++ b/setuptools/tests/config/test_apply_pyprojecttoml.py
@@ -14,7 +14,7 @@ import setuptools # noqa ensure monkey patch to metadata
from setuptools.dist import Distribution
from setuptools.config import setupcfg, pyprojecttoml
from setuptools.config import expand
-from setuptools.config._apply_pyprojecttoml import _WouldIgnoreField
+from setuptools.config._apply_pyprojecttoml import _WouldIgnoreField, _some_attrgetter
from setuptools.command.egg_info import write_requirements
@@ -234,12 +234,14 @@ class TestPresetField:
dist = pyprojecttoml.apply_configuration(dist, pyproject)
# TODO: Once support for pyproject.toml config stabilizes attr should be None
- dist_value = getattr(dist, attr, None) or getattr(dist.metadata, attr, object())
+ dist_value = _some_attrgetter(f"metadata.{attr}", attr)(dist)
assert dist_value == value
@pytest.mark.parametrize(
"attr, field, value",
[
+ ("install_requires", "dependencies", []),
+ ("extras_require", "optional-dependencies", {}),
("install_requires", "dependencies", ["six"]),
("classifiers", "classifiers", ["Private :: Classifier"]),
]
@@ -248,7 +250,7 @@ class TestPresetField:
pyproject = self.pyproject(tmp_path, [field])
dist = makedist(tmp_path, **{attr: value})
dist = pyprojecttoml.apply_configuration(dist, pyproject)
- dist_value = getattr(dist, attr, None) or getattr(dist.metadata, attr, object())
+ dist_value = _some_attrgetter(f"metadata.{attr}", attr)(dist)
assert dist_value == value
def test_optional_dependencies_dont_remove_env_markers(self, tmp_path):