Beispiel #1
0
def scenario_update(request, exptr_id=None, exp_id=None, scen_id=None):
    exptr_id = pk_to_int_or_404(exptr_id)
    exptr = get_object_or_404(models.Experimenter, pk=exptr_id)
    exp_id = pk_to_int_or_404(exp_id)
    exp = get_object_or_404(models.Experiment, pk=exp_id)
    scen_id = pk_to_int_or_404(scen_id)
    scen = get_object_or_404(models.Scenario, pk=scen_id)
    if "GET" == request.method:
        form = forms.ScenarioForm(
            initial={'current_file': scen.curr_scen_file},
            instance=scen)
    else:
        form = forms.ScenarioForm(request.POST, request.FILES, instance=scen)
        if form.is_valid():
            # if 'scenario_file' in form.changed_data:
            #     delete_scenario_file(scen_id)
            form.save()
            # send  them to the exp  edit page
            return redirect(exp.get_update_url())
    ctx = mk_ee_context(
        breadcrumbs=create_ee_breadcrumbs(exptr, exp, scen),
        title="Scenario Editor",
        experimenter=exptr,
        experiment=exp,
        scen=scen,
        enctype="multipart/form-data",
        form=form)
    return render(request,
                  "django_tutalk/experiment_editor/scenario_update.html",
                  ctx)
Beispiel #2
0
def post_training_task_update(request,
                              exptr_id=None, exp_id=None, task_id=None):
    exptr_id = pk_to_int_or_404(exptr_id)
    exptr = get_object_or_404(models.Experimenter, pk=exptr_id)
    exp_id = pk_to_int_or_404(exp_id)
    exp = get_object_or_404(models.Experiment, pk=exp_id)
    task_id = pk_to_int_or_404(task_id)
    task = get_object_or_404(models.PostTrainingTask, pk=task_id)
    if "GET" == request.method:
        form = forms.PostTrainingTaskForm(instance=task)
    else:
        form = forms.PostTrainingTaskForm(request.POST, instance=task)
        if form.is_valid():
            task = form.save()
            # send them to the exp edit page
            return redirect(exp.get_update_url())

    ctx = mk_ee_context(
        breadcrumbs=create_ee_breadcrumbs(exptr, exp, task),
        title="Post-Training Task Editor",
        experimenter=exptr,
        experiment=exp,
        task=task,
        form=form)
    return render(
        request,
        "django_tutalk/experiment_editor/simple_entity_update.html",
        ctx)
Beispiel #3
0
def experiment_delete(request, exptr_id=None, exp_id=None):
    exptr_id = pk_to_int_or_404(exptr_id)
    exptr = get_object_or_404(models.Experimenter, pk=exptr_id)
    exp_id = pk_to_int_or_404(exp_id)
    exp = get_object_or_404(models.Experiment, pk=exp_id)
    exp.delete()
    return redirect(exptr.get_update_url())
Beispiel #4
0
def custom_parameter_delete(request, app_id=None, cparam_id=None):
    app_id = pk_to_int_or_404(app_id)
    app = get_object_or_404(models.App, id=app_id)
    cparam_id = pk_to_int_or_404(cparam_id)
    cparam = get_object_or_404(models.CustomParameter, id=cparam_id)
    cparam.delete()
    return redirect(app.get_update_url())
Beispiel #5
0
def parameter_delete(request, app_id=None, param_id=None):
    app_id = pk_to_int_or_404(app_id)
    app = get_object_or_404(models.App, id=app_id)
    param_id = pk_to_int_or_404(param_id)
    param = get_object_or_404(models.Parameter, id=param_id)
    param.delete()
    return redirect(app.get_update_url())
