[Checkins] SVN: zc.datetimewidget/trunk/src/zc/datetimewidget/ added demo package an a functional test which uses it

Bernd Dorn bernd.dorn at fhv.at
Sun Apr 30 10:07:12 EDT 2006


Log message for revision 67764:
  added demo package an a functional test which uses it
  do not return the tzinfo in the display field, because it is not used anyway
  added a timezone test
  
  
  

Changed:
  U   zc.datetimewidget/trunk/src/zc/datetimewidget/datetimewidget.py
  A   zc.datetimewidget/trunk/src/zc/datetimewidget/demo/
  A   zc.datetimewidget/trunk/src/zc/datetimewidget/demo/README.txt
  A   zc.datetimewidget/trunk/src/zc/datetimewidget/demo/__init__.py
  A   zc.datetimewidget/trunk/src/zc/datetimewidget/demo/configure.zcml
  A   zc.datetimewidget/trunk/src/zc/datetimewidget/demo/content.py
  A   zc.datetimewidget/trunk/src/zc/datetimewidget/demo/interfaces.py
  A   zc.datetimewidget/trunk/src/zc/datetimewidget/demo/tests.py
  A   zc.datetimewidget/trunk/src/zc/datetimewidget/demo/timezone.py
  A   zc.datetimewidget/trunk/src/zc/datetimewidget/ftesting.zcml
  A   zc.datetimewidget/trunk/src/zc/datetimewidget/ftests.py
  A   zc.datetimewidget/trunk/src/zc/datetimewidget/tests.py
  A   zc.datetimewidget/trunk/src/zc/datetimewidget/timezones.txt
  A   zc.datetimewidget/trunk/src/zc/datetimewidget/zc.datetimewidget-ftesting.zcml

-=-
Modified: zc.datetimewidget/trunk/src/zc/datetimewidget/datetimewidget.py
===================================================================
--- zc.datetimewidget/trunk/src/zc/datetimewidget/datetimewidget.py	2006-04-30 14:04:17 UTC (rev 67763)
+++ zc.datetimewidget/trunk/src/zc/datetimewidget/datetimewidget.py	2006-04-30 14:07:11 UTC (rev 67764)
@@ -31,6 +31,7 @@
     if dt is not None:
         if (dt.tzinfo is not None and
             isinstance(dt.tzinfo, zope.datetime._tzinfo)):
+            tzinfo = ITZInfo(request)
             dt = dt.replace(tzinfo=None) # TODO: this is a hack
             # to accomodate pre-Zope-3.2 datetime widgets that assume UTC
             # timezone.  Zope 3.2+ datetime widgets should use the
@@ -79,11 +80,16 @@
     _showsTime = "true"
 
     def _toFormValue(self, value):
-        return localizeDateTime(
-            super(DatetimeWidget, self)._toFormValue(value), self.request)
+        dt = localizeDateTime(
+            super(DatetimeWidget, self)._toFormValue(value),
+            self.request)
+        return dt.strftime(self._format)
+        
+    
 
     def _toFieldValue(self, input):
         res = super(DatetimeWidget, self)._toFieldValue(input)
+        #import pdb;pdb.set_trace()
         if res is not self.context.missing_value:
             res = normalizeDateTime(res, self.request)
         return res

Added: zc.datetimewidget/trunk/src/zc/datetimewidget/demo/README.txt
===================================================================
--- zc.datetimewidget/trunk/src/zc/datetimewidget/demo/README.txt	2006-04-30 14:04:17 UTC (rev 67763)
+++ zc.datetimewidget/trunk/src/zc/datetimewidget/demo/README.txt	2006-04-30 14:07:11 UTC (rev 67764)
@@ -0,0 +1,27 @@
+======================
+ Datetime Widget Demo
+======================
+
+This demo packe provides a simple content class which uses the
+zc.datetimewidget
+
+    >>> from zope.testbrowser.testing import Browser
+    >>> browser = Browser()
+    >>> browser.addHeader('Authorization', 'Basic mgr:mgrpw')
+    >>> browser.open('http://localhost/@@contents.html')
+
+It can be added by clicking on the "Datetimewidget Demo" link in the
+add menu. And giving it a name.
+
+    >>> link = browser.getLink('Datetimewidget Demo')
+    >>> link.click()
+    >>> nameCtrl = browser.getControl(name='new_value')
+    >>> nameCtrl.value = 'mydemo'
+    >>> applyCtrl = browser.getControl('Apply')
+    >>> applyCtrl.click()
+    >>> link = browser.getLink('mydemo')
+    >>> link.click()
+    >>> browser.url
+    'http://localhost/mydemo/@@edit.html'
+
+


