[Checkins] SVN: Sandbox/darrylcousins/mars.formdemo/ Added initial AllWidgets implementation, problem with annotation factory needs work

Darryl Cousins darryl at darrylcousins.net.nz
Sat Jul 7 21:26:40 EDT 2007


Log message for revision 77599:
  Added initial AllWidgets implementation, problem with annotation factory needs work

Changed:
  U   Sandbox/darrylcousins/mars.formdemo/mars.adapter/src/mars/adapter/meta.py
  U   Sandbox/darrylcousins/mars.formdemo/mars.view/src/mars/view/components.py
  U   Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/browser/index.pt
  U   Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/configure.zcml
  U   Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/message/message.py
  U   Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/questionnaire/questionnaire.py
  U   Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/tests.py
  A   Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/widgets/
  A   Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/widgets/README.txt
  A   Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/widgets/__init__.py
  A   Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/widgets/widgets.py

-=-
Modified: Sandbox/darrylcousins/mars.formdemo/mars.adapter/src/mars/adapter/meta.py
===================================================================
--- Sandbox/darrylcousins/mars.formdemo/mars.adapter/src/mars/adapter/meta.py	2007-07-08 00:20:25 UTC (rev 77598)
+++ Sandbox/darrylcousins/mars.formdemo/mars.adapter/src/mars/adapter/meta.py	2007-07-08 01:26:38 UTC (rev 77599)
@@ -1,3 +1,4 @@
+import zope.interface
 import zope.component
 
 import grok
@@ -15,11 +16,12 @@
         provides = util.class_annotation(factory, 'grok.provides', None)
         name = util.class_annotation(factory, 'grok.name', '')
         factory = util.class_annotation(factory, 'mars.adapter.factory', None)
+        #print '\nName: ', name, 'Factory:', factory, '\n'
         if factory is None:
             # TODO error message
             pass
         else:
