示例#1
0
def add_resource():
    form = AddResourceForm(request.form)
    if form.validate():
        get_db().resources.insert_one(form.data)
        return "", 200
    else:
        return abort(400)
示例#2
0
    def test_delete_survey_fail2(self, client):
        survey_count = get_db().surveys.count()
        sid = objectId_str(ex.survey2["_id"])
        path = "/surveys/{sid}".format(sid=sid)

        res = client.delete(path)
        self.assertEqual(survey_count, get_db().surveys.count())
        assert_redirect_page(self, res)
示例#3
0
def _write_deque(d):
    # upsert = update or insert if not there.
    get_db().qotd_meta.update_one({}, {"$set": {
        "hd": d[0]["_id"]
    }},
                                  upsert=True)
    for q in d:
        get_db().questions.update_one({"_id": q["_id"]}, {"$set": q})
示例#4
0
    def test_delete_survey_fail1(self, client):
        survey_count = get_db().surveys.count()
        sid = objectId_str(ex.survey2["_id"])
        path = "/surveys/{sid}".format(sid=sid)

        res = client.delete(path)
        self.assertEqual(res.status_code, 403)
        self.assertEqual(get_db().surveys.count(), survey_count)
示例#5
0
    def test_delete_survey_question_fail1(self, client):
        question_count = get_db().survey_questions.count()
        qid = objectId_str(ex.survey_question5["_id"])
        path = "/surveys/questions/{qid}".format(qid=qid)

        res = client.delete(path)
        self.assertEqual(get_db().survey_questions.count(), question_count)
        self.assertEqual(res.status_code, 403)
示例#6
0
    def test_delete_survey_question_fail2(self, client):
        question_count = get_db().survey_questions.count()
        qid = objectId_str(ex.survey_question5["_id"])
        path = "/surveys/questions/{qid}".format(qid=qid)

        res = client.delete(path)
        self.assertEqual(get_db().survey_questions.count(), question_count)
        assert_redirect_page(self, res)
示例#7
0
 def test_answer1(self):
     self.assertTrue(answer_question_list(ex.nq1["_id"], "c"))
     q = get_db().questions.find_one({"_id": ex.nq1["_id"]})
     self.assertEqual(ex.nq1["history"]["c"] + 1, q["history"]["c"])
     self.assertEqual(ex.nq1["response_count"] + 1, q["response_count"])
     q = get_db().questions.find_one({"_id": ex.nq2["_id"]})
     self.assertEqual(ex.nq2["history"]["c"], q["history"]["c"])
     self.assertEqual(ex.nq2["response_count"], q["response_count"])
示例#8
0
 def test_answer3(self):
     self.assertFalse(answer_question_list(ObjectId(), "d"))
     q = get_db().questions.find_one({"_id": ex.nq1["_id"]})
     self.assertEqual(ex.nq1["history"]["c"], q["history"]["c"])
     self.assertEqual(ex.nq1["response_count"], q["response_count"])
     q = get_db().questions.find_one({"_id": ex.nq2["_id"]})
     self.assertEqual(ex.nq2["history"]["c"], q["history"]["c"])
     self.assertEqual(ex.nq2["response_count"], q["response_count"])
示例#9
0
    def test_delete_survey_success2(self, client):
        survey_count = get_db().surveys.count()
        sid = objectId_str(ex.survey3["_id"])
        path = "/surveys/{sid}".format(sid=sid)

        res = client.delete(path)
        self.assertEqual(get_db().surveys.count(), survey_count - 1)
        self.assertEqual(0, get_db().responses.find({"survey_id": sid}).count())
        assert_404_page(self, client.get(path))
示例#10
0
def delete_survey(sid):
    try:
        removed_survey = get_db().surveys.remove({"_id": ObjectId(sid)})
        if removed_survey is None:
            abort(400, "Invalid survey id: {sid}".format(sid=sid))
        else:
            get_db().responses.remove({"survey_id": str(sid)})
            return "Success!"  #response is ignored in case of success anyway
    except Exception as e:
        abort(400, str(e))
示例#11
0
def do_something_to_resource(should_activate):
    id = request.args.get("id", None)
    doc = check_resource_id(id)

    if doc is None:
        return abort(404)

    get_db().resources.update_one({"_id": doc["_id"]},
                                  {"$set": {"active": should_activate}})
    return "", 200