Property changes on: zc.datetimewidget/trunk/src/zc/datetimewidget/demo/README.txt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zc.datetimewidget/trunk/src/zc/datetimewidget/demo/__init__.py
===================================================================


Property changes on: zc.datetimewidget/trunk/src/zc/datetimewidget/demo/__init__.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: zc.datetimewidget/trunk/src/zc/datetimewidget/demo/configure.zcml
===================================================================
--- zc.datetimewidget/trunk/src/zc/datetimewidget/demo/configure.zcml	2006-04-30 14:04:17 UTC (rev 67763)
+++ zc.datetimewidget/trunk/src/zc/datetimewidget/demo/configure.zcml	2006-04-30 14:07:11 UTC (rev 67764)
@@ -0,0 +1,30 @@
+<configure xmlns="http://namespaces.zope.org/zope"
+           xmlns:browser="http://namespaces.zope.org/browser"
+           i18n_domain="zope">
+
+ <!-- adapter for tzinfo -->
+ <adapter factory=".timezone.tzinfo"/>
+ 
+ <class class=".content.DemoContent">
+        <require permission="zope.View"
+                 interface=".interfaces.IDemoContent"/>
+        <require permission="zope.ManageContent"
+                 set_schema=".interfaces.IDemoContent"/>
+ </class>
+
+
+ <browser:editform
+  schema=".interfaces.IDemoContent"
+  label="Edit"
+  name="edit.html"
+  menu="zmi_views" title="Edit"
+  permission="zope.ManageContent"/>
+
+ <browser:addMenuItem
+  title="Datetimewidget Demo"
+  class=".content.DemoContent"
+  permission="zope.ManageContent"
+  />
+ 
+        
+</configure>


Property changes on: zc.datetimewidget/trunk/src/zc/datetimewidget/demo/configure.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zc.datetimewidget/trunk/src/zc/datetimewidget/demo/content.py
===================================================================
--- zc.datetimewidget/trunk/src/zc/datetimewidget/demo/content.py	2006-04-30 14:04:17 UTC (rev 67763)
+++ zc.datetimewidget/trunk/src/zc/datetimewidget/demo/content.py	2006-04-30 14:07:11 UTC (rev 67764)
@@ -0,0 +1,16 @@
+from persistent import Persistent
+from zope.interface import implements
+from zope.app.container.contained import Contained
+from zope.schema.fieldproperty import FieldProperty
+from interfaces import IDemoContent
+
+class DemoContent(Persistent,Contained):
+
+    implements(IDemoContent)
+    
+    startDate = FieldProperty(IDemoContent['startDate'])
+    endDate = FieldProperty(IDemoContent['endDate'])
+    
+    startDatetime = FieldProperty(IDemoContent['startDatetime'])
+    endDatetime = FieldProperty(IDemoContent['endDatetime'])
+    


Property changes on: zc.datetimewidget/trunk/src/zc/datetimewidget/demo/content.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: zc.datetimewidget/trunk/src/zc/datetimewidget/demo/interfaces.py
===================================================================
--- zc.datetimewidget/trunk/src/zc/datetimewidget/demo/interfaces.py	2006-04-30 14:04:17 UTC (rev 67763)
+++ zc.datetimewidget/trunk/src/zc/datetimewidget/demo/interfaces.py	2006-04-30 14:07:11 UTC (rev 67764)
@@ -0,0 +1,13 @@
+from zope.interface import Interface
+from zope.schema import Date,Datetime
+
+class IDemoContent(Interface):
+
+    startDate = Date(title=u"Start Date")
+    endDate = Date(title=u"End Date")
+
+    startDatetime = Datetime(title=u"Start Datetime")
+    endDatetime = Datetime(title=u"End Datetime")
+
+
+


