Named tuples make everything much more readable.
This commit is contained in:
parent
9fac406305
commit
1cc09df2ff
|
@ -5,12 +5,16 @@ import sys
|
|||
import imp
|
||||
import types
|
||||
import pkgutil
|
||||
from collections import namedtuple
|
||||
|
||||
|
||||
SEP = os.sep
|
||||
EXS = os.extsep
|
||||
FLS = [('%s' + SEP + '__init__' + EXS + '%s', True),
|
||||
('%s' + EXS + '%s', False)]
|
||||
|
||||
Loader = namedtuple('Loader', 'suffix compiler')
|
||||
|
||||
class PolyLoader():
|
||||
_loader_handlers = []
|
||||
_installed = False
|
||||
|
@ -29,11 +33,11 @@ class PolyLoader():
|
|||
if overlap:
|
||||
raise RuntimeError("Override of native Python extensions is not permitted.")
|
||||
overlap = suffixes.intersection(
|
||||
set([suffix for (_, suffix) in cls._loader_handlers]))
|
||||
set([loader.suffix for loader in cls._loader_handlers]))
|
||||
if overlap:
|
||||
# Fail silently
|
||||
return
|
||||
cls._loader_handlers += [(compiler, suf) for suf in suffixes]
|
||||
cls._loader_handlers += [Loader(suf, compiler) for suf in suffixes]
|
||||
|
||||
def load_module(self, fullname):
|
||||
if fullname in sys.modules:
|
||||
|
@ -42,17 +46,17 @@ class PolyLoader():
|
|||
if fullname != self.fullname:
|
||||
raise ImportError("Load confusion: %s vs %s." % (fullname, self.fullname))
|
||||
|
||||
matches = [(compiler, suffix) for (compiler, suffix) in self._loader_handlers
|
||||
if self.path.endswith(suffix)]
|
||||
matches = [loader for loader in self._loader_handlers
|
||||
if self.path.endswith(loader.suffix)]
|
||||
|
||||
if len(matches) == 0:
|
||||
raise ImportError("%s is not a recognized module?" % fullname)
|
||||
|
||||
if len(matches) > 1:
|
||||
raise ImportError("Multiple possible resolutions for %s: %s" % (
|
||||
fullname, ', '.join([suffix for (compiler, suffix) in matches])))
|
||||
fullname, ', '.join([loader.suffix for loader in matches])))
|
||||
|
||||
compiler = matches[0][0]
|
||||
compiler = matches[0].compiler
|
||||
with io.FileIO(self.path, 'r') as file:
|
||||
source_text = file.read()
|
||||
|
||||
|
@ -90,8 +94,8 @@ class PolyFinder(object):
|
|||
|
||||
path = os.path.realpath(self.path)
|
||||
for (fp, ispkg) in FLS:
|
||||
for (compiler, suffix) in PolyLoader._loader_handlers:
|
||||
composed_path = fp % (('%s' + SEP + '%s') % (path, subname), suffix)
|
||||
for loader in PolyLoader._loader_handlers:
|
||||
composed_path = fp % (('%s' + SEP + '%s') % (path, subname), loader.suffix)
|
||||
if os.path.isdir(composed_path):
|
||||
raise IOError("Invalid: Directory name ends in recognized suffix")
|
||||
if os.path.isfile(composed_path):
|
||||
|
@ -111,7 +115,7 @@ class PolyFinder(object):
|
|||
def getmodulename(path):
|
||||
filename = os.path.basename(path)
|
||||
suffixes = ([(-len(suf[0]), suf[0]) for suf in imp.get_suffixes()] +
|
||||
[(-len(suf[1]), suf[1]) for suf in PolyLoader._loader_handlers])
|
||||
[(-len(suf[0]), suf[0]) for suf in PolyLoader._loader_handlers])
|
||||
suffixes.sort()
|
||||
for neglen, suffix in suffixes:
|
||||
if filename[neglen:] == suffix:
|
||||
|
|
Loading…
Reference in New Issue