Skip to content

Commit

Permalink
Optimalization of _fast_time_series
Browse files Browse the repository at this point in the history
--HG--
branch : experimental
  • Loading branch information
PassionateAngler committed Aug 24, 2011
1 parent 4f39f7b commit 10fd22a
Showing 1 changed file with 8 additions and 5 deletions.
13 changes: 8 additions & 5 deletions qsstats/__init__.py
Expand Up @@ -60,6 +60,7 @@ def __getattr__(self, name):
def time_series(self, start, end=None, interval='days',
date_field=None, aggregate=None, engine=None):
''' Aggregate over time intervals '''

end = end or self.today
args = [start, end, interval, date_field, aggregate]
engine = engine or self._guess_engine()
Expand All @@ -82,6 +83,7 @@ def _slow_time_series(self, start, end, interval='days',
raise InvalidInterval('Interval is currently not supported.')

method = getattr(self, 'for_%s' % interval[:-1])

stat_list = []
dt, end = _to_datetime(start), _to_datetime(end)
while dt <= end:
Expand All @@ -93,6 +95,7 @@ def _slow_time_series(self, start, end, interval='days',
def _fast_time_series(self, start, end, interval='days',
date_field=None, aggregate=None, engine=None):
''' Aggregate over time intervals using just 1 sql query '''

date_field = date_field or self.date_field
aggregate = aggregate or self.aggregate
engine = engine or self._guess_engine()
Expand All @@ -117,14 +120,14 @@ def to_dt(d): # leave dates as-is
dt = start
while dt < end:
idx = 0
value = 0
for i in range(num):
value = value + data.get(dt, 0)
if i == 0:
stat_list.append([dt, data.get(dt, 0)])
stat_list.append((dt, value,))
idx = len(stat_list) - 1
else:
stat_list[idx][0] = dt
stat_list[idx][1] = stat_list[idx][1] + data.get(dt, 0)

elif i == num - 1:
stat_list[idx] = (dt, value,)
dt = dt + relativedelta(**{interval : 1})

return stat_list
Expand Down

0 comments on commit 10fd22a

Please sign in to comment.