Beispiel #6
0
def experiment_update(request, exptr_id=None, exp_id=None):
    exptr_id = pk_to_int_or_404(exptr_id)
    exptr = get_object_or_404(models.Experimenter, pk=exptr_id)
    exp_id = pk_to_int_or_404(exp_id)
    exp = get_object_or_404(models.Experiment, pk=exp_id)

    if "GET" == request.method:
        form = forms.ExperimentForm(instance=exp)
        et_choices = get_experiment_types()
        form.fields["experiment_type"].choices = et_choices
    else:
        form = forms.ExperimentForm(request.POST, instance=exp)
        if form.is_valid():
            form.save()
            return redirect(exp.get_update_url())  # stay on edit page
    ctx = mk_ee_context(
        breadcrumbs=create_ee_breadcrumbs(exptr, exp),
        title="Experiment Editor",
        experimenter=exptr,
        experiment=exp,
        conditions=exp.conds,
        post_training_tasks=exp.post_training_tasks,
        pre_training_tasks=exp.pre_training_tasks,
        scenarios=exp.scens,
        sites=exp.sites,
        create_condition=exp.get_create_condition_url(),
        create_post_training_task=exp.get_create_post_training_task_url(),
        create_pre_training_task=exp.get_create_pre_training_task_url(),
        create_scenario=exp.get_create_scenario_url(),
        create_site=exp.get_create_site_url(),

        form=form)
    return render(request,
                  "django_tutalk/experiment_editor/experiment_update.html",
                  ctx)
Beispiel #7
0
def condition_update(request, exptr_id=None, exp_id=None, cond_id=None):
    exptr_id = pk_to_int_or_404(exptr_id)
    exptr = get_object_or_404(models.Experimenter, pk=exptr_id)
    exp_id = pk_to_int_or_404(exp_id)
    exp = get_object_or_404(models.Experiment, pk=exp_id)
    cond_id = pk_to_int_or_404(cond_id)
    cond = get_object_or_404(models.Condition, pk=cond_id)

    if "GET" == request.method:
        form = forms.ConditionForm(instance=cond)
    else:
        form = forms.ConditionForm(request.POST, instance=cond)
        if form.is_valid():
            form.save()
            # send them to the exp edit page
            return redirect(exp.get_update_url())
    ctx = mk_ee_context(
        breadcrumbs=create_ee_breadcrumbs(exptr, exp, cond),
        title="Condition Editor",
        experimenter=exptr,
        experiment=exp,
        condition=cond,
        training_tasks=cond.training_tasks,
        create_training_task=cond.get_create_training_task_url(),
        form=form)
    return render(request,
                  "django_tutalk/experiment_editor/condition_update.html",
                  ctx)
Beispiel #8
0
def training_task_create(request, exptr_id=None, exp_id=None, cond_id=None):
    exptr_id = pk_to_int_or_404(exptr_id)
    exptr = get_object_or_404(models.Experimenter, pk=exptr_id)
    exp_id = pk_to_int_or_404(exp_id)
    exp = get_object_or_404(models.Experiment, pk=exp_id)
    cond_id = pk_to_int_or_404(cond_id)
    cond = get_object_or_404(models.Condition, pk=cond_id)
    if "GET" == request.method:
        form = forms.TrainingTaskForm(initial={
            "condition": cond,
            "experiment": exp})
    else:
        form = forms.TrainingTaskForm(request.POST)
        if form.is_valid():
            form.save()
            # send them back to exp edit page
            return redirect(cond.get_update_url())
    ctx = mk_ee_context(
        breadcrumbs=create_ee_breadcrumbs(exptr, exp, cond,
                                          {"label": "Training Task: new"}),
        title="Create Training Task",
        experimenter=exptr,
        experiment=exp,
        condition=cond,
        form=form)
    return render(request,
                  "django_tutalk/experiment_editor/entity_create.html",
                  ctx)
