[Checkins] SVN: z3c.form/branches/adamg-objectwidget/src/z3c/form/ moved subform creation to an adapter
Adam Groszer
agroszer at gmail.com
Mon Oct 13 12:38:10 EDT 2008
Log message for revision 92123:
moved subform creation to an adapter
Changed:
U z3c.form/branches/adamg-objectwidget/src/z3c/form/browser/object.txt
U z3c.form/branches/adamg-objectwidget/src/z3c/form/configure.zcml
U z3c.form/branches/adamg-objectwidget/src/z3c/form/interfaces.py
U z3c.form/branches/adamg-objectwidget/src/z3c/form/object.py
A z3c.form/branches/adamg-objectwidget/src/z3c/form/object.zcml
-=-
Modified: z3c.form/branches/adamg-objectwidget/src/z3c/form/browser/object.txt
===================================================================
--- z3c.form/branches/adamg-objectwidget/src/z3c/form/browser/object.txt 2008-10-13 16:28:51 UTC (rev 92122)
+++ z3c.form/branches/adamg-objectwidget/src/z3c/form/browser/object.txt 2008-10-13 16:38:09 UTC (rev 92123)
@@ -31,6 +31,10 @@
>>> registerFactoryAdapter(IMySubObject, MySubObject)
>>> registerFactoryAdapter(IMySecond, MySecond)
+ >>> from z3c.form.object import SubformAdapter
+ >>> zope.component.provideAdapter(SubformAdapter)
+
+
>>> from z3c.form.error import MultipleErrorViewSnippet
>>> zope.component.provideAdapter(MultipleErrorViewSnippet)
Modified: z3c.form/branches/adamg-objectwidget/src/z3c/form/configure.zcml
===================================================================
--- z3c.form/branches/adamg-objectwidget/src/z3c/form/configure.zcml 2008-10-13 16:28:51 UTC (rev 92122)
+++ z3c.form/branches/adamg-objectwidget/src/z3c/form/configure.zcml 2008-10-13 16:38:09 UTC (rev 92123)
@@ -74,9 +74,6 @@
<adapter
factory=".converter.MultiConverter"
/>
- <adapter
- factory=".object.ObjectConverter"
- />
<!-- ITerms -->
<adapter
@@ -212,6 +209,8 @@
/>
</configure>
+ <include file="object.zcml" />
+
<include package=".browser" />
<i18n:registerTranslations directory="locales" />
Modified: z3c.form/branches/adamg-objectwidget/src/z3c/form/interfaces.py
===================================================================
--- z3c.form/branches/adamg-objectwidget/src/z3c/form/interfaces.py 2008-10-13 16:28:51 UTC (rev 92122)
+++ z3c.form/branches/adamg-objectwidget/src/z3c/form/interfaces.py 2008-10-13 16:38:09 UTC (rev 92123)
@@ -338,6 +338,17 @@
"""
+# ----[ Subform factory ]-----------------------------------------------------
+
+class ISubformFactory(zope.interface.Interface):
+ """Factory that will instatiate our subforms for ObjectWidget
+ """
+
+ def __call__():
+ """return a default object created to be populated
+ """
+
+
# ----[ Widgets ]------------------------------------------------------------
class IWidget(ILocation):
Modified: z3c.form/branches/adamg-objectwidget/src/z3c/form/object.py
===================================================================
--- z3c.form/branches/adamg-objectwidget/src/z3c/form/object.py 2008-10-13 16:28:51 UTC (rev 92122)
+++ z3c.form/branches/adamg-objectwidget/src/z3c/form/object.py 2008-10-13 16:38:09 UTC (rev 92123)
@@ -30,12 +30,15 @@
from z3c.form.error import MultipleErrors
from z3c.form.i18n import MessageFactory as _
+def getIfName(iface):
+ return iface.__module__+'.'+iface.__name__
+
class ObjectSubForm(form.BaseForm):
zope.interface.implements(interfaces.ISubForm)
- def __init__(self, context, parentWidget):
+ def __init__(self, context, request, parentWidget):
self.context = context
- self.request = parentWidget.request
+ self.request = request
self.__parent__ = parentWidget
self.parentForm = parentWidget.form
@@ -113,7 +116,7 @@
#value here is the raw extracted from the widget's subform
#in the form of a dict key:fieldname, value:fieldvalue
- name = self.field.schema.__module__+'.'+self.field.schema.__name__
+ name = getIfName(self.field.schema)
creator = zope.component.queryMultiAdapter(
(self.widget.context, self.widget.request,
self.widget.form, self.widget),
@@ -173,12 +176,23 @@
_value = interfaces.NOVALUE
_updating = False
+ def _getForm(self, content):
+ #self.subform = ObjectSubForm(content, self)
+ #from pub.dbgpclient import brk; brk('192.168.32.1')
+
+ form = getattr(self, 'form', None)
+ self.subform = zope.component.getMultiAdapter(
+ (content, self.request,
+ self.context,
+ form, self, self.field),
+ interfaces.ISubformFactory)()
+
def updateWidgets(self):
if self._value is not interfaces.NOVALUE:
- self.subform = ObjectSubForm(self._value, self)
+ self._getForm(self._value)
ignore = None
else:
- self.subform = ObjectSubForm(None, self)
+ self._getForm(None)
ignore = True
self.subform.update(ignore)
@@ -232,8 +246,38 @@
else:
return default
+
+######## default adapters
+
+class SubformAdapter(object):
+ """Most basic-default subform factory adapter"""
+
+ zope.interface.implements(interfaces.ISubformFactory)
+ zope.component.adapts(zope.interface.Interface, interfaces.IFormLayer,
+ zope.interface.Interface,
+ zope.interface.Interface, interfaces.IObjectWidget,
+ zope.interface.Interface)
+
+ factory = ObjectSubForm
+
+ def __init__(self, context, request, widgetContext, form, widget, field):
+ self.context = context
+ self.request = request
+ self.widgetContext = widgetContext
+ self.form = form
+ self.widget = widget
+ self.field = field
+
+ def __call__(self):
+ #value is the extracted data from the form
+ obj = self.factory(self.context, self.request, self.widget)
+ return obj
+
+ def __repr__(self):
+ return '<%s %r>' % (self.__class__.__name__, self.__name__)
+
class FactoryAdapter(object):
- """Most basic-default factory adapter"""
+ """Most basic-default object factory adapter"""
zope.interface.implements(interfaces.IObjectFactory)
zope.component.adapts(zope.interface.Interface, interfaces.IFormLayer,
@@ -261,7 +305,7 @@
# 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__
+ name = getIfName(for_)
class temp(FactoryAdapter):
factory = klass
zope.component.provideAdapter(temp, name=name)
\ No newline at end of file
Added: z3c.form/branches/adamg-objectwidget/src/z3c/form/object.zcml
===================================================================
--- z3c.form/branches/adamg-objectwidget/src/z3c/form/object.zcml (rev 0)
+++ z3c.form/branches/adamg-objectwidget/src/z3c/form/object.zcml 2008-10-13 16:38:09 UTC (rev 92123)
@@ -0,0 +1,16 @@
+<configure
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:i18n="http://namespaces.zope.org/i18n"
+ i18n_domain="z3c.form">
+
+ <!-- Data Converters -->
+ <adapter
+ factory=".object.ObjectConverter"
+ />
+
+ <!-- Subform default factory -->
+ <adapter
+ factory=".object.SubformAdapter"
+ />
+
+</configure>
Property changes on: z3c.form/branches/adamg-objectwidget/src/z3c/form/object.zcml
___________________________________________________________________
Name: svn:keywords
+ Date Author Id Revision
Name: svn:eol-style
+ native
More information about the Checkins
mailing list