[Zope3-checkins] SVN: Zope3/branches/3.3/ Fixed issue 525:
DateWidget ru-format
Dmitry Vasiliev
dima at hlabs.spb.ru
Sat Jun 24 05:02:46 EDT 2006
Log message for revision 68818:
Fixed issue 525: DateWidget ru-format
Changed:
U Zope3/branches/3.3/doc/CHANGES.txt
U Zope3/branches/3.3/src/zope/app/form/browser/ftests/test_datetimewidget.py
U Zope3/branches/3.3/src/zope/app/form/browser/tests/test_browserwidget.py
U Zope3/branches/3.3/src/zope/app/form/browser/tests/test_datetimewidget.py
U Zope3/branches/3.3/src/zope/app/form/browser/tests/test_datewidget.py
U Zope3/branches/3.3/src/zope/app/form/browser/tests/test_textwidget.py
U Zope3/branches/3.3/src/zope/app/form/browser/textwidgets.py
U Zope3/branches/3.3/src/zope/formlib/form.txt
-=-
Modified: Zope3/branches/3.3/doc/CHANGES.txt
===================================================================
--- Zope3/branches/3.3/doc/CHANGES.txt 2006-06-24 09:00:09 UTC (rev 68817)
+++ Zope3/branches/3.3/doc/CHANGES.txt 2006-06-24 09:02:44 UTC (rev 68818)
@@ -10,6 +10,10 @@
Bugfixes
+ - Fixed issue 525: DateWidget ru-format.
+ If you plan to use DatetimeWidget with timezone information take a look
+ at the note in the DatetimeWidget docstring;
+
- Fixed issue 531: Spurious i18n deprecation warnings;
- Fixed issue 599: Provided a view for interface.exceptions.Invalid to
@@ -19,7 +23,7 @@
'install' module; they get re-raised now.
- Fixed issue 550: Added adapter for datetime.datetime for xmlrpc
- premarshalling$
+ premarshalling;
- Fixed issue 633: Boston skin has logo slot now
Modified: Zope3/branches/3.3/src/zope/app/form/browser/ftests/test_datetimewidget.py
===================================================================
--- Zope3/branches/3.3/src/zope/app/form/browser/ftests/test_datetimewidget.py 2006-06-24 09:00:09 UTC (rev 68817)
+++ Zope3/branches/3.3/src/zope/app/form/browser/ftests/test_datetimewidget.py 2006-06-24 09:02:44 UTC (rev 68818)
@@ -22,7 +22,7 @@
from datetime import datetime
import zope.security.checker
-from zope.datetime import parseDatetimetz, tzinfo
+from zope.datetime import tzinfo
from zope.interface import Interface, implements
from zope.schema import Datetime, Choice
from zope.traversing.api import traverse
@@ -30,6 +30,7 @@
from zope.app.form.browser.ftests.support import *
from zope.app.testing.functional import BrowserTestCase
+
class IDatetimeTest(Interface):
d2 = Datetime(
@@ -38,93 +39,92 @@
d3 = Choice(
required=False,
values=(
- datetime(2003, 9, 15, tzinfo=tzinfo(0)),
- datetime(2003, 10, 15, tzinfo=tzinfo(0))),
- missing_value=datetime(2000, 1, 1, tzinfo=tzinfo(0)))
+ datetime(2003, 9, 15),
+ datetime(2003, 10, 15)),
+ missing_value=datetime(2000, 1, 1))
d1 = Datetime(
required=True,
- min=datetime(2003, 1, 1, tzinfo=tzinfo(0)),
- max=datetime(2020, 12, 31, tzinfo=tzinfo(0)))
+ min=datetime(2003, 1, 1),
+ max=datetime(2020, 12, 31))
class DatetimeTest(Persistent):
implements(IDatetimeTest)
def __init__(self):
- self.d1 = datetime(2003, 4, 6, tzinfo=tzinfo(0))
- self.d2 = datetime(2003, 8, 6, tzinfo=tzinfo(0))
+ self.d1 = datetime(2003, 4, 6)
+ self.d2 = datetime(2003, 8, 6)
self.d3 = None
-def getDateForField(field, source):
- """Returns a datetime object for the specified field in source.
+class Test(BrowserTestCase):
- Returns None if the field value cannot be converted to date.
- """
+ def setUp(self):
+ BrowserTestCase.setUp(self)
+ registerEditForm(IDatetimeTest)
+ defineSecurity(DatetimeTest, IDatetimeTest)
- # look in input element first
- pattern = '<input .* name="field.%s".* value="(.*)".*>' % field
- m = re.search(pattern, source)
- if m is None:
- # look in a select element
- pattern = '<select .* name="field.%s".*>.*' \
- '<option value="(.*)" selected>*.</select>' % field
- m = re.search(pattern, source, re.DOTALL)
+ def getDateForField(self, field, source):
+ """Returns a datetime object for the specified field in source.
+
+ Returns None if the field value cannot be converted to date.
+ """
+
+ # look in input element first
+ pattern = '<input .* name="field.%s".* value="(.*)".*>' % field
+ m = re.search(pattern, source)
if m is None:
- return None
+ # look in a select element
+ pattern = '<select .* name="field.%s".*>.*' \
+ '<option value="(.*)" selected>*.</select>' % field
+ m = re.search(pattern, source, re.DOTALL)
+ if m is None:
+ return None
- try:
- return parseDatetimetz(m.group(1))
- except:
- # ignore specifics
- return None
+ request = self.makeRequest(env={"HTTP_ACCEPT_LANGUAGE": "ru"})
+ formatter = request.locale.dates.getFormatter("dateTime")
-class Test(BrowserTestCase):
+ return formatter.parse(m.group(1))
- def setUp(self):
- BrowserTestCase.setUp(self)
- registerEditForm(IDatetimeTest)
- defineSecurity(DatetimeTest, IDatetimeTest)
-
def test_display_editform(self):
self.getRootFolder()['test'] = DatetimeTest()
transaction.commit()
object = traverse(self.getRootFolder(), 'test')
# display edit view
- response = self.publish('/test/edit.html')
+ response = self.publish('/test/edit.html',
+ env={"HTTP_ACCEPT_LANGUAGE": "ru"})
self.assertEqual(response.getStatus(), 200)
# confirm date values in form with actual values
- self.assertEqual(getDateForField('d1', response.getBody()), object.d1)
- self.assertEqual(getDateForField('d2', response.getBody()), object.d2)
- self.assert_(getDateForField('d3', response.getBody()) is None)
+ self.assertEqual(self.getDateForField('d1', response.getBody()),
+ object.d1)
+ self.assertEqual(self.getDateForField('d2', response.getBody()),
+ object.d2)
+ self.assert_(self.getDateForField('d3', response.getBody()) is None)
def test_submit_editform(self):
self.getRootFolder()['test'] = DatetimeTest()
transaction.commit()
- d1 = datetime(2003, 2, 1, tzinfo=tzinfo(0))
- d2 = datetime(2003, 2, 2, tzinfo=tzinfo(0))
- d3 = datetime(2003, 10, 15, tzinfo=tzinfo(0))
-
# submit edit view
response = self.publish('/test/edit.html', form={
'UPDATE_SUBMIT' : '',
- 'field.d1' : str(d1),
- 'field.d2' : str(d2),
- 'field.d3' : str(d3) })
+ 'field.d1' : u'Feb 1, 2003 12:00:00 AM',
+ 'field.d2' : u'Feb 2, 2003 12:00:00 AM',
+ 'field.d3' : u'2003-10-15 00:00:00' },
+ env={"HTTP_ACCEPT_LANGUAGE": "en"})
self.assertEqual(response.getStatus(), 200)
self.assert_(updatedMsgExists(response.getBody()))
# check new values in object
object = traverse(self.getRootFolder(), 'test')
- self.assertEqual(object.d1, d1)
- self.assertEqual(object.d2, d2)
- self.assertEqual(object.d3, d3)
+ self.assertEqual(object.d1, datetime(2003, 2, 1))
+ self.assertEqual(object.d2, datetime(2003, 2, 2))
+ self.assertEqual(object.d3, datetime(2003, 10, 15))
def test_missing_value(self):
@@ -143,7 +143,7 @@
object = traverse(self.getRootFolder(), 'test')
self.assert_(object.d2 is None) # default missing_value for dates
# 2000-1-1 is missing_value for d3
- self.assertEqual(object.d3, datetime(2000, 1, 1, tzinfo=tzinfo(0)))
+ self.assertEqual(object.d3, datetime(2000, 1, 1))
def test_required_validation(self):
@@ -171,7 +171,7 @@
# submit a value for d3 that isn't allowed
response = self.publish('/test/edit.html', form={
'UPDATE_SUBMIT' : '',
- 'field.d3' : str(datetime(2003, 2, 1, tzinfo=tzinfo(0))) })
+ 'field.d3' : u'Feb 1, 2003 12:00:00 AM'})
self.assertEqual(response.getStatus(), 200)
self.assert_(invalidValueErrorExists('d3', response.getBody()))
@@ -183,7 +183,8 @@
# submit value for d1 that is too low
response = self.publish('/test/edit.html', form={
'UPDATE_SUBMIT' : '',
- 'field.d1' : str(datetime(2002, 12, 31, tzinfo=tzinfo(0))) })
+ 'field.d1' : u'Dec 31, 2002 12:00:00 AM'},
+ env={"HTTP_ACCEPT_LANGUAGE": "en"})
self.assertEqual(response.getStatus(), 200)
self.assert_(validationErrorExists('d1', 'Value is too small',
response.getBody()))
@@ -191,7 +192,8 @@
# submit value for i1 that is too high
response = self.publish('/test/edit.html', form={
'UPDATE_SUBMIT' : '',
- 'field.d1' : str(datetime(2021, 1, 1, tzinfo=tzinfo(0))) })
+ 'field.d1' : u'Dec 1, 2021 12:00:00 AM'},
+ env={"HTTP_ACCEPT_LANGUAGE": "en"})
self.assertEqual(response.getStatus(), 200)
self.assert_(validationErrorExists('d1', 'Value is too big',
response.getBody()))
@@ -230,5 +232,3 @@
if __name__=='__main__':
unittest.main(defaultTest='test_suite')
-
-
Modified: Zope3/branches/3.3/src/zope/app/form/browser/tests/test_browserwidget.py
===================================================================
--- Zope3/branches/3.3/src/zope/app/form/browser/tests/test_browserwidget.py 2006-06-24 09:00:09 UTC (rev 68817)
+++ Zope3/branches/3.3/src/zope/app/form/browser/tests/test_browserwidget.py 2006-06-24 09:02:44 UTC (rev 68818)
@@ -39,31 +39,31 @@
class BrowserWidgetTest(PlacelessSetup,
support.VerifyResults,
unittest.TestCase):
-
+
_FieldFactory = Text
_WidgetFactory = None
-
+
def setUpContent(self, desc=u'', title=u'Foo Title'):
class ITestContent(Interface):
foo = self._FieldFactory(
- title=title,
- description=desc)
+ title=title,
+ description=desc)
class TestObject:
implements(ITestContent)
self.content = TestObject()
field = ITestContent['foo']
field = field.bind(self.content)
- request = TestRequest(HTTP_ACCEPT_LANGUAGE='pl')
+ request = TestRequest(HTTP_ACCEPT_LANGUAGE='ru')
request.form['field.foo'] = u'Foo Value'
self._widget = self._WidgetFactory(field, request)
-
+
def setUp(self):
super(BrowserWidgetTest, self).setUp()
self.setUpContent()
class SimpleInputWidgetTest(BrowserWidgetTest):
-
+
_WidgetFactory = SimpleInputWidget
def test_required(self):
@@ -86,10 +86,12 @@
self.assertEqual(self._widget.cssClass, '')
self.assertEqual(self._widget.extra, '')
- def testRender(self):
- value = 'Foo Value'
- check_list = ('type="text"', 'id="field.foo"', 'name="field.foo"',
- 'value="Foo Value"')
+ def testRender(self, value=None, check_list=None):
+ if value is None:
+ value = 'Foo Value'
+ if check_list is None:
+ check_list = ('type="text"', 'id="field.foo"', 'name="field.foo"',
+ 'value="Foo Value"')
self._widget.setRenderedValue(value)
self.verifyResult(self._widget(), check_list)
check_list = ('type="hidden"',) + check_list[1:]
@@ -147,7 +149,7 @@
self._widget.request.form['field.foo'] = u'barf!'
self.failIf(self._widget.hasValidInput())
- del self._widget.request.form['field.foo']
+ del self._widget.request.form['field.foo']
self._widget.context.required = True
self.failIf(self._widget.hasValidInput())
@@ -164,7 +166,7 @@
self._widget.request.form['field.foo'] = u'barf!'
self.assertRaises(ConversionError, self._widget.getInputValue)
- del self._widget.request.form['field.foo']
+ del self._widget.request.form['field.foo']
self._widget.context.required = True
self.assertRaises(MissingInputError, self._widget.getInputValue)
Modified: Zope3/branches/3.3/src/zope/app/form/browser/tests/test_datetimewidget.py
===================================================================
--- Zope3/branches/3.3/src/zope/app/form/browser/tests/test_datetimewidget.py 2006-06-24 09:00:09 UTC (rev 68817)
+++ Zope3/branches/3.3/src/zope/app/form/browser/tests/test_datetimewidget.py 2006-06-24 09:02:44 UTC (rev 68818)
@@ -15,20 +15,22 @@
$Id$
"""
+import datetime
import unittest, doctest
-from zope.datetime import parseDatetimetz
+
+from zope.schema import Datetime
+from zope.datetime import tzinfo
+from zope.interface.verify import verifyClass
+
from zope.app.form.browser.tests.test_browserwidget import SimpleInputWidgetTest
from zope.app.form.interfaces import IInputWidget
from zope.app.form.browser import DatetimeWidget
from zope.app.form.interfaces import ConversionError, WidgetInputError
-from zope.interface.verify import verifyClass
-from zope.schema import Datetime
-
class DatetimeWidgetTest(SimpleInputWidgetTest):
"""Documents and tests the datetime widget.
-
+
>>> verifyClass(IInputWidget, DatetimeWidget)
True
"""
@@ -36,25 +38,97 @@
_FieldFactory = Datetime
_WidgetFactory = DatetimeWidget
+ def testDefaultDisplayStyle(self):
+ self.failIf(self._widget.displayStyle)
+
+ def testRender(self):
+ super(DatetimeWidgetTest, self).testRender(
+ datetime.datetime(2004, 3, 26, 12, 58, 59),
+ ('type="text"', 'id="field.foo"', 'name="field.foo"',
+ 'value="26.03.2004 12:58:59"'))
+
+ def testRenderShort(self):
+ self._widget.displayStyle = "short"
+ super(DatetimeWidgetTest, self).testRender(
+ datetime.datetime(2004, 3, 26, 12, 58, 59),
+ ('type="text"', 'id="field.foo"', 'name="field.foo"',
+ 'value="26.03.04 12:58"'))
+
+ def testRenderMedium(self):
+ self._widget.displayStyle = "medium"
+ super(DatetimeWidgetTest, self).testRender(
+ datetime.datetime(2004, 3, 26, 12, 58, 59),
+ ('type="text"', 'id="field.foo"', 'name="field.foo"',
+ 'value="26.03.2004 12:58:59"'))
+
+ def testRenderLong(self):
+ self._widget.displayStyle = "long"
+ super(DatetimeWidgetTest, self).testRender(
+ datetime.datetime(2004, 3, 26, 12, 58, 59),
+ ('type="text"', 'id="field.foo"', 'name="field.foo"',
+ u'value="26 \u041c\u0430\u0440\u0442 2004 \u0433.'
+ u' 12:58:59 +000"'))
+
+ def testRenderFull(self):
+ self._widget.displayStyle = "full"
+ super(DatetimeWidgetTest, self).testRender(
+ datetime.datetime(2004, 3, 26, 12, 58, 59),
+ ('type="text"', 'id="field.foo"', 'name="field.foo"',
+ u'value="26 \u041c\u0430\u0440\u0442 2004 \u0433.'
+ u' 12:58:59 +000"'))
+
def test_hasInput(self):
del self._widget.request.form['field.foo']
self.failIf(self._widget.hasInput())
# widget has input, even if input is an empty string
self._widget.request.form['field.foo'] = u''
self.failUnless(self._widget.hasInput())
- self._widget.request.form['field.foo'] = u'2003/03/26 12:00:00'
+ self._widget.request.form['field.foo'] = u'26.03.2003 12:00:00'
self.failUnless(self._widget.hasInput())
- def test_getInputValue(self):
- TEST_DATE= u'2003/03/26 12:00:00'
+ def test_getDefaultInputValue(self,
+ value=u'26.03.2004 12:58:59',
+ check_value=datetime.datetime(2004, 3, 26, 12, 58, 59)):
self._widget.request.form['field.foo'] = u''
self.assertRaises(WidgetInputError, self._widget.getInputValue)
- self._widget.request.form['field.foo'] = TEST_DATE
- self.assertEquals(self._widget.getInputValue(), parseDatetimetz(TEST_DATE))
+ self._widget.request.form['field.foo'] = value
+ self.assertEquals(self._widget.getInputValue(), check_value)
self._widget.request.form['field.foo'] = u'abc'
self.assertRaises(ConversionError, self._widget.getInputValue)
+ def test_getShortInputValue(self):
+ self._widget.displayStyle = "short"
+ self.test_getDefaultInputValue(
+ value=u'26.03.04 12:58:59',
+ check_value=datetime.datetime(2004, 3, 26, 12, 58)
+ )
+ def test_getMediumInputValue(self):
+ self._widget.displayStyle = "medium"
+ self.test_getDefaultInputValue(
+ value=u'26.03.2004 12:58:59',
+ check_value=datetime.datetime(2004, 3, 26, 12, 58, 59)
+ )
+
+ def test_getLongInputValue(self):
+ self._widget.displayStyle = "long"
+ self.test_getDefaultInputValue(
+ value=(u'26 \u041c\u0430\u0440\u0442 2004 \u0433.'
+ u' 12:58:59 +030'),
+ check_value=datetime.datetime(2004, 3, 26, 12, 58, 59,
+ tzinfo=tzinfo(30))
+ )
+
+ def test_getFullInputValue(self):
+ self._widget.displayStyle = "full"
+ self.test_getDefaultInputValue(
+ value=(u'26 \u041c\u0430\u0440\u0442 2004 \u0433.'
+ u' 12:58:59 +030'),
+ check_value=datetime.datetime(2004, 3, 26, 12, 58, 59,
+ tzinfo=tzinfo(30))
+ )
+
+
def test_suite():
return unittest.TestSuite((
unittest.makeSuite(DatetimeWidgetTest),
@@ -63,4 +137,3 @@
if __name__=='__main__':
unittest.main(defaultTest='test_suite')
-
Modified: Zope3/branches/3.3/src/zope/app/form/browser/tests/test_datewidget.py
===================================================================
--- Zope3/branches/3.3/src/zope/app/form/browser/tests/test_datewidget.py 2006-06-24 09:00:09 UTC (rev 68817)
+++ Zope3/branches/3.3/src/zope/app/form/browser/tests/test_datewidget.py 2006-06-24 09:02:44 UTC (rev 68818)
@@ -15,15 +15,19 @@
$Id$
"""
+import datetime
import unittest, doctest
+
from zope.datetime import parseDatetimetz
+from zope.schema import Date
+from zope.interface.verify import verifyClass
+
from zope.app.form.browser.tests.test_browserwidget import SimpleInputWidgetTest
from zope.app.form.interfaces import IInputWidget
from zope.app.form.browser import DateWidget
from zope.app.form.interfaces import ConversionError, WidgetInputError
-from zope.schema import Date
-from zope.interface.verify import verifyClass
+
class DateWidgetTest(SimpleInputWidgetTest):
"""Documents and tests the date widget.
@@ -34,26 +38,82 @@
_FieldFactory = Date
_WidgetFactory = DateWidget
+ def testDefaultDisplayStyle(self):
+ self.failIf(self._widget.displayStyle)
+
+ def testRender(self):
+ super(DateWidgetTest, self).testRender(
+ datetime.date(2003, 3, 26),
+ ('type="text"', 'id="field.foo"', 'name="field.foo"',
+ 'value="26.03.2003"'))
+
+ def testRenderShort(self):
+ self._widget.displayStyle = "short"
+ super(DateWidgetTest, self).testRender(
+ datetime.datetime(2004, 3, 26, 12, 58, 59),
+ ('type="text"', 'id="field.foo"', 'name="field.foo"',
+ 'value="26.03.04"'))
+
+ def testRenderMedium(self):
+ self._widget.displayStyle = "medium"
+ super(DateWidgetTest, self).testRender(
+ datetime.datetime(2004, 3, 26, 12, 58, 59),
+ ('type="text"', 'id="field.foo"', 'name="field.foo"',
+ 'value="26.03.2004"'))
+
+ def testRenderLong(self):
+ self._widget.displayStyle = "long"
+ super(DateWidgetTest, self).testRender(
+ datetime.datetime(2004, 3, 26, 12, 58, 59),
+ ('type="text"', 'id="field.foo"', 'name="field.foo"',
+ u'value="26 \u041c\u0430\u0440\u0442 2004 \u0433."'))
+
+ def testRenderFull(self):
+ self._widget.displayStyle = "full"
+ super(DateWidgetTest, self).testRender(
+ datetime.datetime(2004, 3, 26, 12, 58, 59),
+ ('type="text"', 'id="field.foo"', 'name="field.foo"',
+ u'value="26 \u041c\u0430\u0440\u0442 2004 \u0433."'))
+
def test_hasInput(self):
del self._widget.request.form['field.foo']
self.failIf(self._widget.hasInput())
self._widget.request.form['field.foo'] = u''
self.failUnless(self._widget.hasInput())
- self._widget.request.form['field.foo'] = u'2003/03/26'
+ self._widget.request.form['field.foo'] = u'26.03.2003'
self.failUnless(self._widget.hasInput())
- def test_getInputValue(self):
- TEST_DATE= u'2003/03/26'
+ def test_getDefaultInputValue(self,
+ value=u'26.03.2004',
+ check_value=datetime.date(2004, 3, 26)):
self._widget.request.form['field.foo'] = u''
self.assertRaises(WidgetInputError, self._widget.getInputValue)
- self._widget.request.form['field.foo'] = TEST_DATE
- self.assertEquals(
- self._widget.getInputValue(),
- parseDatetimetz(TEST_DATE).date())
+ self._widget.request.form['field.foo'] = value
+ self.assertEquals(self._widget.getInputValue(), check_value)
self._widget.request.form['field.foo'] = u'abc'
self.assertRaises(ConversionError, self._widget.getInputValue)
+ def test_getShortInputValue(self):
+ self._widget.displayStyle = "short"
+ self.test_getDefaultInputValue(u'26.03.04')
+ def test_getMediumInputValue(self):
+ self._widget.displayStyle = "medium"
+ self.test_getDefaultInputValue(u'26.03.2004')
+
+ def test_getLongInputValue(self):
+ self._widget.displayStyle = "long"
+ self.test_getDefaultInputValue(
+ u'26 \u041c\u0430\u0440\u0442 2004 \u0433.'
+ )
+
+ def test_getFullInputValue(self):
+ self._widget.displayStyle = "full"
+ self.test_getDefaultInputValue(
+ u'26 \u041c\u0430\u0440\u0442 2004 \u0433.'
+ )
+
+
def test_suite():
return unittest.TestSuite((
unittest.makeSuite(DateWidgetTest),
@@ -62,4 +122,3 @@
if __name__=='__main__':
unittest.main(defaultTest='test_suite')
-
Modified: Zope3/branches/3.3/src/zope/app/form/browser/tests/test_textwidget.py
===================================================================
--- Zope3/branches/3.3/src/zope/app/form/browser/tests/test_textwidget.py 2006-06-24 09:00:09 UTC (rev 68817)
+++ Zope3/branches/3.3/src/zope/app/form/browser/tests/test_textwidget.py 2006-06-24 09:02:44 UTC (rev 68818)
@@ -168,7 +168,7 @@
self.verifyResult(self._widget(),
["<span",
'class="%s"' % self.expected_class,
- "2004-12-01",
+ "01.12.2004",
"</span"])
def testRenderShort(self):
@@ -177,7 +177,7 @@
self.verifyResult(self._widget(),
["<span",
'class="%s"' % self.expected_class,
- u"04-12-01",
+ u"01.12.04",
"</span"])
def testRenderMedium(self):
@@ -186,7 +186,7 @@
self.verifyResult(self._widget(),
["<span",
'class="%s"' % self.expected_class,
- u"2004-12-01",
+ u"01.12.2004",
"</span"])
def testRenderLong(self):
@@ -195,7 +195,8 @@
self.verifyResult(self._widget(),
["<span",
'class="%s"' % self.expected_class,
- u"1 grudzie\u0144 2004",
+ u"1 \u0414\u0435\u043a\u0430\u0431\u0440\u044c"
+ u" 2004 \u0433.",
"</span"])
def testRenderFull(self):
@@ -204,7 +205,8 @@
self.verifyResult(self._widget(),
["<span",
'class="%s"' % self.expected_class,
- u"1 grudzie\u0144 2004",
+ u"1 \u0414\u0435\u043a\u0430\u0431\u0440\u044c"
+ u" 2004 \u0433.",
"</span"])
Modified: Zope3/branches/3.3/src/zope/app/form/browser/textwidgets.py
===================================================================
--- Zope3/branches/3.3/src/zope/app/form/browser/textwidgets.py 2006-06-24 09:00:09 UTC (rev 68817)
+++ Zope3/branches/3.3/src/zope/app/form/browser/textwidgets.py 2006-06-24 09:02:44 UTC (rev 68818)
@@ -19,8 +19,7 @@
from xml.sax import saxutils
from zope.interface import implements
-from zope.datetime import parseDatetimetz
-from zope.datetime import DateTimeError
+from zope.i18n.format import DateTimeParseError
from zope.app.form.interfaces import IInputWidget, ConversionError
from zope.app.form.browser.interfaces import ITextBrowserWidget
@@ -302,7 +301,7 @@
except ValueError, v:
raise ConversionError(_("Invalid unicode data"), v)
else:
- value = value.replace("\r\n", "\n")
+ value = value.replace("\r\n", "\n")
return value
def _toFormValue(self, value):
@@ -312,7 +311,7 @@
value = escape(value)
else:
value = u''
-
+
return value
def __call__(self):
@@ -484,33 +483,59 @@
except ValueError, v:
raise ConversionError(_("Invalid floating point data"), v)
+class DateWidget(TextWidget):
+ """Date entry widget.
-class DatetimeWidget(TextWidget):
- """Datetime entry widget."""
+ The `displayStyle` attribute may be set to control the formatting of the
+ value.
+ `displayStyle` must be one of 'full', 'long', 'medium', 'short',
+ or None ('' is accepted an an alternative to None to support
+ provision of a value from ZCML).
+ """
+
+ _category = "date"
+
displayWidth = 20
+ displayStyle = None
+
def _toFieldValue(self, input):
if input == self._missing:
return self.context.missing_value
else:
try:
- return parseDatetimetz(input)
- except (DateTimeError, ValueError, IndexError), v:
- raise ConversionError(_("Invalid datetime data"), v)
+ formatter = self.request.locale.dates.getFormatter(
+ self._category, (self.displayStyle or None))
+ return formatter.parse(input)
+ except (DateTimeParseError, ValueError), v:
+ raise ConversionError(_("Invalid datetime data"),
+ "%s (%r)" % (v, input))
+ def _toFormValue(self, value):
+ value = super(DateWidget, self)._toFormValue(value)
+ if value:
+ formatter = self.request.locale.dates.getFormatter(
+ self._category, (self.displayStyle or None))
+ value = formatter.format(value)
+ return value
-class DateWidget(DatetimeWidget):
- """Date entry widget.
+class DatetimeWidget(DateWidget):
+ """Datetime entry widget.
+
+ The `displayStyle` attribute may be set to control the formatting of the
+ value.
+
+ `displayStyle` must be one of 'full', 'long', 'medium', 'short',
+ or None ('' is accepted an an alternative to None to support
+ provision of a value from ZCML).
+
+ NOTE: If you need timezone information you need to set `displayStyle`
+ to either 'long' or 'full' since other display styles just ignore it.
"""
- def _toFieldValue(self, input):
- v = super(DateWidget, self)._toFieldValue(input)
- if v != self.context.missing_value:
- v = v.date()
- return v
+ _category = "dateTime"
-
class DateDisplayWidget(DisplayWidget):
"""Date display widget.
@@ -520,7 +545,6 @@
`displayStyle` must be one of 'full', 'long', 'medium', 'short',
or None ('' is accepted an an alternative to None to support
provision of a value from ZCML).
-
"""
cssClass = "date"
@@ -551,7 +575,6 @@
`displayStyle` must be one of 'full', 'long', 'medium', 'short',
or None ('' is accepted an an alternative to None to support
provision of a value from ZCML).
-
"""
cssClass = "dateTime"
Modified: Zope3/branches/3.3/src/zope/formlib/form.txt
===================================================================
--- Zope3/branches/3.3/src/zope/formlib/form.txt 2006-06-24 09:00:09 UTC (rev 68817)
+++ Zope3/branches/3.3/src/zope/formlib/form.txt 2006-06-24 09:02:44 UTC (rev 68818)
@@ -1554,7 +1554,7 @@
<input class="textType" id="form.max_size" name="form.max_size"
size="10" type="text" value="" />
<input class="textType" id="form.now" name="form.now" size="20"
- type="text" value="2002-12-02 12:30:00" />
+ type="text" value="2002 12 2 12:30:00 " />
Note that a EditForm can't make use of a get_rendered method. The get_rendered
method does only set initial values.
More information about the Zope3-Checkins
mailing list