示例#12
0
def get_survey_questions():
    if request.args.get("ajax") is not None:
        if json.loads(request.args.get("ajax")):
            return json.dumps(
                (CreateSurveyForm.get_survey_questions(get_db())))
        else:
            abort(400, "What are you trying to do?")
    else:
        questions = [(q["_id"], q["question"])
                     for q in get_db().survey_questions.find()]
        return render_template("/surveys/survey_question_list.html",
                               questions=questions)
示例#13
0
 def test_answer_question_endpoint(self, client):
     res = client.get('/questions/answer',
                      data={
                          "qid": ex.nq1["_id"],
                          "answer": "c"
                      })
     self.assertEqual(200, res.status_code)
     q = get_db().questions.find_one({"_id": ex.nq1["_id"]})
     self.assertEqual(ex.nq1["history"]["c"] + 1, q["history"]["c"])
     self.assertEqual(ex.nq1["response_count"] + 1, q["response_count"])
     q = get_db().questions.find_one({"_id": ex.nq2["_id"]})
     self.assertEqual(ex.nq2["history"]["c"], q["history"]["c"])
     self.assertEqual(ex.nq2["response_count"], q["response_count"])
示例#14
0
def answer_question_list(qid, answer):
    qid = get_obj_id(qid)
    question = get_question_by_id(qid)
    if question is None:
        return False
    if answer not in question["history"]:
        return False

    question["history"][answer] += 1
    question["response_count"] += 1

    get_db().questions.update_one({"_id": qid}, {"$set": question})

    return True
示例#15
0
def create_survey():
    form = CreateSurveyForm(get_db())
    if request.method == "GET":
        return render_template("surveys/create_survey.html")

    else:
        form.set_name(request)
        form.set_questions(request)

        validated, reason = form.validate()
        if validated:
            sid = store_survey(form, get_db())
            return redirect("/surveys/{sid}".format(sid=sid))
        else:
            abort(400, reason)
示例#16
0
 def test_add1(self, client):
     f = make_add_form_data()
     res = client.post('/resources/add', data=f)
     self.assertEqual(200, res.status_code)
     doc = get_db().resources.find_one({"link": f["link"]})
     del doc["_id"]
     self.assertEqual(f, doc)
示例#17
0
 def test_deactivate_staff(self, client):
     self.assertTrue(ex.staff1["active"])
     res = post_edit_staff(client, ex.staff1["_id"], {"edit_active": False})
     self.assertEqual(200, res.status_code)
     staff_page = client.get('/page/staff.html')
     self.assertFalse(ex.staff1["name"] in staff_page.data)
     editted = get_db().staff.find_one({"_id": ex.staff1["_id"]})
     self.assertFalse(editted["active"])
示例#18
0
def complete_survey(sid):
    db = get_db()
    form = SubmitResponseForm(sid, db)

    if request.method == "GET":
        return render_template("surveys/survey.html", survey=form.survey)

    else:
        form.set_timestamp()
        form.set_ans_ids(request)

        validated, error_msg = form.validate()

        if validated:
            store_response(form, get_db())
            return render_template("surveys/thank_you.html")
        else:
            abort(400, error_msg)
示例#19
0
 def test_enable_question_endpoint(self, client):
     new_id = get_db().questions.insert_one({"stuff": True}).inserted_id
     res = client.post('/questions/enable',
                       data={
                           "qid": str(new_id),
                           "idx": 0
                       })
     self.assertEqual(200, res.status_code)
     self.assertEqual(new_id, get_question_by_idx(0)["_id"])
示例#20
0
def delete_survey_question(qid):
    surveys = get_db().surveys.find()

    for survey in surveys:
        for question in survey["qids"]:
            if qid == question:
                abort(
                    400,
                    "This question currently exists on a survey. Delete all surveys that reference this question to delete it"
                )

    try:
        removed = get_db().survey_questions.remove({"_id": ObjectId(qid)})
        if removed is None:
            abort(400, "Invalid question id: {qid}".format(qid=qid))
        else:
            return "Success!"  #response is ignored in case of success anyway
    except Exception as e:
        abort(400, str(e))
示例#21
0
def get_survey_question(qid):
    try:
        question = get_db().survey_questions.find_one({"_id": ObjectId(qid)})
    except:
        abort(404)

    if question is None:
        abort(404)
    else:
        return render_template("/surveys/survey_question.html",
                               question=question)
