def filter_queryset(self, queryset, column, value, context): if value: value = { "min": try_parse_datetime(value.get("min")), "max": try_parse_datetime(value.get("max")) } return super(DateRangeFilter, self).filter_queryset(queryset, column, value, context)
def test_try_parse_datetime(): date_fmt1 = "2016-12-31 15:40:34" date_fmt2 = "2018-12-31 15:40" date_fmt3 = "12/31/2016" assert try_parse_datetime(date_fmt1) == datetime(2016, 12, 31, 15, 40, 34) assert try_parse_datetime(date_fmt2) == datetime(2018, 12, 31, 15, 40) assert try_parse_datetime(date_fmt3) == datetime(2016, 12, 31) assert try_parse_datetime("abc") is None
def parse_date_range(value): output = parse_date_range_preset(value) if output: return output if isinstance(value, six.string_types): value = value.strip() if ".." in value: start, end = value.split("..", 1) elif value.count("-") == 1: start, end = value.split("-", 1) else: start, end = value.split(None, 1) elif isinstance(value, (list, tuple)): start, end = value[:2] else: raise ValueError("Error! Can't split date range: `%r`." % value) date_range = (dates.try_parse_datetime(start), dates.try_parse_datetime(end)) if any(p is None for p in date_range): raise ValueError("Error! Invalid date range: `%r` (parsed as `%r`)." % (value, date_range)) return date_range
def parse_date_range(value): output = parse_date_range_preset(value) if output: return output if isinstance(value, six.string_types): value = value.strip() if ".." in value: start, end = value.split("..", 1) elif value.count("-") == 1: start, end = value.split("-", 1) else: start, end = value.split(None, 1) elif isinstance(value, (list, tuple)): start, end = value[:2] else: raise ValueError("Can't split date range: %r" % value) date_range = (dates.try_parse_datetime(start), dates.try_parse_datetime(end)) if any(p is None for p in date_range): raise ValueError("Invalid date range: %r (parsed as %r)" % (value, date_range)) return date_range