diff options
Diffstat (limited to 'gi/importer.py')
-rw-r--r-- | gi/importer.py | 40 |
1 files changed, 14 insertions, 26 deletions
diff --git a/gi/importer.py b/gi/importer.py index f283a41..ad9ede2 100644 --- a/gi/importer.py +++ b/gi/importer.py @@ -26,10 +26,11 @@ import sys import gobject from ._gi import Repository, RepositoryError -from .module import DynamicModule +from .module import DynamicModule, ModuleProxy repository = Repository.get_default() +modules = {} class DynamicImporter(object): @@ -39,17 +40,6 @@ class DynamicImporter(object): def __init__(self, path): self.path = path - def _create_module(self, module_type, name, namespace): - module = module_type.__new__(module_type) - module.__dict__ = { - '__file__': '<%s>' % name, - '__name__': name, - '__namespace__': namespace, - '__loader__': self - } - module.__init__() - return module - def find_module(self, fullname, path=None): if not fullname.startswith(self.path): return @@ -75,23 +65,21 @@ class DynamicImporter(object): sys.modules[fullname] = gobject return gobject - module_type = DynamicModule - module = self._create_module(module_type, fullname, namespace) - sys.modules[fullname] = module + dynamic_module = DynamicModule(namespace) + modules[namespace] = dynamic_module - # Look for an overrides module - overrides_name = 'gi.overrides.%s' % namespace - overrides_type_name = '%sModule' % namespace - try: + overrides_modules = __import__('gi.overrides', fromlist=[namespace]) + overrides_module = getattr(overrides_modules, namespace, None) - overrides_module = __import__(overrides_name, fromlist=[overrides_type_name]) - module_type = getattr(overrides_module, overrides_type_name) - except ImportError, e: - pass + if overrides_module is not None: + module = ModuleProxy(fullname, namespace, dynamic_module, overrides_module) + else: + module = dynamic_module - if module_type is not DynamicModule: - module = self._create_module(module_type, fullname, namespace) - sys.modules[fullname] = module + module.__file__ = '<%s>' % fullname + module.__loader__ = self + + sys.modules[fullname] = module return module |