[pypy-svn] pypy interplevel-exception-classes: Try a slightly different interface, class name can be "module.name"

amauryfa commits-noreply at bitbucket.org
Fri Feb 18 00:48:03 CET 2011

Author: Amaury Forgeot d'Arc <amauryfa at gmail.com>
Branch: interplevel-exception-classes
Changeset: r42124:1ae0fbf48f5a
Date: 2011-02-17 23:42 +0100

Log:	Try a slightly different interface, class name can be "module.name"

diff --git a/pypy/interpreter/test/test_error.py b/pypy/interpreter/test/test_error.py
--- a/pypy/interpreter/test/test_error.py
+++ b/pypy/interpreter/test/test_error.py
@@ -76,7 +76,7 @@
 def test_new_exception(space):
-    w_error = new_exception_class(space, 'error', module="_socket")
+    w_error = new_exception_class(space, '_socket.error')
     assert w_error.getname(space) == 'error'
     assert space.str_w(space.repr(w_error)) == "<class '_socket.error'>"
     operr = OperationError(w_error, space.wrap("message"))

diff --git a/pypy/interpreter/error.py b/pypy/interpreter/error.py
--- a/pypy/interpreter/error.py
+++ b/pypy/interpreter/error.py
@@ -409,14 +409,17 @@
     w_error = space.call_function(w_type, space.wrap(errno), space.wrap(msg))
     return OperationError(w_type, w_error)
-def new_exception_class(space, name, w_bases=None, module=None, w_dict=None):
+def new_exception_class(space, name, w_bases=None, w_dict=None):
     """Create a new exception type.
     @param name: the name of the type.
     @param w_bases: Either an exception type, or a wrapped tuple of
                     exception types.  default is space.w_Exception.
-    @param module: optional module name.
     @param w_dict: an optional dictionary to populate the class __dict__.
+    if '.' in name:
+        module, name = name.rsplit('.', 1)
+    else:
+        module = None
     if w_bases is None:
         w_bases = space.newtuple([space.w_Exception])
     elif not space.isinstance_w(w_bases, space.w_tuple):
@@ -425,6 +428,6 @@
         w_dict = space.newdict()
     w_exc = space.call_function(
         space.w_type, space.wrap(name), w_bases, w_dict)
-    if module is not None:
+    if module:
         space.setattr(w_exc, space.wrap("__module__"), space.wrap(module))
     return w_exc

More information about the Pypy-commit mailing list