Property changes on: zc.datetimewidget/trunk/src/zc/datetimewidget/demo/interfaces.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: zc.datetimewidget/trunk/src/zc/datetimewidget/demo/tests.py
===================================================================
--- zc.datetimewidget/trunk/src/zc/datetimewidget/demo/tests.py	2006-04-30 14:04:17 UTC (rev 67763)
+++ zc.datetimewidget/trunk/src/zc/datetimewidget/demo/tests.py	2006-04-30 14:07:11 UTC (rev 67764)
@@ -0,0 +1,15 @@
+import doctest
+import unittest
+from zope.testing.doctestunit import DocTestSuite
+def test_suite():
+    
+    return unittest.TestSuite(
+        (
+        DocTestSuite('zc.datetimewidget.demo.timezone',
+                     optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
+                     ),
+        ))
+
+
+if __name__ == '__main__':
+    unittest.main(defaultTest='test_suite')


Property changes on: zc.datetimewidget/trunk/src/zc/datetimewidget/demo/tests.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: zc.datetimewidget/trunk/src/zc/datetimewidget/demo/timezone.py
===================================================================
--- zc.datetimewidget/trunk/src/zc/datetimewidget/demo/timezone.py	2006-04-30 14:04:17 UTC (rev 67763)
+++ zc.datetimewidget/trunk/src/zc/datetimewidget/demo/timezone.py	2006-04-30 14:07:11 UTC (rev 67764)
@@ -0,0 +1,20 @@
+import pytz
+from zope import interface, component
+from zope.interface.common.idatetime import ITZInfo
+from zope.publisher.interfaces.browser import IBrowserRequest
+
+TZINFO=pytz.timezone('Europe/Vienna')
+
+ at interface.implementer(ITZInfo)
+ at component.adapter(IBrowserRequest)
+def tzinfo(request):
+
+    """This adapter adapts any interface to the timezone where this
+    demo was written.
+
+    >>> print tzinfo(None)
+    Europe/Vienna
+    """
+    return TZINFO
+
+


Property changes on: zc.datetimewidget/trunk/src/zc/datetimewidget/demo/timezone.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: zc.datetimewidget/trunk/src/zc/datetimewidget/ftesting.zcml
===================================================================
--- zc.datetimewidget/trunk/src/zc/datetimewidget/ftesting.zcml	2006-04-30 14:04:17 UTC (rev 67763)
+++ zc.datetimewidget/trunk/src/zc/datetimewidget/ftesting.zcml	2006-04-30 14:07:11 UTC (rev 67764)
@@ -0,0 +1,5 @@
+<configure xmlns="http://namespaces.zope.org/zope"
+           xmlns:browser="http://namespaces.zope.org/browser"
+           i18n_domain="zope">
+ <include package=".demo"/>
+</configure>
\ No newline at end of file


Property changes on: zc.datetimewidget/trunk/src/zc/datetimewidget/ftesting.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zc.datetimewidget/trunk/src/zc/datetimewidget/ftests.py
===================================================================
--- zc.datetimewidget/trunk/src/zc/datetimewidget/ftests.py	2006-04-30 14:04:17 UTC (rev 67763)
+++ zc.datetimewidget/trunk/src/zc/datetimewidget/ftests.py	2006-04-30 14:07:11 UTC (rev 67764)
@@ -0,0 +1,10 @@
+from zope.app.testing import functional
+
+def test_suite():
+    suite = functional.FunctionalDocFileSuite(
+        'demo/README.txt',
+        )
+    return suite
+
+if __name__ == '__main__':
+    unittest.main(defaultTest='test_suite')