Beispiel #9
0
def participant_update(request,
                       exptr_id=None, exp_id=None, site_id=None, part_id=None):
    exptr_id = pk_to_int_or_404(exptr_id)
    exptr = get_object_or_404(models.Experimenter, pk=exptr_id)
    exp_id = pk_to_int_or_404(exp_id)
    exp = get_object_or_404(models.Experiment, pk=exp_id)
    site_id = pk_to_int_or_404(site_id)
    site = get_object_or_404(models.Site, pk=site_id)
    part_id = pk_to_int_or_404(part_id)
    part = get_object_or_404(models.Participant, pk=part_id)
    if "GET" == request.method:
        form = forms.ParticipantForm(instance=part)
    else:
        save_form = False
        form = forms.ParticipantForm(request.POST, instance=part)
        if form.is_valid():
            if "assigned_to_user" in form.changed_data:
                if form.cleaned_data["assigned_to_user"]:
                    ve = ValidationError(
                        "You can only disassociate a user from a participant",
                        code="invalid"
                    )
                    form.add_error("assigned_to_user", ve)
                else:
                    # get the tutalk user associated with the participant
                    tutalk_user = \
                        models.TuTalkUser.objects\
                                         .filter(participants__id=part.id)\
                                         .first()
                    if tutalk_user is None:
                        ve = ValidationError(
                            "Unable to find user assigned to this participant",
                            code="invalid"
                        )
                        form.add_error("assigned_to_user", ve)
                    else:
                        # de-assign the participant from tutalk_user
                        save_form = True
                        tutalk_user.participants.remove(part)
                        tutalk_user.save()
                        if tutalk_user.promo_code.site is not None:
                            # tutalk user is bound to a particular site
                            # the are a student user, delete the tutalk_user
                            # which means that their auth_user will remain
                            # but they will need to re-register with a promo
                            # code
                            tutalk_user.delete()
            else:
                # assigned_to_user is unchanged
                save_form = True
            if save_form:
                form.save()
                return redirect(site.get_update_url())
    ctx = mk_ee_context(
        breadcrumbs=create_ee_breadcrumbs(exptr, exp, site, part),
        title="Participant Editor",
        form=form)
    return render(request,
                  "django_tutalk/experiment_editor/simple_entity_update.html",
                  ctx)
Beispiel #10
0
def site_update(request, exptr_id=None, exp_id=None, site_id=None):
    exptr_id = pk_to_int_or_404(exptr_id)
    exptr = get_object_or_404(models.Experimenter, pk=exptr_id)
    exp_id = pk_to_int_or_404(exp_id)
    exp = get_object_or_404(models.Experiment, pk=exp_id)
    site_id = pk_to_int_or_404(site_id)
    site = get_object_or_404(models.Site, pk=site_id)
    parts = site.parts
    conds = exp.conds
    bulk_form_attrs = get_bulk_form_attributes(site,
                                               parts,
                                               conditions=conds)
    bulk_forms = initialize_bulk_forms(request, site, parts, bulk_form_attrs)
    if "GET" == request.method:
        form = forms.SiteForm(instance=site)
    else:
        form = forms.SiteForm(request.POST, instance=site)
        if form.is_valid():
            form.save()
            # keep them on site edit page
            return redirect(site.get_update_url())
    ctx = mk_ee_context(
        breadcrumbs=create_ee_breadcrumbs(exptr, exp, site),
        title="Site Editor",
        experimenter=exptr,
        experiment=exp,
        site=site,
        participants=parts,
        num_participant_columns=calculate_participant_list_num_cols(parts),
        form=form)
    ctx.update(bulk_forms)
    return render(request,
                  "django_tutalk/experiment_editor/site_update.html",
                  ctx)
Beispiel #11
0
def condition_delete(request, exptr_id=None, exp_id=None, cond_id=None):
    exptr_id = pk_to_int_or_404(exptr_id)
    exptr = get_object_or_404(models.Experimenter, pk=exptr_id)
    exp_id = pk_to_int_or_404(exp_id)
    exp = get_object_or_404(models.Experiment, pk=exp_id)
    cond_id = pk_to_int_or_404(cond_id)
    cond = get_object_or_404(models.Condition, pk=cond_id)
    cond.delete()
    return redirect(exp.get_update_url())
