Example #1
0
def handle_done(treatment, template=None, response_to_result_func=None):
    app.logger.debug("handle_done")
    if template is None:
        template = f"txx/{BASE}.done.html"
    if response_to_result_func is None:
        response_to_result_func = prop_to_prop_result
    worker_code_key = f"{BASE}_worker_code"
    worker_bonus_key = f"{BASE}_worker_bonus"
    cookie_obj = get_cookie_obj(BASE)
    ai_cookie_obj = get_cookie_obj(AI_COOKIE_KEY)
    if not cookie_obj.get(BASE, None):
        flash("Sorry, you are not allowed to use this service. ^_^")
        return render_template("error.html")
    if not (cookie_obj.get("worker_code")):
        job_id = cookie_obj["job_id"]
        worker_code = generate_completion_code(base=BASE, job_id=job_id)
        proposal = cookie_obj["proposal"]
        proposal["completion_code"] = worker_code
        proposal.update(ai_cookie_obj.get("ai_proposal", {}))
        row_info = cookie_obj["row_info"]
        worker_id = cookie_obj["worker_id"]
        row_info = get_row(get_db(), job_id, worker_id, TREATMENT)
        offer = proposal["offer_dss"]

        min_offer = row_info["min_offer"]
        worker_bonus = 0
        if offer >= min_offer:
            worker_bonus = 5
        prop_result = response_to_result_func(proposal,
                                              job_id=job_id,
                                              worker_id=worker_id,
                                              row_data=row_info)
        prop_result["worker_bonus"] = worker_bonus
        try:
            save_result2file(
                get_output_filename(base=BASE,
                                    job_id=job_id,
                                    treatment=treatment), prop_result)
        except Exception as err:
            app.log_exception(err)
        try:
            save_result2db(table=get_table(base=BASE,
                                           job_id=job_id,
                                           schema="result",
                                           treatment=treatment),
                           response_result=prop_result,
                           unique_fields=["worker_id"])
            #increase_worker_bonus(job_id=job_id, worker_id=worker_id, bonus_cents=worker_bonus, con=get_db("DB"))
        except Exception as err:
            app.log_exception(err)
        cookie_obj.clear()

        cookie_obj[BASE] = True
        cookie_obj["worker_id"] = worker_id
        cookie_obj[worker_bonus_key] = cents_repr(worker_bonus)
        cookie_obj[worker_code_key] = worker_code
    req_response = make_response(
        render_template(template, worker_code=cookie_obj[worker_code_key]))
    set_cookie_obj(req_response, BASE, cookie_obj)
    return req_response
Example #2
0
def handle_survey_cpc_done():
    if not session.get("txx"):
        flash("Sorry, you are not allowed to use this service. ^_^")
        return render_template("error.html")
    job_id = session["job_id"]
    worker_id = session["worker_id"]
    treatment = session["treatment"]

    response = session["response"]
    response["worker_id"] = worker_id
    result = {k: v for k, v in response.items() if k not in {'csrf_token'}}
    try:
        save_result2file(
            get_output_filename(base="survey_cpc",
                                job_id=job_id,
                                treatment=treatment), result)
    except Exception as err:
        app.log_exception(err)
    try:
        save_result2db(table=get_table(base="survey_cpc",
                                       job_id=job_id,
                                       schema="result",
                                       treatment=treatment),
                       response_result=result,
                       unique_fields=["worker_id"])
    except Exception as err:
        app.log_exception(err)
    return render_template("info.html", job_id=job_id)
