def get_section(schema, questionnaire_store, section_id, list_item_id=None): router = Router( schema, questionnaire_store.answer_store, questionnaire_store.list_store, questionnaire_store.progress_store, questionnaire_store.metadata, ) if not schema.is_hub_enabled(): redirect_location = router.get_first_incomplete_location_in_survey() return redirect(redirect_location.url()) if section_id not in router.enabled_section_ids: return redirect(url_for(".get_questionnaire")) routing_path = router.routing_path(section_id=section_id, list_item_id=list_item_id) section_status = questionnaire_store.progress_store.get_section_status( section_id=section_id, list_item_id=list_item_id) if section_status == CompletionStatus.COMPLETED: return redirect( router.get_section_return_location_when_section_complete( routing_path).url()) if section_status == CompletionStatus.NOT_STARTED: return redirect( router.get_first_incomplete_location_for_section( routing_path).url()) return redirect( router.get_first_incomplete_location_for_section( routing_path=routing_path).url())
class SectionHandler: def __init__(self, schema, questionnaire_store, section_id, list_item_id, language): self._schema = schema self._questionnaire_store = questionnaire_store self._section_id = section_id self._list_item_id = list_item_id self._language = language self._router = Router( schema, questionnaire_store.answer_store, questionnaire_store.list_store, questionnaire_store.progress_store, questionnaire_store.metadata, questionnaire_store.response_metadata, ) if not self._is_valid_location(): raise InvalidLocationException(f"location {self._section_id} is not valid") self.current_location = Location( section_id=self._section_id, list_name=self._schema.get_repeating_list_for_section(self._section_id), list_item_id=self._list_item_id, ) self._routing_path = self._router.routing_path( section_id=self._section_id, list_item_id=self._list_item_id ) def get_context(self): section_summary_context = SectionSummaryContext( self._language, self._schema, self._questionnaire_store.answer_store, self._questionnaire_store.list_store, self._questionnaire_store.progress_store, self._questionnaire_store.metadata, self._questionnaire_store.response_metadata, self._routing_path, self.current_location, ) return section_summary_context() def get_next_location_url(self): return self._router.get_next_location_url_for_end_of_section() def get_previous_location_url(self): return self._router.get_last_location_in_section(self._routing_path).url() def get_resume_url(self): return self._router.get_section_resume_url(self._routing_path) def can_display_summary(self): return self._router.can_display_section_summary( self._section_id, self._list_item_id ) def _is_valid_location(self): return self._section_id in self._router.enabled_section_ids
def test_is_path_not_complete(self): schema = load_schema_from_name("test_textfield") router = Router( schema, self.answer_store, self.list_store, self.progress_store, self.metadata, ) routing_path = router.routing_path(section_id="default-section") is_path_complete = router.is_path_complete(routing_path) self.assertFalse(is_path_complete)
def test_is_path_complete(self): schema = load_schema_from_name("test_textfield") progress_store = ProgressStore([{ "section_id": "default-section", "list_item_id": None, "status": CompletionStatus.IN_PROGRESS, "block_ids": ["name-block"], }]) router = Router(schema, self.answer_store, self.list_store, progress_store, self.metadata) routing_path = router.routing_path(section_id="default-section") is_path_complete = router.is_path_complete(routing_path) self.assertTrue(is_path_complete)