Beispiel #12
0
def post_training_task_delete(request,
                              exptr_id=None, exp_id=None, task_id=None):
    exptr_id = pk_to_int_or_404(exptr_id)
    exptr = get_object_or_404(models.Experimenter, pk=exptr_id)
    exp_id = pk_to_int_or_404(exp_id)
    exp = get_object_or_404(models.Experiment, pk=exp_id)
    task_id = pk_to_int_or_404(task_id)
    task = get_object_or_404(models.PostTrainingTask, pk=task_id)
    task.delete()
    return redirect(exp.get_update_url())
Beispiel #13
0
def scenario_delete(request, exptr_id=None, exp_id=None, scen_id=None):
    exptr_id = pk_to_int_or_404(exptr_id)
    exptr = get_object_or_404(models.Experimenter, pk=exptr_id)
    exp_id = pk_to_int_or_404(exp_id)
    exp = get_object_or_404(models.Experiment, pk=exp_id)
    scen_id = pk_to_int_or_404(scen_id)
    scen = get_object_or_404(models.Scenario, pk=scen_id)
    # delete_scenario_file(scen_id)
    scen.delete()
    return redirect(exp.get_update_url())
Beispiel #14
0
def bulk_participant_update(request, exptr_id=None, exp_id=None, site_id=None):
    exptr_id = pk_to_int_or_404(exptr_id)
    exptr = get_object_or_404(models.Experimenter, pk=exptr_id)
    exp_id = pk_to_int_or_404(exp_id)
    exp = get_object_or_404(models.Experiment, pk=exp_id)
    site_id = pk_to_int_or_404(site_id)
    site = get_object_or_404(models.Site, pk=site_id)
    conds = exp.conds
    parts = site.parts
    cond_name_ids = {(cond.name, cond.id) for cond in conds}
    bulk_form_attrs = get_bulk_form_attributes(site,
                                               parts,
                                               conditions=conds)
    bulk_forms = initialize_bulk_forms(request, site, parts, bulk_form_attrs)
    bulk_update_form = forms.BulkParticipantUpdateForm(request.POST)
    if bulk_update_form.is_valid():
        form_data = get_bulk_form_data(bulk_update_form,
                                       parts,
                                       conditions=conds)
        req_update_uids = set(form_data["requested_uids"])
        existing_uids = set(form_data["existing_uids"])
        cond_cycler = form_data["condition_cycler"]
        cond_names = form_data["cond_names"]
        missing_uids = req_update_uids - existing_uids
        if len(missing_uids) == 0:
            for uid in sorted(req_update_uids):
                part = get_participant_by_site_uid(site, uid)
                part.condition = next(cond_cycler)
                part.save()
            return redirect(site.get_update_url())
        else:
            bulk_update_form.add_error(
                "first_uid",
                ValidationError("uid %d doesn't exist" %
                                min(missing_uids),
                                code="invalid"))
            bulk_update_form.add_error(
                "last_uid",
                ValidationError("uid %d doesn't exist" %
                                max(missing_uids),
                                code="invalid"))
    ctx = mk_ee_context(
        breadcrumbs=create_ee_breadcrumbs(exptr, exp, site),
        title="Site Editor",
        experimenter=exptr,
        experiment=exp,
        site=site,
        participants=parts,
        num_participant_columns=calculate_participant_list_num_cols(parts),
        form=forms.SiteForm(instance=site))
    ctx.update(bulk_forms)
    ctx["bulk_update_form"] = bulk_update_form
    return render(request,
                  "django_tutalk/experiment_editor/site_update.html",
                  ctx)
