[pypy-svn] r70026 - in pypy/trunk/pypy: interpreter module/__builtin__ module/__builtin__/test module/_demo module/_demo/test module/oracle

afa at codespeak.net afa at codespeak.net
Wed Dec 9 18:21:08 CET 2009


Author: afa
Date: Wed Dec  9 18:21:08 2009
New Revision: 70026

Removed:
   pypy/trunk/pypy/module/_demo/test/
Modified:
   pypy/trunk/pypy/interpreter/baseobjspace.py
   pypy/trunk/pypy/interpreter/mixedmodule.py
   pypy/trunk/pypy/interpreter/module.py
   pypy/trunk/pypy/module/__builtin__/importing.py
   pypy/trunk/pypy/module/__builtin__/test/test_import.py
   pypy/trunk/pypy/module/_demo/__init__.py
   pypy/trunk/pypy/module/oracle/__init__.py
   pypy/trunk/pypy/module/oracle/interp_error.py
Log:
Revert again my recent changes to the import system.
There are other consequences, like the "imp" module which must
be rewritten to correctly handle built-in modules.
Let's do this on a branch.

(reverted r69947, r69956, r69969, r70003)


Modified: pypy/trunk/pypy/interpreter/baseobjspace.py
==============================================================================
--- pypy/trunk/pypy/interpreter/baseobjspace.py	(original)
+++ pypy/trunk/pypy/interpreter/baseobjspace.py	Wed Dec  9 18:21:08 2009
@@ -239,8 +239,6 @@
             config = get_pypy_config(translating=False)
         self.config = config
 
-        self.builtin_modules = {}
-
         # import extra modules for side-effects
         import pypy.interpreter.nestedscope     # register *_DEREF bytecodes
 
@@ -268,34 +266,28 @@
     def startup(self):
         # To be called before using the space
 
-        # Initialize already imported builtin modules
+        # Initialize all builtin modules
         from pypy.interpreter.module import Module
-        w_modules = self.sys.get('modules')
         for w_modname in self.unpackiterable(
                                 self.sys.get('builtin_module_names')):
-            try:
-                w_mod = self.getitem(w_modules, w_modname)
-            except OperationError, e:
-                if e.match(self, self.w_KeyError):
-                    continue
-                raise
             modname = self.str_w(w_modname)
-            mod = self.interpclass_w(w_mod)
-            if isinstance(mod, Module) and not mod.startup_called:
+            mod = self.interpclass_w(self.getbuiltinmodule(modname))
+            if isinstance(mod, Module):
+                import time
                 self.timer.start("startup " + modname)
                 mod.startup(self)
-                mod.startup_called = True
                 self.timer.stop("startup " + modname)
 
-
     def finish(self):
         w_exitfunc = self.sys.getdictvalue(self, 'exitfunc')
         if w_exitfunc is not None:
             self.call_function(w_exitfunc)
         from pypy.interpreter.module import Module
-        for w_mod in self.builtin_modules.values():
-            mod = self.interpclass_w(w_mod)
-            if isinstance(mod, Module) and mod.startup_called:
+        for w_modname in self.unpackiterable(
+                                self.sys.get('builtin_module_names')):
+            modname = self.str_w(w_modname)
+            mod = self.interpclass_w(self.getbuiltinmodule(modname))
+            if isinstance(mod, Module):
                 mod.shutdown(self)
         if self.config.objspace.std.withdictmeasurement:
             from pypy.objspace.std.dictmultiobject import report
@@ -347,37 +339,14 @@
 
         w_name = self.wrap(name)
         w_mod = self.wrap(Module(self, w_name))
-        self.builtin_modules[name] = w_mod
+        w_modules = self.sys.get('modules')
+        self.setitem(w_modules, w_name, w_mod)
         return name
 
     def getbuiltinmodule(self, name):
         w_name = self.wrap(name)
         w_modules = self.sys.get('modules')
