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)
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)) })
def detail(request, chart_class, range_class=None, title=''): if range_class: range = range_class.last() chart = compare_charts(chart_class(range), chart_class(range.prev())) else: range = None chart = chart_class() return render(request, 'chart/detail.html', { 'title': title, 'chart': chart, 'cache_key': str(chart_class) + '_' + repr(range), 'has_diff': range != None, })
def get_chart(request, type): if type == 'work': chart_class = PopularWorksChart elif type == 'user': chart_class = ActiveUsersChart else: raise Http404 period = request.GET.get('period') if period == 'week': period_class = Week elif period == 'month': period_class = Month else: period_class = None count = min(int(request.GET.get('count', 100)), 1000) if period_class: period = period_class.last() chart = compare_charts( chart_class(period, count), chart_class(period.prev()) ) else: period = None chart = chart_class(None, count) result = {} if period: result['start_date'] = chart.start result['end_date'] = chart.end result['items'] = items = [] for item in chart: if period: if item['diff'] is None: del item['diff'] else: item['diff'] *= item['sign'] del item['sign'] if type == 'work': work = item['object'] item['work'] = work.title elif type == 'user': item['user'] = item['object'].username del item['object'] items.append(item) return result
def get(self, request): def _serialize(item): work = item['object'] item['object'] = serialize_work(work) return item w = PopularWorksChartView.range_func() limit = int(request.GET['limit']) cache_key = '/charts/works/weekly/%s?limit=%d' % (str(w.sunday), limit) result = cache.get(cache_key) if result is None: chart = compare_charts( PopularWorksChart(w, limit), PopularWorksChart(w.prev()) ) result = map(_serialize, chart) cache.set(cache_key, result, 60 * 60) return result
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
def detail(request, chart_class, range_class=None, title=''): if range_class: range = range_class.last() chart = compare_charts(chart_class(range), chart_class(range.prev())) else: range = None chart = chart_class() cache_key = 'chart/' + str(chart_class) + '_' + repr(range) chart_json = cache.get(cache_key) if not chart_json: chart_json = serialize_chart(chart, 100) cache.set(cache_key, chart_json, 7200) return render(request, 'chart.html', { 'title': title, 'preload_data': { 'current_user': serializers.serialize_user(request.user, request.user) if request.user.is_authenticated() else None, 'title': title, 'chart': chart_json, 'has_diff': range != None, } })