-            #zope.component.provideAdapter(factory, adapts=(adapter_context,),
+            #zope.component.provideAdapter(factory, adapts=(zope.interface.Interface,),
             #                         provides=provides,
             #                         name=name)
             zope.component.provideAdapter(factory,

Modified: Sandbox/darrylcousins/mars.formdemo/mars.view/src/mars/view/components.py
===================================================================
--- Sandbox/darrylcousins/mars.formdemo/mars.view/src/mars/view/components.py	2007-07-08 00:20:25 UTC (rev 77598)
+++ Sandbox/darrylcousins/mars.formdemo/mars.view/src/mars/view/components.py	2007-07-08 01:26:38 UTC (rev 77599)
@@ -28,10 +28,7 @@
             return template(self)
         return template(self)
 
-    def update(self):
-        pass
 
-
 class TemplateView(TemplateViewBase, BrowserPage):
 
     def __init__(self, context, request):
@@ -43,11 +40,10 @@
     _layout_name = u'' # will be set if mars.view.layout defined
     _layout_interface = ILayoutTemplate
 
-    def update(self):
-        pass
-
     def __call__(self):
-        self.update()
+        update = getattr(self, 'update', None)
+        if update is not None:
+            self.update()
         if self.request.response.getStatus() in (302, 303):
             return
         layout = getattr(self, 'layout', None)

Modified: Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/browser/index.pt
===================================================================
--- Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/browser/index.pt	2007-07-08 00:20:25 UTC (rev 77598)
+++ Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/browser/index.pt	2007-07-08 01:26:38 UTC (rev 77599)
@@ -7,6 +7,9 @@
     <a href="../++skin++marsformdemo/addHelloWorld">Hello World</a>
   </div>
   <div>
+    <a href="../++skin++marsformdemo/widgets">All widgets</a>
+  </div>
+  <div>
     <a href="../++skin++marsformdemo/questionnaireResults">Questionnaire</a>
   </div>
 
@@ -16,6 +19,9 @@
     <a href="../++skin++marstableformdemo/addHelloWorld">Hello World</a>
   </div>
   <div>
+    <a href="../++skin++marstableformdemo/widgets">All widgets</a>
+  </div>
+  <div>
     <a href="../++skin++marstableformdemo/questionnaireResults">Questionnaire</a>
   </div>
 

Modified: Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/configure.zcml
===================================================================
--- Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/configure.zcml	2007-07-08 00:20:25 UTC (rev 77598)
+++ Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/configure.zcml	2007-07-08 01:26:38 UTC (rev 77599)
@@ -15,6 +15,9 @@
     </resourceLibrary>
   </configure>
 
+  <adapter
+      factory=".widgets.widgets.getAllFields"
+      />
 
 </configure>
 

Modified: Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/message/message.py
===================================================================
--- Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/message/message.py	2007-07-08 00:20:25 UTC (rev 77598)
+++ Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/message/message.py	2007-07-08 01:26:38 UTC (rev 77599)
@@ -1,14 +1,11 @@
 __docformat__ = "reStructuredText"
-import os
 import datetime
 
 import zope.interface
-import zope.schema
 from zope.schema import fieldproperty
 from zope.traversing.browser import absoluteURL
 from zope.app.folder.interfaces import IFolder
 
-from z3c.csvvocabulary import CSVVocabulary
 from z3c.form import button, field, form, widget
 from z3c.form.interfaces import IAddForm
 from z3c.formui import layout

Modified: Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/questionnaire/questionnaire.py
===================================================================
--- Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/questionnaire/questionnaire.py	2007-07-08 00:20:25 UTC (rev 77598)
+++ Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/questionnaire/questionnaire.py	2007-07-08 01:26:38 UTC (rev 77599)
@@ -8,7 +8,6 @@
 
 from z3c.form import button, field, form, group, widget
 from z3c.form.interfaces import IAddForm
-from z3c.formdemo.message.interfaces import IHelloWorld
 from z3c.formdemo.questionnaire.interfaces import IQuestionnaire
 from z3c.formdemo.browser import formatter
 from z3c.formui import layout
@@ -68,6 +67,7 @@
 
 class QuestionnaireAddForm(mars.view.FormView, layout.AddFormLayoutSupport,
                           group.GroupForm, form.AddForm):
+    """Questionnaire add form"""
     grok.name('addQuestionnaire')
     grok.context(IFolder)
     zope.interface.implements(IQuestionnairePage)
@@ -93,6 +93,7 @@
 
 
 class DataColumn(column.SortingColumn):
+    """Data column for Questionnaire results view"""
 
     def __init__(self, field):
         super(DataColumn, self).__init__(field.title, field.__name__)
@@ -109,6 +110,7 @@
 
 
 class QuestionnaireResults(mars.view.PageletView):
+    """Questionnaire results tabular view"""
     grok.name('questionnaireResults')
     grok.context(IFolder)
     zope.interface.implements(IQuestionnairePage)
@@ -142,6 +144,7 @@
         self.table.sortKey = 'formdemo.questionnaire.sort-on'
 
 class ResultsTemplate(mars.template.TemplateFactory):
+    """Template for results view"""
     grok.context(QuestionnaireResults)
     grok.template('results.pt')
 

Modified: Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/tests.py
===================================================================
--- Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/tests.py	2007-07-08 00:20:25 UTC (rev 77598)
+++ Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/tests.py	2007-07-08 01:26:38 UTC (rev 77599)
@@ -9,8 +9,10 @@
 
 def test_suite():
     suites = []
-    for docpath in (('message', 'README.txt'),
+    for docpath in (
+                    ('message', 'README.txt'),
                     ('questionnaire', 'README.txt'),
+                    ('widgets', 'README.txt'),
                     ):
         suite = functional.FunctionalDocFileSuite(
             os.path.join(*docpath),

Added: Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/widgets/README.txt
===================================================================
--- Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/widgets/README.txt	                        (rev 0)
+++ Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/widgets/README.txt	2007-07-08 01:26:38 UTC (rev 77599)
@@ -0,0 +1,132 @@
+============
+Widgets Demo
+============
+
+The purpose of the widgets demo is demonstrate that there exists a widget for
+each standard field type and how it works.
+
+To start, we need to open a browser and go to the demo applications overview
+screen:
+
+  >>> from z3c.formdemo import testing
+  >>> from z3c.etestbrowser.testing import ExtendedTestBrowser
+  >>> user = ExtendedTestBrowser()
+  >>> user.addHeader('Accept-Language', 'en')
+  >>> user.handleErrors = False
+  >>> skinURL = 'http://localhost:8080/++skin++marsformdemo'
+
+Since all demos are purely public, there is no need to log in. Let's now click
+on the "All widgets" link:
+
+  >>> user.open(skinURL + '/widgets')
+
+You are now in the widgets form. Let's now fill out all forms an submit the
+form:
+
+  >>> import cStringIO
+
+  >>> def addSelection(browser, name, value, selected=True):
+  ...     form = browser.mech_browser.forms().next()
+  ...     form.new_control(
+  ...         'select', name, attrs={'__select': {'name': name, 'size': '5'}})
+  ...     form.new_control(
+  ...         'select', name,
+  ...         attrs={'__select': {'name': name, 'size': '5'},
+  ...                'selected': 'selected', 'value': value})
+
+  >>> user.getControl('ASCII', index=0).value += u' Add on.'
+  >>> user.getControl('ASCII Line').value += u' Add on.'
+  >>> user.getControl('no', index=0).click() # Boolean
+  >>> user.getControl('Bytes', index=0).add_file(
+  ...     cStringIO.StringIO('File contents'), 'text/plain', 'test.txt')
+  >>> user.getControl('Bytes Line').value += u' Add on.'
+  >>> user.getControl('Choice', index=0).getControl('Two').click()
+  >>> user.getControl('Choice (Not Required)').getControl('Two').click()
+  >>> user.getControl('Choice (Explicit Prompt)').getControl('Two').click()
+  >>> user.getControl('Date', index=0).value = u'7/1/07'
+  >>> user.getControl('Date/Time').value = u'7/1/07 12:15 AM'
+  >>> user.getControl('Decimal').value = u'12439.986'
+  >>> user.getControl('Dotted Name').value += u'demo'
+  >>> user.getControl('Float').value += u'12439.986'
+  >>> user.getControl('Frozen Set').getControl('One').click()
+  >>> user.getControl('Id').value += u'demo'
+  >>> user.getControl('Integer').value = u'12439'
+  >>> addSelection(user, 'form.widgets.listField', u'1')
+  >>> user.getControl('Password').value = u'pwd'
+  >>> user.getControl('Set', index=1).getControl('One').click()
+  >>> user.getControl('Source Text').value += u' Add on.'
+  >>> user.getControl('Text', index=1).value += u' Add on.'
+  >>> user.getControl('Text Line').value += u' Add on.'
+  >>> user.getControl('Time', index=1).value = u'12:15 AM'
+  >>> user.getControl('Time Delta').value = u'4 days, 1:00:00'
+  >>> addSelection(user, 'form.widgets.tupleField', u'1')
+  >>> user.getControl('URI').value += u'/Documentation'
+  >>> user.getControl(name='form.widgets.hiddenField').value += u' Add on.'
+
+  >>> user.getControl('Apply').click()
+
+Once submitted, the same form returns with a data changed method:
+
+  >>> from z3c.formdemo import testing
+  >>> testing.printElement(user, "//div[@class='summary']")
+  <div class="summary">Data successfully updated.</div>
+
+Let's now ensure that the data has been truly uploaded:
+
+  >>> from z3c.formdemo.widgets import interfaces
+  >>> fields = interfaces.IAllFields(getRootFolder())
+
+  >>> fields.asciiField
+  'This is\n ASCII. Add on.'
+  >>> fields.asciiLineField
+  'An ASCII line. Add on.'
+  >>> fields.boolField
+  False
+  >>> fields.bytesField
+  'File contents'
+  >>> fields.bytesLineField
+  'A Bytes line. Add on.'
+  >>> fields.choiceField
+  2
+  >>> fields.optionalChoiceField
+  2
+  >>> fields.promptChoiceField
+  2
+  >>> fields.dateField
+  datetime.date(2007, 7, 1)
+  >>> fields.datetimeField
+  datetime.datetime(2007, 7, 1, 0, 15)
+  >>> fields.decimalField
+  Decimal("12439.986")
+  >>> fields.dottedNameField
+  'z3c.formdemo'
+  >>> fields.floatField
+  12.811999999999999
+  >>> fields.frozenSetField
+  frozenset([3])
+  >>> fields.idField
+  'z3c.formdemo'
+  >>> fields.intField
+  12439
+  >>> fields.listField
+  [1]
+  >>> fields.passwordField
+  u'pwd'
+  >>> fields.setField
+  set([3])
+  >>> fields.sourceTextField
+  u'<source /> Add on.'
+  >>> fields.textField
+  u'Some\n Text. Add on.'
+  >>> fields.textLineField
+  u'Some Text line. Add on.'
+  >>> fields.timeField
+  datetime.time(0, 15)
+  >>> fields.timedeltaField
+  datetime.timedelta(4, 3600)
+  >>> fields.tupleField
+  (1,)
+  >>> fields.uriField
+  'http://zope.org/Documentation'
+  >>> fields.hiddenField
+  u'Some Hidden Text. Add on.'


Property changes on: Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/widgets/README.txt
___________________________________________________________________
Name: svn:keywords
   + Date Author

Added: Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/widgets/__init__.py
===================================================================
--- Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/widgets/__init__.py	                        (rev 0)
+++ Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/widgets/__init__.py	2007-07-08 01:26:38 UTC (rev 77599)
@@ -0,0 +1 @@
+#


Property changes on: Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/widgets/__init__.py
___________________________________________________________________
Name: svn:keywords
   + Id

Added: Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/widgets/widgets.py
===================================================================
--- Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/widgets/widgets.py	                        (rev 0)
+++ Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/widgets/widgets.py	2007-07-08 01:26:38 UTC (rev 77599)
@@ -0,0 +1,95 @@
+__docformat__ = "reStructuredText"
+import zope.interface
+import zope.schema
+import zope.annotation
+from zope.schema import fieldproperty
+from zope.traversing.browser import absoluteURL
+from zope.app.folder.interfaces import IFolder
+from zope.viewlet.viewlet import CSSViewlet
+
+from z3c.form import form, field
+from z3c.form.interfaces import IWidgets
+from z3c.form.interfaces import HIDDEN_MODE
+from z3c.template.interfaces import ILayoutTemplate
+from z3c.formdemo.widgets.interfaces import IAllFields
+
+import grok
+
+import mars.view
+import mars.template
+import mars.layer
+import mars.adapter
+import mars.resource
+from mars.formdemo.layer import IDemoBrowserLayer
+from mars.formdemo.skin import skin
+
+mars.layer.layer(IDemoBrowserLayer)
+
+class AllFields(grok.Model):
+
+    zope.interface.implements(IAllFields)
+    zope.component.adapts(zope.annotation.interfaces.IAttributeAnnotatable)
+
+    asciiField = fieldproperty.FieldProperty(IAllFields['asciiField'])
+    asciiLineField = fieldproperty.FieldProperty(IAllFields['asciiLineField'])
+    boolField = fieldproperty.FieldProperty(IAllFields['boolField'])
+    bytesField = fieldproperty.FieldProperty(IAllFields['bytesField'])
+    bytesLineField = fieldproperty.FieldProperty(IAllFields['bytesLineField'])
+    choiceField = fieldproperty.FieldProperty(IAllFields['choiceField'])
+    optionalChoiceField = fieldproperty.FieldProperty(
+        IAllFields['optionalChoiceField'])
+    promptChoiceField = fieldproperty.FieldProperty(
+        IAllFields['promptChoiceField'])
+    dateField = fieldproperty.FieldProperty(IAllFields['dateField'])
+    datetimeField = fieldproperty.FieldProperty(IAllFields['datetimeField'])
+    decimalField = fieldproperty.FieldProperty(IAllFields['decimalField'])
+    dictField = fieldproperty.FieldProperty(IAllFields['dictField'])
+    dottedNameField = fieldproperty.FieldProperty(IAllFields['dottedNameField'])
+    floatField = fieldproperty.FieldProperty(IAllFields['floatField'])
+    frozenSetField = fieldproperty.FieldProperty(IAllFields['frozenSetField'])
+    idField = fieldproperty.FieldProperty(IAllFields['idField'])
+    intField = fieldproperty.FieldProperty(IAllFields['intField'])
+    listField = fieldproperty.FieldProperty(IAllFields['listField'])
+    objectField = fieldproperty.FieldProperty(IAllFields['objectField'])
+    passwordField = fieldproperty.FieldProperty(IAllFields['passwordField'])
+    setField = fieldproperty.FieldProperty(IAllFields['setField'])
+    sourceTextField = fieldproperty.FieldProperty(IAllFields['sourceTextField'])
+    textField = fieldproperty.FieldProperty(IAllFields['textField'])
+    textLineField = fieldproperty.FieldProperty(IAllFields['textLineField'])
+    timeField = fieldproperty.FieldProperty(IAllFields['timeField'])
+    timedeltaField = fieldproperty.FieldProperty(IAllFields['timedeltaField'])
+    tupleField = fieldproperty.FieldProperty(IAllFields['tupleField'])
+    uriField = fieldproperty.FieldProperty(IAllFields['uriField'])
+    hiddenField = fieldproperty.FieldProperty(IAllFields['hiddenField'])
+
+# register the AllField class as a annotation adapter
+getAllFields = zope.annotation.factory(AllFields)
+# TODO fix me
+#class GetAllFields(mars.adapter.AdapterFactory):
+#    mars.adapter.factory(getAllFields)
+
+class AllFieldsForm(mars.view.PageletView, form.EditForm):
+    """A form showing all fields."""
+    grok.name('widgets')
+    grok.context(zope.interface.Interface)
+    fields = field.Fields(IAllFields).omit(
+        'dictField', 'objectField')
+    label = 'Widgets Demo'
+
+    def getContent(self):
+        return IAllFields(self.context)
+
+    def updateWidgets(self):
+        self.widgets = zope.component.getMultiAdapter(
+            (self, self.request, self.getContent()), IWidgets)
+        self.widgets.update()
+        self.widgets['hiddenField'].mode = HIDDEN_MODE
+        self.widgets['promptChoiceField'].prompt = True
+        self.widgets['promptChoiceField'].update()
+
+    def __call__(self):
+        self.update()
+        layout = zope.component.getMultiAdapter((self, self.request),
+            ILayoutTemplate)
+        return layout(self)
+


Property changes on: Sandbox/darrylcousins/mars.formdemo/src/mars/formdemo/widgets/widgets.py
___________________________________________________________________
Name: svn:keywords
   + Id



More information about the Checkins mailing list