Beispiel #15
0
def training_task_delete(request, exptr_id=None, exp_id=None, cond_id=None,
                         task_id=None):
    exptr_id = pk_to_int_or_404(exptr_id)
    exptr = get_object_or_404(models.Experimenter, pk=exptr_id)
    exp_id = pk_to_int_or_404(exp_id)
    exp = get_object_or_404(models.Experiment, pk=exp_id)
    cond_id = pk_to_int_or_404(cond_id)
    cond = get_object_or_404(models.Condition, pk=cond_id)
    task_id = pk_to_int_or_404(task_id)
    task = get_object_or_404(models.TrainingTask, pk=task_id)
    task.delete()
    return redirect(cond.get_update_url())
Beispiel #16
0
def parameter_update(request, app_id=None, param_id=None):
    app_id = pk_to_int_or_404(app_id)
    app = get_object_or_404(models.App, id=app_id)
    param_id = pk_to_int_or_404(param_id)
    param = get_object_or_404(models.Parameter, id=param_id)

    if "GET" == request.method:
        form = forms.ParameterForm(instance=param)
    else:
        form = forms.ParameterForm(request.POST, instance=param)
        if form.is_valid():
            form.save()
            return redirect(app.get_update_url())
    ctx = mk_ee_context(
        breadcrumbs=create_ee_breadcrumbs(app, param),
        title="App Parameter Editor",
        form=form)
    return render(request,
                  'django_tutalk/experiment_editor/simple_entity_update.html',
                  ctx)
Beispiel #17
0
def site_create(request, exptr_id=None, exp_id=None):
    exptr_id = pk_to_int_or_404(exptr_id)
    exptr = get_object_or_404(models.Experimenter, pk=exptr_id)
    exp_id = pk_to_int_or_404(exp_id)
    exp = get_object_or_404(models.Experiment, pk=exp_id)
    if "GET" == request.method:
        form = forms.SiteForm(initial={"experiment": exp})
    else:
        form = forms.SiteForm(request.POST)
        if form.is_valid():
            site = form.save()
            # send them to the site edit page
            return redirect(site.get_update_url())
    ctx = mk_ee_context(
        breadcrumbs=create_ee_breadcrumbs(exptr, exp, {"label": "Site: new"}),
        title="Create Site",
        experimenter=exptr,
        experiment=exp,
        form=form)
    return render(request,
                  "django_tutalk/experiment_editor/entity_create.html",
                  ctx)
Beispiel #18
0
def scenario_create(request, exptr_id=None, exp_id=None):
    exptr_id = pk_to_int_or_404(exptr_id)
    exptr = get_object_or_404(models.Experimenter, pk=exptr_id)
    exp_id = pk_to_int_or_404(exp_id)
    exp = get_object_or_404(models.Experiment, pk=exp_id)
    if "GET" == request.method:
        form = forms.ScenarioForm(initial={"experiment": exp})
    else:
        form = forms.ScenarioForm(request.POST, request.FILES)
        LOGGER.debug(form.data)
        if form.is_valid():
            form.save()
            return redirect(exp.get_update_url())
    ctx = mk_ee_context(
        breadcrumbs=create_ee_breadcrumbs(exptr, exp,
                                          {"label": "Scenario: new"}),
        title="Create Scenario",
        experimenter=exptr,
        experiment=exp,
        enctype="multipart/form-data",
        form=form)
    return render(request,
                  "django_tutalk/experiment_editor/entity_create.html",
                  ctx)