-        try:
-            return self.getitem(w_modules, w_name)
-        except OperationError, e:
-            if not e.match(self, self.w_KeyError):
-                raise
-
-        # If the module is a builtin but not yet imported,
-        # retrieve it and initialize it
-        try:
-            w_mod = self.builtin_modules[name]
-        except KeyError:
-            raise e
-        else:
-            # Add the module to sys.modules
-            self.setitem(w_modules, w_name, w_mod)
-
-            # And initialize it
-            from pypy.interpreter.module import Module
-            mod = self.interpclass_w(w_mod)
-            if isinstance(mod, Module) and not mod.startup_called:
-                self.timer.start("startup " + name)
-                mod.startup(self)
-                mod.startup_called = True
-                self.timer.stop("startup " + name)
-            return w_mod
+        return self.getitem(w_modules, w_name)
 
     def get_builtinmodule_to_install(self):
         """NOT_RPYTHON"""
@@ -428,15 +397,16 @@
         w_name = self.wrap('sys')
         self.sys = Module(self, w_name)
         w_modules = self.sys.get('modules')
-        self.builtin_modules['sys'] = self.wrap(self.sys)
+        self.setitem(w_modules, w_name, self.wrap(self.sys))
 
-        self.builtin_modules['exceptions'] = self.wrap(self.exceptions_module)
+        self.setitem(w_modules, w_name_exceptions,
+                     self.wrap(self.exceptions_module))
 
         from pypy.module.__builtin__ import Module
         w_name = self.wrap('__builtin__')
         self.builtin = Module(self, w_name)
         w_builtin = self.wrap(self.builtin)
-        self.builtin_modules['__builtin__'] = self.wrap(w_builtin)
+        self.setitem(w_modules, w_name, w_builtin)
         self.setitem(self.builtin.w_dict, self.wrap('__builtins__'), w_builtin)
 
         bootstrap_modules = ['sys', '__builtin__', 'exceptions']
@@ -510,10 +480,12 @@
 
     def setup_builtin_modules(self):
         "NOT_RPYTHON: only for initializing the space."
-        self.getbuiltinmodule('sys')
-        self.getbuiltinmodule('__builtin__')
-        for mod in self.builtin_modules.values():
-            mod.setup_after_space_initialization()
+        from pypy.interpreter.module import Module
+        for w_modname in self.unpackiterable(self.sys.get('builtin_module_names')):
+            modname = self.unwrap(w_modname)
+            mod = self.getbuiltinmodule(modname)
+            if isinstance(mod, Module):
+                mod.setup_after_space_initialization()
 
     def initialize(self):
         """NOT_RPYTHON: Abstract method that should put some minimal

Modified: pypy/trunk/pypy/interpreter/mixedmodule.py
==============================================================================
--- pypy/trunk/pypy/interpreter/mixedmodule.py	(original)
+++ pypy/trunk/pypy/interpreter/mixedmodule.py	Wed Dec  9 18:21:08 2009
@@ -87,7 +87,6 @@
 
     def _freeze_(self):
         self.getdict()
-        self.startup_called = False
         # hint for the annotator: Modules can hold state, so they are
         # not constant
         return False

Modified: pypy/trunk/pypy/interpreter/module.py
==============================================================================
--- pypy/trunk/pypy/interpreter/module.py	(original)
+++ pypy/trunk/pypy/interpreter/module.py	Wed Dec  9 18:21:08 2009
@@ -16,22 +16,21 @@
         self.w_name = w_name 
         if w_name is not None:
             space.setitem(w_dict, space.new_interned_str('__name__'), w_name) 
-        self.startup_called = False
 
     def setup_after_space_initialization(self):
         """NOT_RPYTHON: to allow built-in modules to do some more setup
         after the space is fully initialized."""
 
     def startup(self, space):
-        """This is called at runtime on import to allow the module to
-        do initialization when it is imported for the first time.
+        """This is called at runtime before the space gets uses to allow
+        the module to do initialization at runtime.
         """
 
     def shutdown(self, space):
         """This is called when the space is shut down, just after
-        sys.exitfunc(), if the module has been imported.
+        sys.exitfunc().
         """
