[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