Widgets for zope.schema.Time
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Zope 3 |
Won't Fix
|
Undecided
|
Unassigned | ||
zope.formlib |
Invalid
|
Undecided
|
Unassigned |
Bug Description
Patch to zope.app.
Index: src/zope/
=======
--- src/zope/
+++ src/zope/
@@ -217,6 +217,22 @@
/>
<adapter
+ for="zope.
+ zope.publisher.
+ provides=
+ factory=
+ permission=
+ />
+
+ <adapter
+ for="zope.
+ zope.publisher.
+ provides=
+ factory=
+ permission=
+ />
+
+ <adapter
Index: src/zope/
=======
--- src/zope/
+++ src/zope/
@@ -26,6 +26,7 @@
from zope.app.
from zope.app.
from zope.app.
+from zope.app.
from zope.app.
from zope.app.
from zope.app.
Index: src/zope/
=======
--- src/zope/
+++ src/zope/
@@ -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(
+ """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.
+ 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.
+ if len(parts) > 4:
+ raise ValueError('Too many values to unpack')
+ else:
+ return datetime.
+ except (ValueError, TypeError), v:
+ raise ConversionError
+ "%s (%r)" % (v, input))
+
+ def _toFormValue(self, value):
+ if value == self.context.
+ value = self._missing
+ else:
+ return value.isoformat()
+
+
class DateI18nWidget(
"""I18n date entry widget.
Changed in zope3: | |
status: | New → Won't Fix |
In general I'm +1, but:
* I suggest using the zope.datetime. time(time_ string) function to
parse the string.
* This needs (f)tests.