Widgets for zope.schema.Time

Bug #144838 reported by Laurence Rowe
2
Affects Status Importance Assigned to Milestone
Zope 3
Won't Fix
Undecided
Unassigned
zope.formlib
Invalid
Undecided
Unassigned

Bug Description

Patch to zope.app.form/trunk...

Index: src/zope/app/form/browser/configure.zcml
===================================================================
--- src/zope/app/form/browser/configure.zcml (revision 80005)
+++ src/zope/app/form/browser/configure.zcml (working copy)
@@ -217,6 +217,22 @@
       />

   <adapter
+ for="zope.schema.interfaces.ITime
+ zope.publisher.interfaces.browser.IBrowserRequest"
+ provides="zope.app.form.browser.interfaces.ISimpleInputWidget"
+ factory=".TimeWidget"
+ permission="zope.Public"
+ />
+
+ <adapter
+ for="zope.schema.interfaces.ITime
+ zope.publisher.interfaces.browser.IBrowserRequest"
+ provides="zope.app.form.interfaces.IDisplayWidget"
+ factory=".UnicodeDisplayWidget"
+ permission="zope.Public"
+ />
+
+ <adapter
       for="zope.schema.interfaces.IDatetime
            zope.publisher.interfaces.browser.IBrowserRequest"
       provides="zope.app.form.browser.interfaces.ISimpleInputWidget"
Index: src/zope/app/form/browser/__init__.py
===================================================================
--- src/zope/app/form/browser/__init__.py (revision 80005)
+++ src/zope/app/form/browser/__init__.py (working copy)
@@ -26,6 +26,7 @@
 from zope.app.form.browser.textwidgets import ASCIIWidget, ASCIIAreaWidget
 from zope.app.form.browser.textwidgets import IntWidget, FloatWidget
 from zope.app.form.browser.textwidgets import DecimalWidget
+from zope.app.form.browser.textwidgets import TimeWidget
 from zope.app.form.browser.textwidgets import DatetimeWidget, DateWidget
 from zope.app.form.browser.textwidgets import DatetimeI18nWidget
 from zope.app.form.browser.textwidgets import DateI18nWidget
Index: src/zope/app/form/browser/textwidgets.py
===================================================================
--- src/zope/app/form/browser/textwidgets.py (revision 80005)
+++ src/zope/app/form/browser/textwidgets.py (working copy)
@@ -18,6 +18,7 @@
 __docformat__ = 'restructuredtext'

 import decimal
+import datetime
 from xml.sax import saxutils
 from zope.interface import implements
 from zope.datetime import parseDatetimetz
@@ -583,6 +584,41 @@
             v = v.date()
         return v

+
+class TimeWidget(TextWidget):
+ """Time entry widget.
+ Expected format: hour [minute [second [partial seconds]]]
+ The characters .,: along with whitespace are valid seperators."""
+ displayWidth = 10
+
+ def _toFieldValue(self, input):
+ if input == self._missing:
+ return self.context.missing_value
+ else:
+ try:
+ u = input.replace('.', ' ')
+ u = u.replace(':', ' ')
+ u = u.replace(',', ' ')
+ parts = u.split()
+ if len(parts) == 4:
+ h, m , s, ms = parts
+ ms = (ms + '000000')[:6]
+ return datetime.time(int(h), int(m), int(s), int(ms))
+ if len(parts) > 4:
+ raise ValueError('Too many values to unpack')
+ else:
+ return datetime.time(*(int(p) for p in parts))
+ except (ValueError, TypeError), v:
+ raise ConversionError(_("Invalid datetime.time data"),
+ "%s (%r)" % (v, input))
+
+ def _toFormValue(self, value):
+ if value == self.context.missing_value:
+ value = self._missing
+ else:
+ return value.isoformat()
+
+
 class DateI18nWidget(TextWidget):
     """I18n date entry widget.

Revision history for this message
Philipp von Weitershausen (philikon) wrote : Re: [Bug 144838] Widgets for zope.schema.Time

In general I'm +1, but:

* I suggest using the zope.datetime.time(time_string) function to
parse the string.

* This needs (f)tests.

Revision history for this message
Laurence Rowe (lrowe) wrote :

I tried return datetime.datetime.fromtimestamp(zope.datetime.time(input)).time()
This worked as expected until I round tripped the time.
datetime.time.isoformat returns a string such as u'12:45:00' for 12:45.
It seems that zope.datetime.time cannot handle seconds, and ends up giveing you 00:00.

Tres Seaver (tseaver)
Changed in zope3:
status: New → Won't Fix
Revision history for this message
Colin Watson (cjwatson) wrote :

The zope.formlib project on Launchpad has been archived at the request of the Zope developers (see https://answers.launchpad.net/launchpad/+question/683589 and https://answers.launchpad.net/launchpad/+question/685285). If this bug is still relevant, please refile it at https://github.com/zopefoundation/zope.formlib.

Changed in zope.formlib:
status: New → Invalid
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.