Example #1
0
 def to_python(self, value):
     """
     Validates that the input can be converted to a datetime. Returns a
     Python datetime.datetime object.
     """
     if value in validators.EMPTY_VALUES:
         return None
     if isinstance(value, datetime.datetime):
         return value
     if isinstance(value, datetime.date):
         return datetime.datetime(value.year, value.month, value.day)
     if isinstance(value, list):
         # Input comes from a SplitDateTimeWidget, for example. So, it's two
         # components: date and time.
         if len(value) != 2:
             raise ValidationError(self.error_messages['invalid'])
         if value[0] in validators.EMPTY_VALUES and value[1] in validators.EMPTY_VALUES:
             return None
         value = '%s %s' % tuple(value)
     for format in self.input_formats or formats.get_format('DATETIME_INPUT_FORMATS'):
         try:
             return datetime.datetime(*time.strptime(value, format)[:6])
         except ValueError:
             continue
     raise ValidationError(self.error_messages['invalid'])
Example #2
0
 def to_python(self, value):
     """
     Validates that the input can be converted to a datetime. Returns a
     Python datetime.datetime object.
     """
     if value in validators.EMPTY_VALUES:
         return None
     if isinstance(value, datetime.datetime):
         return value
     if isinstance(value, datetime.date):
         return datetime.datetime(value.year, value.month, value.day)
     if isinstance(value, list):
         # Input comes from a SplitDateTimeWidget, for example. So, it's two
         # components: date and time.
         if len(value) != 2:
             raise ValidationError(self.error_messages['invalid'])
         if value[0] in validators.EMPTY_VALUES and value[
                 1] in validators.EMPTY_VALUES:
             return None
         value = '%s %s' % tuple(value)
     for format in self.input_formats or formats.get_format(
             'DATETIME_INPUT_FORMATS'):
         try:
             return datetime.datetime(*time.strptime(value, format)[:6])
         except ValueError:
             continue
     raise ValidationError(self.error_messages['invalid'])
Example #3
0
 def __init__(self, attrs=None, format=None):
     super(TimeInput, self).__init__(attrs)
     if format:
         self.format = format
         self.manual_format = True
     else:
         self.format = formats.get_format('TIME_INPUT_FORMATS')[0]
         self.manual_format = False
Example #4
0
 def __init__(self, attrs=None, format=None):
     super(TimeInput, self).__init__(attrs)
     if format:
         self.format = format
         self.manual_format = True
     else:
         self.format = formats.get_format('TIME_INPUT_FORMATS')[0]
         self.manual_format = False
Example #5
0
 def _has_changed(self, initial, data):
     # If our field has show_hidden_initial=True, initial will be a string
     # formatted by HiddenInput using formats.localize_input, which is not
     # necessarily the format used for this  widget. Attempt to convert it.
     try:
         input_format = formats.get_format('TIME_INPUT_FORMATS')[0]
         initial = datetime.time(*time.strptime(initial, input_format)[3:6])
     except (TypeError, ValueError):
         pass
     return super(TimeInput, self)._has_changed(self._format_value(initial), data)
Example #6
0
 def _has_changed(self, initial, data):
     # If our field has show_hidden_initial=True, initial will be a string
     # formatted by HiddenInput using formats.localize_input, which is not
     # necessarily the format used for this  widget. Attempt to convert it.
     try:
         input_format = formats.get_format('TIME_INPUT_FORMATS')[0]
         initial = datetime.time(*time.strptime(initial, input_format)[3:6])
     except (TypeError, ValueError):
         pass
     return super(TimeInput, self)._has_changed(self._format_value(initial),
                                                data)
Example #7
0
 def to_python(self, value):
     """
     Validates that the input can be converted to a time. Returns a Python
     datetime.time object.
     """
     if value in validators.EMPTY_VALUES:
         return None
     if isinstance(value, datetime.time):
         return value
     for format in self.input_formats or formats.get_format('TIME_INPUT_FORMATS'):
         try:
             return datetime.time(*time.strptime(value, format)[3:6])
         except ValueError:
             continue
     raise ValidationError(self.error_messages['invalid'])
Example #8
0
 def to_python(self, value):
     """
     Validates that the input can be converted to a time. Returns a Python
     datetime.time object.
     """
     if value in validators.EMPTY_VALUES:
         return None
     if isinstance(value, datetime.time):
         return value
     for format in self.input_formats or formats.get_format(
             'TIME_INPUT_FORMATS'):
         try:
             return datetime.time(*time.strptime(value, format)[3:6])
         except ValueError:
             continue
     raise ValidationError(self.error_messages['invalid'])
Example #9
0
def _parse_date_fmt():
    fmt = get_format('DATE_FORMAT')
    escaped = False
    output = []
    for char in fmt:
        if escaped:
            escaped = False
        elif char == '\\':
            escaped = True
        elif char in 'Yy':
            output.append('year')
            #if not self.first_select: self.first_select = 'year'
        elif char in 'bEFMmNn':
            output.append('month')
            #if not self.first_select: self.first_select = 'month'
        elif char in 'dj':
            output.append('day')
            #if not self.first_select: self.first_select = 'day'
    return output
Example #10
0
 def value_from_datadict(self, data, files, name):
     y = data.get(self.year_field % name)
     m = data.get(self.month_field % name)
     d = data.get(self.day_field % name)
     if y == m == d == "0":
         return None
     if y and m and d:
         if settings.USE_L10N:
             input_format = get_format('DATE_INPUT_FORMATS')[0]
             try:
                 date_value = datetime.date(int(y), int(m), int(d))
             except ValueError:
                 return '%s-%s-%s' % (y, m, d)
             else:
                 date_value = datetime_safe.new_date(date_value)
                 return date_value.strftime(input_format)
         else:
             return '%s-%s-%s' % (y, m, d)
     return data.get(name, None)
Example #11
0
    def render(self, name, value, attrs=None):
        try:
            year_val, month_val, day_val = value.year, value.month, value.day
        except AttributeError:
            year_val = month_val = day_val = None
            if isinstance(value, basestring):
                if settings.USE_L10N:
                    try:
                        input_format = get_format('DATE_INPUT_FORMATS')[0]
                        # Python 2.4 compatibility:
                        #     v = datetime.datetime.strptime(value, input_format)
                        # would be clearer, but datetime.strptime was added in
                        # Python 2.5
                        v = datetime.datetime(*(time.strptime(value, input_format)[0:6]))
                        year_val, month_val, day_val = v.year, v.month, v.day
                    except ValueError:
                        pass
                else:
                    match = RE_DATE.match(value)
                    if match:
                        year_val, month_val, day_val = [int(v) for v in match.groups()]
        choices = [(i, i) for i in self.years]
        year_html = self.create_select(name, self.year_field, value, year_val, choices)
        choices = MONTHS.items()
        month_html = self.create_select(name, self.month_field, value, month_val, choices)
        choices = [(i, i) for i in range(1, 32)]
        day_html = self.create_select(name, self.day_field, value, day_val,  choices)

        output = []
        for field in _parse_date_fmt():
            if field == 'year':
                output.append(year_html)
            elif field == 'month':
                output.append(month_html)
            elif field == 'day':
                output.append(day_html)
        return mark_safe(u'\n'.join(output))