Beispiel #19
0
def bulk_participant_delete(request, exptr_id=None, exp_id=None, site_id=None):
    exptr_id = pk_to_int_or_404(exptr_id)
    exptr = get_object_or_404(models.Experimenter, pk=exptr_id)
    exp_id = pk_to_int_or_404(exp_id)
    exp = get_object_or_404(models.Experiment, pk=exp_id)
    site_id = pk_to_int_or_404(site_id)
    site = get_object_or_404(models.Site, pk=site_id)
    parts = site.parts
    bulk_form_attrs = get_bulk_form_attributes(site,
                                               parts)
    bulk_forms = initialize_bulk_forms(request, site, parts, bulk_form_attrs)
    bulk_delete_form = forms.BulkParticipantDeleteForm(request.POST)
    if bulk_delete_form.is_valid():
        form_data = get_bulk_form_data(bulk_delete_form, parts)
        req_delete_uids = set(form_data["requested_uids"])
        existing_uids = set(form_data["existing_uids"])
        missing_uids = req_delete_uids - existing_uids
        if len(missing_uids) == 0:
            for uid in sorted(req_delete_uids):
                part = get_participant_by_site_uid(site, uid)
                part.delete()
            return redirect(site.get_update_url())
    ctx = mk_ee_context(
        breadcrumbs=create_ee_breadcrumbs(exptr, exp, site),
        title="Site Editor",
        experimenter=exptr,
        experiment=exp,
        site=site,
        participants=parts,
        num_participant_columns=calculate_participant_list_num_cols(parts),
        form=forms.SiteForm(instance=site))
    ctx.update(bulk_forms)
    ctx["bulk_delete_form"] = bulk_delete_form
    return render(request,
                  "django_tutalk/experiment_editor/site_update.html",
                  ctx)
Beispiel #20
0
def promo_code_update(request, pc_id=None):
    pk = pk_to_int_or_404(pc_id)
    pc = get_object_or_404(models.PromoCode, id=pk)

    if "GET" == request.method:
        form = forms.PromoCodeForm(instance=pc)
    else:
        form = forms.PromoCodeForm(request.POST, instance=pc)
        if form.is_valid():
            pc.save()
            return redirect('experiment-editor:index')
    ctx = mk_ee_context(
        breadcrumbs=create_ee_breadcrumbs(pc),
        title="Promo Code Editor",
        form=form)
    return render(request,
                  'django_tutalk/experiment_editor/simple_entity_update.html',
                  ctx)
Beispiel #21
0
def parameter_create(request, app_id=None):
    pk = pk_to_int_or_404(app_id)
    app = get_object_or_404(models.App, id=pk)
    if "GET" == request.method:
        form = forms.ParameterForm(initial={'app': app.id})
    else:
        form = forms.ParameterForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect(app.get_update_url())
    ctx = mk_ee_context(
        breadcrumbs=create_ee_breadcrumbs(app,
                                          {"label": "App Parameter: new"}),
        title="New App Parameter",
        form=form)
    return render(request,
                  'django_tutalk/experiment_editor/entity_create.html',
                  ctx)
Beispiel #22
0
def experiment_type_update(request, et_id=None):
    pk = pk_to_int_or_404(et_id)
    exp_type = get_object_or_404(models.ExperimentType, id=pk)

    if "GET" == request.method:
        form = forms.ExperimentTypeForm(instance=exp_type)
    else:
        form = forms.ExperimentTypeForm(request.POST, instance=exp_type)
        if form.is_valid():
            form.save()
            return redirect('experiment-editor:index')
    ctx = mk_ee_context(
        breadcrumbs=create_ee_breadcrumbs(exp_type),
        title="Experiment Type Editor",
        form=form)
    return render(
        request,
        'django_tutalk/experiment_editor/simple_entity_update.html',
        ctx)
Beispiel #23
0
def app_update(request, app_id=None):
    pk = pk_to_int_or_404(app_id)
    app = get_object_or_404(models.App, id=pk)
    if "GET" == request.method:
        form = forms.AppForm(instance=app)
    else:
        form = forms.AppForm(request.POST, instance=app)
        if form.is_valid():
            form.save()
            return redirect(app.get_update_url())
    ctx = mk_ee_context(
        breadcrumbs=create_ee_breadcrumbs(app),
        title="App Editor",
        create_param=app.get_create_param_url(),
        create_cust_param=app.get_create_cust_param_url(),
        params=app.params,
        cust_params=app.cust_params,
        form=form)
    return render(request,
                  'django_tutalk/experiment_editor/app_update.html',
                  ctx)
