def _has_changed(self, initial, data):
     try:
         input_format = get_format('DATE_INPUT_FORMATS')[0]
         data = datetime_safe.datetime.strptime(data, input_format).date()
     except (TypeError, ValueError):
         pass
     return super(SelectDateWidget, self)._has_changed(initial, data)
Exemplo n.º 2
0
def get_formats():
    """
    Returns all formats strings required for i18n to work
    """
    FORMAT_SETTINGS = ('DATE_FORMAT', 'DATETIME_FORMAT', 'TIME_FORMAT',
                       'YEAR_MONTH_FORMAT', 'MONTH_DAY_FORMAT',
                       'SHORT_DATE_FORMAT', 'SHORT_DATETIME_FORMAT',
                       'FIRST_DAY_OF_WEEK', 'DECIMAL_SEPARATOR',
                       'THOUSAND_SEPARATOR', 'NUMBER_GROUPING',
                       'DATE_INPUT_FORMATS', 'TIME_INPUT_FORMATS',
                       'DATETIME_INPUT_FORMATS')
    result = {}
    for module in [settings] + get_format_modules(reverse=True):
        for attr in FORMAT_SETTINGS:
            result[attr] = get_format(attr)
    src = []
    for k, v in result.items():
        if isinstance(v, (basestring, int)):
            src.append(
                "formats['%s'] = '%s';\n" %
                (javascript_quote(k), javascript_quote(smart_unicode(v))))
        elif isinstance(v, (tuple, list)):
            v = [javascript_quote(smart_unicode(value)) for value in v]
            src.append("formats['%s'] = ['%s'];\n" %
                       (javascript_quote(k), "', '".join(v)))
    return ''.join(src)
Exemplo n.º 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
Exemplo n.º 4
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.datetime.strptime(initial, input_format).time()
     except (TypeError, ValueError):
         pass
     return super(TimeInput, self)._has_changed(self._format_value(initial), data)
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
 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)
    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]
                        v = datetime.datetime.strptime(value, input_format)
                        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))