def get_credits(request, project, subproject): """View for credits""" obj = get_subproject(request, project, subproject) if not can_view_reports(request.user, obj.project): raise PermissionDenied() form = ReportsForm(request.POST) if not form.is_valid(): return redirect(obj) data = generate_credits( obj, form.cleaned_data['start_date'], form.cleaned_data['end_date'], ) if form.cleaned_data['style'] == 'json': return JsonResponse(data=data, safe=False) if form.cleaned_data['style'] == 'html': start = '<table>' row_start = '<tr>' language_format = '<th>{0}</th>' translator_start = '<td><ul>' translator_format = '<li><a href="mailto:{0}">{1}</a></li>' translator_end = '</ul></td>' row_end = '</tr>' mime = 'text/html' end = '</table>' else: start = '' row_start = '' language_format = '* {0}\n' translator_start = '' translator_format = ' * {1} <{0}>' translator_end = '' row_end = '' mime = 'text/plain' end = '' result = [] result.append(start) for language in data: name, translators = language.popitem() result.append(row_start) result.append(language_format.format(name)) result.append(''.join(( translator_start, '\n'.join([translator_format.format(*t) for t in translators]), translator_end, ))) result.append(row_end) result.append(end) return HttpResponse( '\n'.join(result), content_type='{0}; charset=utf-8'.format(mime), )
def get_counts(request, project, subproject): """View for work counts""" obj = get_subproject(request, project, subproject) if not can_view_reports(request.user, obj.project): raise PermissionDenied() form = ReportsForm(request.POST) if not form.is_valid(): return redirect(obj) data = generate_counts( obj, form.cleaned_data['start_date'], form.cleaned_data['end_date'], ) if form.cleaned_data['style'] == 'json': return JsonResponse(data=data, safe=False) if form.cleaned_data['style'] == 'html': start = ('<table>\n<tr><th>Name</th><th>Email</th>' '<th>Words</th><th>Count</th></tr>') row_start = '<tr>' cell_name = cell_email = cell_words = cell_count = '<td>{0}</td>\n' row_end = '</tr>' mime = 'text/html' end = '</table>' else: heading = ' '.join([ '=' * 40, '=' * 40, '=' * 10, '=' * 10, ]) start = '{0}\n{1:40} {2:40} {3:10} {4:10}\n{0}'.format( heading, 'Name', 'Email', 'Words', 'Count') row_start = '' cell_name = cell_email = '{0:40} ' cell_words = cell_count = '{0:10} ' row_end = '' mime = 'text/plain' end = heading result = [] result.append(start) for item in data: if row_start: result.append(row_start) result.append('{0}{1}{2}{3}'.format( cell_name.format(item['name']), cell_email.format(item['email']), cell_words.format(item['words']), cell_count.format(item['count']), )) if row_end: result.append(row_end) result.append(end) return HttpResponse( '\n'.join(result), content_type='{0}; charset=utf-8'.format(mime), )
def get_credits(request, project, subproject): """View for credits""" obj = get_subproject(request, project, subproject) if not can_view_reports(request.user, obj.project): raise PermissionDenied() form = ReportsForm(request.POST) if not form.is_valid(): return redirect(obj) data = generate_credits( obj, form.cleaned_data['start_date'], form.cleaned_data['end_date'], ) if form.cleaned_data['style'] == 'json': return JsonResponse(data=data, safe=False) if form.cleaned_data['style'] == 'html': start = '<table>' row_start = '<tr>' language_format = '<th>{0}</th>' translator_start = '<td><ul>' translator_format = '<li><a href="mailto:{0}">{1}</a></li>' translator_end = '</ul></td>' row_end = '</tr>' mime = 'text/html' end = '</table>' else: start = '' row_start = '' language_format = '* {0}\n' translator_start = '' translator_format = ' * {1} <{0}>' translator_end = '' row_end = '' mime = 'text/plain' end = '' result = [] result.append(start) for language in data: name, translators = language.popitem() result.append(row_start) result.append(language_format.format(name)) result.append( ''.join(( translator_start, '\n'.join( [translator_format.format(*t) for t in translators] ), translator_end, )) ) result.append(row_end) result.append(end) return HttpResponse( '\n'.join(result), content_type='{0}; charset=utf-8'.format(mime), )
def get_counts(request, project, subproject): """View for work counts""" obj = get_subproject(request, project, subproject) if not can_view_reports(request.user, obj.project): raise PermissionDenied() form = ReportsForm(request.POST) if not form.is_valid(): show_form_errors(request, form) return redirect_param(obj, '#reports') data = generate_counts( obj, form.cleaned_data['start_date'], form.cleaned_data['end_date'], ) if form.cleaned_data['style'] == 'json': return JsonResponse(data=data, safe=False) headers = ( 'Name', 'Email', 'Words total', 'Count total', 'Words edited', 'Count edited', 'Words new', 'Count new', ) if form.cleaned_data['style'] == 'html': start = HTML_HEADING.format(''.join( ['<th>{0}</th>'.format(h) for h in headers])) row_start = '<tr>' cell_name = cell_count = '<td>{0}</td>\n' row_end = '</tr>' mime = 'text/html' end = '</table>' else: start = '{0}\n{1} {2}\n{0}'.format( RST_HEADING, ' '.join(['{0:40}'.format(h) for h in headers[:2]]), ' '.join(['{0:12}'.format(h) for h in headers[2:]]), ) row_start = '' cell_name = '{0:40} ' cell_count = '{0:12} ' row_end = '' mime = 'text/plain' end = RST_HEADING result = [] result.append(start) for item in data: if row_start: result.append(row_start) result.append(''.join(( cell_name.format(item['name']), cell_name.format(item['email']), cell_count.format(item['words']), cell_count.format(item['count']), cell_count.format(item['words_new']), cell_count.format(item['count_new']), cell_count.format(item['words_edit']), cell_count.format(item['count_edit']), ))) if row_end: result.append(row_end) result.append(end) return HttpResponse( '\n'.join(result), content_type='{0}; charset=utf-8'.format(mime), )
def get_counts(request, project, subproject): """View for work counts""" obj = get_subproject(request, project, subproject) if not can_view_reports(request.user, obj.project): raise PermissionDenied() form = ReportsForm(request.POST) if not form.is_valid(): return redirect(obj) data = generate_counts( obj, form.cleaned_data['start_date'], form.cleaned_data['end_date'], ) if form.cleaned_data['style'] == 'json': return JsonResponse(data=data, safe=False) if form.cleaned_data['style'] == 'html': start = ( '<table>\n<tr><th>Name</th><th>Email</th>' '<th>Words</th><th>Count</th></tr>' ) row_start = '<tr>' cell_name = cell_email = cell_words = cell_count = '<td>{0}</td>\n' row_end = '</tr>' mime = 'text/html' end = '</table>' else: heading = ' '.join([ '=' * 40, '=' * 40, '=' * 10, '=' * 10, ]) start = '{0}\n{1:40} {2:40} {3:10} {4:10}\n{0}'.format( heading, 'Name', 'Email', 'Words', 'Count' ) row_start = '' cell_name = cell_email = '{0:40} ' cell_words = cell_count = '{0:10} ' row_end = '' mime = 'text/plain' end = heading result = [] result.append(start) for item in data: if row_start: result.append(row_start) result.append( '{0}{1}{2}{3}'.format( cell_name.format(item['name']), cell_email.format(item['email']), cell_words.format(item['words']), cell_count.format(item['count']), ) ) if row_end: result.append(row_end) result.append(end) return HttpResponse( '\n'.join(result), content_type='{0}; charset=utf-8'.format(mime), )