Skip to main content

Javascript-based widgets for date and datetime fields.

This project has been archived.

The maintainers of this project have marked this project as archived. No new releases are expected.

Project description

There are two types of widgets provided by this package, a date widget and a datetime widget.

Detailed Dcoumentation

Datetime and Date Widgets

There are two types of widgets provided by this package, a date widget and a datetime widget.

Date Widget

The date widget only handles datetime.date objects, which are not timezone aware. We use the demo package here to have a content class.

>>> from zope import component
>>> from datetime import datetime, date
>>> from zc.datetimewidget import datetimewidget
>>> from zc.datetimewidget.demo.content import DemoContent
>>> from zc.datetimewidget.demo.interfaces import IDemoContent
>>> from zope.publisher.browser import TestRequest, BrowserLanguages
>>> component.provideAdapter(BrowserLanguages)
>>> request = TestRequest(HTTP_ACCEPT_LANGUAGE='en-US')
>>> field = IDemoContent['startDate']
>>> widget = datetimewidget.DateWidget(field,request)
>>> widget._toFormValue(None)
u''

Now let us convert a real date.

>>> d = date(2006,5,1)
>>> formValue = widget._toFormValue(d)
>>> formValue
'2006-05-01'
>>> parsedValue = widget._toFieldValue(formValue)
>>> parsedValue
datetime.date(2006, 5, 1)

The widget handles the same date notations as zope’s default datewidget.

>>> widget._toFieldValue('2006/12/31')
datetime.date(2006, 12, 31)

Datetime Widget

Datetimes are always stored timezone aware, and by default the utc timezone is used.

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 test, we just use the implementation of the demo.timezone module which always returns Europe/Vienna as timezone.

The field’s missing value results in an empty string.

>>> import pytz
>>> from zc.datetimewidget.demo import timezone
>>> component.provideAdapter(timezone.tzinfo)
>>> tz = pytz.timezone('Europe/Vienna')
>>> request = TestRequest(HTTP_ACCEPT_LANGUAGE='en-US')
>>> field = IDemoContent['startDatetime']
>>> widget = datetimewidget.DatetimeWidget(field,request)
>>> dt = datetime(2006,5,1,12,tzinfo=pytz.utc)
>>> widget._toFormValue(None)
u''

Now let us convert a real datetime.

>>> 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>)

While the widget tries to parse dates in the form ‘%Y-%m-%d %H:%M:%S’ first, it will fall through to the locale-specific parsing of the core datetimewidget.

>>> widget._toFieldValue('May 1, 2006 2:00:00 PM')
datetime.datetime(2006, 5, 1, 12, 0, tzinfo=<UTC>)

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.handleErrors = False
>>> 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'

We can fill in the values

>>> browser.getControl('Start Date').value = '2006-11-15'
>>> browser.getControl('End Date').value = '2006-11-16'
>>> browser.getControl('Start Datetime').value = '2006-11-15T07:49:31Z'
>>> browser.getControl('End Datetime').value = '2006-11-16T19:46:00Z'
>>> browser.getControl('Several dates').value = '2006-11-20 2006-11-21 2006-11-22'
>>> browser.getControl('Change').click()

And they will be saved:

>>> 'Required input is missing' in browser.contents
False
>>> '2006-11-15' in browser.contents
True
>>> '2006-11-16' in browser.contents
True
>>> '07:49' in browser.contents
True
>>> '19:46' in browser.contents
True
>>> '2006-11-20 2006-11-21 2006-11-22' in browser.contents
True

If we do not fill some fields, we get missing value errors

>>> browser.getControl('Start Date').value = ''
>>> browser.getControl('Change').click()
>>> 'Required input is missing' in browser.contents
True

Let’s step back:

>>> browser.getControl('Start Date').value = '2006-11-15'
>>> browser.getControl('Change').click()
>>> 'Required input is missing' in browser.contents
False

Now let’s try not filling a date set field:

>>> browser.getControl('Several dates').value = ''
>>> browser.getControl('Change').click()
>>> 'Required input is missing' in browser.contents
True

CHANGES

0.6.2 (2009-05-20)

  • Using ++resource++ instead of @@/ to load resources.

  • Renaming “lang” directory (ZPublisher gets confused because of a view with the same same in zope.traversing.namespace).

(See gocept.datetimewidget for more details on how to use zc.datetimewidget with zope2.)

0.6.1 (2008-05-29)

  • Unchanged from 0.5.2, but released with a new version number thanks to a package with an 0.6.1dev-rBFN revision found in the wild.

0.5.2 (2007-11-03)

  • Improve package data.

  • Developed proper package dependencies.

  • Merged functional tests into tests.py.

0.5.1 (2006-06-15)

  • Include license and copyright headers.

0.5.0 (2006-05-24)

  • Initial release.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zc.datetimewidget-0.6.2.tar.gz (52.0 kB view details)

Uploaded Source

File details

Details for the file zc.datetimewidget-0.6.2.tar.gz.

File metadata

File hashes

Hashes for zc.datetimewidget-0.6.2.tar.gz
Algorithm Hash digest
SHA256 c5eb3aa878ddd35306398acb17c61b50ee21eddde2807dd5ec2c9727b78a8752
MD5 e0efb7c62a34b02a041fa285f1ecb49c
BLAKE2b-256 d16af3d5cc730637b0ab16081ba1c63d1d8a8f678795e6c46006d3e042ca811a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page