From 34ff065b8bbf007895b30381eb528f86d44847ca Mon Sep 17 00:00:00 2001 From: Manuel Kaufmann Date: Wed, 22 Dec 2021 10:14:07 +0100 Subject: [PATCH 1/3] Config file: system_site_packages overwritten from project's setting I created a test case to demostrate what was reported in the issue. Summarizing, if the project uses a config file and does not define `python.system_packages` but has `Project.use_system_packages=True` the config option is `True` which is wrong. When a config file is used, settings at Project level should be ignored as this messages from "Advanced settings" states: > These settings can be configured using a configuration file. That's the recommended way to set up your project. Settings listed here are ignored when using a configuration file. Reference #8782 --- .../tests/test_config_integration.py | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/readthedocs/rtd_tests/tests/test_config_integration.py b/readthedocs/rtd_tests/tests/test_config_integration.py index f8928be5526..c927aa6692b 100644 --- a/readthedocs/rtd_tests/tests/test_config_integration.py +++ b/readthedocs/rtd_tests/tests/test_config_integration.py @@ -767,6 +767,38 @@ def test_system_packages(self, run, checkout_path, tmpdir): assert '--system-site-packages' in args assert config.python.use_system_site_packages + @patch('readthedocs.doc_builder.environments.BuildEnvironment.run') + def test_system_packages_project_overrides(self, run, checkout_path, tmpdir): + + # Define `project.use_system_packages` as if it was marked in the Advanced settings. + self.version.project.use_system_packages = True + self.version.project.save() + + checkout_path.return_value = str(tmpdir) + self.create_config_file( + tmpdir, + { + # Do not define `system_packages: True` in the config file. + 'python': {}, + }, + ) + + update_docs = self.get_update_docs_task() + config = update_docs.config + + python_env = Virtualenv( + version=self.version, + build_env=update_docs.build_env, + config=config, + ) + update_docs.python_env = python_env + update_docs.python_env.setup_base() + + args, kwargs = run.call_args + + assert '--system-site-packages' not in args + assert not config.python.use_system_site_packages + @pytest.mark.parametrize( 'value,result', [ From 190adca61f29934d554516e653b2c1818485c53d Mon Sep 17 00:00:00 2001 From: Manuel Kaufmann Date: Tue, 4 Jan 2022 17:10:35 +0100 Subject: [PATCH 2/3] Config: `use_system_packages` defaults to `False` in Config v2 --- readthedocs/config/config.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/readthedocs/config/config.py b/readthedocs/config/config.py index 68b4d0f62ca..a51ed0d2679 100644 --- a/readthedocs/config/config.py +++ b/readthedocs/config/config.py @@ -938,13 +938,9 @@ def validate_python(self): ] with self.catch_validation_error('python.system_packages'): - system_packages = self.defaults.get( - 'use_system_packages', - False, - ) system_packages = self.pop_config( 'python.system_packages', - system_packages, + False, ) python['use_system_site_packages'] = validate_bool(system_packages) From 9377c74dfd9aff6dfc4b80635374c0d231df96df Mon Sep 17 00:00:00 2001 From: Manuel Kaufmann Date: Wed, 5 Jan 2022 16:46:33 +0100 Subject: [PATCH 3/3] Config: update tests --- readthedocs/config/tests/test_config.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/readthedocs/config/tests/test_config.py b/readthedocs/config/tests/test_config.py index 4068c3c9ced..9850b9c79f2 100644 --- a/readthedocs/config/tests/test_config.py +++ b/readthedocs/config/tests/test_config.py @@ -1604,25 +1604,23 @@ def test_python_system_packages_check_default(self): build.validate() assert build.python.use_system_site_packages is False - def test_python_system_packages_respects_default(self): + def test_python_system_packages_dont_respects_default(self): build = self.get_build_config( {}, {'defaults': {'use_system_packages': True}}, ) build.validate() - assert build.python.use_system_site_packages is True + assert build.python.use_system_site_packages is False def test_python_system_packages_priority_over_default(self): build = self.get_build_config( {'python': {'system_packages': False}}, - {'defaults': {'use_system_packages': True}}, ) build.validate() assert build.python.use_system_site_packages is False build = self.get_build_config( {'python': {'system_packages': True}}, - {'defaults': {'use_system_packages': False}}, ) build.validate() assert build.python.use_system_site_packages is True