示例#22
0
 def test_add4(self, client):
     f = make_add_form_data()
     l = ["link", "name", "category", "rtype"]
     ll = len(l)
     for idx, x in enumerate(l):
         fnew = dict(f)
         del fnew[x]
         res = client.post('/resources/add', data=fnew)
         self.assertEqual(400, res.status_code)
         key = l[(idx + 1) % ll]
         doc = get_db().resources.find_one({key: f[key]})
         self.assertIsNone(doc)
示例#23
0
 def test_edit_staff(self, client):
     res = post_edit_staff(client, ex.staff1["_id"], {
         "edit_name": "Dummy",
         "edit_title": "Dummy Title",
         "edit_active": "y"
     })
     self.assertEqual(200, res.status_code)
     staff_page = client.get('/page/staff.html')
     editted = get_db().staff.find_one({"_id": ex.staff1["_id"]})
     self.assertEqual(editted["name"], "Dummy")
     self.assertEqual(editted["title"], "Dummy Title")
     self.assertTrue("Dummy" in staff_page.data)
示例#24
0
def _log_question():
    today = datetime_today()
    yesterday = today - timedelta(days=1)

    # This check has to do with the possibility of delayed running of the
    # transition job.
    # Really all we need is to put the next question in.
    if get_db().qotd_meta.find_one({"qlog.day": yesterday}) is not None:
        # Current question actually belongs to yesterday
        q_time = yesterday
    else:
        # Current question actually belongs to today
        q_time = today
    get_db().qotd_meta.update_one(
        {},
        {"qlog": {
            "$push": {
                "day": q_time,
                "qid": get_question_by_idx(0)
            }
        }})
示例#25
0
def create_question():
    if request.method == "GET":
        form = CreateQuestionForm()
        return render_template("surveys/create_survey_question.html",
                               form=form)

    else:
        form = CreateQuestionForm(request.form)
        validated, reason = form.validate()
        if validated:
            qid = store_question(form, get_db())
            return redirect("/surveys/questions/{qid}".format(qid=qid))
        else:
            abort(400, reason)
示例#26
0
    def test_add_question_endpoint(self, client):
        data = json.dumps({
            "question": "What is the answer?",
            "choices": {
                "a": "This one",
                "b": "This one",
                "c": "This one"
            },
            "answer": "c"
        })

        res = client.post('/questions/add',
                          data=data,
                          content_type='application/json')

        self.assertEqual(200, res.status_code)
        x = get_db().questions.find_one({"question": "What is the answer?"})
        self.assertTrue("history" in x)
示例#27
0
def retrieve_response_data(sid):
    ret_val = {"sid": sid, "questions": []}

    db = get_db()

    survey = db.surveys.find_one({"_id": ObjectId(sid)})
    if survey is None:
        abort(404)
    ret_val["name"] = survey["name"]
    questions = [
        db.survey_questions.find_one({"_id": ObjectId(str(qid))})
        for qid in survey["qids"]
    ]

    #[[0, 1, 2, 3], [2, 1, 0 2]...]
    #[[0, 1], [3, 2]...]
    responses = [
        r["ans_ids"]
        for r in db.responses.find({"survey_id": str(survey["_id"])})
    ]
    ret_val["num_responses"] = len(responses)

    for q_idx, question in enumerate(questions):
        new_q = dict(question=question["question"], q_idx=q_idx, answers={})

        for ans_idx, ans in enumerate(question["answers"]):
            chosen_count = 0

            for ans_arr in responses:
                if ans_arr[
                        q_idx] == ans_idx:  #if they answered the question with this option
                    chosen_count += 1

            new_q["answers"][ans["answer"]] = chosen_count

        ret_val["questions"].append(new_q)

    return ret_val
示例#28
0
def add_question():
    d = request.get_json()
    if "question" not in d or \
       "choices" not in d or \
       "answer" not in d:
        return abort(400)

    question_text = d["question"]
    choices = d["choices"]
    answer = d["answer"]
    history = {}
    for key in choices:
        history[key] = 0
    response_count = 0
    return str(get_db().questions.insert_one({
        "question": question_text,
        "choices": choices,
        "answer": answer,
        "history": history,
        "response_count": 0,
        "next": None,
        "prev": None
    }).inserted_id)
示例#29
0
def update_password_for(uid, new_pass):
    get_db().users.update_one({"_id": uid}, {"$set": {"password": gen_hash(new_pass)}})
示例#30
0
def use_time_for_user(uid, date):
    get_db().reset_times.insert_one({"user": uid, "time": date})