diff options
author | Johan Dahlin <johan@gnome.org> | 2009-11-23 15:32:16 -0200 |
---|---|---|
committer | Johan Dahlin <johan@gnome.org> | 2009-11-23 15:32:16 -0200 |
commit | a644edf0515c26ed027522891ccf02aceac764e8 (patch) | |
tree | e02bf1b03a3bd7017b8fe11d82db05cc88ff8268 | |
parent | fad89e12a744b57e6348968f351d25d167de8248 (diff) | |
download | pygobject-a644edf0515c26ed027522891ccf02aceac764e8.tar.gz |
Create overridden modules in two passes
This patch splits overridden module creation into two passes. The first pass
creates the auto-generated module normally before the overridden module is
attempted to be imported. The second pass imports the overridden module and
replaces the auto-generated module with the overridden. This is necessary
for the overridden modules to be able to access the auto-generated ones.
-rw-r--r-- | gi/importer.py | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/gi/importer.py b/gi/importer.py index 48392b42..5e7dfc3b 100644 --- a/gi/importer.py +++ b/gi/importer.py @@ -39,6 +39,17 @@ 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 @@ -64,26 +75,23 @@ class DynamicImporter(object): sys.modules[fullname] = gobject return gobject + module_type = DynamicModule + module = self._create_module(module_type, fullname, namespace) + sys.modules[fullname] = module + # Look for an overrides module overrides_name = 'gi.overrides.%s' % namespace + overrides_type_name = '%sModule' % namespace try: - overrides_type_name = '%sModule' % namespace + overrides_module = __import__(overrides_name, fromlist=[overrides_type_name]) module_type = getattr(overrides_module, overrides_type_name) except ImportError, e: - module_type = DynamicModule - - module = module_type.__new__(module_type) - module.__dict__ = { - '__file__': '<%s>' % fullname, - '__name__': fullname, - '__namespace__': namespace, - '__loader__': self - } - - sys.modules[fullname] = module + pass - module.__init__() + if module_type is not DynamicModule: + module = self._create_module(module_type, fullname, namespace) + sys.modules[fullname] = module return module |