def rss_completion(request, percentage_gap=5): repo, commit = repos.repo_from_request(request) # Return cached if found. cache_key = 'rss_completion commit={0} percentage_gap={1}'.format(commit.hexsha, percentage_gap) content, mtime = cache.get_cached_content(cache_key) if content is None or request.GET.has_key('nocache'): mtime = commit.authored_date tree = commit.tree percent_reviewed_to_report = set(xrange(percentage_gap, 100, percentage_gap)) percent_reviewed_to_report.add(100) percent_transcribed_to_report = set(xrange(percentage_gap, 100, percentage_gap)) percent_transcribed_to_report.add(100) transcription_info, _ = repos.json_file_at_commit( repo, 'transcription.json', commit, required=True) duration = transcription_info['duration'] snippet_ms = _snippet_ms() snippets_total = duration / snippet_ms if duration % snippet_ms: snippets_total += 1 reviews_total = snippets_total - 1 completions = [] now_url = 'http://{host}/?src=rc'.format(**dict( host=request.host, )) for c in reversed(list(repo.iter_commits(commit, ['remaining_reviews.json', 'remaining_snippets.json']))): this_url = 'http://{host}/?rev={rev}&src=rc'.format(**dict( host=request.host, rev=c.hexsha, )) snippets_remaining = len(repos.get_remaining_snippets(c.tree)) snippets_completed = snippets_total - snippets_remaining snippets_percent = snippets_completed * 100 / snippets_total reviews_remaining = len(repos.get_remaining_reviews(c.tree)) reviews_completed = reviews_total - reviews_remaining reviews_percent = reviews_completed * 100 / reviews_total if snippets_percent in percent_transcribed_to_report: completions.append(( snippets_percent, None, this_url, c.authored_date, )) percent_transcribed_to_report.remove(snippets_percent) elif reviews_percent in percent_reviewed_to_report: completions.append(( None, reviews_percent, this_url, c.authored_date, )) percent_reviewed_to_report.remove(reviews_percent) # Report completion in chrono order. completions.reverse() pub_date = commit.authored_date data = dict( _standard_response(repo, commit), completions=completions, now_url=now_url, pub_date=pub_date, request=request, rfc822_from_time=rfc822_from_time, ) content = render('fanscribed:templates/rss_completion.xml.mako', data, request=request) cache.cache_content(cache_key, content, mtime) return Response(content, content_type='application/rss+xml', date=mtime)
def _progress_dicts(tree, transcription_info): if 'duration' in transcription_info: duration = transcription_info['duration'] snippet_ms = _snippet_ms() snippets_total = duration / snippet_ms if duration % snippet_ms: snippets_total += 1 snippets_remaining = len(repos.get_remaining_snippets(tree)) snippets_completed = snippets_total - snippets_remaining snippets_percent = snippets_completed * 100 / snippets_total reviews_total = snippets_total - 1 reviews_remaining = len(repos.get_remaining_reviews(tree)) reviews_completed = reviews_total - reviews_remaining reviews_percent = reviews_completed * 100 / reviews_total else: snippets_total = 0 snippets_remaining = 0 snippets_completed = 0 snippets_percent = 0 reviews_total = 0 reviews_remaining = 0 reviews_completed = 0 reviews_percent = 0 return dict( snippets_progress=dict( total=snippets_total, completed=snippets_completed, percent=snippets_percent, ), reviews_progress=dict( total=reviews_total, completed=reviews_completed, percent=reviews_percent, ), # Support for embedding in mediawiki mediawiki=dict( snippets_percent=snippets_percent, reviews_percent=reviews_percent, ), )