From ab0c177c799378aa0a8c24490e39d4adf6db3e65 Mon Sep 17 00:00:00 2001 From: rdb Date: Sun, 15 Oct 2023 14:26:56 +0200 Subject: [PATCH 1/7] showbase: Fix redundant call to `entry_points()` in Loader --- direct/src/showbase/Loader.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/direct/src/showbase/Loader.py b/direct/src/showbase/Loader.py index 0237fbe9b2..6299098df5 100644 --- a/direct/src/showbase/Loader.py +++ b/direct/src/showbase/Loader.py @@ -174,7 +174,7 @@ class Loader(DirectObject): if isinstance(eps, dict): # Python 3.8 and 3.9 loaders = eps.get('panda3d.loaders', ()) else: - loaders = entry_points().select(group='panda3d.loaders') + loaders = eps.select(group='panda3d.loaders') else: import importlib try: From 00c6bee3f675e73e2d4279150e89a37c17d19470 Mon Sep 17 00:00:00 2001 From: rdb Date: Sun, 15 Oct 2023 14:27:27 +0200 Subject: [PATCH 2/7] Add Python 3.12 to setup.cfg --- setup.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.cfg b/setup.cfg index 76a9a6ef21..6d0eb80e5a 100644 --- a/setup.cfg +++ b/setup.cfg @@ -24,6 +24,7 @@ classifiers = Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 + Programming Language :: Python :: 3.12 Programming Language :: Python :: Implementation :: CPython Topic :: Games/Entertainment Topic :: Multimedia From a0ea85d39eee265239f3b3f3f8a60d852927d59d Mon Sep 17 00:00:00 2001 From: rdb Date: Sun, 15 Oct 2023 14:27:46 +0200 Subject: [PATCH 3/7] test_wheel: Put python DLL on system PATH for FreezeTool unit test --- makepanda/test_wheel.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/makepanda/test_wheel.py b/makepanda/test_wheel.py index feda269b7e..d181c403f2 100755 --- a/makepanda/test_wheel.py +++ b/makepanda/test_wheel.py @@ -71,7 +71,22 @@ def test_wheel(wheel, verbose=False): if verbose: test_cmd.append("--verbose") - exit_code = subprocess.call(test_cmd) + # Put the location of the python DLL on the path, for deploy-stub test + # This is needed because venv does not install a copy of the python DLL + env = None + if sys.platform == "win32": + deploy_libs = os.path.join(envdir, "Lib", "site-packages", "deploy_libs") + if os.path.isdir(deploy_libs): + # We have to do this dance because os.environ is case insensitive + env = dict(os.environ) + for key, value in env.items(): + if key.upper() == "PATH": + env[key] = deploy_libs + ";" + value + break + else: + env["PATH"] = deploy_libs + + exit_code = subprocess.call(test_cmd, env=env) shutil.rmtree(envdir) if exit_code != 0: From 479774477b2027bf7ac3f792fcebe0deb9135646 Mon Sep 17 00:00:00 2001 From: rdb Date: Sun, 15 Oct 2023 14:48:01 +0200 Subject: [PATCH 4/7] tests: Compat w/ older pytest by using tmpdir instead of tmp_path --- tests/dist/test_FreezeTool.py | 26 +++++++++++++------------- tests/showbase/test_Loader.py | 18 +++++++++--------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/tests/dist/test_FreezeTool.py b/tests/dist/test_FreezeTool.py index 17a23dc3ea..d93db836ef 100644 --- a/tests/dist/test_FreezeTool.py +++ b/tests/dist/test_FreezeTool.py @@ -14,32 +14,32 @@ def test_Freezer_moduleSuffixes(): assert mode == 'rb' -def test_Freezer_getModulePath_getModuleStar(tmp_path): +def test_Freezer_getModulePath_getModuleStar(tmpdir): # Package 1 can be imported - package1 = tmp_path / "package1" + package1 = tmpdir.join("package1") package1.mkdir() - (package1 / "submodule1.py").write_text(u"") - (package1 / "__init__.py").write_text(u"") + package1.join("submodule1.py").write("") + package1.join("__init__.py").write("") # Package 2 can not be imported - package2 = tmp_path / "package2" + package2 = tmpdir.join("package2") package2.mkdir() - (package2 / "submodule2.py").write_text(u"") - (package2 / "__init__.py").write_text(u"raise ImportError\n") + package2.join("submodule2.py").write("") + package2.join("__init__.py").write("raise ImportError\n") # Module 1 can be imported - (tmp_path / "module1.py").write_text(u"") + tmpdir.join("module1.py").write("") # Module 2 can not be imported - (tmp_path / "module2.py").write_text(u"raise ImportError\n") + tmpdir.join("module2.py").write("raise ImportError\n") # Module 3 has a custom __path__ and __all__ - (tmp_path / "module3.py").write_text(u"__path__ = ['foobar']\n__all__ = ['test']\n") + tmpdir.join("module3.py").write("__path__ = ['foobar']\n__all__ = ['test']\n") backup = sys.path try: # Don't fail if first item on path does not exist - sys.path = [str(tmp_path / "nonexistent"), str(tmp_path)] + sys.path = [str(tmpdir.join("nonexistent")), str(tmpdir)] freezer = Freezer() assert freezer.getModulePath("nonexist") == None @@ -68,7 +68,7 @@ def test_Freezer_getModulePath_getModuleStar(tmp_path): @pytest.mark.parametrize("use_console", (False, True)) -def test_Freezer_generateRuntimeFromStub(tmp_path, use_console): +def test_Freezer_generateRuntimeFromStub(tmpdir, use_console): try: # If installed as a wheel import panda3d_tools @@ -91,7 +91,7 @@ def test_Freezer_generateRuntimeFromStub(tmp_path, use_console): if not os.path.isfile(stub_file): pytest.skip("Unable to find deploy-stub executable") - target = str(tmp_path / ('stubtest' + suffix)) + target = str(tmpdir.join('stubtest' + suffix)) freezer = Freezer() freezer.addModule('module2', filename='module2.py', text='print("Module imported")') diff --git a/tests/showbase/test_Loader.py b/tests/showbase/test_Loader.py index bce23d61f2..03e408697b 100644 --- a/tests/showbase/test_Loader.py +++ b/tests/showbase/test_Loader.py @@ -71,9 +71,9 @@ def test_load_model_okmissing(loader): assert model is None -def test_loader_entry_points(tmp_path): +def test_loader_entry_points(tmpdir): # A dummy loader for .fnrgl files. - (tmp_path / "fnargle.py").write_text(u""" + tmpdir.join("fnargle.py").write(""" from panda3d.core import ModelRoot import sys @@ -88,19 +88,19 @@ class FnargleLoader: def load_file(path, options, record=None): return ModelRoot("fnargle") """) - (tmp_path / "fnargle.dist-info").mkdir() - (tmp_path / "fnargle.dist-info" / "METADATA").write_text(u""" + tmpdir.join("fnargle.dist-info").mkdir() + tmpdir.join("fnargle.dist-info", "METADATA").write(""" Metadata-Version: 2.0 Name: fnargle Version: 1.0.0 """) - (tmp_path / "fnargle.dist-info" / "entry_points.txt").write_text(u""" + tmpdir.join("fnargle.dist-info", "entry_points.txt").write(""" [panda3d.loaders] fnrgl = fnargle:FnargleLoader """) - model_path = tmp_path / "test.fnrgl" - model_path.write_text(u"") + model_path = tmpdir.join("test.fnrgl") + model_path.write("") if sys.version_info >= (3, 11): import sysconfig @@ -126,7 +126,7 @@ fnrgl = fnargle:FnargleLoader file_type = None try: # We do this so we don't re-register thirdparty loaders - sys.path = [str(tmp_path), platstdlib, stdlib] + sys.path = [str(tmpdir), platstdlib, stdlib] if sys.version_info < (3, 8): pkg_resources._initialize_master_working_set() @@ -151,7 +151,7 @@ fnrgl = fnargle:FnargleLoader assert 'fnargle' in sys.modules # Now try loading a fnargle file - model_fn = Filename(model_path) + model_fn = Filename.from_os_specific(str(model_path)) model_fn.make_true_case() model = loader.load_model(model_fn, noCache=True) assert model is not None From cb7f25f59cea6aa92dcbb7f8e096cb1ac1168971 Mon Sep 17 00:00:00 2001 From: rdb Date: Sun, 15 Oct 2023 16:19:04 +0200 Subject: [PATCH 5/7] tests: Fix an issue running tests with some Python 3.4 setups --- tests/showbase/test_Loader.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/showbase/test_Loader.py b/tests/showbase/test_Loader.py index 03e408697b..cac29dd34c 100644 --- a/tests/showbase/test_Loader.py +++ b/tests/showbase/test_Loader.py @@ -136,6 +136,10 @@ fnrgl = fnargle:FnargleLoader loader = Loader(None) assert Loader._loadedPythonFileTypes + if sys.version_info < (3, 8): + # pkg_resources relies on things in site-packages (_markerlib) + sys.path += [sysconfig.get_python_lib(True, False), sysconfig.get_python_lib(False, False)] + # Should be registered, not yet loaded file_type = registry.get_type_from_extension('fnrgl') assert file_type is not None From 3059f8f76b67325d3d70d49ca6d86c23af912c72 Mon Sep 17 00:00:00 2001 From: rdb Date: Sun, 15 Oct 2023 16:23:02 +0200 Subject: [PATCH 6/7] tests: Add site.py file for deploy-stub test --- tests/dist/test_FreezeTool.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/dist/test_FreezeTool.py b/tests/dist/test_FreezeTool.py index d93db836ef..fee7c0a09c 100644 --- a/tests/dist/test_FreezeTool.py +++ b/tests/dist/test_FreezeTool.py @@ -94,6 +94,7 @@ def test_Freezer_generateRuntimeFromStub(tmpdir, use_console): target = str(tmpdir.join('stubtest' + suffix)) freezer = Freezer() + freezer.addModule('site', filename='site.py', text='import sys\nsys.frozen=True') freezer.addModule('module2', filename='module2.py', text='print("Module imported")') freezer.addModule('__main__', filename='main.py', text='import module2\nprint("Hello world")') assert '__main__' in freezer.modules From 26fae21cb9ffed023a3dda385b88ebe213c5c200 Mon Sep 17 00:00:00 2001 From: rdb Date: Sun, 15 Oct 2023 16:29:11 +0200 Subject: [PATCH 7/7] showbase: Suppress deprecation warning --- direct/src/showbase/Loader.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/direct/src/showbase/Loader.py b/direct/src/showbase/Loader.py index 6299098df5..a0c37fac9c 100644 --- a/direct/src/showbase/Loader.py +++ b/direct/src/showbase/Loader.py @@ -171,7 +171,7 @@ class Loader(DirectObject): if sys.version_info >= (3, 8): from importlib.metadata import entry_points eps = entry_points() - if isinstance(eps, dict): # Python 3.8 and 3.9 + if sys.version_info < (3, 10): loaders = eps.get('panda3d.loaders', ()) else: loaders = eps.select(group='panda3d.loaders')