-
+        
     def getdict(self):
         return self.w_dict
 

Modified: pypy/trunk/pypy/module/__builtin__/importing.py
==============================================================================
--- pypy/trunk/pypy/module/__builtin__/importing.py	(original)
+++ pypy/trunk/pypy/module/__builtin__/importing.py	Wed Dec  9 18:21:08 2009
@@ -228,7 +228,7 @@
 
 def _absolute_import(space, modulename, baselevel, w_fromlist, tentative):
     w = space.wrap
-
+    
     w_mod = None
     parts = modulename.split('.')
     prefix = []
@@ -291,9 +291,6 @@
 
             return w_mod
 
-        # check the builtin modules
-        if modulename in space.builtin_modules:
-            return space.getbuiltinmodule(modulename)
 
         if w_path is not None:
             for path in space.unpackiterable(w_path):

Modified: pypy/trunk/pypy/module/__builtin__/test/test_import.py
==============================================================================
--- pypy/trunk/pypy/module/__builtin__/test/test_import.py	(original)
+++ pypy/trunk/pypy/module/__builtin__/test/test_import.py	Wed Dec  9 18:21:08 2009
@@ -41,9 +41,7 @@
              relative_a = "import a",
              abs_b      = "import b",
              abs_x_y    = "import x.y",
-             abs_sys    = "import sys",
              string     = "inpackage = 1",
-             errno      = "",
              absolute   = "from __future__ import absolute_import\nimport string",
              relative_b = "from __future__ import absolute_import\nfrom . import string",
              relative_c = "from __future__ import absolute_import\nfrom .string import inpackage",
@@ -256,17 +254,6 @@
             import pkg_r.inpkg
         raises(ImportError,imp)
 
-    def test_import_builtin_inpackage(self):
-        def imp():
-            import pkg.sys
-        raises(ImportError,imp)
-
-        import sys, pkg.abs_sys
-        assert pkg.abs_sys.sys is sys
-
-        import errno, pkg.errno
-        assert pkg.errno is not errno
-
     def test_import_Globals_Are_None(self):
         import sys
         m = __import__('sys')
@@ -707,43 +694,14 @@
             def find_module(self, fullname, path=None):
                 tried_imports.append((fullname, path))
 
-        import sys, math
-        sys.meta_path.append(Importer())
+        import sys
         try:
+            sys.meta_path.append(Importer())
             import datetime
             assert len(tried_imports) == 1
-            package_name = '.'.join(__name__.split('.')[:-1])
-            if package_name:
-                assert tried_imports[0][0] == package_name + ".datetime"
-            else:
-                assert tried_imports[0][0] == "datetime"
-        finally:
-            sys.meta_path.pop()
-
-    def test_meta_path_block(self):
-        class ImportBlocker(object):
-            "Specified modules can't be imported, even if they are built-in"
-            def __init__(self, *namestoblock):
-                self.namestoblock = dict.fromkeys(namestoblock)
-            def find_module(self, fullname, path=None):
-                if fullname in self.namestoblock:
-                    return self
-            def load_module(self, fullname):
-                raise ImportError, "blocked"
-
-        import sys
-        modname = "errno" # an arbitrary harmless builtin module
-        mod = None
-        if modname in sys.modules:
-            mod = sys.modules
-            del sys.modules[modname]
-        sys.meta_path.append(ImportBlocker(modname))
-        try:
-            raises(ImportError, __import__, modname)
+            tried_imports[0][0] == "datetime"
         finally:
             sys.meta_path.pop()
-            if mod:
-                sys.modules[modname] = mod
 
     def test_path_hooks_leaking(self):
         class Importer(object):