Example #3
0
def handle_task_done(base, response_to_result_func=None, response_to_bonus=None, numeric_fields=None, unique_fields=None):
    """
    :param base: (str)
    :param response_to_result_func: (func)
    :param response_to_bonus: (func)
    :param numeric_fields: (None| '*' | list)  if '*' all fields are converted to float
    :param unique_fields: (str|list)
    """
    app.logger.debug(f"handle_task_done: {base}")
    worker_code_key = f"{base}_worker_code"
    worker_bonus_key = f"{base}_worker_bonus"
    cookie_obj = get_cookie_obj(base)
    if response_to_result_func is None:
        response_to_result_func = response_to_result
    if not cookie_obj.get(base):
        flash("Sorry, you are not allowed to use this service. ^_^")
        return render_template("error.html")
    if response_to_bonus is None:
        response_to_bonus = lambda args, **kwargs: 0
    if not cookie_obj.get(worker_code_key) or (app.config["DEBUG"] and False):
        job_id = cookie_obj["job_id"]
        worker_code = generate_completion_code(base, job_id)
        response = cookie_obj["response"]
        if numeric_fields is not None:
            if isinstance(numeric_fields, (list, tuple)):
                for field in numeric_fields:
                    try:
                        response[field] = value_to_numeric(response[field])
                    except Exception as err:
                        app.log_exception(err)
            elif numeric_fields == "*":
                for field in response:
                    try:
                        response[field] = value_to_numeric(response[field])
                    except Exception as err:
                        app.log_exception(err)

        worker_id = cookie_obj["worker_id"]
        response["completion_code"] = worker_code
        response_result = response_to_result_func(response, job_id=job_id, worker_id=worker_id)
        worker_bonus = response_to_bonus(response)
        response_result["worker_bonus"] = worker_bonus
        try:
            save_result2file(get_output_filename(base, job_id, is_task=True), response_result)
        except Exception as err:
            app.log_exception(err)
        try:
            #TODO: check later
            save_result2db(get_table(base, job_id=job_id, schema="result", is_task=True), response_result, unique_fields=unique_fields)
            increase_worker_bonus(job_id=job_id, worker_id=worker_id, bonus_cents=worker_bonus)
        except Exception as err:
            app.log_exception(err)
        
        #NOTE: hexaco is the LAST task required from the user!!!
        auto_finalize = cookie_obj.get("auto_finalize")
        if auto_finalize:# and base=="hexaco":
            #NOTE: there is an import here ^_^
            from survey.txx.helpers import finalize_resp
            treatment = cookie_obj.get("treatment")
            finalize_resp(job_id, worker_id, treatment)
            # client = app.test_client()
            # url = url_for(f"{treatment}.webhook", job_id=job_id, worker_id=worker_id, auto_finalize=auto_finalize, _external=False)
            # app.logger.debug(f"WEBHOOK-URL: {url}")
            # response = client.get(url)
            # # response = requests.get(url)
            # # response = make_response(url)
            # if response.status_code != 200:
            #     app.logger.warning(f"handle_task_done: Something went wrong when: auto: {auto_finalize}, base: {base}, resp-status: {response.data}")
        cookie_obj.clear()
        cookie_obj[base] = True
        cookie_obj["worker_id"] = worker_id
        cookie_obj[worker_code_key] = worker_code
        cookie_obj[worker_bonus_key] = worker_bonus
    
    req_response = make_response(render_template("tasks/done.html", worker_code=cookie_obj[worker_code_key], worker_bonus=cents_repr(cookie_obj[worker_bonus_key])))
    set_cookie_obj(req_response, base, cookie_obj)
    return req_response
Example #4
0
def handle_done(treatment,
                template=None,
                response_to_result_func=None,
                ignore_job=None):
    app.logger.debug("handle_done")
    if template is None:
        template = f"txx/{BASE}.done.html"
    if response_to_result_func is None:
        response_to_result_func = prop_to_prop_result
    worker_code_key = f"{BASE}_worker_code"
    worker_bonus_key = f"{BASE}_worker_bonus"
    cookie_obj = get_cookie_obj(BASE)
    ai_cookie_obj = get_cookie_obj(AI_COOKIE_KEY)
    if not cookie_obj.get(BASE, None):
        flash("Sorry, you are not allowed to use this service. ^_^")
        return render_template("error.html")
    if not (cookie_obj.get("worker_code")):
        job_id = cookie_obj["job_id"]
        worker_code = generate_completion_code(base=BASE, job_id=job_id)
        proposal = cookie_obj["proposal"]
        proposal["completion_code"] = worker_code
        proposal.update(ai_cookie_obj.get("ai_proposal", {}))
        row_info = cookie_obj["row_info"]
        worker_id = cookie_obj["worker_id"]
        close_row(get_db("DATA"),
                  job_id,
                  row_info[PK_KEY],
                  treatment=treatment,
                  ignore_job=ignore_job)
        # worker_bonus = gain(int(row_info["min_offer"]), proposal["offer"])
        prop_result = response_to_result_func(proposal,
                                              job_id=job_id,
                                              worker_id=worker_id,
                                              row_data=row_info)
        try:
            save_result2file(
                get_output_filename(base=BASE,
                                    job_id=job_id,
                                    treatment=treatment), prop_result)
        except Exception as err:
            app.log_exception(err)
        try:
            save_result2db(table=get_table(base=BASE,
                                           job_id=job_id,
                                           schema="result",
                                           treatment=treatment),
                           response_result=prop_result,
                           unique_fields=["worker_id"])
            # increase_worker_bonus(job_id=job_id, worker_id=worker_id, bonus_cents=0, con=get_db("DB"))
        except Exception as err:
            app.log_exception(err)
        auto_finalize = request.args.get("auto_finalize")
        if auto_finalize:
            # url = url_for(f"{treatment}.webhook", job_id=job_id, worker_id=worker_id, auto_finalize=auto_finalize)
            # client = app.test_client()
            # client.get(url)
            finalize_round(job_id,
                           prop_worker_id=worker_id,
                           treatment=treatment)

        cookie_obj.clear()

        cookie_obj[BASE] = True
        cookie_obj["worker_id"] = worker_id
        # cookie_obj[worker_bonus_key] = cents_repr(worker_bonus)
        cookie_obj[worker_code_key] = worker_code
    req_response = make_response(
        render_template(template, worker_code=cookie_obj[worker_code_key]))
    set_cookie_obj(req_response, BASE, cookie_obj)
    return req_response