web/formfields.py
changeset 4225 c49bb6e3d343
parent 4181 c79135c217df
child 4226 67dd296f864d
equal deleted inserted replaced
4224:5998df006968 4225:c49bb6e3d343
    17 from yams.constraints import (SizeConstraint, StaticVocabularyConstraint,
    17 from yams.constraints import (SizeConstraint, StaticVocabularyConstraint,
    18                               FormatConstraint)
    18                               FormatConstraint)
    19 
    19 
    20 from cubicweb.utils import ustrftime
    20 from cubicweb.utils import ustrftime
    21 from cubicweb import tags, uilib
    21 from cubicweb import tags, uilib
    22 from cubicweb.web import INTERNAL_FIELD_VALUE, eid_param
    22 from cubicweb.web import INTERNAL_FIELD_VALUE, ProcessFormError, eid_param
    23 from cubicweb.web.formwidgets import (
    23 from cubicweb.web.formwidgets import (
    24     HiddenInput, TextInput, FileInput, PasswordInput, TextArea, FCKEditor,
    24     HiddenInput, TextInput, FileInput, PasswordInput, TextArea, FCKEditor,
    25     Radio, Select, DateTimePicker)
    25     Radio, Select, DateTimePicker)
    26 
    26 
    27 
    27 
   608         if isinstance(self.widget, TextInput):
   608         if isinstance(self.widget, TextInput):
   609             self.widget.attrs.setdefault('size', 5)
   609             self.widget.attrs.setdefault('size', 5)
   610             self.widget.attrs.setdefault('maxlength', 15)
   610             self.widget.attrs.setdefault('maxlength', 15)
   611 
   611 
   612     def process_form_value(self, form):
   612     def process_form_value(self, form):
   613         return int(Field.process_form_value(self, form))
   613         value = Field.process_form_value(self, form)
       
   614         if value:
       
   615             try:
       
   616                 return int(value)
       
   617             except ValueError:
       
   618                 raise ProcessFormError(form._cw._('an integer is expected'))
       
   619         return None
   614 
   620 
   615 
   621 
   616 class BooleanField(Field):
   622 class BooleanField(Field):
   617     widget = Radio
   623     widget = Radio
   618 
   624 
   634 
   640 
   635     def render_example(self, req):
   641     def render_example(self, req):
   636         return self.format_single_value(req, 1.234)
   642         return self.format_single_value(req, 1.234)
   637 
   643 
   638     def process_form_value(self, form):
   644     def process_form_value(self, form):
   639         return float(Field.process_form_value(self, form))
   645         value = Field.process_form_value(self, form)
       
   646         if value:
       
   647             try:
       
   648                 return float(value)
       
   649             except ValueError:
       
   650                 raise ProcessFormError(form._cw._('a float is expected'))
       
   651         return None
   640 
   652 
   641 
   653 
   642 class DateField(StringField):
   654 class DateField(StringField):
   643     format_prop = 'ui.date-format'
   655     format_prop = 'ui.date-format'
   644     widget = DateTimePicker
   656     widget = DateTimePicker
   653         # widget is supposed to return a date as a correctly formatted string
   665         # widget is supposed to return a date as a correctly formatted string
   654         date = Field.process_form_value(self, form)
   666         date = Field.process_form_value(self, form)
   655         # but for some widgets, it might be simpler to return date objects
   667         # but for some widgets, it might be simpler to return date objects
   656         # directly, so handle that case :
   668         # directly, so handle that case :
   657         if isinstance(date, basestring):
   669         if isinstance(date, basestring):
   658             date = form.parse_date(wdgdate, 'Date')
   670             try:
       
   671                 date = form.parse_datetime(wdgdate, 'Date')
       
   672             except ValueError, ex:
       
   673                 raise ProcessFormError(unicode(ex))
   659         return date
   674         return date
   660 
   675 
   661 
   676 
   662 class DateTimeField(DateField):
   677 class DateTimeField(DateField):
   663     format_prop = 'ui.datetime-format'
   678     format_prop = 'ui.datetime-format'
   666         # widget is supposed to return a date as a correctly formatted string
   681         # widget is supposed to return a date as a correctly formatted string
   667         date = Field.process_form_value(self, form)
   682         date = Field.process_form_value(self, form)
   668         # but for some widgets, it might be simpler to return date objects
   683         # but for some widgets, it might be simpler to return date objects
   669         # directly, so handle that case :
   684         # directly, so handle that case :
   670         if isinstance(date, basestring):
   685         if isinstance(date, basestring):
   671             date = form.parse_datetime(date, 'Datetime')
   686             try:
       
   687                 date = form.parse_datetime(wdgdate, 'Datetime')
       
   688             except ValueError, ex:
       
   689                 raise ProcessFormError(unicode(ex))
   672         return date
   690         return date
   673 
   691 
   674 
   692 
   675 class TimeField(DateField):
   693 class TimeField(DateField):
   676     format_prop = 'ui.time-format'
   694     format_prop = 'ui.time-format'
   680         # widget is supposed to return a date as a correctly formatted string
   698         # widget is supposed to return a date as a correctly formatted string
   681         time = Field.process_form_value(self, form)
   699         time = Field.process_form_value(self, form)
   682         # but for some widgets, it might be simpler to return time objects
   700         # but for some widgets, it might be simpler to return time objects
   683         # directly, so handle that case :
   701         # directly, so handle that case :
   684         if isinstance(time, basestring):
   702         if isinstance(time, basestring):
   685             time = form.parse_time(wdgdate, 'Time')
   703             try:
       
   704                 time = form.parse_datetime(wdgdate, 'Time')
       
   705             except ValueError, ex:
       
   706                 raise ProcessFormError(unicode(ex))
   686         return time
   707         return time
   687 
   708 
   688 
   709 
   689 # relation vocabulary helper functions #########################################
   710 # relation vocabulary helper functions #########################################
   690 
   711