releasetools: Switch from imp to importlib.util
imp is deprecated, and has been removed in python 3.12+.
This is largely following this example:
https://docs.python.org/3/library/importlib.html#importing-a-source-file-directly
Bug: 388344853
Test: treehugger
Change-Id: I3b4f7659377951d7c1291f11a977516924b25393
diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py
index f04dfb7..e9cb5bb 100644
--- a/tools/releasetools/common.py
+++ b/tools/releasetools/common.py
@@ -23,7 +23,7 @@
import getopt
import getpass
import gzip
-import imp
+import importlib.util
import json
import logging
import logging.config
@@ -3132,16 +3132,17 @@
return
try:
if os.path.isdir(path):
- info = imp.find_module("releasetools", [path])
- else:
- d, f = os.path.split(path)
- b, x = os.path.splitext(f)
- if x == ".py":
- f = b
- info = imp.find_module(f, [d])
+ path = os.path.join(path, "releasetools")
+ if os.path.isdir(path):
+ path = os.path.join(path, "__init__.py")
+ if not os.path.exists(path) and os.path.exists(path + ".py"):
+ path = path + ".py"
+ spec = importlib.util.spec_from_file_location("device_specific", path)
logger.info("loaded device-specific extensions from %s", path)
- self.module = imp.load_module("device_specific", *info)
- except ImportError:
+ module = importlib.util.module_from_spec(spec)
+ spec.loader.exec_module(module)
+ self.module = module
+ except (ImportError, FileNotFoundError):
logger.info("unable to load device-specific module; assuming none")
def _DoCall(self, function_name, *args, **kwargs):