Just wanted to thank Neil and Roger for the pointers on the DateWidget
examples. Also, incase anyone else runs into the same issue, here is the
merged version I ended up with. Thanks again!
class DateWidget (CompositeWidget):
def __init__ (self, name, value=None, yoptions=None, moptions=None,
doptions=None, **kwargs):
this_year = now().tuple()[0]
if not yoptions:
yoptions = [ (y, y) for y in range(this_year,
this_year-80, -1) ]
yoptions.insert(0, ('',''))
self.yoptions = yoptions
if not moptions:
moptions = [ (m, m) for m in range(1, 13) ]
moptions.insert(0, ('',''))
self.moptions = moptions
if not doptions:
doptions = [ (d, d) for d in range(1, 32) ]
doptions.insert(0, ('',''))
self.doptions = doptions
year = ''
month = ''
day = ''
if value:
#process sent value to date
pass
CompositeWidget.__init__(self, name, value, **kwargs)
self.add(SingleSelectWidget, 'month', value=month,
options=self.moptions, required=True)
self.add(SingleSelectWidget, 'day', value=year,
options=self.doptions, required=True)
self.add(SingleSelectWidget, 'year', value=year,
options=self.yoptions, required=True)
def _parse(self, request):
CompositeWidget._parse(self, request)
if self.get_error():
return
year = self['year']
month = self['month']
day = self['day']
if (not self.yoptions.index((year,year)) or
not self.moptions.index((month,month)) or
not self.doptions.index((day,day)) ):
self.error = "bad date value"
try:
self.value = DateTime(year,month,day)
except RangeError:
self.error = "date specified does not exist"
def render(self):
return (self.get_widget('month').render() +
self.get_widget('day').render() +
self.get_widget('year').render()
)