[Checkins] SVN: z3c.form/branches/adamg-objectwidget/src/z3c/form/object.py Added some open questions as XXX comments.

Roger Ineichen roger at projekt01.ch
Wed Oct 8 19:47:30 EDT 2008


Log message for revision 91912:
  Added some open questions as XXX comments.
  I'm not sure if I'm correct. It seems to me 
  an existing object get replaced with a new one.
  But I could be wrong.

Changed:
  U   z3c.form/branches/adamg-objectwidget/src/z3c/form/object.py

-=-
Modified: z3c.form/branches/adamg-objectwidget/src/z3c/form/object.py
===================================================================
--- z3c.form/branches/adamg-objectwidget/src/z3c/form/object.py	2008-10-08 17:38:28 UTC (rev 91911)
+++ z3c.form/branches/adamg-objectwidget/src/z3c/form/object.py	2008-10-08 23:47:28 UTC (rev 91912)
@@ -66,6 +66,12 @@
         self.mode = self.parentWidget.mode
         self.ignoreContext = self.parentWidget.ignoreContext
         self.ignoreRequest = self.parentWidget.ignoreRequest
+        
+# XXX: I recommend to use the existing parent prefix as prefix for the new prefix
+
+#       prefix = util.expandPrefix(self.__parent__.prefix)
+#       self.prefix = prefix + util.expandPrefix(
+#           self.parentWidget.field.__name__)
         self.prefix = self.parentWidget.field.__name__
 
         if interfaces.IFormAware.providedBy(self.parentWidget):
@@ -84,6 +90,7 @@
 
     factory = None
 
+# XXX: was x a debug hook?
     def _fields(self):
         x = zope.schema.getFields(self.field.schema)
         return x
@@ -98,6 +105,11 @@
     def createObject(self, value):
         #keep value passed, maybe some subclasses want it
 
+# XXX: Are I'm correct the value is already an object?
+# if so, should we return the value?
+#        if self.field.schema.providedBy(value):
+#            return value
+
         if self.factory is None:
             name = self.field.schema.__module__+'.'+self.field.schema.__name__
             adapter = zope.component.queryMultiAdapter(
@@ -125,6 +137,18 @@
         if value[1]:
             raise MultipleErrors(value[1])
 
+# XXX: check if this allways returns a new object instance. If so we need to
+# ensure that the existing instance doesn't get replaced. Because an existing 
+# instance could provide some reference to other things we whould loose.
+
+# probably we should do:
+#        if self.field.schema.providedBy(value):
+#            obj = value
+#        else:
+#            obj = self.createObject(value)
+#
+# Or are I'm wrong?
+
         obj = self.createObject(value)
 
         for name, f in self._fields().items():
@@ -146,12 +170,21 @@
         self.form = form
         self.widget = widget
 
+# XXX: probably we should use __call__ instead of get and skip the value. Isn't
+# the value an existing object instance? Which means if we never replace 
+# existing objects this should never get called within an existing value?
+#    def __call__():
+#        return self.factory()
+
     def get(self, value):
         return self.factory()
 
     def __repr__(self):
         return '<%s %r>' % (self.__class__.__name__, self.__name__)
 
+# XXX: Probably we should offer an register factrory method which allows to
+# use all discriminators e.g. context, request, form, widget as optional
+# arguments. But can probably do that later in a ZCML directive
 def registerFactoryAdapter(for_, klass):
     """register the basic FactoryAdapter for a given interface and class"""
     name = for_.__module__+'.'+for_.__name__



More information about the Checkins mailing list