[pypy-svn] pypy default: Backout of hte rest of the mixed submodule changes.

alex_gaynor commits-noreply at bitbucket.org
Mon Jan 3 20:05:41 CET 2011


Author: Alex Gaynor <alex.gaynor at gmail.com>
Branch: 
Changeset: r40350:8635a1a0f7b9
Date: 2011-01-03 13:05 -0600
http://bitbucket.org/pypy/pypy/changeset/8635a1a0f7b9/

Log:	Backout of hte rest of the mixed submodule changes.

diff --git a/pypy/interpreter/mixedmodule.py b/pypy/interpreter/mixedmodule.py
--- a/pypy/interpreter/mixedmodule.py
+++ b/pypy/interpreter/mixedmodule.py
@@ -1,7 +1,7 @@
 from pypy.interpreter.module import Module
 from pypy.interpreter.function import Function, BuiltinFunction
-from pypy.interpreter import gateway
-from pypy.interpreter.error import OperationError
+from pypy.interpreter import gateway 
+from pypy.interpreter.error import OperationError 
 from pypy.interpreter.baseobjspace import W_Root
 import os, sys
 
@@ -19,24 +19,13 @@
     # after startup().
     w_initialdict = None
 
-    def __init__(self, space, w_name):
-        """ NOT_RPYTHON """
-        Module.__init__(self, space, w_name)
-        self.lazy = True
+    def __init__(self, space, w_name): 
+        """ NOT_RPYTHON """ 
+        Module.__init__(self, space, w_name) 
+        self.lazy = True 
         self.__class__.buildloaders()
         self.loaders = self.loaders.copy()    # copy from the class to the inst
 
-    def install(self):
-        """NOT_RPYTHON: install this module, and it's submodules into
-        space.builtin_modules"""
-        Module.install(self)
-        if hasattr(self, "submodules"):
-            name = self.space.unwrap(self.w_name)
-            for sub_name, module_cls in self.submodules.iteritems():
-                module_name = self.space.wrap("%s.%s" % (name, sub_name))
-                m = module_cls(self.space, module_name)
-                m.install()
-
     def init(self, space):
         """This is called each time the module is imported or reloaded
         """
@@ -61,13 +50,13 @@
 
     def get(self, name):
         space = self.space
-        w_value = self.getdictvalue(space, name)
-        if w_value is None:
+        w_value = self.getdictvalue(space, name) 
+        if w_value is None: 
             raise OperationError(space.w_AttributeError, space.wrap(name))
-        return w_value
+        return w_value 
 
-    def call(self, name, *args_w):
-        w_builtin = self.get(name)
+    def call(self, name, *args_w): 
+        w_builtin = self.get(name) 
         return self.space.call_function(w_builtin, *args_w)
 
     def getdictvalue(self, space, name):
@@ -78,12 +67,12 @@
 
     def _load_lazily(self, space, name):
         w_name = space.new_interned_str(name)
-        try:
+        try: 
             loader = self.loaders[name]
-        except KeyError:
-            return None
-        else:
-            w_value = loader(space)
+        except KeyError: 
+            return None 
+        else: 
+            w_value = loader(space) 
             func = space.interpclass_w(w_value)
             # the idea of the following code is that all functions that are
             # directly in a mixed-module are "builtin", e.g. they get a
@@ -101,19 +90,19 @@
                     func._builtinversion_ = bltin
                     bltin.name = name
                 w_value = space.wrap(bltin)
-            space.setitem(self.w_dict, w_name, w_value)
+            space.setitem(self.w_dict, w_name, w_value) 
             return w_value
 
 
-    def getdict(self):
-        if self.lazy:
+    def getdict(self): 
+        if self.lazy: 
             space = self.space
-            for name in self.loaders:
-                w_value = self.get(name)
-                space.setitem(self.w_dict, space.new_interned_str(name), w_value)
+            for name in self.loaders: 
+                w_value = self.get(name)  
+                space.setitem(self.w_dict, space.new_interned_str(name), w_value) 
             self.lazy = False
             self.w_initialdict = space.call_method(self.w_dict, 'items')
-        return self.w_dict
+        return self.w_dict 
 
     def _freeze_(self):
         self.getdict()
@@ -123,19 +112,19 @@
         # not constant
         return False
 
-    def buildloaders(cls):
-        """ NOT_RPYTHON """
-        if not hasattr(cls, 'loaders'):
+    def buildloaders(cls): 
+        """ NOT_RPYTHON """ 
+        if not hasattr(cls, 'loaders'): 
             # build a constant dictionary out of
-            # applevel/interplevel definitions
+            # applevel/interplevel definitions 
             cls.loaders = loaders = {}
             pkgroot = cls.__module__
             appname = cls.get_applevel_name()
-            for name, spec in cls.interpleveldefs.items():
-                loaders[name] = getinterpevalloader(pkgroot, spec)
-            for name, spec in cls.appleveldefs.items():
+            for name, spec in cls.interpleveldefs.items(): 
+                loaders[name] = getinterpevalloader(pkgroot, spec) 
+            for name, spec in cls.appleveldefs.items(): 
                 loaders[name] = getappfileloader(pkgroot, appname, spec)
