def get_tasks(self): """Get all tasks in this course""" if self._tasks_cache is None: tasks = get_readable_tasks(self.get_id()) output = {} for task in tasks: try: output[task] = self.get_task(task) except: pass self._tasks_cache = output return self._tasks_cache
def page(self, course): """ Get all data and display the page """ data = list(get_database().user_tasks.aggregate( [ { "$match": { "courseid": course.get_id(), "username": {"$in": course.get_registered_users()} } }, { "$group": { "_id": "$taskid", "viewed": {"$sum": 1}, "attempted": {"$sum": {"$cond": [{"$ne": ["$tried", 0]}, 1, 0]}}, "attempts": {"$sum": "$tried"}, "succeeded": {"$sum": {"$cond": ["$succeeded", 1, 0]}} } } ])) # Load tasks and verify exceptions files = get_readable_tasks(course.get_id()) output = {} errors = [] for task in files: try: output[task] = course.get_task(task) except Exception as inst: errors.append({"taskid": task, "error": str(inst)}) tasks = OrderedDict(sorted(output.items(), key=lambda t: t[1].get_order())) # Now load additionnal informations result = OrderedDict() for taskid in tasks: result[taskid] = {"name": tasks[taskid].get_name(), "viewed": 0, "attempted": 0, "attempts": 0, "succeeded": 0, "url": self.submission_url_generator(course, taskid)} for entry in data: if entry["_id"] in result: result[entry["_id"]]["viewed"] = entry["viewed"] result[entry["_id"]]["attempted"] = entry["attempted"] result[entry["_id"]]["attempts"] = entry["attempts"] result[entry["_id"]]["succeeded"] = entry["succeeded"] if "csv" in web.input(): return make_csv(result) return renderer.course_admin.task_list(course, result, errors)