[Checkins] SVN: grok/trunk/src/grok/ - fixed containment by making grok.Model derive from Contained too

Christian Theune ct at gocept.com
Thu Oct 19 15:27:42 EDT 2006


Log message for revision 70818:
   - fixed containment by making grok.Model derive from Contained too
  

Changed:
  U   grok/trunk/src/grok/components.py
  U   grok/trunk/src/grok/tests/container/container.py

-=-
Modified: grok/trunk/src/grok/components.py
===================================================================
--- grok/trunk/src/grok/components.py	2006-10-19 18:56:41 UTC (rev 70817)
+++ grok/trunk/src/grok/components.py	2006-10-19 19:27:41 UTC (rev 70818)
@@ -36,11 +36,15 @@
 from zope.app.publisher.browser.pagetemplateresource import \
     PageTemplateResourceFactory
 from zope.app.container.btree import BTreeContainer
+from zope.app.container.contained import Contained
 
 from grok import util, security
 
 
-class Model(persistent.Persistent):
+class Model(Contained, persistent.Persistent):  
+    # XXX Inheritance order is important here. If we reverse this, 
+    # then containers can't be models anymore because no unambigous MRO 
+    # can be established.
     pass
 
 
@@ -188,6 +192,7 @@
         if traverser:
             return traverser(name)
 
+
 class Form(View):
     def _init(self):
         fields = schema_fields(self.context)

Modified: grok/trunk/src/grok/tests/container/container.py
===================================================================
--- grok/trunk/src/grok/tests/container/container.py	2006-10-19 18:56:41 UTC (rev 70817)
+++ grok/trunk/src/grok/tests/container/container.py	2006-10-19 19:27:41 UTC (rev 70818)
@@ -13,9 +13,26 @@
     >>> isinstance(bag, BTreeContainer)
     True
 
+We had problems when switching to grok.Container with the __parent__ attribute
+being set, we better make sure this doesn't happen again:
+
+    >>> skull = Bone()
+    >>> print skull.__parent__
+    None
+    >>> print skull.__name__
+    None
+    >>> bag['skull'] = skull
+    >>> skull.__parent__
+    <grok.tests.container.container.BoneBag object at 0x...>
+    >>> skull.__name__
+    u'skull'
+
 """
 
 import grok
 
 class BoneBag(grok.Model, grok.Container):
     pass
+
+class Bone(grok.Model):
+    pass



More information about the Checkins mailing list