From 0c4b64ee3b29cf7040ba2136f0fa950b493342fd Mon Sep 17 00:00:00 2001 From: Neil Williams Date: Fri, 13 Jul 2012 10:45:22 -0700 Subject: [PATCH] zip_timeseries: Handle descending *and* ascending data correctly. The previous fix broke promoted link traffic which is ordered the other way. --- r2/r2/lib/pages/trafficpages.py | 2 +- r2/r2/models/traffic.py | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/r2/r2/lib/pages/trafficpages.py b/r2/r2/lib/pages/trafficpages.py index bda6a5076..01ffe49db 100644 --- a/r2/r2/lib/pages/trafficpages.py +++ b/r2/r2/lib/pages/trafficpages.py @@ -354,7 +354,7 @@ class PromotedLinkTraffic(RedditTraffic): clicks = traffic.ClickthroughsByCodename.promotion_history(fullname, start, end) - history = traffic.zip_timeseries(imps, clicks) + history = traffic.zip_timeseries(imps, clicks, order="ascending") computed_history = [] self.total_impressions, self.total_clicks = 0, 0 for date, data in history: diff --git a/r2/r2/models/traffic.py b/r2/r2/models/traffic.py index 901b4d1b5..62da166c7 100644 --- a/r2/r2/models/traffic.py +++ b/r2/r2/models/traffic.py @@ -80,7 +80,7 @@ class PeekableIterator(object): return item -def zip_timeseries(*series): +def zip_timeseries(*series, **kwargs): """Zip timeseries data while gracefully handling gaps in the data. Timeseries data is expected to be a sequence of two-tuples (date, values). @@ -93,6 +93,8 @@ def zip_timeseries(*series): """ + next_slice = (max if kwargs.get("order", "descending") == "descending" + else min) iterators = [PeekableIterator(s) for s in series] widths = [len(w.peek()) for w in iterators] @@ -101,7 +103,7 @@ def zip_timeseries(*series): if not any(items): return - current_slice = max(item[0] for item in items if item) + current_slice = next_slice(item[0] for item in items if item) data = [] for i, item in enumerate(items):