Esempio n. 1
0
def store_question_post(store_id):
    q = request.form.get('question', '')
    a = request.form.get('answer', '')
    if not q or not a:
        return "0"

    qid = Question.add(g._db, q, a, store_id)

    #更新robotd的问题库
    try:
        rpc.refresh_questions()
    except xmlrpclib.ProtocolError as err:
        logging.warning("refresh questions err:%s", err)
    except Exception as err:
        logging.warning("refresh questions err:%s", err)

    return redirect(url_for('.store_question', store_id=store_id))
Esempio n. 2
0
def store_question_post(store_id):
    q = request.form.get('question', '')
    a = request.form.get('answer', '')
    if not q or not a:
        return "0"

    qid = Question.add(g._db, q, a, store_id)

    #更新robotd的问题库
    try:
        rpc.refresh_questions()
    except xmlrpclib.ProtocolError as err:
        logging.warning("refresh questions err:%s", err)
    except Exception as err:
        logging.warning("refresh questions err:%s", err)

    return redirect(url_for('.store_question', store_id=store_id))
    def questions():
        """
        (1) Creates endpoint for:
            - fetching all questions paginated
            - Searching for questions by a keyword
            - Adding a new question

        (2) Methods: GET, POST

        (3) Arguments for GET, POST [in search state]:
            - page=<integer: page_number> [optional, default=1]
            - length=<integer: items_per_page> [optional, default=10]

        (4) Body for POST:

            - search for questions by providing:
                JSON Object {
                    "search_term": <string: search_keyword>
                }

            - or add new question by providing:
                JSON Object {
                    "question": <string: question>
                    "answer": <string: answer>
                    "difficulty": <integer: difficulty_number>
                    "category_id": <integer: category_id>
                }

        :return(GET): JSON view for
                    "questions" [collection],
                    "total_questions" [item],
                    "categories" [collection],
                    "current_category" [item]

        :return(POST):
            - in search state
                JSON view for
                "questions" [collection],
                "total_questions" [item],
                "categories" [collection],
                "current_category" [item]

            - in add state
                JSON view for
                "success_status" [boolean],
                "new_question" [item],
                "message" [string]

        """

        # Set questions per page value
        qpp = int(request.args.get("length", 10))

        # Set page number
        page = (int(request.args.get("page", 1)) - 1) * qpp

        if request.method == "GET":

            try:

                return jsonify({
                    "questions":
                    format_collection(
                        Question.query.order_by(
                            Question.id).offset(page).limit(qpp).all()),
                    "total_questions":
                    Question.query.count(),
                    "categories":
                    format_collection(Category.query.all()),
                    "current_category":
                    "",
                })

            except BaseException:
                abort(404)

        elif request.method == "POST":

            data = None

            if request.data:
                # Load json data from response body
                data = json.loads(request.data)

            else:
                abort(422)

            # Get search term
            search_term = data.get("search_term")

            # Check if search term is provided
            if search_term:

                # Fetch results
                results = Question.query.filter(
                    Question.question.ilike(f"%{search_term}%"))

                # Format results for a single page
                results_to_show = results.offset(page).limit(qpp).all()

                if results_to_show:

                    return jsonify({
                        "questions":
                        format_collection(results_to_show),
                        "total_questions":
                        len(results.all()),
                        "categories":
                        format_collection(Category.query.all()),
                        "current_category":
                        "",
                    })

                else:
                    abort(404)

            else:

                try:

                    # Create a new Question instance
                    question = Question(
                        question=data.get("question"),
                        answer=data.get("answer"),
                        difficulty=data.get("difficulty"),
                        category_id=data.get("category_id"),
                    )

                    # Commit add Question object
                    question.add()

                    return jsonify({
                        "success_status":
                        True,
                        "new_question":
                        question.format(),
                        "message":
                        ("addition operation has been done successfully"),
                    })

                except BaseException:
                    db.session.rollback()
                    db.session.close()
                    abort(422)