def leave_chat(): backend = get_backend() uid = userid() chat_info = backend.get_chat_info(uid) backend.send( uid, Event.LeaveEvent(chat_info.agent_index, uid, str(time.time()))) return jsonify(success=True)
def is_chat_valid(): backend = get_backend() if backend.is_chat_valid(userid()): logger.debug("Chat is still valid for user %s" % userid_prefix()) return jsonify(valid=True) else: logger.info("Chat is not valid for user %s" % userid_prefix()) return jsonify(valid=False, message=backend.get_user_message(userid()))
def join_chat(): """Sent by clients when they enter a room. A status message is broadcast to all people in the room.""" backend = get_backend() uid = userid() chat_info = backend.get_chat_info(uid) backend.send(uid, Event.JoinEvent(chat_info.agent_index, uid, str(time.time()))) return jsonify(message=format_message("You entered the room.", True))
def visualize(): uid = request.args.get('uid') backend = get_backend() html_lines = ['<head><style>table{ table-layout: fixed; width: 600px; border-collapse: collapse; } ' 'tr:nth-child(n) { border: solid thin;}</style></head><body>'] html_lines.extend(backend.visualize_chat(uid)) html_lines.append('</body>') html_lines = "".join(html_lines) return render_template('visualize.html', dialogue=Markup(html_lines))
def select(): backend = get_backend() selection_id = int(request.args.get('selection')) if selection_id == -1: return selected_item = backend.select(userid(), selection_id) ordered_item = backend.schema.get_ordered_item(selected_item) displayed_message = format_message("You selected: {}".format(", ".join([v[1] for v in ordered_item])), True) return jsonify(message=displayed_message)
def check_status_change(): backend = get_backend() uid = userid() assumed_status = request.args.get('assumed_status') if backend.is_status_unchanged(uid, assumed_status): logger.debug("User %s status unchanged. Status: %s" % (uid, assumed_status)) return jsonify(status_change=False) else: logger.info("User %s status changed from %s" % (userid_prefix(), assumed_status)) return jsonify(status_change=True)
def text(): backend = get_backend() message = request.args.get('message') logger.debug("User %s said: %s" % (userid_prefix(), message)) displayed_message = format_message("You: {}".format(message), False) uid = userid() time_taken = float(request.args.get('time_taken')) received_time = time.time() start_time = received_time - time_taken chat_info = backend.get_chat_info(uid) backend.send(uid, Event.MessageEvent(chat_info.agent_index, message, str(received_time), str(start_time)) ) return jsonify(message=displayed_message)
def check_inbox(): backend = get_backend() uid = userid() event = backend.receive(uid) if event is not None: message = None if event.action == 'message': message = format_message("Partner: {}".format(event.data), False) elif event.action == 'join': message = format_message("Your partner has joined the room.", True) elif event.action == 'leave': message = format_message("Your partner has left the room.", True) elif event.action == 'select': ordered_item = backend.schema.get_ordered_item(event.data) message = format_message("Your partner selected: {}".format(", ".join([v[1] for v in ordered_item])), True) return jsonify(message=message, received=True) return jsonify(received=False)
def submit_survey(): backend = get_backend() data = request.json['response'] uid = request.json['uid'] backend.submit_survey(uid, data) return jsonify(success=True)
def disconnect(): backend = get_backend() backend.disconnect(userid()) return jsonify(success=True)
def index(): """Chat room. The user's name and room must be stored in the session.""" if not request.args.get('uid'): return redirect(url_for('main.index', uid=generate_userid(), **request.args)) backend = get_backend() backend.create_user_if_not_exists(userid()) status = backend.get_updated_status(userid()) logger.info("Got updated status %s for user %s" % (status, userid()[:6])) mturk = True if request.args.get('mturk') and int(request.args.get('mturk')) == 1 else None if status == Status.Waiting: logger.info("Getting waiting information for user %s" % userid()[:6]) waiting_info = backend.get_waiting_info(userid()) return render_template('waiting.html', seconds_until_expiration=waiting_info.num_seconds, waiting_message=waiting_info.message, uid=userid(), title=app.config['task_title'], icon=app.config['task_icon']) elif status == Status.Finished: logger.info("Getting finished information for user %s" % userid()[:6]) finished_info = backend.get_finished_info(userid(), from_mturk=mturk) mturk_code = finished_info.mturk_code if mturk else None visualize_link = False if request.args.get('debug') is not None and request.args.get('debug') == '1': visualize_link = True return render_template('finished.html', finished_message=finished_info.message, mturk_code=mturk_code, title=app.config['task_title'], icon=app.config['task_icon'], visualize=visualize_link, uid=userid()) elif status == Status.Chat: logger.info("Getting chat information for user %s" % userid()[:6]) peek = False if request.args.get('peek') is not None and request.args.get('peek') == '1': peek = True chat_info = backend.get_chat_info(userid(), peek=peek) partner_kb = None if peek: partner_kb = chat_info.partner_kb.to_dict() return render_template('chat.html', uid=userid(), kb=chat_info.kb.to_dict(), attributes=[attr.name for attr in chat_info.attributes], num_seconds=chat_info.num_seconds, title=app.config['task_title'], instructions=Markup(app.config['instructions']), icon=app.config['task_icon'], partner_kb=partner_kb, quit_enabled=app.config['user_params']['skip_chat_enabled'], quit_after=app.config['user_params']['status_params']['chat']['num_seconds'] - app.config['user_params']['quit_after']) elif status == Status.Survey: survey_info = backend.get_survey_info(userid()) return render_template('task_survey.html', title=app.config['task_title'], uid=userid(), icon=app.config['task_icon'], message=survey_info.message)
def skip_chat(): backend = get_backend() uid = userid() backend.skip_chat(uid) return jsonify(success=True)
def index(): """Chat room. The user's name and room must be stored in the session.""" if not request.args.get('uid'): return redirect( url_for('main.index', uid=generate_userid(), **request.args)) backend = get_backend() backend.create_user_if_not_exists(userid()) status = backend.get_updated_status(userid()) logger.info("Got updated status %s for user %s" % (status, userid()[:6])) # mturk = True if request.args.get('mturk') and int(request.args.get('mturk')) == 1 else None # make system always give mturk_code, without specifying in url mturk = True if status == Status.Waiting: logger.info("Getting waiting information for user %s" % userid()[:6]) waiting_info = backend.get_waiting_info(userid()) return render_template( 'waiting.html', seconds_until_expiration=waiting_info.num_seconds, waiting_message=waiting_info.message, uid=userid(), title=app.config['task_title'], title_span=app.config['task_title_span'], icon=app.config['task_icon']) elif status == Status.Finished: logger.info("Getting finished information for user %s" % userid()[:6]) finished_info = backend.get_finished_info(userid(), from_mturk=mturk) mturk_code = finished_info.mturk_code if mturk else None visualize_link = False if request.args.get('debug') is not None and request.args.get( 'debug') == '1': visualize_link = True return render_template('finished.html', finished_message=finished_info.message, mturk_code=mturk_code, title=app.config['task_title'], icon=app.config['task_icon'], visualize=visualize_link, uid=userid()) elif status == Status.Chat: logger.info("Getting chat information for user %s" % userid()[:6]) peek = False if request.args.get('peek') is not None and request.args.get( 'peek') == '1': peek = True chat_info = backend.get_chat_info(userid(), peek=peek) old_attrib = chat_info.attributes biling_attrib = [en2sp_dict[attr.name] for attr in old_attrib] old_kb = chat_info.kb.to_dict() biling_kb = [] # for attr in old_attrib: # 'Time', 'Works at'... # # import pdb; pdb.set_trace() # new_attrib = '{} / {}'.format(attr.name, en2sp_dict[attr.name]) # .encode('utf-8')) # biling_attrib.append(new_attrib) for item in old_kb: entry = {} # import pdb; pdb.set_trace() for i, new_attrib in enumerate(biling_attrib): old_attr = old_attrib[i].name if old_attr == 'Name': entry[new_attrib] = item[old_attr] else: # entry[new_attrib] = '{} / {}'.format(item[old_attr], en2sp_dict[item[old_attr]].encode('utf-8')) entry[new_attrib] = en2sp_dict[item[old_attr]].encode( 'utf-8') entry[new_attrib] = entry[new_attrib].decode('utf-8') biling_kb.append(entry) partner_kb = None if peek: partner_kb = chat_info.partner_kb.to_dict() return render_template( 'chat.html', uid=userid(), kb=old_kb, kb_span=biling_kb, attributes=[attr.name for attr in old_attrib], attributes_span=biling_attrib, num_seconds=chat_info.num_seconds, title=app.config['task_title'], title_span=app.config['task_title_span'], instructions=Markup(app.config['instructions']), instructions_span=Markup( app.config['instructions_span'].decode('utf-8')), icon=app.config['task_icon'], partner_kb=partner_kb, quit_enabled=app.config['user_params']['skip_chat_enabled'], quit_after=app.config['user_params']['status_params']['chat'] ['num_seconds'] - app.config['user_params']['quit_after']) elif status == Status.Survey: survey_info = backend.get_survey_info(userid()) return render_template('survey_emily.html', title=app.config['task_title'], uid=userid(), icon=app.config['task_icon'], message=survey_info.message)