Skip to content

Commit bbf9ce4

Browse files
Fix brain dict regression (#2204) (#2207)
Fix regression resulting in ignored pylint settings We get rid of the immutable instance attributes in AstroidManager, ensuring that these always mutate the global state instead of instance's. This fixes a regression introduced in commit bbcc58b. Fixes #2200 (cherry picked from commit b08166b) Co-authored-by: Josef Kemetmüller <josef.kemetmueller@gmail.com>
1 parent 8523ba8 commit bbf9ce4

File tree

3 files changed

+42
-5
lines changed

3 files changed

+42
-5
lines changed

ChangeLog

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ What's New in astroid 2.16.0?
77
Release date: TBA
88

99

10+
* Fix a regression in 2.12.0 where settings in AstroidManager would be ignored.
11+
Most notably this addresses pylint-dev/pylint#7433.
12+
13+
Refs #2204
14+
1015

1116
What's New in astroid 2.15.6?
1217
=============================

astroid/manager.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,27 @@ def __init__(self) -> None:
7070
self.astroid_cache = AstroidManager.brain["astroid_cache"]
7171
self._mod_file_cache = AstroidManager.brain["_mod_file_cache"]
7272
self._failed_import_hooks = AstroidManager.brain["_failed_import_hooks"]
73-
self.always_load_extensions = AstroidManager.brain["always_load_extensions"]
74-
self.optimize_ast = AstroidManager.brain["optimize_ast"]
7573
self.extension_package_whitelist = AstroidManager.brain[
7674
"extension_package_whitelist"
7775
]
7876
self._transform = AstroidManager.brain["_transform"]
7977

78+
@property
79+
def always_load_extensions(self) -> bool:
80+
return AstroidManager.brain["always_load_extensions"]
81+
82+
@always_load_extensions.setter
83+
def always_load_extensions(self, value: bool) -> None:
84+
AstroidManager.brain["always_load_extensions"] = value
85+
86+
@property
87+
def optimize_ast(self) -> bool:
88+
return AstroidManager.brain["optimize_ast"]
89+
90+
@optimize_ast.setter
91+
def optimize_ast(self, value: bool) -> None:
92+
AstroidManager.brain["optimize_ast"] = value
93+
8094
@property
8195
def register_transform(self):
8296
# This and unregister_transform below are exported for convenience

tests/test_regrtest.py

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
import pytest
1111

12-
from astroid import MANAGER, Instance, bases, nodes, parse, test_utils
12+
from astroid import MANAGER, Instance, bases, manager, nodes, parse, test_utils
1313
from astroid.builder import AstroidBuilder, _extract_single_node, extract_node
1414
from astroid.const import PY38_PLUS
1515
from astroid.context import InferenceContext
@@ -37,6 +37,24 @@ def tearDown(self) -> None:
3737
sys.path.pop(0)
3838
sys.path_importer_cache.pop(resources.find("data"), None)
3939

40+
def test_manager_instance_attributes_reference_global_MANAGER(self) -> None:
41+
for expected in (True, False):
42+
with mock.patch.dict(
43+
manager.AstroidManager.brain,
44+
values={"always_load_extensions": expected},
45+
):
46+
assert (
47+
MANAGER.always_load_extensions
48+
== manager.AstroidManager.brain["always_load_extensions"]
49+
)
50+
with mock.patch.dict(
51+
manager.AstroidManager.brain,
52+
values={"optimize_ast": expected},
53+
):
54+
assert (
55+
MANAGER.optimize_ast == manager.AstroidManager.brain["optimize_ast"]
56+
)
57+
4058
def test_module_path(self) -> None:
4159
man = test_utils.brainless_manager()
4260
mod = man.ast_from_module_name("package.import_package_subpackage_module")
@@ -50,9 +68,9 @@ def test_module_path(self) -> None:
5068
self.assertEqual(module.name, "package.subpackage.module")
5169

5270
def test_package_sidepackage(self) -> None:
53-
manager = test_utils.brainless_manager()
71+
brainless_manager = test_utils.brainless_manager()
5472
assert "package.sidepackage" not in MANAGER.astroid_cache
55-
package = manager.ast_from_module_name("absimp")
73+
package = brainless_manager.ast_from_module_name("absimp")
5674
self.assertIsInstance(package, nodes.Module)
5775
self.assertTrue(package.package)
5876
subpackage = next(package.getattr("sidepackage")[0].infer())

0 commit comments

Comments
 (0)