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

#358
  • Loading branch information
gump committed Sep 8, 2023
1 parent cad6dcb commit 868405d
Showing 1 changed file with 15 additions and 8 deletions.
23 changes: 15 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,31 @@ 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)
self.spec.loader.exec_module(mod)
sys.modules[fullname] = mod

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

try:
Expand Down

0 comments on commit 868405d

Please sign in to comment.