From 2a5006c6374df691021dd9b37194390e98d2b45f Mon Sep 17 00:00:00 2001 From: Federico Stagni Date: Thu, 18 Apr 2024 13:03:16 +0200 Subject: [PATCH] fix: Drop imp to support Python 3.12 --- Pilot/pilotTools.py | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/Pilot/pilotTools.py b/Pilot/pilotTools.py index 76e886cf..a12cef61 100644 --- a/Pilot/pilotTools.py +++ b/Pilot/pilotTools.py @@ -5,7 +5,6 @@ import fcntl import getopt -import imp import json import os import re @@ -15,10 +14,10 @@ import subprocess import sys import threading +import warnings from datetime import datetime from functools import partial, wraps from threading import RLock -import warnings ############################ # python 2 -> 3 "hacks" @@ -31,6 +30,33 @@ from urllib2 import HTTPError, URLError, urlopen +try: + import importlib.util + from importlib import import_module + + def load_module_from_path(module_name, path_to_module): + spec = importlib.util.spec_from_file_location(module_name, path_to_module) # pylint: disable=no-member + module = importlib.util.module_from_spec(spec) # pylint: disable=no-member + spec.loader.exec_module(module) + return module + +except ImportError: + def import_module(module): + import imp + + impData = imp.find_module(module) + return imp.load_module(module, *impData) + + + def load_module_from_path(module_name, path_to_module): + import imp + fp, pathname, description = imp.find_module(module_name, [path_to_module]) + try: + return imp.load_module(module_name, fp, pathname, description) + finally: + if fp: + fp.close() + try: from cStringIO import StringIO except ImportError: @@ -365,12 +391,9 @@ def __recurseImport(self, modName, parentModule=None, hideExceptions=False): modName = modName.split(".") try: if parentModule: - impData = imp.find_module(modName[0], parentModule.__path__) + impModule = load_module_from_path(modName[0], parentModule.__path__) else: - impData = imp.find_module(modName[0]) - impModule = imp.load_module(modName[0], *impData) - if impData[0]: - impData[0].close() + impModule = import_module(modName[0]) except ImportError as excp: if str(excp).find("No module named %s" % modName[0]) == 0: return None, None @@ -410,8 +433,7 @@ def getCommand(params, commandName): # Look for commands in the modules in the current directory first for module in modules: try: - impData = imp.find_module(module) - commandModule = imp.load_module(module, *impData) + commandModule = import_module(module) commandObject = getattr(commandModule, commandName) except Exception: pass