mirror of
https://github.com/jazzband/django-configurations.git
synced 2026-03-16 22:20:27 +00:00
Replace imp with importlib
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 https://github.com/jazzband/django-configurations/issues/358
This commit is contained in:
parent
dce5f37a93
commit
27f67a58a4
1 changed files with 14 additions and 8 deletions
|
|
@ -1,4 +1,5 @@
|
|||
import imp
|
||||
import importlib.util
|
||||
from importlib.machinery import PathFinder
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
|
|
@ -126,25 +127,30 @@ class ConfigurationImporter:
|
|||
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:
|
||||
|
|
|
|||
Loading…
Reference in a new issue