Beispiel #24
0
def experiment_create(request, exptr_id=None):
    exptr_id = pk_to_int_or_404(exptr_id)
    exptr = get_object_or_404(models.Experimenter, pk=exptr_id)
    if "GET" == request.method:
        form = forms.ExperimentForm(initial={"experimenter": exptr})
        et_choices = get_experiment_types()
        form.fields["experiment_type"].choices = et_choices
    else:
        form = forms.ExperimentForm(request.POST)
        if form.is_valid():
            exp = form.save()
            return redirect(exp.get_update_url())
    ctx = mk_ee_context(
        breadcrumbs=create_ee_breadcrumbs(exptr,
                                          {"label": "Experiment: new"}),
        title="Create Experiment",
        experimenter=exptr,
        form=form)
    return render(request,
                  "django_tutalk/experiment_editor/entity_create.html",
                  ctx)
Beispiel #25
0
def experimenter_update(request, exptr_id=None):
    exptr_id = pk_to_int_or_404(exptr_id)
    exptr = get_object_or_404(models.Experimenter, pk=exptr_id)
    if "GET" == request.method:
        form = forms.ExperimenterForm(instance=exptr)
        choices = get_superuser_staff_emails()
        form.fields["owner"].choices = choices
    else:
        form = forms.ExperimenterForm(request.POST, instance=exptr)
        if form.is_valid():
            form.save()
            return redirect(exptr.get_update_url())
    ctx = mk_ee_context(
        breadcrumbs=create_ee_breadcrumbs(exptr),
        title="Experimenter Editor",
        experimenter=exptr,
        experiments=exptr.exps,
        create_experiment=exptr.get_create_experiment_url(),
        form=form)
    return render(request,
                  "django_tutalk/experiment_editor/experimenter_update.html",
                  ctx)
Beispiel #26
0
def task_start(request, part_id=None, task_id=None):
    part_id = pk_to_int_or_404(part_id)
    task_id = pk_to_int_or_404(task_id)
    part = get_object_or_404(models.Participant, pk=part_id)
    task = get_object_or_404(models.Task, pk=task_id)
    session = request.session
    app = task.app
    cond = part.condition
    site = part.site
    exp = site.experiment
    exptr = exp.experimenter

    # a task's app may not require a scenario, initialize these to null
    (scen_id, scen_name) = (None, None)

    if task.scenario is not None:
        scen_id = task.scenario.id
        tmp = task.scenario.scenario_file.name
        scen_name = os.path.splitext(os.path.basename(tmp))[0]

    # although the tutalk is "localhost" this get's different values in
    # different environments, such as when running manage.py runserver
    # (no reverse proxy)
    # thus the value of tutalk host needs to be computed
    server_name = request.META["HTTP_HOST"]
    if "HTTP_X_FORWARDED_SERVER" in request.META:
        server_name = request.META["HTTP_X_FORWARDED_SERVER"]

    server_port = request.META["SERVER_PORT"]
    server_name = server_name.replace(server_port, '').rstrip(':')
    if server_name.startswith("127.0"):
        server_name = "localhost"

    tutalk_host = server_name
    if "localhost" == tutalk_host:
        tutalk_host = socket.getfqdn()

    # remove any session information related to any previous
    # taks the user may have run
    for key in request.session.keys():
        if not key.startswith("_auth_user"):
            del request.session[key]

    std_app_params = build_std_app_params_dict(
        cond, exp, exptr, part, site, task, scen_id, scen_name, tutalk_host)

    url = "%s" % app.url
    if not url.startswith("http"):
        url = "http://%s/%s" % (server_name, url)

    # map the App's names for app parameters to the actual values
    qd = QueryDict(mutable=True)
    for param in app.params:
        try:
            qd[param.name] = std_app_params[param.value]
        except KeyError as ke:
            utils.LOGGER.error(ke)

    # add any custom app param name/values
    if len(app.cust_params) > 0:
        for cust_param in app.cust_params:
            qd[cust_param.name] = cust_param.value

    if "session" == app.parameter_method:
        for (key, value) in qd.iteritems():
            session[key] = value
        session.save()
    elif "querystring" == app.parameter_method:
        qs = "%s" % qd.urlencode()
        url = "%s?%s" % (url, qs)

    # always save the following information in the session object
    # regardless of the apps parameter passing scheme
    session["task_info"] = (task_id, part_id)
    session.save()
    task_status = models.TaskStatus.objects\
                                   .get_or_create(participant_id=part_id,
                                                  task_id=task_id)[0]
    task_status.set_started()
    task_status.save()

    return HttpResponseRedirect(url, 302)
