Example #1
0
def check_battery_view(battery, worker_id):
    missing_batteries, blocking_batteries = check_battery_dependencies(battery, worker_id)
    if missing_batteries or blocking_batteries:
        return render_to_response(
            "turk/battery_requirements_not_met.html",
            context={'missing_batteries': missing_batteries,
                     'blocking_batteries': blocking_batteries}
        )
    else:
        return None
Example #2
0
def serve_battery(request, bid, userid=None):
    '''prepare for local serve of battery'''

    next_page = None
    battery = get_battery(bid, request)

    # No robots allowed!
    if request.user_agent.is_bot:
        return render_to_response("turk/robot_sorry.html")

    # Is userid not defined, redirect them to preview
    if userid is None:
        return preview_battery(request, bid)

    worker = get_worker(userid, create=False)
    if isinstance(worker, list):  # no id means returning []
        return render_to_response("turk/invalid_id_sorry.html")

    missing_batteries, blocking_batteries = check_battery_dependencies(
        battery, userid)
    if missing_batteries or blocking_batteries:
        return render_to_response("turk/battery_requirements_not_met.html",
                                  context={
                                      'missing_batteries': missing_batteries,
                                      'blocking_batteries': blocking_batteries
                                  })

    # Try to get some info about browser, language, etc.
    browser = "%s,%s" % (request.user_agent.browser.family,
                         request.user_agent.browser.version_string)
    platform = "%s,%s" % (request.user_agent.os.family,
                          request.user_agent.os.version_string)
    deployment = "docker-local"

    # Does the worker have experiments remaining?
    uncompleted_experiments = get_worker_experiments(worker, battery)
    experiments_left = len(uncompleted_experiments)
    if experiments_left == 0:
        # Thank you for your participation - no more experiments!
        return render_to_response("turk/worker_sorry.html")

    task_list = select_experiments(battery, uncompleted_experiments)
    experimentTemplate = ExperimentTemplate.objects.filter(
        exp_id=task_list[0].template.exp_id)[0]
    experiment_type = get_experiment_type(experimentTemplate)
    task_list = battery.experiments.filter(template=experimentTemplate)

    # Generate a new results object for the worker, assignment, experiment
    result, _ = Result.objects.update_or_create(worker=worker,
                                                experiment=experimentTemplate,
                                                battery=battery,
                                                defaults={
                                                    "browser": browser,
                                                    "platform": platform
                                                })
    result.save()

    context = {"worker_id": worker.id, "uniqueId": result.id}

    # If this is the last experiment, the finish button will link to a thank
    # you page.
    if experiments_left == 1:
        next_page = "/finished"

    # Determine template name based on template_type
    template = "%s/serve_battery.html" % (experiment_type)

    return deploy_battery(deployment="docker-local",
                          battery=battery,
                          experiment_type=experiment_type,
                          context=context,
                          task_list=task_list,
                          template=template,
                          next_page=next_page,
                          result=result,
                          experiments_left=experiments_left - 1)
Example #3
0
def serve_battery(request,bid,userid=None):
    '''prepare for local serve of battery'''

    next_page = None
    battery = get_battery(bid,request)

    # No robots allowed!
    if request.user_agent.is_bot:
        return render_to_response("turk/robot_sorry.html")

    # Is userid not defined, redirect them to preview
    if userid == None:
        return preview_battery(request,bid)

    worker = get_worker(userid,create=False)
    if isinstance(worker,list): # no id means returning []
        return render_to_response("turk/invalid_id_sorry.html")

    missing_batteries, blocking_batteries = check_battery_dependencies(battery, userid)
    if missing_batteries or blocking_batteries:
        return render_to_response(
            "turk/battery_requirements_not_met.html",
            context={'missing_batteries': missing_batteries,
                     'blocking_batteries': blocking_batteries}
        )


    # Try to get some info about browser, language, etc.
    browser = "%s,%s" %(request.user_agent.browser.family,request.user_agent.browser.version_string)
    platform = "%s,%s" %(request.user_agent.os.family,request.user_agent.os.version_string)
    deployment = "docker-local"

    # Does the worker have experiments remaining?
    uncompleted_experiments = get_worker_experiments(worker,battery)
    experiments_left = len(uncompleted_experiments)
    if  experiments_left == 0:
        # Thank you for your participation - no more experiments!
        return render_to_response("turk/worker_sorry.html")

    task_list = select_experiments(battery,uncompleted_experiments)
    experimentTemplate = ExperimentTemplate.objects.filter(exp_id=task_list[0].template.exp_id)[0]
    experiment_type = get_experiment_type(experimentTemplate)
    task_list = battery.experiments.filter(template=experimentTemplate)

    # Generate a new results object for the worker, assignment, experiment
    result,_ = Result.objects.update_or_create(worker=worker,
                                               experiment=experimentTemplate,
                                               battery=battery,
                                               defaults={"browser":browser,"platform":platform})
    result.save()

    context = {"worker_id": worker.id,
               "uniqueId":result.id}

    # If this is the last experiment, the finish button will link to a thank you page.
    if experiments_left == 1:
        next_page = "/finished"

    # Determine template name based on template_type
    template = "%s/serve_battery.html" %(experiment_type)

    return deploy_battery(
        deployment="docker-local",
        battery=battery,
        experiment_type=experiment_type,
        context=context,
        task_list=task_list,
        template=template,
        next_page=next_page,
        result=result,
        experiments_left=experiments_left-1
    )