def create(): student = User.get_or_none(User.identity_card == get_jwt_identity()) params = request.json new_submission = Answer(exam_id=params.get("exam_id"), student_id=student.id, submission=params.get("submission")) if student.roles == "student": # check if there's existing data in Answer's table check_table = Answer.get_or_none( (Answer.exam_id == new_submission.exam.id) & (Answer.student_id == new_submission.student.id)) if not check_table: # putting the txt from submission to a tempfile temp = tempfile.TemporaryFile() temp.write(new_submission.submission.encode("utf-8")) # get path from S3 file_path = upload_file_to_s3(temp, get_jwt_identity(), new_submission.exam) # save path into the table answer = Answer(exam=new_submission.exam, submission=file_path, student=student.id) if answer.save(): response = { "Message": "Successfully saved", "Status": "Success", "exam.id": answer.exam_id, "material.id": answer.exam.material_id, "material.name": answer.exam.material.name, "subject.id": answer.exam.material.classroom.subject.id, "subject.name": answer.exam.material.classroom.subject.name, "staff.id": answer.exam.staff_id, "staff.name": answer.exam.staff.full_name, "student.id": answer.student_id, "student.name": answer.student.full_name, "submission": answer.full_file_url } else: response = { "Message": "Action unsuccessful", "Status": "Failed", } else: response = {"Message": "There is an existing submission!"} else: response = {"Message": "You are not allow to perform this action!"} return jsonify(response)
def create_answer(self, question_id, text, is_correct): """create a new answer and add it to the store and to the quiz""" new_answers = Answer(question_id, text, is_correct) self.get_question_by_id(question_id).add_answer_by_id( new_answers.answer_id) self.answers[new_answers.answer_id] = new_answers return new_answers.answer_id
def generate_questions(group_conf): df = group_conf['df'] name = f"Conseil d'administration {group_conf['semester']}" if group_conf['semester'] == 'Annuel': description = "Vote de confiance pour les postes annuels au conseil d'administration de l'AGEG." code = f"CA{group_conf['semester']}" title = "Qui voulez-vous comme administrateurs annuels de l'AGEG?" else: description = "Vote de confiance pour les postes saisonniers au conseil d'administration de l'AGEG." code = "CAS" + group_conf['semester'] title = "Qui voulez-vous comme administrateurs saisonniers de l'AGEG?" group = Group(name, description) question_admin = Question(code=code, gid=group.gid, title=title, qtype='F') question_admin.add_answer( Answer(qid=question_admin.qid, value="Oui", code="A1", order=1)) question_admin.add_answer( Answer(qid=question_admin.qid, value="Non", code="A2", order=2)) question_admin.add_answer( Answer(qid=question_admin.qid, value="Non confiance", code="A3", order=3)) sous_questions = [] for index, candidat in df.iterrows(): subquestion = Subquestion(parent=question_admin.qid, gid=question_admin.gid, code=f"SQ{index + 1:02}", value=candidat[NOM_USUEL], order=index, qtype='T') sous_questions.append(subquestion) question_admin.add_option( Option(nom=candidat[NOM_USUEL], promotion=candidat[PROMOTION], concentration=candidat[CONCENTRATION], order=index, description=candidat[TEXTE_DESCRIPTIF], image=candidat[PHOTO])) return group, question_admin, sous_questions
def createAnswer(questionId, accountId, answer, pollStatus): answ = Answer() answ.QuestionId = questionId answ.AccountId = accountId account = Account.query.filter_by(Id=accountId).first() account.setDomainExpertise() if len(account.DomainExpertise) > 0: answ.IsExpert = True else: answ.IsExpert = False answ.Answer = answer answ.TimeStamp = datetime.date.today() answ.Score = 0 poll = PollOption.query.filter_by(PollOptionName=pollStatus).first() answ.PollOptionId = poll.Id db.session.add(answ) db.session.commit() return answ
def put(self): payload = request.get_json(force=True) if payload is None: payload = {} new_answer = Answer(text=payload.get('answer')) db.session.add(new_answer) db.session.commit() return {'message': 'Successfully added'}, 200
def install_models_data(): questions = [] query = Question.query if query.count() == 0: for question_data in app_data.final_question_data: question = Question(from_dict=question_data) BaseObject.check_and_save(question) print("Object: question CREATED") questions.append(question) else: questions.append(query.all()) categories = [] query = Category.query if query.count() == 0: for category_data in app_data.category_data: category = Category(from_dict=category_data) BaseObject.check_and_save(category) print("Object: category CREATED") categories.append(category) else: categories.append(query.all()) answers = [] query = Answer.query if query.count() == 0: index = 0 for answer_data in app_data.answer_data: answer = Answer(from_dict=answer_data) question = Question.query.filter_by( question_name=answer_data['question_name']).one() answer.question_id = question.id BaseObject.check_and_save(answer) print("Object: answer CREATED") answers.append(answer) index += 1 else: answers.append(query.all()) query = QuestionCategory.query if query.count() == 0: for question_data in app_data.final_question_data: question = Question.query.filter_by( question_name=question_data['question_name']).one() category = Category.query.filter_by( label=question_data['category_name']).one() question_category = QuestionCategory() question_category.question_id = question.id question_category.category_id = category.id BaseObject.check_and_save(question_category) print("Object: question_category CREATED")
def post(self, answers, question_id): for answ in answers: answ_id = Answer.query.filter(Answer.text == answ.get('text')).first() if answ_id: new_answer = QuestionAnswers(question_id=question_id, answer_id=answ_id.answer_id, correct=answ.get('correct')) db.session.add(new_answer) db.session.commit() else: new_answer = Answer(text=answ.get('text')) db.session.add(new_answer) db.session.commit() answ_id = Answer.query.filter(Answer.text == answ.get('text')).first() new_answer = QuestionAnswers(question_id=question_id, answer_id=answ_id.answer_id, correct=answ.get('correct')) db.session.add(new_answer) db.session.commit() return {'message': 'Successfully added'}, 200
def showQuestion(question_id, methods=['GET', 'POST']): # Shows the respective question related to the current survey (latest active one). # If there already is a feedback id stored in cookie, the controller's action retrieves it and # fills the form/question if there was already an answer to that question. # The page has links to next and previous question. # Renders a different view based on the question type. print('\n--- ENTERING showQuestion:') cookie = request.cookies['feedback_id'] feedback = session.query(Feedback).filter_by(id_=int(cookie)).one() print('\n--- COOKIE / SESSION ID: {}'.format(cookie)) print('---FEEDBACK: {}'.format(feedback.serialize)) # Template dict qtype_forms = { 'Freeform': AnswerFormFree(request.form), # can this be removed? 'Text': AnswerFormFree(request.form), 'Thumbs': AnswerFormThumbs(request.form), 'Stars': AnswerFormStars(request.form), 'Smileys': AnswerFormSmileys(request.form), 'Choices': AnswerFormChoices(request.form) } print('---FORM DICT: {}'.format(qtype_forms)) progress = 0 # GET: SHOW QUESTION if request.method == 'GET': print('\n--- ENTERING showQuestion with question_id: {}, method: {}'. format(question_id, request.method)) # Get list of survey questions q = session.query(Question).filter_by(id_=question_id).one() q_list = session.query(Question).filter_by( survey_id_=q.survey_id_).all() q_list_ids = [question.id_ for question in q_list] # Figure out next_url and prev_url prev_q_ix = q_list_ids.index( q.id_) - 1 if q_list_ids.index(q.id_) - 1 >= 0 else None next_q_ix = q_list_ids.index( q.id_) + 1 if q_list_ids.index(q.id_) + 1 < len(q_list) else None # flash('prev_q_ix: {}'.format(prev_q_ix)) # flash('next_q_ix: {}'.format(next_q_ix)) prev_url = url_for('controllers.showQuestion', question_id=q_list_ids[prev_q_ix] ) if prev_q_ix != None else None # <--- next_url = url_for( 'controllers.showQuestion', question_id=q_list_ids[next_q_ix] ) if next_q_ix != None else url_for('controllers.thankYou') is_first = prev_url == None # Set up proper template template = templates.get( q.type_, 'freeform.html') # Freeform is default fallback print('Chose template {} from templates: {}'.format( template, templates)) form_action_url = '/feedback/questions/' + str(q.id_) # Set up question form and fetch possible pre-existing answer form = qtype_forms.get(q.type_, AnswerFormFree(request.form)) print('Chose form from qtype_forms: {}'.format(form)) # flash('Feedback_id == Cookie == {}'.format(feedback.id_)) # flash('form.value_: {}'.format(form.value_)) # Check for pre-existing answers try: print('---CHECK FOR PRE-EXISTING ANSWER:', type(q.id_), q.id_, type(request.cookies['feedback_id']), request.cookies['feedback_id']) pre_existing_answer = session.query(Answer).filter_by( question_id_=q.id_, feedback_id_=request.cookies['feedback_id']).order_by( Answer.created_at_.desc()).first() print('---FOUND PRE-EXISTING ANSWERS:', pre_existing_answer) except: pre_existing_answer = None if pre_existing_answer != None: print('form.value_.data == {}'.format(form.value_.data)) print('---PRE-EXISTING ANSWER FOUND WITH VALUE {}'.format( pre_existing_answer.value_)) # Parse answer in db to response parameters for displaying it form = db_answer_to_response(pre_existing_answer, q.type_, form) print('form.value_.data == {} {}'.format(type(form.value_.data), form.value_.data)) else: print('---NO PRE-EXISTING ANSWER FOUND.') # Debug statements print('---TEMPLATE: {}, {}'.format(type(template), template)) print('---FORM: {}, {}'.format(type(form), form)) print('---FORM.VALUE_.DATA: {}'.format(form.value_.data)) print('---FORM_ACTION_URL: {}, {}'.format(type(form_action_url), form_action_url)) print('---LIST OF QUESTION IDS: {}'.format(q_list_ids)) print('---QUESTION: {}, {}'.format(type(q), q)) print('---QUESTION TYPE: {}, {}'.format(type(q.type_), q.type_)) print('---IS_FIRST: {}, {}'.format(type(is_first), is_first)) print('---QUESTION_ID: {}, {}'.format(type(q.id_), q.id_)) print('---QUESTION_TITLE: {}, {}'.format(type(q.title_), q.title_)) print('---NEXT_URL: {}, {}'.format(type(next_url), next_url)) print('---PREV_URL: {}, {}'.format(type(prev_url), prev_url)) # Get progress progress, missing, missing_mandatory = get_progress(feedback) # print('---PROGRESS! {}'.format(progress)) # print('---MISSING! {}'.format(missing)) # print('---MISSING MANDATORY! {}'.format(missing_mandatory)) # flash('progress: {}'.format(progress)) # flash('missing: {}'.format(missing)) # flash('missing_mandatory: {}'.format(missing_mandatory)) if q.type_ == 'Choices': form.setChoices(q.questionchoices) response = make_response( render_template( template, form=form, form_action_url=form_action_url, question_id=q.id_, question_title=q.title_, question_type=q.type_, prev_url=prev_url, next_url=next_url, is_first=is_first, progress=progress # downthumb_status=downthumb_status, # upthumb_status=upthumb_status, )) print('---RESPONSE CREATED. EXITING showQuestion AND RENDERING {}'. format(template)) return response # POST QUESTION: elif request.method == 'POST': print('\n---ENTERING WITH POST') print('request.form: {}'.format(request.form)) print('request.cookies: {}'.format(request.cookies)) # Get possible pre-existing answer print('---COMPARING POSTED ANSWER TO POSSIBLY PRE-EXISTING ANSWER') answer = session.query(Answer).filter_by( feedback_id_=int(request.cookies['feedback_id']), question_id_=int(request.form['question_id'])).all() print('len(answer): {}'.format(len(answer))) if len(answer) > 0: print('---FOUND PRE-EXISTING ANSWER:') answer = answer[0] print(answer) print('---PRE-EXISTING answer.value_: {}'.format(answer.value_)) # Parse parsed_answer = parse_answer_from_request_form( request.form, answer.value_) print('---PARSED_ANSWER: {}'.format(parsed_answer)) if answer.value_ == parsed_answer: print('Scrolling through, did not change answer') else: print('---CHANGING PRE-EXISTING ANSWER') answer.value_ = parsed_answer print('---REPLACED VALUE OF PRE-EXISTING ANSWER WITH:') print(answer.serialize) else: # Create new answer object print('---NO PRE-EXISTING ANSWER FOUND!') parsed_answer = parse_answer_from_request_form(request.form, None) print('---PARSED_ANSWER: {}'.format(parsed_answer)) answer = Answer(parsed_answer, int(request.cookies['feedback_id']), int(request.form['question_id'])) print('---CREATED NEW ANSWER OBJECT:') print('answer.serialize {}'.format(answer.serialize)) print('---ANSWER.value_: {} {} len {}'.format( type(answer.value_), answer.value_, len(answer.value_))) # Validate: data required if len(answer.value_) > 0: session.add(answer) session.commit() # Redirect to next if 'Next' was clicked if 'Next' in request.form.keys(): print('---EXITING showQuestion [POST], REDIRECTING TO NEXT: {}'. format(request.form['next_url'])) return redirect(request.form['next_url']) # Redirect to prev if 'Prev' was clicked if 'Previous' in request.form.keys(): print('---EXITING showQuestion [POST], REDIRECTING TO PREV: {}'. format(request.form['prev_url'])) return redirect(request.form['prev_url']) return 'POST redirection to next/prev failed'
id=1, name="Conseil d'administration", description= "Vote de confiance pour les postes saisonniers au conseil d'administration de l'AGEG." ) groups = [groupe_exec, groupe_admin] questions = generer_questions_exec(groupe_exec.gid) question_admin = Question( id=100, code="CASA19", gid=groupe_admin.gid, title="Qui voulez-vous comme administrateurs saisonniers de l'AGEG?", type='F') question_admin.add_answer( Answer(qid=question_admin.qid, value="Oui", code="A1", order=1)) question_admin.add_answer( Answer(qid=question_admin.qid, value="Non", code="A2", order=2)) sousquestions_admin = generer_sousquestion_admin(question_admin) options_admin = generer_options_admin() for option in options_admin: question_admin.add_option(option) questions.append(question_admin) mylookup = TemplateLookup(directories=['.'], input_encoding="utf-8", output_encoding="utf-8") mytemplate = Template(filename='templates/base.mako', lookup=mylookup,
def showQuestion(question_id, methods=['GET', 'POST']): # Shows the respective question related to the current survey (latest active one). # If there already is a feedback id stored in cookie, the controller's action retrieves it and # fills the form/question if there was already an answer to that question. # The page has links to next and previous question. # Renders a different view based on the question type. # Get feedback object cookie = request.cookies['feedback_id'] feedback = session.query(Feedback).filter_by(id_=int(cookie)).one() # Form dict - can this be factored out of each function? qtype_forms = { 'Freeform': AnswerFormFree(request.form), # can this be removed? 'Text': AnswerFormFree(request.form), 'Thumbs': AnswerFormThumbs(request.form), 'Stars': AnswerFormStars(request.form), 'Smileys': AnswerFormSmileys(request.form), 'Choices': AnswerFormChoices(request.form), 'Picture': AnswerFormFree(request.form) } progress = 0 # GET: Show question with prefilled answer if request.method == 'GET': # Get list of survey questions q = session.query(Question).filter_by(id_=question_id).one() q_list = session.query(Question).filter_by( survey_id_=q.survey_id_).all() q_list_ids = [question.id_ for question in q_list] # Figure out next_url and prev_url prev_q_ix = q_list_ids.index( q.id_) - 1 if q_list_ids.index(q.id_) - 1 >= 0 else None next_q_ix = q_list_ids.index( q.id_) + 1 if q_list_ids.index(q.id_) + 1 < len(q_list) else None prev_url = url_for('controllers.showQuestion', question_id=q_list_ids[prev_q_ix] ) if prev_q_ix != None else None # <--- next_url = url_for( 'controllers.showQuestion', question_id=q_list_ids[next_q_ix] ) if next_q_ix != None else url_for('controllers.thankYou') is_first = prev_url == None # Set up proper template and form_action_url template = templates.get( q.type_, 'freeform.html') # Freeform is default fallback form_action_url = '/feedback/questions/' + str(q.id_) # Set up question form and fetch possible pre-existing answer form = qtype_forms.get(q.type_, AnswerFormFree(request.form)) # Check for pre-existing answers try: pre_existing_answer = session.query(Answer).filter_by( question_id_=q.id_, feedback_id_=request.cookies['feedback_id']).order_by( Answer.created_at_.desc()).first() except: pre_existing_answer = None if pre_existing_answer != None: # Parse answer in db to response parameters for displaying it form.value_.data = pre_existing_answer.value_ if q.type_ == 'Choices': form.setChoices(q.questionchoices) # Get progress progress, missing = get_progress(feedback) response = make_response( render_template(template, form=form, form_action_url=form_action_url, question_id=q.id_, question_title=q.title_, question_type=q.type_, prev_url=prev_url, next_url=next_url, is_first=is_first, progress=progress, answer=pre_existing_answer)) return response # POST: Write answer to database elif request.method == 'POST': # Get question type question = session.query(Question).filter_by( id_=request.form['question_id']).first() # Parse new answer from form if it exists if request.form.get('value_'): new_answer_val = str(request.form['value_']) # If mandatory question is missing answer elif bool(question.optional_) == False: flash('Please answer this question.') this_url = url_for('controllers.showQuestion', question_id=question.id_) return redirect(this_url) # If optional question is missing answer, create empty answer value else: new_answer_val = '' # Get possible pre-existing answer answers = session.query(Answer).filter_by( feedback_id_=int(request.cookies['feedback_id']), question_id_=int(request.form['question_id'])).all() # If pre-existing answer found, take the answer object for updating if len(answers) > 0: answer_object = answers[0] # If no pre-existing answer found else: # Add placeholder '' to value_ answer_object = Answer('', int(request.cookies['feedback_id']), int(request.form['question_id'])) # Special question type (Picture) if question.type_ == 'Picture': # user gave a new file: if request.files.get('userPicture'): file = request.files['userPicture'] if file: fileName = 'F' + str(answer_object.feedback_id_) + 'A' + str(question.id_) + \ '_' + str(datetime.datetime.now().hour) + \ '_' + str(datetime.datetime.now().minute) + \ '_' + str(datetime.datetime.now().second) + '.PNG' imgPath = '/static/' + fileName file.save(parentdir + imgPath) answer_object.image_source_ = imgPath answer_object.value_ = imgPath session.add(answer_object) session.commit() # All other question types: else: answer_object.value_ = new_answer_val session.add(answer_object) session.commit() #---------------------------------------------------------------------- # NOTE: Replacing value_ with '' will only removes path to img, img data has to be removed separately #---------------------------------------------------------------------- # Redirect to previous if 'Prev' was clicked if 'Previous' in request.form.keys(): return redirect(request.form['prev_url']) # Redirect to next if 'Next' was clicked if 'Next' in request.form.keys(): return redirect(request.form['next_url']) return 'POST redirection to next/prev failed'
def showQuestion(question_id, methods=['GET', 'POST']): # Shows the respective question related to the current survey (latest active one). # If there already is a feedback id stored in cookie, the controller's action retrieves it and # fills the form/question if there was already an answer to that question. # The page has links to next and previous question. # Renders a different view based on the question type. print('\n--- ENTERING showQuestion WITH METHOD {}: {}'.format( request.method, 70 * '*')) # Get feedback object cookie = request.cookies['feedback_id'] feedback = session.query(Feedback).filter_by(id_=int(cookie)).one() print('\n--- COOKIE / SESSION ID: {}'.format(cookie)) print('---FEEDBACK: {}'.format(feedback.serialize)) # Form dict - can this be factored out of each function? qtype_forms = { 'Freeform': AnswerFormFree(request.form), # can this be removed? 'Text': AnswerFormFree(request.form), 'Thumbs': AnswerFormThumbs(request.form), 'Stars': AnswerFormStars(request.form), 'Smileys': AnswerFormSmileys(request.form), 'Choices': AnswerFormChoices(request.form), 'Picture': AnswerFormFree(request.form) } progress = 0 # GET: Show question with prefilled answer if request.method == 'GET': print('GET') print('request.form: {}'.format(request.form)) # Get list of survey questions q = session.query(Question).filter_by(id_=question_id).one() q_list = session.query(Question).filter_by( survey_id_=q.survey_id_).all() q_list_ids = [question.id_ for question in q_list] # Figure out next_url and prev_url prev_q_ix = q_list_ids.index( q.id_) - 1 if q_list_ids.index(q.id_) - 1 >= 0 else None next_q_ix = q_list_ids.index( q.id_) + 1 if q_list_ids.index(q.id_) + 1 < len(q_list) else None prev_url = url_for('controllers.showQuestion', question_id=q_list_ids[prev_q_ix] ) if prev_q_ix != None else None # <--- next_url = url_for( 'controllers.showQuestion', question_id=q_list_ids[next_q_ix] ) if next_q_ix != None else url_for('controllers.thankYou') is_first = prev_url == None # Set up proper template and form_action_url template = templates.get( q.type_, 'freeform.html') # Freeform is default fallback print('Chose template {} from templates: {}'.format( template, templates)) form_action_url = '/feedback/questions/' + str(q.id_) # Set up question form and fetch possible pre-existing answer form = qtype_forms.get(q.type_, AnswerFormFree(request.form)) print('Chose form {} from qtype_forms'.format(form)) print('---FORM.value_: {}'.format(form.value_)) print('---FORM.value_.data: {}'.format(form.value_.data)) # flash('Feedback_id == Cookie == {}'.format(feedback.id_)) # flash('form.value_.data: {}'.format(form.value_.data)) # Check for pre-existing answers try: print('---CHECK FOR PRE-EXISTING ANSWER:') pre_existing_answer = session.query(Answer).filter_by( question_id_=q.id_, feedback_id_=request.cookies['feedback_id']).order_by( Answer.created_at_.desc()).first() print('---FOUND PRE-EXISTING ANSWER:', pre_existing_answer) except: pre_existing_answer = None if pre_existing_answer != None: print('---PRE-EXISTING ANSWER FOUND WITH VALUE {}'.format( pre_existing_answer.value_)) # Parse answer in db to response parameters for displaying it print('--- CREATING RESPONSE PARAMS FROM PRE-EXISTING ANSWER:') print( '--- PRE-EXISTING ANSWER: {}, QTYPE: {}, FORM.VALUE_.DATA: {}'. format(pre_existing_answer.value_, q.type_, form.value_.data)) form.value_.data = pre_existing_answer.value_ print('form.value_.data is now {} "{}"'.format( type(form.value_.data), form.value_.data)) else: print('---NO PRE-EXISTING ANSWER FOUND.') if q.type_ == 'Choices': form.setChoices(q.questionchoices) # Debug statements print('---TEMPLATE: {}, {}'.format(type(template), template)) print('---FORM: {}, {}'.format(type(form), form)) print('---FORM.VALUE_: {}'.format(form.value_)) print('---FORM.VALUE_.DATA: {}'.format(form.value_.data)) print('---FORM_ACTION_URL: {}, {}'.format(type(form_action_url), form_action_url)) print('---LIST OF QUESTION IDS: {}'.format(q_list_ids)) print('---QUESTION: {}, {}'.format(type(q), q)) print('---QUESTION TYPE: {}, {}'.format(type(q.type_), q.type_)) print('---IS_FIRST: {}, {}'.format(type(is_first), is_first)) print('---QUESTION_ID: {}, {}'.format(type(q.id_), q.id_)) print('---QUESTION_TITLE: {}, {}'.format(type(q.title_), q.title_)) print('---NEXT_URL: {}, {}'.format(type(next_url), next_url)) print('---PREV_URL: {}, {}'.format(type(prev_url), prev_url)) # Get progress progress, missing = get_progress(feedback) # print('---PROGRESS {}'.format(progress)) # print('---MISSING {}'.format(missing)) # print('---MISSING MANDATORY {}'.format(missing)) # flash('progress: {}'.format(progress)) # flash('missing: {}'.format(missing)) # flash('missing: {}'.format(missing)) # #--------- DEBUG HERE Thumbs form!!! # form = qtype_forms.get('Thumb', AnswerFormFree(request.form)) print('form.value_: "{}"'.format(form.value_)) print('form.value_.data: "{}"'.format(form.value_.data)) if q.type_ not in ['Freeform', 'Text', 'Picture', 'Thankyou']: print('form.value_.choices: "{}"'.format(form.value_.choices)) print('---FORM: {}'.format(form)) print('---FORM.VALUE_.DATA: {}'.format(form.value_.data)) response = make_response( render_template(template, form=form, form_action_url=form_action_url, question_id=q.id_, question_title=q.title_, question_type=q.type_, prev_url=prev_url, next_url=next_url, is_first=is_first, progress=progress, answer=pre_existing_answer)) print('---RESPONSE CREATED. EXITING showQuestion AND RENDERING {}'. format(template)) return response # POST: Write answer to database elif request.method == 'POST': print('POST') print('request.form: {}'.format(request.form)) print('request.cookies: {}'.format(request.cookies)) # Get question type question = session.query(Question).filter_by( id_=request.form['question_id']).first() # Parse new answer from form if it exists if request.form.get('value_'): new_answer_val = str(request.form['value_']) # If mandatory question is missing answer elif bool(question.optional_) == False: print('---THIS QUESTION ({}) IS MANDATORY!'.format(question.id_)) flash('Please answer this question.') this_url = url_for('controllers.showQuestion', question_id=question.id_) return redirect(this_url) # If optional question is missing answer, create empty answer value else: new_answer_val = '' print('---GOT new_answer_val FROM FORM: {}'.format(new_answer_val)) # Get possible pre-existing answer print('---GET POSSIBLE PRE-EXISTING ANSWER') answers = session.query(Answer).filter_by( feedback_id_=int(request.cookies['feedback_id']), question_id_=int(request.form['question_id'])).all() print('len(answer_object): {}'.format(len(answers))) # If pre-existing answer found, take the answer object for updating if len(answers) > 0: answer_object = answers[0] print('---FOUND PRE-EXISTING ANSWER: {}'.format(answer_object)) print('---PRE-EXISTING answer.value_: {}'.format( answer_object.value_)) # If no pre-existing answer found else: print('---NO PRE-EXISTING ANSWER FOUND!') # Add placeholder '' to value_ answer_object = Answer('', int(request.cookies['feedback_id']), int(request.form['question_id'])) print('---CREATED NEW ANSWER OBJECT:') # Special question type (Picture) if question.type_ == 'Picture': # user gave a new file: if request.files.get('userPicture'): file = request.files['userPicture'] if file: fileName = 'F' + str(answer_object.feedback_id_) + 'A' + str(question.id_) + \ '_' + str(datetime.datetime.now().hour) + \ '_' + str(datetime.datetime.now().minute) + \ '_' + str(datetime.datetime.now().second) + '.PNG' imgPath = '/static/' + fileName file.save(parentdir + imgPath) answer_object.image_source_ = imgPath answer_object.value_ = imgPath session.add(answer_object) session.commit() # All other question types: else: answer_object.value_ = new_answer_val print('answer.serialize {}'.format(answer_object.serialize)) print('---ANSWER_OBJECT.value_ type: {}, len {} value_ {}'.format( type(answer_object.value_), len(answer_object.value_), answer_object.value_, )) session.add(answer_object) session.commit() #---------------------------------------------------------------------- # TODO: Maybe allow for zero length answer if user wants to remove answer? # NOTE: Replacing value_ with '' will only removes path to img, img data has to be removed separately #---------------------------------------------------------------------- # Redirect to previous if 'Prev' was clicked if 'Previous' in request.form.keys(): print('---EXITING showQuestion [POST], REDIRECTING TO PREV: {}'. format(request.form['prev_url'])) return redirect(request.form['prev_url']) # Redirect to next if 'Next' was clicked if 'Next' in request.form.keys(): print('---EXITING showQuestion [POST], REDIRECTING TO NEXT: {}'. format(request.form['next_url'])) return redirect(request.form['next_url']) return 'POST redirection to next/prev failed'
q4 = Question(type_='Smileys', title_="Q2: Air quality", survey_id_=1, optional_=True) q4_c1 = QuestionChoice(title_="frown", question_id_=3) q4_c2 = QuestionChoice(title_="meh", question_id_=3) q4_c3 = QuestionChoice(title_="incredible", question_id_=3) # Feedbacks fb_1 = Feedback(survey_id_=1) fb_2 = Feedback(survey_id_=1) fb_3 = Feedback(survey_id_=1) fb_4 = Feedback(survey_id_=1) # Answers from first feedback (survey was 1) a_f1_q1 = Answer(value_=q1_c1.title_, feedback_id_=1, question_id_=1) a_f1_q2 = Answer(value_='Wow, I feel fabulous, thank you!', feedback_id_=1, question_id_=2) # Answers from second feedback (survey was 1) a_f2_q1 = Answer(value_=q1_c2.title_, feedback_id_=2, question_id_=1) a_f2_q2 = Answer(value_='I feel miserable. The bus ride ruined my day.', feedback_id_=2, question_id_=2) # Answers from third feedback (survey was 2) a_f3_q3 = Answer(value_=q3_c4.title_, feedback_id_=3, question_id_=3) a_f3_q4 = Answer(value_=q4_c1.title_, feedback_id_=3, question_id_=4) # Answers from fourth feedback (survey was 2)
def interact(self, msg, token, user): result = self.luis.message(msg) self.db.add_message( token, Answer('my_message', msg, user=user, createdAt=datetime.now().strftime('%H:%M'))) try: if result.score >= 0.5: if result.intent == 'Travel.Flight': if len(result.entities) == 0: res = self.data.get_flights('Moscow') res = self.magic_sorted(res) self.save_flight(token, res, Iata().get_city_name(res.destination)) self.db.set_places(token, []) self.db.set_hotel(token, None) return Answer('flights_from', data=res) else: res = self.data.get_flights( 'Moscow', dest=result.entities[0].entity) res = self.magic_sorted(res) self.save_flight(token, res, result.entities[0].entity) self.db.set_places(token, []) self.db.set_hotel(token, None) return Answer('flights_to', data=res) elif result.intent == 'Travel.Hotel': topic = self.db.get_topic(token) if topic.destination: res = self.data.get_hotels(topic.destination) if result.entities[0].entity in self.poi: res = self.poi_sorted(res, result.entities[0].entity) else: res = self.magic_sorted(res) topic = self.db.get_topic(token) topic.topic = 'hotel_found' self.db.set_topic(token, topic) self.db.set_hotel(token, res) return Answer('hotel', data=res) else: return Answer('no_topic') elif result.intent == 'Travel.Places': topic = self.db.get_topic(token) if topic.destination: res = self.data.get_places(topic.destination)[:5] topic = self.db.get_topic(token) topic.topic = 'places_found' self.db.set_topic(token, topic) self.db.set_places(token, res) return Answer('places', data=res) else: return Answer('no_topic') elif result.intent == 'Travel.Price': topic = self.db.get_topic(token) if topic.topic == 'flight_found': res = self.data.get_flights(topic.origin, dest=topic.destination) res.sort(key=lambda p: p.price) self.save_flight( token, res[0], Iata().get_city_name(res[0].destination)) return Answer('flights_to', data=res[0]) elif topic.topic == 'hotel_found': res = self.data.get_hotels(topic.destination) res.sort(key=lambda p: p.price) self.db.set_hotel(token, res[0]) return Answer('hotel', data=res[0]) else: return Answer('not_understand') elif result.intent == 'Travel.Food': topic = self.db.get_topic(token) if topic.destination: res = self.data.get_food(topic.destination)[:1] topic = self.db.get_topic(token) topic.topic = 'food_found' self.db.set_topic(token, topic) self.db.set_food(token, res) return Answer('food', data=res) else: return Answer('no_topic') else: return Answer('not_understand') else: return Answer('not_understand') except Exception as e: print(e) return Answer('not_understand')