-            assert '__file__' not in loaders
+            assert '__file__' not in loaders 
             if cls.expose__file__attribute:
                 loaders['__file__'] = cls.get__file__
             if '__doc__' not in loaders:
@@ -151,27 +140,27 @@
         w_obj = loader(space)
         space.setattr(space.wrap(self), space.wrap(name), w_obj)
 
-    def get__file__(cls, space):
-        """ NOT_RPYTHON.
-        return the __file__ attribute of a MixedModule
-        which is the root-directory for the various
+    def get__file__(cls, space): 
+        """ NOT_RPYTHON. 
+        return the __file__ attribute of a MixedModule 
+        which is the root-directory for the various 
         applevel and interplevel snippets that make
-        up the module.
-        """
-        try:
-            fname = cls._fname
-        except AttributeError:
+        up the module. 
+        """ 
+        try: 
+            fname = cls._fname 
+        except AttributeError: 
             pkgroot = cls.__module__
             mod = __import__(pkgroot, None, None, ['__doc__'])
-            fname = mod.__file__
+            fname = mod.__file__ 
             assert os.path.basename(fname).startswith('__init__.py')
             # make it clear that it's not really the interp-level module
             # at this path that we are seeing, but an app-level version of it
             fname = os.path.dirname(fname)
-            cls._fname = fname
-        return space.wrap(fname)
+            cls._fname = fname 
+        return space.wrap(fname) 
 
-    get__file__ = classmethod(get__file__)
+    get__file__ = classmethod(get__file__) 
 
     def get__doc__(cls, space):
         return space.wrap(cls.__doc__)
@@ -179,18 +168,18 @@
 
 
 def getinterpevalloader(pkgroot, spec):
-    """ NOT_RPYTHON """
-    def ifileloader(space):
+    """ NOT_RPYTHON """     
+    def ifileloader(space): 
         d = {'space' : space}
-        # EVIL HACK (but it works, and this is not RPython :-)
-        while 1:
-            try:
-                value = eval(spec, d)
-            except NameError, ex:
-                name = ex.args[0].split("'")[1] # super-Evil
+        # EVIL HACK (but it works, and this is not RPython :-) 
+        while 1: 
+            try: 
+                value = eval(spec, d) 
+            except NameError, ex: 
+                name = ex.args[0].split("'")[1] # super-Evil 
                 if name in d:
                     raise   # propagate the NameError
-                try:
+                try: 
                     d[name] = __import__(pkgroot+'.'+name, None, None, [name])
                 except ImportError:
                     etype, evalue, etb = sys.exc_info()
@@ -200,9 +189,9 @@
                         # didn't help, re-raise the original exception for
                         # clarity
                         raise etype, evalue, etb
-            else:
+            else: 
                 #print spec, "->", value
-                if hasattr(value, 'func_code'):  # semi-evil
+                if hasattr(value, 'func_code'):  # semi-evil 
                     return space.wrap(gateway.interp2app(value))
 
                 try:
@@ -215,13 +204,13 @@
                 assert isinstance(value, W_Root), (
                     "interpleveldef %s.%s must return a wrapped object "
                     "(got %r instead)" % (pkgroot, spec, value))
-                return value
-    return ifileloader
-
+                return value 
+    return ifileloader 
+        
 applevelcache = {}
 def getappfileloader(pkgroot, appname, spec):
-    """ NOT_RPYTHON """
-    # hum, it's a bit more involved, because we usually
+    """ NOT_RPYTHON """ 
+    # hum, it's a bit more involved, because we usually 
     # want the import at applevel
     modname, attrname = spec.split('.')
     impbase = pkgroot + '.' + modname
@@ -239,6 +228,7 @@
         app = gateway.applevel(source, filename=fn, modname=appname)
         applevelcache[impbase] = app
 
-    def afileloader(space):
+    def afileloader(space): 
         return app.wget(space, attrname)
-    return afileloader
+    return afileloader 
+

diff --git a/pypy/interpreter/test/test_mixedmodule.py b/pypy/interpreter/test/test_mixedmodule.py
deleted file mode 100644
--- a/pypy/interpreter/test/test_mixedmodule.py
+++ /dev/null
@@ -1,31 +0,0 @@
-from pypy.interpreter.mixedmodule import MixedModule
-
-
-class TestMixedModule(object):
-    def test_install(self):
-        class Module(MixedModule):
-            interpleveldefs = {}
-            appleveldefs = {}
-
-        m = Module(self.space, self.space.wrap("test_module"))
-        m.install()
-
-        assert self.space.builtin_modules["test_module"] is m
-
-    def test_submodule(self):
-        class SubModule(MixedModule):
-            interpleveldefs = {}
-            appleveldefs = {}
-
-        class Module(MixedModule):
-            interpleveldefs = {}
-            appleveldefs = {}
-            submodules = {
-                "sub": SubModule
-            }
-
-        m = Module(self.space, self.space.wrap("test_module"))
-        m.install()
-
-        assert self.space.builtin_modules["test_module"] is m
-        assert isinstance(self.space.builtin_modules["test_module.sub"], SubModule)


More information about the Pypy-commit mailing list