def delete_per_date_hour(self): shop_id = self.request.get("shop") shop = storage.EtsyShops.get_by_key_name(shop_id) if not shop: self.write("Give me shop") return one_day = appetsy.strip_minutes(dt.datetime.now() - dt.timedelta(hours=30)) views = storage.Counters.all(keys_only = True).filter("name =", "per_date_hour") \ .filter("shop =", self.shop) \ .filter("timestamp <", one_day) \ .fetch(300) db.delete(views) return str(len(views))
def recent_views(self): recent_views_json = memcache.get("recent_views_json", namespace = str(self.shop.id)) if recent_views_json: #got memcache? return that return recent_views_json one_day = appetsy.strip_minutes(dt.datetime.now() - dt.timedelta(hours=23)) views = storage.Counters.all().filter("name =", "last_24") \ .filter("shop =", self.shop) \ .filter("timestamp >=", one_day) \ .order("timestamp") \ .fetch(1000) for view in views: view.timestamp = appetsy.strip_minutes(view.timestamp) max_views = max([view.count for view in views] or [0]) events = storage.Events.all().filter("created >", one_day) \ .filter("shop =", self.shop) \ .order("created").fetch(500) literal_events = dict( sold_out = "Sold", active = "Posted new", renewed = "Renewed", uknown = "Removed" ) for event in events: event.event = literal_events.get(event.event) or event.event event.created = appetsy.strip_minutes(event.created) stat_events = {} for date_hour, event_group in groupby(events, lambda x: x.created): stat_events[date_hour] = list(event_group) faves = storage.ItemFans.all().filter("favored_on >", one_day) \ .filter("shop =", self.shop) \ .order("favored_on").fetch(500) faves.extend(storage.ShopFans.all().filter("favored_on >", one_day) \ .filter("shop =", self.shop) \ .order("favored_on").fetch(500)) stat_faves = {} for date_hour, fave_group in groupby(faves, lambda x: x.favored_on.combine(x.favored_on.date(), dt.time(hour = x.favored_on.hour))): stat_faves[date_hour] = len(list(fave_group)) views = dict([(view.timestamp, view) for view in views]) stats = [] for i in range(24): view_time = appetsy.strip_minutes(one_day + dt.timedelta(hours=i)) stats.append( {'time': appetsy.to_local_time(self.shop, view_time), 'events': [event.event for event in stat_events[view_time]] if view_time in stat_events else [], 'faves': stat_faves[view_time] if view_time in stat_faves else 0, 'views': views[view_time].count if view_time in views else 0, 'rel_views': views[view_time].count / float(max_views) if float(max_views) and view_time in views else 0, } ) recent_views_json = appetsy.json({"max_views": max_views, "views": stats}) memcache.set("recent_views_json", recent_views_json, namespace = str(self.shop.id)) return recent_views_json