Esempio n. 1
0
    def get_range(self, data, from_date, to_date, period,
                  filter_name=None, filter_value=None):
        """Shortcut for datarange

        :param data: data list
        :param from_date:
        :param to_date:
        :param period:
        """
        from_date = date_min(from_date, period)
        to_date = date_max(to_date, period)

        data = self.filter_data_by_period(data, from_date, to_date)

        groups = groupby(data, key=lambda x: get_by_period(date_min(x['timestamp'], period), period))

        for group, group_items in groups:

            if not group_items:
                yield (group, 0)
                continue

            group_sum = 0

            if not filter_name:
                group_sum = sum([x['value'] for x in group_items])
            else:
                group_sum = sum([x['value'] for x in group_items
                                 if (x['filter_name'] == filter_name)
                                 and (x['filter_value'] == filter_value)])

            yield (group, group_sum)
Esempio n. 2
0
    def convert_date_range(self, from_date, to_date, period):
        """Convert str from_date and to_data objects to
        datetime object

        :param from_date: from date string
        :param to_date: to date string
        :return: tuple (from_date, to_date)
        """

        from_date = timestamp_to_datetime(from_date, DATE_FILTER_FORMAT) if from_date else from_date
        to_date = timestamp_to_datetime(to_date, DATE_FILTER_FORMAT) if to_date else to_date
        return date_min(from_date, period), date_max(to_date, period)
Esempio n. 3
0
    def convert_date_range(self, from_date, to_date, period):
        """Convert str from_date and to_data objects to
        datetime object

        :param from_date: from date string
        :param to_date: to date string
        :return: tuple (from_date, to_date)
        """

        from_date = timestamp_to_datetime(
            from_date, DATE_FILTER_FORMAT) if from_date else from_date
        to_date = timestamp_to_datetime(
            to_date, DATE_FILTER_FORMAT) if to_date else to_date
        return date_min(from_date, period), date_max(to_date, period)
Esempio n. 4
0
    def filter_by_period(self, data, period, from_date=None, to_date=None):
        """Fulter statistics by `from_date` and `to_date`

        :param from_data:
        :param to_date:
        :return: ifilter generator

        """

        from_date = date_min(from_date, period)
        to_date = date_max(to_date, period)

        # Convert datestring to datetime object in list
        from_date = get_by_period(from_date, period)
        to_date = get_by_period(to_date, period)

        return sorted(ifilter(lambda x: (True if from_date is None else int(x[0]) >= from_date) and \
                              (True if to_date is None else int(x[0]) <= to_date),
                              imap(lambda item: (int(item[0]), int(item[1])), data)),
                      key=lambda x: x[0])
Esempio n. 5
0
    def filter_by_period(self, data, period, from_date=None, to_date=None):
        """Fulter statistics by `from_date` and `to_date`

        :param from_data:
        :param to_date:
        :return: ifilter generator

        """

        from_date = date_min(from_date, period)
        to_date = date_max(to_date, period)

        # Convert datestring to datetime object in list
        from_date = get_by_period(from_date, period)
        to_date = get_by_period(to_date, period)

        return sorted(filter(lambda x: (True if from_date is None else int(x[0]) >= from_date) and \
                              (True if to_date is None else int(x[0]) <= to_date),
                              map(lambda item: (int(item[0]), int(item[1])), data)),
                      key=lambda x: x[0])
Esempio n. 6
0
    def get_range(self,
                  data,
                  from_date,
                  to_date,
                  period,
                  filter_name=None,
                  filter_value=None):
        """Shortcut for datarange

        :param data: data list
        :param from_date:
        :param to_date:
        :param period:
        """
        from_date = date_min(from_date, period)
        to_date = date_max(to_date, period)

        data = self.filter_data_by_period(data, from_date, to_date)

        groups = groupby(data,
                         key=lambda x: get_by_period(
                             date_min(x['timestamp'], period), period))

        for group, group_items in groups:

            if not group_items:
                yield (group, 0)
                continue

            group_sum = 0

            if not filter_name:
                group_sum = sum([x['value'] for x in group_items])
            else:
                group_sum = sum([
                    x['value'] for x in group_items
                    if (x['filter_name'] == filter_name) and (
                        x['filter_value'] == filter_value)
                ])

            yield (group, group_sum)
