示例#1
0
def _get_chart():
    def _serialize(item):
        item['object'] = serializers.serialize_work(item['object'])
        return item
    w = weekly()
    chart = PopularWorksChart(w, 5)
    return map(_serialize, chart)
示例#2
0
def _get_chart():
    def _serialize(item):
        work = item['object']
        item['object'] = serializers.serialize_work(work)
        return item
    w = weekly()
    chart = compare_charts(
        PopularWorksChart(w, 5),
        PopularWorksChart(w.prev())
    )
    return map(_serialize, chart)
示例#3
0
def main(request):
    w = weekly()
    chart = compare_charts(
        PopularWorksChart(w, 5),
        PopularWorksChart(w.prev())
    )
    return render(request, 'chart/index.html', {
        'weekly_works': load_comments(chart),
        'timeline': (History.objects.select_related('user', 'work')
                .filter(work__index__record_count__gt=1)
                .exclude(comment='')[:6].transform(include_records))
    })
示例#4
0
    def get(self, request, range):
        if range == 'weekly':
            range_obj = weekly()
        elif range == 'monthly':
            range_obj = monthly()
        else:
            range_obj = None

        limit = int(request.GET['limit'])

        def serialize_chart(chart, limit):
            data = {}
            if chart.range:
                data['start'] = chart.start.strftime('%Y-%m-%d')
                data['end'] = chart.end.strftime('%Y-%m-%d')
                data['has_diff'] = True
            else:
                data['has_diff'] = False
            items = []
            for item in chart:
                if item['rank'] > limit:
                    break
                item['object'] = {
                    'link': item['object'].get_absolute_url(),
                    'text': unicode(item['object'])
                }
                items.append(item)
            data['items'] = items
            return data

        cache_key = '/charts/{}/{}/{}?limit=%d'.format(
            self.chart_class.__name__, range, limit)
        result = cache.get(cache_key)
        if result is None:
            if range_obj:
                chart = compare_charts(self.chart_class(range_obj, limit),
                                       self.chart_class(range_obj.prev()))
            else:
                chart = self.chart_class(limit=limit)
            result = serialize_chart(chart, limit)
            result['title'] = self.chart_class.title
            cache.set(cache_key, result, 60 * 60 * 2)
        return result