Beispiel #27
0
def app_delete(request, app_id=None):
    pk = pk_to_int_or_404(app_id)
    app = get_object_or_404(models.App, id=pk)
    app.delete()
    return redirect('experiment-editor:index')
Beispiel #28
0
def bulk_participant_create(request, exptr_id=None, exp_id=None, site_id=None):
    exptr_id = pk_to_int_or_404(exptr_id)
    exptr = get_object_or_404(models.Experimenter, pk=exptr_id)
    exp_id = pk_to_int_or_404(exp_id)
    exp = get_object_or_404(models.Experiment, pk=exp_id)
    site_id = pk_to_int_or_404(site_id)
    site = get_object_or_404(models.Site, pk=site_id)
    parts = site.parts
    conds = exp.conds
    bulk_form_attrs = get_bulk_form_attributes(site,
                                               parts,
                                               conditions=conds)
    bulk_forms = initialize_bulk_forms(request, site, parts, bulk_form_attrs)
    bulk_create_form = forms.BulkParticipantCreateForm(request.POST)
    if bulk_create_form.is_valid():
        form_data = get_bulk_form_data(bulk_create_form,
                                       parts,
                                       conditions=conds)
        cond_cycler = form_data["condition_cycler"]
        req_create_uids = set(form_data["requested_uids"])
        existing_uids = set(form_data["existing_uids"])
        pre_existing_uids = existing_uids.intersection(req_create_uids)
        if len(pre_existing_uids) == 0:
            # conds = [cond_name_cond[cond_name] for cond_name in cond_names]
            # cond_name_cycler = itertools.cycle(conds)
            for uid in sorted(req_create_uids):
                try:
                    part = models.Participant(
                        uid=uid,
                        site=site,
                        condition=next(cond_cycler))
                    part.save()
                except StopIteration as e:
                    LOGGER.error(e)
                    break
            # send back to site edit
            return redirect(site.get_update_url())
        else:
            bulk_create_form.add_error(
                "first_uid",
                ValidationError("uid %d already exists" %
                                min(pre_existing_uids),
                                code="invalid"))
            bulk_create_form.add_error(
                "last_uid",
                ValidationError("uid %d already exists" %
                                max(pre_existing_uids),
                                code="invalid"))

    ctx = mk_ee_context(
        breadcrumbs=create_ee_breadcrumbs(exptr, exp, site),
        title="Site Editor",
        experimenter=exptr,
        experiment=exp,
        site=site,
        participants=parts,
        num_participant_columns=calculate_participant_list_num_cols(parts),
        form=forms.SiteForm(instance=site))
    ctx.update(bulk_forms)
    ctx["bulk_create_form"] = bulk_create_form
    return render(request,
                  "django_tutalk/experiment_editor/site_update.html",
                  ctx)
Beispiel #29
0
def experimenter_delete(request, exptr_id=None):
    exptr_id = pk_to_int_or_404(exptr_id)
    exptr = get_object_or_404(models.Experimenter, pk=exptr_id)
    exptr.delete()
    return redirect('experiment-editor:index')
Beispiel #30
0
def experiment_type_delete(request, et_id=None):
    pk = pk_to_int_or_404(et_id)
    exp_type = get_object_or_404(models.ExperimentType, id=pk)
    exp_type.delete()
    return redirect('experiment-editor:index')