コード例 #1
0
ファイル: routes.py プロジェクト: rashirungta/cocoa
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)
コード例 #2
0
ファイル: routes.py プロジェクト: skrcode/cocoa-flights
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()))
コード例 #3
0
ファイル: routes.py プロジェクト: rashirungta/cocoa
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))
コード例 #4
0
ファイル: routes.py プロジェクト: skrcode/cocoa-flights
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))
コード例 #5
0
ファイル: routes.py プロジェクト: skrcode/cocoa-flights
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)
コード例 #6
0
ファイル: routes.py プロジェクト: skrcode/cocoa-flights
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)
コード例 #7
0
ファイル: routes.py プロジェクト: skrcode/cocoa-flights
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)
コード例 #8
0
ファイル: routes.py プロジェクト: skrcode/cocoa-flights
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)
コード例 #9
0
ファイル: routes.py プロジェクト: skrcode/cocoa-flights
def submit_survey():
    backend = get_backend()
    data = request.json['response']
    uid = request.json['uid']
    backend.submit_survey(uid, data)
    return jsonify(success=True)
コード例 #10
0
ファイル: routes.py プロジェクト: skrcode/cocoa-flights
def disconnect():
    backend = get_backend()
    backend.disconnect(userid())
    return jsonify(success=True)
コード例 #11
0
ファイル: routes.py プロジェクト: skrcode/cocoa-flights
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)
コード例 #12
0
ファイル: routes.py プロジェクト: skrcode/cocoa-flights
def skip_chat():
    backend = get_backend()
    uid = userid()
    backend.skip_chat(uid)
    return jsonify(success=True)
コード例 #13
0
ファイル: routes.py プロジェクト: rashirungta/cocoa
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)