From 9267daefdec73cb5554b4d10f4c4c9575bd31748 Mon Sep 17 00:00:00 2001 From: Ken Odegard Date: Tue, 26 Mar 2024 15:58:29 -0500 Subject: [PATCH] Treat deprecation warnings as errors (#5244) * Treat deprecation warnings as errors * Fix package_cache import * Use root_prefix instead of root_dir * Ignore numpy.distutils warning --- conda_build/build.py | 2 +- conda_build/conda_interface.py | 6 +++--- conda_build/config.py | 2 +- conda_build/environ.py | 2 +- conda_build/os_utils/external.py | 10 +++++----- conda_build/utils.py | 6 +++--- news/5222-deprecating-conda_interface | 2 +- pyproject.toml | 10 ++++++++++ tests/test_environ.py | 14 +++++++++++--- 9 files changed, 36 insertions(+), 18 deletions(-) diff --git a/conda_build/build.py b/conda_build/build.py index 09643c8f18..1abf843cd9 100644 --- a/conda_build/build.py +++ b/conda_build/build.py @@ -1421,7 +1421,7 @@ def write_about_json(m): extra.update(m.config.extra_meta) d["root_pkgs"] = [ f"{prec.name} {prec.version} {prec.build}" - for prec in PrefixData(context.root_dir).iter_records() + for prec in PrefixData(context.root_prefix).iter_records() ] # Include the extra section of the metadata in the about.json d["extra"] = extra diff --git a/conda_build/conda_interface.py b/conda_build/conda_interface.py index bb92f6b8b3..5e56bdbb89 100644 --- a/conda_build/conda_interface.py +++ b/conda_build/conda_interface.py @@ -11,7 +11,7 @@ from conda.base.context import context, determine_target_prefix from conda.base.context import non_x86_machines as non_x86_linux_machines # noqa: F401 from conda.base.context import reset_context as _reset_context -from conda.core.package_cache import ProgressiveFetchExtract # noqa: F401 +from conda.core.package_cache_data import ProgressiveFetchExtract # noqa: F401 from conda.exceptions import ( # noqa: F401 CondaError, CondaHTTPError, @@ -112,8 +112,8 @@ "24.5", "24.7", "root_dir", - context.root_dir, - addendum="Use `conda.base.context.context.root_dir` instead.", + context.root_prefix, + addendum="Use `conda.base.context.context.root_prefix` instead.", ) deprecated.constant( "24.5", diff --git a/conda_build/config.py b/conda_build/config.py index 6e6cc8e28c..fd599506bc 100644 --- a/conda_build/config.py +++ b/conda_build/config.py @@ -455,7 +455,7 @@ def croot(self) -> str: elif _bld_root_rc: self._croot = abspath(expanduser(expandvars(_bld_root_rc))) elif context.root_writable: - self._croot = join(context.root_dir, "conda-bld") + self._croot = join(context.root_prefix, "conda-bld") else: self._croot = abspath(expanduser("~/conda-bld")) return self._croot diff --git a/conda_build/environ.py b/conda_build/environ.py index a6fca61837..b3b02ce70b 100644 --- a/conda_build/environ.py +++ b/conda_build/environ.py @@ -421,7 +421,7 @@ def conda_build_vars(prefix, config): "HTTP_PROXY": os.getenv("HTTP_PROXY", ""), "REQUESTS_CA_BUNDLE": os.getenv("REQUESTS_CA_BUNDLE", ""), "DIRTY": "1" if config.dirty else "", - "ROOT": context.root_dir, + "ROOT": context.root_prefix, } diff --git a/conda_build/os_utils/external.py b/conda_build/os_utils/external.py index f1d91d098b..3ea8216a53 100644 --- a/conda_build/os_utils/external.py +++ b/conda_build/os_utils/external.py @@ -17,10 +17,10 @@ def find_executable(executable, prefix=None, all_matches=False): result = None if on_win: dir_paths = [ - join(context.root_dir, "Scripts"), - join(context.root_dir, "Library\\mingw-w64\\bin"), - join(context.root_dir, "Library\\usr\\bin"), - join(context.root_dir, "Library\\bin"), + join(context.root_prefix, "Scripts"), + join(context.root_prefix, "Library\\mingw-w64\\bin"), + join(context.root_prefix, "Library\\usr\\bin"), + join(context.root_prefix, "Library\\bin"), ] if prefix: dir_paths[0:0] = [ @@ -31,7 +31,7 @@ def find_executable(executable, prefix=None, all_matches=False): ] else: dir_paths = [ - join(context.root_dir, "bin"), + join(context.root_prefix, "bin"), ] if prefix: dir_paths.insert(0, join(prefix, "bin")) diff --git a/conda_build/utils.py b/conda_build/utils.py index 24303d9ba5..d6498da043 100644 --- a/conda_build/utils.py +++ b/conda_build/utils.py @@ -84,7 +84,7 @@ on_linux = sys.platform == "linux" codec = getpreferredencoding() or "utf-8" -root_script_dir = os.path.join(context.root_dir, "Scripts" if on_win else "bin") +root_script_dir = os.path.join(context.root_prefix, "Scripts" if on_win else "bin") mmap_MAP_PRIVATE = 0 if on_win else mmap.MAP_PRIVATE mmap_PROT_READ = 0 if on_win else mmap.PROT_READ mmap_PROT_WRITE = 0 if on_win else mmap.PROT_WRITE @@ -708,7 +708,7 @@ def merge_tree( # at any time, but the lock within this process should all be tied to the same tracking # mechanism. _lock_folders = ( - os.path.join(context.root_dir, "locks"), + os.path.join(context.root_prefix, "locks"), os.path.expanduser(os.path.join("~", ".conda_build_locks")), ) @@ -1343,7 +1343,7 @@ class LoggingContext: "dotupdate", "stdoutlog", "requests", - "conda.core.package_cache", + "conda.core.package_cache_data", "conda.plan", "conda.gateways.disk.delete", "conda_build", diff --git a/news/5222-deprecating-conda_interface b/news/5222-deprecating-conda_interface index 288f24474b..d7737f9368 100644 --- a/news/5222-deprecating-conda_interface +++ b/news/5222-deprecating-conda_interface @@ -14,7 +14,7 @@ * Deprecate `conda_build.conda_interface.envs_dirs` constant. Use `conda.base.context.context.envs_dirs` instead. (#5222) * Deprecate `conda_build.conda_interface.pkgs_dirs` constant. Use `conda.base.context.context.pkgs_dirs` instead. (#5222) * Deprecate `conda_build.conda_interface.cc_platform` constant. Use `conda.base.context.context.platform` instead. (#5222) -* Deprecate `conda_build.conda_interface.root_dir` constant. Use `conda.base.context.context.root_dir` instead. (#5222) +* Deprecate `conda_build.conda_interface.root_dir` constant. Use `conda.base.context.context.root_prefix` instead. (#5222) * Deprecate `conda_build.conda_interface.root_writable` constant. Use `conda.base.context.context.root_writable` instead. (#5222) * Deprecate `conda_build.conda_interface.subdir` constant. Use `conda.base.context.context.subdir` instead. (#5222) * Deprecate `conda_build.conda_interface.create_default_packages` constant. Use `conda.base.context.context.create_default_packages` instead. (#5222) diff --git a/pyproject.toml b/pyproject.toml index dd3e95dd56..71210db6f1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -150,3 +150,13 @@ markers = [ "no_default_testing_config: used internally to disable monkeypatching for testing_config", "benchmark: execute the benchmark tests", ] +filterwarnings = [ + # elevate conda's deprecated warning to an error + "error::PendingDeprecationWarning:conda", + "error::DeprecationWarning:conda", + # elevate conda-build's deprecated warning to an error + "error::PendingDeprecationWarning:conda_build", + "error::DeprecationWarning:conda_build", + # ignore numpy.distutils error + 'ignore:\s+`numpy.distutils` is deprecated:DeprecationWarning:conda_build._load_setup_py_data', +] diff --git a/tests/test_environ.py b/tests/test_environ.py index d45fc8ed7f..327accaeea 100644 --- a/tests/test_environ.py +++ b/tests/test_environ.py @@ -3,14 +3,17 @@ import os import sys +import pytest from conda.core.prefix_data import PrefixData +from packaging.version import parse -from conda_build import environ +import conda_build +from conda_build.environ import Environment, create_env def test_environment_creation_preserves_PATH(testing_workdir, testing_config): ref_path = os.environ["PATH"] - environ.create_env( + create_env( testing_workdir, ["python"], env="host", @@ -22,7 +25,12 @@ def test_environment_creation_preserves_PATH(testing_workdir, testing_config): def test_environment(): """Asserting PrefixData can accomplish the same thing as Environment.""" - assert (specs := environ.Environment(sys.prefix).package_specs()) + with pytest.warns( + PendingDeprecationWarning + if parse(conda_build.__version__) < parse("24.3") + else DeprecationWarning, + ): + assert (specs := Environment(sys.prefix).package_specs()) assert specs == [ f"{prec.name} {prec.version} {prec.build}" for prec in PrefixData(sys.prefix).iter_records()