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 authored and jbkkd committed Sep 27, 2023
1 parent dce5f37 commit 27f67a5
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 27f67a5

Please sign in to comment.