def test_discussion(): l.add_proposal(data) proposal = data['id'] users = [] for n in range(10): uid = l.add_user('{}@example.com'.format(n), 'name {}'.format(n), 'blah') l.approve_user(uid) users.append(uid) l.add_to_discussion(users[0], proposal, 'Lorem ipsum') for u in users: assert len(l.get_unread(u)) == 0 assert len(l.get_discussion(proposal)) == 1 assert l.get_discussion(proposal)[0].body == 'Lorem ipsum' l.add_to_discussion(users[-1], proposal, 'dolor sit') assert [x.id for x in l.get_unread(users[0])] == [proposal] l.add_to_discussion(users[-1], proposal, 'amet, consectetur') assert [x.id for x in l.get_unread(users[0])] == [proposal] l.mark_read(users[0], proposal) for u in users: assert len(l.get_unread(u)) == 0 l.add_to_discussion(users[0], proposal, 'LOREM IPSUM') assert l.get_discussion(proposal)[-1].body == 'LOREM IPSUM' assert l.get_discussion(proposal)[0].body == 'Lorem ipsum'
def test_discussion(): l.add_proposal(data) proposal = data["id"] users = [] for n in range(10): uid = l.add_user("{}@example.com".format(n), "name {}".format(n), "blah") l.approve_user(uid) users.append(uid) l.add_to_discussion(users[0], proposal, "Lorem ipsum") for u in users: assert len(l.get_unread(u)) == 0 assert len(l.get_discussion(proposal)) == 1 assert l.get_discussion(proposal)[0].body == "Lorem ipsum" l.add_to_discussion(users[-1], proposal, "dolor sit") assert [x.id for x in l.get_unread(users[0])] == [proposal] l.add_to_discussion(users[-1], proposal, "amet, consectetur") assert [x.id for x in l.get_unread(users[0])] == [proposal] l.mark_read(users[0], proposal) for u in users: assert len(l.get_unread(u)) == 0 l.add_to_discussion(users[0], proposal, "LOREM IPSUM") assert l.get_discussion(proposal)[-1].body == "LOREM IPSUM" assert l.get_discussion(proposal)[0].body == "Lorem ipsum"
def author_feedback(key): name, id = l.check_author_key(key) if not name: return render_template('bad_feedback_key.html') proposal = l.get_proposal(id) return render_template('author_feedback.html', name=name, proposal=proposal, messages=l.get_discussion(id))
def comment(id): comment = request.values.get('comment').strip() if comment: l.add_to_discussion(request.user.id, id, comment, feedback=False) return render_template('discussion_snippet.html', unread = l.is_unread(request.user.id, id), discussion = l.get_discussion(id))
def batch_view(id): l.l('batch_view', uid=request.user.id, gid=id) group = l.get_group(id) if not group: abort(404) if request.user.email in group.author_emails: abort(404) raw_proposals = l.get_group_proposals(id) votes = l.get_group_votes(id) proposals = [] for rp in raw_proposals: clean_prop = {'proposal': rp, 'discussion': l.get_discussion(rp.id)} voters = [v.display_name for v in votes if rp.id in v.accept] clean_prop['voters'] = ', '.join(voters) clean_prop['voters_count'] = len(voters) proposals.append(clean_prop) proposal_map = {x.id: x for x in raw_proposals} if group.locked: proposals.sort(key=lambda x: -x['voters_count']) else: random.shuffle(proposals) basics = {x['proposal'].id: x['proposal'].data['title'] for x in proposals} vote = l.get_batch_vote(id, request.user.id) msgs = l.get_batch_messages(id) l.mark_batch_read(id, request.user.id) return render_template('batch/batchgroup.html', group=group, proposals=proposals, proposal_map=proposal_map, basics=basics, msgs=msgs, all_votes=votes, vote=vote._asdict() if vote else None)
def batch_view(id): l.l('batch_view', uid=request.user.id, gid=id) group = l.get_group(id) if not group: abort(404) if request.user.email in group.author_emails: abort(404) raw_proposals = l.get_group_proposals(id) votes = l.get_group_votes(id) proposals = [] for rp in raw_proposals: clean_prop = {'proposal': rp, 'discussion': l.get_discussion(rp.id)} voters = [v.display_name for v in votes if rp.id in v.accept] clean_prop['voters'] = ', '.join(voters) clean_prop['voters_count'] = len(voters) proposals.append(clean_prop) proposal_map = {x.id:x for x in raw_proposals} if group.locked: proposals.sort(key=lambda x:-x['voters_count']) else: random.shuffle(proposals) basics = {x['proposal'].id:x['proposal'].title for x in proposals} vote = l.get_batch_vote(id, request.user.id) msgs = l.get_batch_messages(id) l.mark_batch_read(id, request.user.id) return render_template('batch/batchgroup.html', group=group, proposals=proposals, proposal_map=proposal_map, basics=basics, msgs=msgs, all_votes=votes, vote = vote._asdict() if vote else None)
def screening(id): l.l('screening_view', uid=request.user.id, id=id) proposal = l.get_proposal(id) if not proposal or proposal.withdrawn: abort(404) if request.user.email in (x.email.lower() for x in proposal.authors): abort(404) unread = l.is_unread(request.user.id, id) discussion = l.get_discussion(id) standards = l.get_standards() bookmarked = l.has_bookmark(request.user.id, id) existing_vote = l.get_user_vote(request.user.id, id) votes = l.get_votes(id) my_votes = l.get_my_votes(request.user.id) percent = l.get_vote_percentage(request.user.email, request.user.id) return render_template('screening_proposal.html', proposal=proposal, votes=votes, discussion=discussion, standards=standards, bookmarked=bookmarked, existing_vote=existing_vote, unread=unread, percent=percent)
def screening(id): l.l('screening_view', uid=request.user.id, id=id) proposal = l.get_proposal(id) if not proposal or proposal.withdrawn: abort(404) if request.user.email in (x.email.lower() for x in proposal.authors): abort(404) unread = l.is_unread(request.user.id, id) discussion = l.get_discussion(id) standards = l.get_standards() existing_vote = l.get_user_vote(request.user.id, id) votes = l.get_votes(id) my_votes = l.get_my_votes(request.user.id) percent = l.get_vote_percentage(request.user.email, request.user.id) return render_template('screening_proposal.html', proposal=proposal, votes=votes, discussion=discussion, standards=standards, existing_vote=existing_vote, unread=unread, percent=percent)
def comment(id): comment = request.values.get('comment').strip() if comment: l.add_to_discussion(request.user.id, id, comment, feedback=False) return render_template('discussion_snippet.html', unread=l.is_unread(request.user.id, id), discussion=l.get_discussion(id))
def view_single_proposals(id): proposal = l.get_proposal(id) if request.user.email in [x.email for x in proposal.authors]: abort(404) return render_template('batch/single_proposal.html', proposal=proposal, discussion=l.get_discussion(id))
def screening(id): proposal = l.get_proposal(id) if not proposal or proposal.withdrawn: abort(404) if request.user.email in (x.email.lower() for x in proposal.authors): abort(404) unread = l.is_unread(request.user.id, id) discussion = l.get_discussion(id) standards = l.get_standards() progress = l.screening_progress() bookmarked = l.has_bookmark(request.user.id, id) existing_vote = l.get_user_vote(request.user.id, id) votes = l.get_votes(id) return render_template( "screening_proposal.html", proposal=proposal, votes=votes, discussion=discussion, standards=standards, progress=progress, bookmarked=bookmarked, existing_vote=existing_vote, unread=unread, )
def feedback(id): if CUTOFF_FEEDBACK: abort(404) comment = request.values.get('feedback').strip() if comment: l.add_to_discussion(request.user.id, id, comment, feedback=True) return render_template('discussion_snippet.html', unread = l.is_unread(request.user.id, id), discussion = l.get_discussion(id))
def feedback(id): if CUTOFF_FEEDBACK: abort(404) comment = request.values.get('feedback').strip() if comment: l.add_to_discussion(request.user.id, id, comment, feedback=True) return render_template('discussion_snippet.html', unread=l.is_unread(request.user.id, id), discussion=l.get_discussion(id))
def batch_view(id): l.l('batch_view', uid=request.user.id, gid=id) group = l.get_group(id) if request.user.email in group.author_emails: abort(404) raw_proposals = l.get_group_proposals(id) proposals = [{'proposal':x, 'discussion':l.get_discussion(x.id)} for x in raw_proposals] proposal_map = {x.id:x for x in raw_proposals} random.shuffle(proposals) basics = {x['proposal'].id:x['proposal'].title for x in proposals} vote = l.get_batch_vote(id, request.user.id) msgs = l.get_batch_messages(id) l.mark_batch_read(id, request.user.id) return render_template('batchgroup.html', group=group, proposals=proposals, proposal_map=proposal_map, basics=basics, msgs=msgs, vote = vote._asdict() if vote else None)
def batch_view(id): raw_proposals = l.get_group_proposals(id) proposals = [{"proposal": x, "discussion": l.get_discussion(x.id)} for x in raw_proposals] proposal_map = {x.id: x for x in raw_proposals} random.shuffle(proposals) basics = {x["proposal"].id: x["proposal"].title for x in proposals} vote = l.get_batch_vote(id, request.user.id) msgs = l.get_batch_messages(id) l.mark_batch_read(id, request.user.id) return render_template( "batchgroup.html", group=l.get_group(id), proposals=proposals, proposal_map=proposal_map, basics=basics, msgs=msgs, vote=vote._asdict() if vote else None, )
def mark_read(id): l.mark_read(request.user.id, id) return render_template('discussion_snippet.html', unread = l.is_unread(request.user.id, id), discussion = l.get_discussion(id))
def mark_read(id): l.mark_read(request.user.id, id) return render_template('discussion_snippet.html', unread=l.is_unread(request.user.id, id), discussion=l.get_discussion(id))