Esempio n. 7
0
    def test_date_min_and_max(self):
        d = datetime(2012, 11, 1, 4, 5, 2)
        self.assertEquals(date_min(d, "year"), datetime(2012, 1, 1, 0, 0))
        self.assertEquals(date_min(d, "month"), datetime(2012, 11, 1, 0, 0))
        self.assertEquals(date_min(d, "week"), datetime(2012, 10, 29, 0, 0))
        self.assertEquals(date_min(d, "day"), datetime(2012, 11, 1, 0, 0))
        self.assertEquals(date_min(d, "hour"), datetime(2012, 11, 1, 4, 0))
        self.assertEquals(date_min(d, "minute"), datetime(2012, 11, 1, 4, 5))

        self.assertEquals(date_max(d, "year"), datetime(2012, 12, 31, 23, 59, 59, 999999))
        self.assertEquals(date_max(d, "month"), datetime(2012, 11, 30, 23, 59, 59, 999999))
        self.assertEquals(date_max(d, "week"), datetime(2012, 11, 4, 23, 59, 59, 999999))
        self.assertEquals(date_max(d, "day"), datetime(2012, 11, 1, 23, 59, 59, 999999))
        self.assertEquals(date_max(d, "hour"), datetime(2012, 11, 1, 4, 59, 59, 999999))
        self.assertEquals(date_max(d, "minute"), datetime(2012, 11, 1, 4, 5, 59, 999999))

        d = datetime(2013, 12, 30, 4, 5, 2)
        self.assertEquals(date_min(d, "year"), datetime(2013, 1, 1, 0, 0, 0))
        self.assertEquals(date_min(d, "month"), datetime(2013, 12, 1, 0, 0, 0))
        self.assertEquals(date_min(d, "week"), datetime(2013, 12, 30, 0, 0, 0))
        self.assertEquals(date_min(d, "day"), datetime(2013, 12, 30, 0, 0, 0, 0))
        self.assertEquals(date_min(d, "hour"), datetime(2013, 12, 30, 4, 0, 0))
        self.assertEquals(date_min(d, "minute"), datetime(2013, 12, 30, 4, 5, 0))

        self.assertEquals(date_max(d, "year"), datetime(2013, 12, 31, 23, 59, 59, 999999))
        self.assertEquals(date_max(d, "month"), datetime(2013, 12, 31, 23, 59, 59, 999999))
        self.assertEquals(date_max(d, "week"), datetime(2014, 1, 5, 23, 59, 59, 999999))
        self.assertEquals(date_max(d, "day"), datetime(2013, 12, 30, 23, 59, 59, 999999))
        self.assertEquals(date_max(d, "hour"), datetime(2013, 12, 30, 4, 59, 59, 999999))
        self.assertEquals(date_max(d, "minute"), datetime(2013, 12, 30, 4, 5, 59, 999999))
Esempio n. 8
0
 def tmax(d, period):
     return get_by_period(date_max(d, period), period)
Esempio n. 9
0
    def test_date_min_and_max(self):
        d = datetime(2012, 11, 1, 4, 5, 2)
        self.assertEquals(date_min(d, "year"), datetime(2012, 1, 1, 0, 0))
        self.assertEquals(date_min(d, "month"), datetime(2012, 11, 1, 0, 0))
        self.assertEquals(date_min(d, "week"), datetime(2012, 10, 29, 0, 0))
        self.assertEquals(date_min(d, "day"), datetime(2012, 11, 1, 0, 0))
        self.assertEquals(date_min(d, "hour"), datetime(2012, 11, 1, 4, 0))
        self.assertEquals(date_min(d, "minute"), datetime(2012, 11, 1, 4, 5))

        self.assertEquals(date_max(d, "year"),
                          datetime(2012, 12, 31, 23, 59, 59, 999999))
        self.assertEquals(date_max(d, "month"),
                          datetime(2012, 11, 30, 23, 59, 59, 999999))
        self.assertEquals(date_max(d, "week"),
                          datetime(2012, 11, 4, 23, 59, 59, 999999))
        self.assertEquals(date_max(d, "day"),
                          datetime(2012, 11, 1, 23, 59, 59, 999999))
        self.assertEquals(date_max(d, "hour"),
                          datetime(2012, 11, 1, 4, 59, 59, 999999))
        self.assertEquals(date_max(d, "minute"),
                          datetime(2012, 11, 1, 4, 5, 59, 999999))

        d = datetime(2013, 12, 30, 4, 5, 2)
        self.assertEquals(date_min(d, "year"), datetime(2013, 1, 1, 0, 0, 0))
        self.assertEquals(date_min(d, "month"), datetime(2013, 12, 1, 0, 0, 0))
        self.assertEquals(date_min(d, "week"), datetime(2013, 12, 30, 0, 0, 0))
        self.assertEquals(date_min(d, "day"), datetime(2013, 12, 30, 0, 0, 0,
                                                       0))
        self.assertEquals(date_min(d, "hour"), datetime(2013, 12, 30, 4, 0, 0))
        self.assertEquals(date_min(d, "minute"),
                          datetime(2013, 12, 30, 4, 5, 0))

        self.assertEquals(date_max(d, "year"),
                          datetime(2013, 12, 31, 23, 59, 59, 999999))
        self.assertEquals(date_max(d, "month"),
                          datetime(2013, 12, 31, 23, 59, 59, 999999))
        self.assertEquals(date_max(d, "week"),
                          datetime(2014, 1, 5, 23, 59, 59, 999999))
        self.assertEquals(date_max(d, "day"),
                          datetime(2013, 12, 30, 23, 59, 59, 999999))
        self.assertEquals(date_max(d, "hour"),
                          datetime(2013, 12, 30, 4, 59, 59, 999999))
        self.assertEquals(date_max(d, "minute"),
                          datetime(2013, 12, 30, 4, 5, 59, 999999))
Esempio n. 10
0
 def tmax(d, period):
     return get_by_period(date_max(d, period), period)