[z3-checkins] r28498 - z3/z3reload/trunk

gintas at codespeak.net gintas at codespeak.net
Thu Jun 8 10:07:39 CEST 2006


Author: gintas
Date: Thu Jun  8 10:07:39 2006
New Revision: 28498

Modified:
   z3/z3reload/trunk/reload.py
Log:
Fixed a couple of bugs:
* in some cases __sanitize_bases would loop forever
* sometimes SimpleView classes seem to have different bases;
  removed assertion that complained about those.


Modified: z3/z3reload/trunk/reload.py
==============================================================================
--- z3/z3reload/trunk/reload.py	(original)
+++ z3/z3reload/trunk/reload.py	Thu Jun  8 10:07:39 2006
@@ -19,10 +19,15 @@
     """
 
     def __init__(self, *args, **kw):
-        assert len(self.__class__.__bases__) == 3
-        reloader2, real_view, simple2 = self.__class__.__bases__
+        bases = self.__class__.__bases__
+        assert len(bases) >= 2
+        reloader2, real_view = bases[:2]
         assert reloader2 is Reloader
-        assert simple2 in simple_view_classes
+
+        rest = bases[2:]
+#       for c in rest:
+#           if c not in simple_view_classes:
+#               print >> sys.stderr, "Warning: %r has base %r" % (self.__class__, c)
 
         clsname = real_view.__name__
         modname = real_view.__module__
@@ -30,7 +35,7 @@
         if hasattr(module, clsname):
             reload(module)
             new_view = getattr(module, clsname)
-            self.__class__.__bases__ = (Reloader, new_view, simple2)
+            self.__class__.__bases__ = (Reloader, new_view) + rest
         else:
             # If the module does not have such an attribute, chances are that
             # the class was dynamically constructed.  In this case reloading is
@@ -53,7 +58,9 @@
         bases = cls.__bases__
         new_bases = []
         for b in bases:
-            if hasattr(module, b.__name__):
+            bc = getattr(module, b.__name__, None)
+            if bc is not None and bc.__module__ != modname:
+                # Make sure that the base class comes from a different module.
                 new_base = getattr(module, b.__name__)
                 self.__sanitize_bases(new_base)
                 new_bases.append(new_base)


More information about the z3-checkins mailing list