diff --git a/BUGS.md b/BUGS.md index 1328ef7..6223124 100644 --- a/BUGS.md +++ b/BUGS.md @@ -1,7 +1,6 @@ # BUGS -- dependencias que não são goals de um curso, só devem aparecer se ainda não tiverem sido feitas. - goals se forem do tipo chapter deve importar todas as dependencias do chapter (e não mostrar chapters?). - nao esta a seguir o max_tries definido no ficheiro de dependencias. - devia mostrar timeout para o aluno saber a razao. @@ -9,7 +8,6 @@ - templates question-*.html tem input hidden question_ref que não é usado. remover? - shift-enter não está a funcionar - default prefix should be obtained from each course (yaml conf)? -- initdb da integrity error se no mesmo comando existirem alunos repetidos (p.ex em ficheiros csv diferentes ou entre csv e opcao -a) # TODO @@ -34,6 +32,8 @@ # FIXED +- initdb da integrity error se no mesmo comando existirem alunos repetidos (p.ex em ficheiros csv diferentes ou entre csv e opcao -a) +- dependencias que não são goals de um curso, só devem aparecer se ainda não tiverem sido feitas. - ir para inicio da pagina quando le nova pergunta. - CRITICAL nao esta a guardar o progresso na base de dados. - mesma ref no mesmo ficheiro não é detectado. diff --git a/aprendizations/__init__.py b/aprendizations/__init__.py index 995c624..a98f005 100644 --- a/aprendizations/__init__.py +++ b/aprendizations/__init__.py @@ -30,7 +30,7 @@ are progressively uncovered as the students progress. ''' APP_NAME = 'aprendizations' -APP_VERSION = '2020.01.dev1' +APP_VERSION = '2020.01.dev2' APP_DESCRIPTION = __doc__ __author__ = 'Miguel Barão' diff --git a/aprendizations/learnapp.py b/aprendizations/learnapp.py index 6171ab6..edc7e4b 100644 --- a/aprendizations/learnapp.py +++ b/aprendizations/learnapp.py @@ -245,7 +245,7 @@ class LearnApp(object): async def check_answer(self, uid: str, answer) -> Question: student = self.online[uid]['state'] await student.check_answer(answer) - q = student.get_current_question() + q: Question = student.get_current_question() logger.info(f'User "{uid}" got {q["grade"]:.2} in "{q["ref"]}"') @@ -430,7 +430,7 @@ class LearnApp(object): # makes factory for a single topic # ------------------------------------------------------------------------ def factory_for(self, tref: str) -> Dict[str, QFactory]: - factory = {} + factory: Dict[str, QFactory] = {} g = self.deps t = g.nodes[tref] # get node @@ -447,9 +447,12 @@ class LearnApp(object): try: questions: List[QDict] = load_yaml(fullpath) except Exception: - msg = f'Failed to load "{fullpath}"' - logger.error(msg) - raise LearnException(msg) + if t['type'] == 'chapter': + return factory # chapters may have no "questions" + else: + msg = f'Failed to load "{fullpath}"' + logger.error(msg) + raise LearnException(msg) if not isinstance(questions, list): msg = f'File "{fullpath}" must be a list of questions' @@ -500,40 +503,37 @@ class LearnApp(object): # ------------------------------------------------------------------------ def get_student_progress(self, uid: str) -> float: - return self.online[uid]['state'].get_topic_progress() + return float(self.online[uid]['state'].get_topic_progress()) # ------------------------------------------------------------------------ def get_current_question(self, uid: str) -> Optional[Question]: - return self.online[uid]['state'].get_current_question() + q: Optional[Question] = self.online[uid]['state'].get_current_question() + return q # ------------------------------------------------------------------------ def get_current_question_id(self, uid: str) -> str: - return self.online[uid]['state'].get_current_question()['qid'] + return str(self.online[uid]['state'].get_current_question()['qid']) # ------------------------------------------------------------------------ def get_student_question_type(self, uid: str) -> str: - return self.online[uid]['state'].get_current_question()['type'] + return str(self.online[uid]['state'].get_current_question()['type']) # ------------------------------------------------------------------------ def get_student_topic(self, uid: str) -> str: - return self.online[uid]['state'].get_current_topic() + return str(self.online[uid]['state'].get_current_topic()) # ------------------------------------------------------------------------ def get_student_course_title(self, uid: str) -> str: - return self.online[uid]['state'].get_current_course_title() - - # ------------------------------------------------------------------------ - def get_student_course_id(self, uid: str) -> Optional[str]: - return self.online[uid]['state'].get_current_course_id() + return str(self.online[uid]['state'].get_current_course_title()) # ------------------------------------------------------------------------ - # def get_student_course(self, uid: str) -> Optional[str]: - # course_id = self.online[uid]['state'].get_current_course_id() - # return course_id, self.courses[course_id] + def get_current_course_id(self, uid: str) -> Optional[str]: + cid: Optional[str] = self.online[uid]['state'].get_current_course_id() + return cid # ------------------------------------------------------------------------ def get_topic_name(self, ref: str) -> str: - return self.deps.nodes[ref]['name'] + return str(self.deps.nodes[ref]['name']) # ------------------------------------------------------------------------ def get_current_public_dir(self, uid: str) -> str: @@ -542,10 +542,11 @@ class LearnApp(object): return path.join(prefix, topic, 'public') # ------------------------------------------------------------------------ - def get_courses(self, uid: str) -> Dict: + def get_courses(self) -> Dict[str, Dict[str, Any]]: return self.courses - def get_course(self, course_id: str) -> Dict: + # ------------------------------------------------------------------------ + def get_course(self, course_id: str) -> Dict[str, Any]: return self.courses[course_id] # ------------------------------------------------------------------------ diff --git a/aprendizations/serve.py b/aprendizations/serve.py index 7fcec7f..57bcbdd 100644 --- a/aprendizations/serve.py +++ b/aprendizations/serve.py @@ -96,7 +96,7 @@ class RankingsHandler(BaseHandler): @tornado.web.authenticated def get(self): uid = self.current_user - current_course = self.learn.get_student_course_id(uid) + current_course = self.learn.get_current_course_id(uid) course_id = self.get_query_argument('course', default=current_course) rankings = self.learn.get_rankings(uid, course_id) self.render('rankings.html', @@ -195,7 +195,7 @@ class CoursesHandler(BaseHandler): appname=APP_NAME, uid=uid, name=self.learn.get_student_name(uid), - courses=self.learn.get_courses(uid), + courses=self.learn.get_courses(), ) @@ -242,7 +242,7 @@ class TopicHandler(BaseHandler): uid=uid, name=self.learn.get_student_name(uid), # course_title=self.learn.get_student_course_title(uid), - course_id=self.learn.get_student_course_id(uid), + course_id=self.learn.get_current_course_id(uid), ) -- libgit2 0.21.2