diff options
Diffstat (limited to 'sources/pyside6')
| -rw-r--r-- | sources/pyside6/PySide6/__init__.py.in | 17 | ||||
| -rw-r--r-- | sources/pyside6/tests/pysidetest/all_modules_load_test.py | 12 |
2 files changed, 27 insertions, 2 deletions
diff --git a/sources/pyside6/PySide6/__init__.py.in b/sources/pyside6/PySide6/__init__.py.in index 5dc80c7aa..ca3b7fc6a 100644 --- a/sources/pyside6/PySide6/__init__.py.in +++ b/sources/pyside6/PySide6/__init__.py.in @@ -1,6 +1,8 @@ import os import sys from pathlib import Path +from types import ModuleType +# mypy: disable-error-code="name-defined" # __all__ is computed below. __pre_all__ = [@init_modules@] @@ -60,6 +62,7 @@ def _setupQtDirectories(): try: # PYSIDE-1497: we use the build dir or install dir or site-packages, whatever the path # setting dictates. There is no longer a difference in path structure. + global Shiboken from shiboken6 import Shiboken except Exception: paths = ', '.join(sys.path) @@ -121,4 +124,18 @@ def __getattr__(name: str) -> list[str]: raise AttributeError(f"module '{__name__}' has no attribute '{name}' :)") +# Be prepared that people can access the module dict instead. +class ModuleDict(dict): + def __missing__(self, key): + if key == "__all__": + self[key] = __all__ if "__all__" in globals() else __getattr__("__all__") + return __all__ + raise KeyError(f"dict of module '{__name__}' has no key '{key}' :)") + + +class SubModule(ModuleType): + pass + + _setupQtDirectories() +Shiboken.replaceModuleDict(sys.modules["PySide6"], SubModule, ModuleDict(globals())) diff --git a/sources/pyside6/tests/pysidetest/all_modules_load_test.py b/sources/pyside6/tests/pysidetest/all_modules_load_test.py index 16f2369a7..6b3ebe732 100644 --- a/sources/pyside6/tests/pysidetest/all_modules_load_test.py +++ b/sources/pyside6/tests/pysidetest/all_modules_load_test.py @@ -13,18 +13,26 @@ init_test_paths(False) import PySide6 + # Note: # "from PySide6 import *" can only be used at module level. # It is also really not recommended to use. But for testing, # the "__all__" variable is a great feature! - - class AllModulesImportTest(unittest.TestCase): def testAllModulesCanImport(self): # would also work: exec("from PySide6 import *") for name in PySide6.__all__: exec(f"import PySide6.{name}") + def testAllReappearsAfterDel(self): + # This is the only incompatibility that remains: + # After __all__ is deleted, it will re-appear. + PySide6.__all__ = 42 + self.assertEqual(PySide6.__dict__["__all__"], 42) + del PySide6.__all__ + self.assertTrue(PySide6.__dict__["__all__"]) + self.assertNotEqual(PySide6.__dict__["__all__"], 42) + if __name__ == '__main__': unittest.main() |
