Skip to content

Commit

Permalink
Replace imp with importlib
Browse files Browse the repository at this point in the history
This project uses the imp module which has been deprecated since Python 3.4 and set for removal in 3.12:
• Raised PendingDeprecationWarning since 3.4 (2014)
• Raised DeprecationWarning since 3.5 (2015)
• Updated DeprecationWarning to say removal in 3.12 since 3.10 (2021)
• Removal planned for 3.12 (2023)

This change removes the dependency on imp in favour of importlib.

Co-authored-by: @jbkkd
Inspired by: @mgorny

jazzband#358
  • Loading branch information
gump committed Sep 8, 2023
1 parent cad6dcb commit 7b85d93
Showing 1 changed file with 14 additions and 8 deletions.
22 changes: 14 additions & 8 deletions configurations/importer.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import imp
import importlib.util
from importlib.machinery import PathFinder
import logging
import os
import sys
Expand Down Expand Up @@ -126,25 +127,30 @@ def stylize(text):
self.name))
self.logger.debug(stylize(message))

def find_module(self, fullname, path=None):
def find_spec(self, fullname, path=None, target=None):
if fullname is not None and fullname == self.module:
module = fullname.rsplit('.', 1)[-1]
return ConfigurationLoader(self.name,
imp.find_module(module, path))
spec = PathFinder.find_spec(fullname, path)
if spec is not None:
return importlib.machinery.ModuleSpec(spec.name,
ConfigurationLoader(self.name, spec),
origin=spec.origin)
return None


class ConfigurationLoader:

def __init__(self, name, location):
def __init__(self, name, spec):
self.name = name
self.location = location
self.spec = spec

def load_module(self, fullname):
if fullname in sys.modules:
mod = sys.modules[fullname] # pragma: no cover
else:
mod = imp.load_module(fullname, *self.location)
mod = importlib.util.module_from_spec(self.spec)
sys.modules[fullname] = mod
self.spec.loader.exec_module(mod)

cls_path = '{0}.{1}'.format(mod.__name__, self.name)

try:
Expand Down

0 comments on commit 7b85d93

Please sign in to comment.