def v_api_public_section(section_id=None): ## # Add total score def hook_add_total_score(output_data): if section_id is not None: new_output = output_data new_output['total_score'] = SectionApi().total_score(section_id) else: new_output = [] for item in output_data: item['total_score'] = SectionApi().total_score(item['id']) new_output.append(item) return new_output ## # Add multiplication factor def hook_add_multiplication_factor(output_data): if section_id is not None: new_output = output_data new_output['multiplication_factor'] = SectionApi( ).multiplication_factor(section_id) else: new_output = [] for item in output_data: item['multiplication_factor'] = SectionApi( ).multiplication_factor(item['id']) new_output.append(item) return new_output a_api = ScoremodelRestApi(api_class=SectionApi, o_request=request, api_obj_id=section_id, posthooks=(hook_add_total_score, hook_add_multiplication_factor)) return a_api.response
def v_api_benchmark_report_get(benchmark_report_id): ## # Add by_section def hook_add_by_section(output_data): for section_id, benchmarks in BenchmarkReportApi( ).questions_by_section(benchmark_report_id).items(): section_benchmarks = [] for b in benchmarks: b_out = b.output_obj() b_out['multiplication_factor'] = SectionApi( ).multiplication_factor(b.question.section_id) section_benchmarks.append(b_out) output_data['benchmarks_by_section'].append({ 'section_id': section_id, 'benchmarks': section_benchmarks }) return output_data a_api = ScoremodelRestApi(api_class=BenchmarkReportApi, o_request=request, api_obj_id=benchmark_report_id, posthooks=(hook_add_by_section, )) return a_api.response
def v_api_user_report_get(user_report_id=None): # Create a hook to insert current_user.id in the original data. def hook_insert_current_user(input_data): parsed_data = input_data parsed_data['user_id'] = current_user.id return parsed_data # Add the multiplication factor for every question_answer def hook_add_multiplication_factor(output_data): if type(output_data) is not dict: return output_data new_question_answers_by_section = [] for section in output_data['question_answers_by_section']: question_answers = [] for qa in section['question_answers']: qa['multiplication_factor'] = SectionApi( ).multiplication_factor(section['section_id']) question_answers.append(qa) section['question_answers'] = question_answers new_question_answers_by_section.append(section) output_data[ 'question_answers_by_section'] = new_question_answers_by_section return output_data a_api = ScoremodelRestApi(api_class=UserReportApi, o_request=request, api_obj_id=user_report_id, prehooks=(hook_insert_current_user, ), posthooks=(hook_add_multiplication_factor, )) return a_api.response
def v_api_question_answer(question_answer_id=None): # Create a hook to insert current_user.id in the original data. def hook_insert_current_user(input_data): input_data['user_id'] = current_user.id return input_data a_api = ScoremodelRestApi(api_class=QuestionAnswerApi, o_request=request, api_obj_id=question_answer_id, hooks=[hook_insert_current_user]) return a_api.response
def v_api_user_report(user_report_id=None): # Create a hook to insert current_user.id in the original data. def hook_insert_current_user(input_data): parsed_data = input_data parsed_data['user_id'] = current_user.id return parsed_data a_api = ScoremodelRestApi(api_class=UserReportApi, o_request=request, api_obj_id=user_report_id, hooks=[hook_insert_current_user]) return a_api.response
def v_api_public_question(question_id=None): ## # Add maximum score def hook_add_maximum_score(output_data): if question_id is not None: new_output = output_data new_output['maximum_score'] = QuestionApi().maximum_score( question_id) else: new_output = [] for item in output_data: item['maximum_score'] = QuestionApi().maximum_score(item['id']) new_output.append(item) return new_output a_api = ScoremodelRestApi(api_class=QuestionApi, o_request=request, api_obj_id=question_id) return a_api.response
def v_api_page(page_id=None): def hook_check_lang_id_and_menu_link_id(input_data): if not page_id: # It is a .create() return input_data parsed_data = input_data page_api = PageApi() current_page = page_api.read(page_id) if 'lang_id' not in parsed_data or 'menu_link_id' not in parsed_data: # All failures should be handled by ScoremodelRestApi return input_data if current_page.lang_id != parsed_data['lang_id']: raise RequiredAttributeMissing(_('You cannot update lang_id!')) if current_page.menu_link_id != parsed_data['menu_link_id']: raise RequiredAttributeMissing( _('You cannot update menu_link_id!')) return input_data a_api = ScoremodelRestApi(api_class=PageApi, o_request=request, api_obj_id=page_id, hooks=[hook_check_lang_id_and_menu_link_id]) return a_api.response
def v_api_document_edit(document_id): def hook_check_filename(input_data): parsed_data = input_data document_api = DocumentApi() try: existing_document = document_api.read(document_id) except Exception as e: return input_data if 'original_filename' not in parsed_data: return input_data if parsed_data[ 'original_filename'] != existing_document.original_filename: raise RequiredAttributeMissing( _('You cannot modify original_filename!')) if 'filename' in parsed_data and parsed_data[ 'filename'] != existing_document.filename: raise RequiredAttributeMissing(_('You cannot modify filename!')) return input_data a_api = ScoremodelRestApi(api_class=DocumentApi, o_request=request, api_obj_id=document_id, hooks=[hook_check_filename]) return a_api.response
def v_api_public_report(report_id=None): a_api = ScoremodelRestApi(api_class=ReportApi, o_request=request, api_obj_id=report_id) return a_api.response
def v_api_risk_factor(risk_factor_id=None): a_api = ScoremodelRestApi(api_class=RiskFactorApi, o_request=request, api_obj_id=risk_factor_id) return a_api.response
def v_api_answer(answer_id=None): a_api = ScoremodelRestApi(api_class=AnswerApi, o_request=request, api_obj_id=answer_id) return a_api.response
def v_api_question(question_id=None): a_api = ScoremodelRestApi(api_class=QuestionApi, o_request=request, api_obj_id=question_id) return a_api.response
def v_api_document_create(): a_api = ScoremodelRestApi(api_class=DocumentApi, o_request=request) return a_api.response
def v_api_public_page(page_id=None): a_api = ScoremodelRestApi(api_class=PageApi, o_request=request, api_obj_id=page_id) return a_api.response
def v_api_document(document_id=None): a_api = ScoremodelRestApi(api_class=DocumentApi, o_request=request, api_obj_id=document_id) return a_api.response
def v_api_benchmark_get(benchmark_id=None): a_api = ScoremodelRestApi(api_class=BenchmarkApi, o_request=request, api_obj_id=benchmark_id) return a_api.response