Modified: pypy/trunk/pypy/module/_demo/__init__.py
==============================================================================
--- pypy/trunk/pypy/module/_demo/__init__.py	(original)
+++ pypy/trunk/pypy/module/_demo/__init__.py	Wed Dec  9 18:21:08 2009
@@ -12,13 +12,3 @@
     appleveldefs = {
         'DemoError'        : 'app_demo.DemoError',
     }
-
-    # Used in tests
-    demo_events = []
-    def setup_after_space_initialization(self):
-        Module.demo_events.append('setup')
-    def startup(self, space):
-        Module.demo_events.append('startup')
-    def shutdown(self, space):
-        Module.demo_events.append('shutdown')
-

Modified: pypy/trunk/pypy/module/oracle/__init__.py
==============================================================================
--- pypy/trunk/pypy/module/oracle/__init__.py	(original)
+++ pypy/trunk/pypy/module/oracle/__init__.py	Wed Dec  9 18:21:08 2009
@@ -39,7 +39,6 @@
     def startup(self, space):
         from pypy.module.oracle.interp_error import get
         state = get(space)
-        state.startup(space)
         (state.w_DecimalType,
          state.w_DateTimeType, state.w_DateType, state.w_TimedeltaType,
          ) = space.fixedview(space.appexec([], """():

Modified: pypy/trunk/pypy/module/oracle/interp_error.py
==============================================================================
--- pypy/trunk/pypy/module/oracle/interp_error.py	(original)
+++ pypy/trunk/pypy/module/oracle/interp_error.py	Wed Dec  9 18:21:08 2009
@@ -4,47 +4,32 @@
 from pypy.interpreter.typedef import interp_attrproperty, interp_attrproperty_w
 from pypy.interpreter.gateway import interp2app
 from pypy.interpreter.error import OperationError
-
 from pypy.module.oracle import roci, config
-from pypy.rlib.unroll import unrolling_iterable
-
-exported_names = unrolling_iterable("""
-    DatabaseError OperationalError InterfaceError ProgrammingError
-    NotSupportedError IntegrityError InternalError DataError
-    Variable Connection""".split())
 
 class State:
     # XXX move to another file
-
     def __init__(self, space):
-        "NOT_RPYTHON"
-        self.variableTypeByPythonType = {}
-        self.w_DecimalType = None
-        self.w_DateTimeType = None
-        self.w_DateType = None
-        self.w_TimedeltaType = None
-
-        for name in exported_names:
-            setattr(self, 'w_' + name, None)
-
-    def startup(self, space):
         w_module = space.getbuiltinmodule('cx_Oracle')
-        for name in exported_names:
-            setattr(self, 'w_' + name, space.getattr(w_module, space.wrap(name)))
+        def get(name):
+            return space.getattr(w_module, space.wrap(name))
+
+        self.w_DatabaseError = get('DatabaseError')
+        self.w_OperationalError = get('OperationalError')
+        self.w_InterfaceError = get('InterfaceError')
+        self.w_ProgrammingError = get('ProgrammingError')
+        self.w_NotSupportedError = get('NotSupportedError')
+        self.w_IntegrityError = get('IntegrityError')
+        self.w_InternalError = get('InternalError')
+        self.w_DataError = get('DataError')
+        self.w_Variable = get('Variable')
+        self.w_Connection = get('Connection')
 
         from pypy.module.oracle.interp_variable import all_variable_types
+        self.variableTypeByPythonType = {}
         for varType in all_variable_types:
             w_type = space.gettypeobject(varType.typedef)
             self.variableTypeByPythonType[w_type] = varType
 
-        (self.w_DecimalType,
-         self.w_DateTimeType, self.w_DateType, self.w_TimedeltaType,
-         ) = space.fixedview(space.appexec([], """():
-             import decimal, datetime
-             return (decimal.Decimal,
-                     datetime.datetime, datetime.date, datetime.timedelta)
-        """))
-
 def get(space): 
     return space.fromcache(State) 
 



More information about the Pypy-commit mailing list