Property changes on: zc.datetimewidget/trunk/src/zc/datetimewidget/ftests.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: zc.datetimewidget/trunk/src/zc/datetimewidget/tests.py
===================================================================
--- zc.datetimewidget/trunk/src/zc/datetimewidget/tests.py	2006-04-30 14:04:17 UTC (rev 67763)
+++ zc.datetimewidget/trunk/src/zc/datetimewidget/tests.py	2006-04-30 14:07:11 UTC (rev 67764)
@@ -0,0 +1,44 @@
+##############################################################################
+#
+# Copyright (c) 2005 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Datetime Widget unittests
+
+$Id:$
+"""
+__docformat__ = "reStructuredText"
+
+import doctest
+import unittest
+
+from zope.testing.doctestunit import DocFileSuite, DocTestSuite
+from zope.app.testing import setup
+
+
+def setUp(test):
+    setup.placefulSetUp()
+
+def tearDown(test):
+    setup.placefulTearDown()
+
+
+def test_suite():
+    return unittest.TestSuite(
+        (
+        DocFileSuite('timezones.txt',
+                     optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
+                     ),
+        ))
+
+if __name__ == '__main__':
+    unittest.main(defaultTest='test_suite')
+


Property changes on: zc.datetimewidget/trunk/src/zc/datetimewidget/tests.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: zc.datetimewidget/trunk/src/zc/datetimewidget/timezones.txt
===================================================================
--- zc.datetimewidget/trunk/src/zc/datetimewidget/timezones.txt	2006-04-30 14:04:17 UTC (rev 67763)
+++ zc.datetimewidget/trunk/src/zc/datetimewidget/timezones.txt	2006-04-30 14:07:11 UTC (rev 67764)
@@ -0,0 +1,41 @@
+==================
+Handling Timezones
+==================
+
+Datetimes are always stored timezone aware, by default the utc
+timezone is used. We use the demo package here to have a content class
+and interface.
+
+In order to handle timezones correctly the zope instance has to
+provide an adapter from IBrowserRequest to ITZInfo. It is up to the
+instance what kind of implementation it uses. For this tests we just
+use the implementation of the demo.timezone module which always
+returns Europe/Vienna as timezone.
+
+    >>> from zope import component
+    >>> from datetime import datetime
+    >>> import pytz
+    >>> from zc.datetimewidget import datetimewidget
+    >>> from zc.datetimewidget.demo import timezone
+    >>> from zc.datetimewidget.demo.content import DemoContent
+    >>> from zc.datetimewidget.demo.interfaces import IDemoContent
+    >>> from zope.publisher.browser import TestRequest
+    >>> request = TestRequest()
+    >>> component.provideAdapter(timezone.tzinfo)
+    >>> fmt = '%Y-%m-%d %H:%M:%S %Z%z'
+    >>> tz = pytz.timezone('Europe/Vienna')
+    >>> field = IDemoContent['startDatetime']
+    >>> widget = datetimewidget.DatetimeWidget(field,request)
+    >>> dt = datetime(2006,5,1,12,tzinfo=pytz.utc)
+    >>> formValue = widget._toFormValue(dt)
+    >>> formValue
+    '2006-05-01 14:00:00'
+    >>> parsedValue = widget._toFieldValue(formValue)
+    >>> parsedValue
+    datetime.datetime(2006, 5, 1, 12, 0, tzinfo=<UTC>)
+
+
+
+
+
+


Property changes on: zc.datetimewidget/trunk/src/zc/datetimewidget/timezones.txt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zc.datetimewidget/trunk/src/zc/datetimewidget/zc.datetimewidget-ftesting.zcml
===================================================================
--- zc.datetimewidget/trunk/src/zc/datetimewidget/zc.datetimewidget-ftesting.zcml	2006-04-30 14:04:17 UTC (rev 67763)
+++ zc.datetimewidget/trunk/src/zc/datetimewidget/zc.datetimewidget-ftesting.zcml	2006-04-30 14:07:11 UTC (rev 67764)
@@ -0,0 +1 @@
+<include package="zc.datetimewidget" file="ftesting.zcml"/>
\ No newline at end of file


Property changes on: zc.datetimewidget/trunk/src/zc/datetimewidget/zc.datetimewidget-ftesting.zcml
___________________________________________________________________
Name: svn:eol-style
   + native



More information about the Checkins mailing list