#!/usr/bin/env python3 from importlib.machinery import PathFinder, FileFinder, SourcelessFileLoader import sys class WolfFileLoader(SourcelessFileLoader): def __init__(self, fullname, path): print('-- Created WolfFileLoader --') print('-- fullname: ' + str(fullname) + ' --') print('-- path: ' + str(path) + ' --') super().__init__(fullname, path) def get_code(self, fullname): print('-- Getting WOLF code --') ret = super().get_code(fullname) print('-- Returning: ' + str(ret)) return ret def get_source(self, fullname): print('-- Getting WOLF source --') ret = super().get_source(fullname) print('-- Returning: ' + str(ret)) return ret class WolfFileFinder(FileFinder): def __init__(self, path, *loader_details): print('-- Created WolfFileFinder --') print('-- path: ' + str(path) + ' --') print('-- *loader_details:' + str(loader_details) + ' --') loader_details += ([WolfFileLoader, ['.wolf']],) print('-- *loader_details now: ' + str(loader_details) + ' --') super().__init__(path, *loader_details) class WolfPathFinder(PathFinder): def __init__(self): super().__init__() @classmethod def find_module(cls, fullname, path=None): print('-- WolfPathFinder find_module called! --') return super().find_module(fullname, path) @classmethod def find_spec(cls, fullname, path=None, target=None): if path is None: return print('-- WolfPathFinder.find_spec called! --') print('fullname: ' + str(fullname)) print('path: ' + str(path)) print('target: ' + str(target)) for p in path: wolfspec = WolfFileFinder(p).find_spec(fullname, target) print('-- WolfFileFinder spec is: ' + str(wolfspec) + ' --') if wolfspec is not None: return wolfspec spec = super().find_spec(fullname, path, target) print('loaded spec:' + str(spec)) return spec sys.meta_path.insert(0, WolfPathFinder) def debugger(*args, **kwargs): return __import__(*args, **kwargs) if __name__ == '__main__': print('-- Testing Load of .wolf Extension --') print('-- sys.meta_path loaders set to: ' + str(sys.meta_path) + ' --') import wolftest print('-- wolftest is: ' + str(wolftest) + ' --') from wolftest.a import a print('-- a is: ' + str(a) + ' --')