コード例 #1
0
ファイル: magic.py プロジェクト: wangjun/appetsy
    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))
コード例 #2
0
ファイル: index.py プロジェクト: wangjun/appetsy
    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