def test_parse_date(): now = datetime.now() today = date.today() date_fmt1 = "2016-12-31" date_fmt2 = "2016-12-31 15:40:34.404540" date_fmt3 = "12/31/2016" expected_date = date(2016, 12, 31) assert parse_date(now) == now.date() assert parse_date(today) == today assert parse_date(date_fmt1) == expected_date assert parse_date(date_fmt2) == expected_date assert parse_date(date_fmt3) == expected_date
def group_by_period(queryset, column, period, **annotate): """ Group and annotate given queryset by a given date period. :param queryset: Original queryset :type queryset: django.db.QuerySet :param column: Column for grouping :type column: str :param period: Period for grouping ('year', 'month', 'day') :type period: str :param annotate: Dict for `.annotate()` :type annotate: dict[str,str] :return: OrderedDict of period -> annotate columns :rtype: collections.OrderedDict """ # Based on http://stackoverflow.com/a/8746532/51685 d = OrderedDict() for line in ( queryset .extra({"period_group": connection.ops.date_trunc_sql(period, column)}) .values("period_group") .annotate(**annotate) .order_by("period_group") .values(*["period_group"] + list(annotate.keys())) ): d[parse_date(line.pop("period_group"))] = line return d
def group_by_period(queryset, column, period, **annotate): """ Group and annotate given queryset by a given date period. :param queryset: Original queryset :type queryset: django.db.QuerySet :param column: Column for grouping :type column: str :param period: Period for grouping ('year', 'month', 'day') :type period: str :param annotate: Dict for `.annotate()` :type annotate: dict[str,str] :return: OrderedDict of period -> annotate columns :rtype: collections.OrderedDict """ # Based on http://stackoverflow.com/a/8746532/51685 d = OrderedDict() for line in (queryset.extra({ "period_group": connection.ops.date_trunc_sql(period, column) }).values("period_group").annotate( **annotate).order_by("period_group").values( *["period_group"] + list(annotate.keys()))): d[parse_date(line.pop("period_group"))] = line return d
def _set_datetime_value(self, new_value): if self.attribute.type == AttributeType.DATETIME: # Just store datetimes if not isinstance(new_value, datetime.datetime): raise TypeError("Can't assign %r to DATETIME attribute" % new_value) self.datetime_value = new_value self.numeric_value = calendar.timegm(self.datetime_value.timetuple()) self.untranslated_string_value = self.datetime_value.isoformat() elif self.attribute.type == AttributeType.DATE: # Store dates as "date at midnight" date = parse_date(new_value) self.datetime_value = datetime.datetime.combine(date=date, time=datetime.time()) self.numeric_value = date.toordinal() # Store date ordinal as numeric value self.untranslated_string_value = date.isoformat() # Store date ISO format as string value