def receiveMessage(self, msg): #depending on the content of the message react differently #logInfo('Entering CSVReader.receiveMessage', 5) reply = None #Only considering if msg.getSpeechAct() == INFORM_ACT: if msg.getVerb() == ELECTRONIX_TUTOR_TASK_UPLOAD_VERB: logInfo('{0} is processing a {1},{2} message'.format(CSV_READER_SERVICE_NAME, ELECTRONIX_TUTOR_TASK_UPLOAD_VERB, INFORM_ACT), 4) csvString = msg.getResult() taskList = self.processCSVFile(csvString) print("STORAGE SERVICE NAME: %s"%(STORAGE_SERVICE_NAME)) reply = Message(STORAGE_SERVICE_NAME, VALUE_VERB, TASKS_OBJECT, taskList) if msg.getSpeechAct() == REQUEST_ACT: if msg.getVerb() == ELECTRONIX_TUTOR_TASK_UPLOAD_VERB: dbtaskList = DBTask.find_all() dbassistmentItemsList = DBAssistmentsItem.find_all() for dbTask in dbtaskList: if dbTask.assistmentsItemId is not None and dbTask.assistmentsItemId is not '': for dbassistmentsItem in dbassistmentItemsList: if dbassistmentsItem.id == dbTask.assistmentsItemId: dbTask.assistmentsItemCache = dbassistmentsItem break taskList = [x.toSerializable() for x in dbtaskList] reply = Message(CSV_READER_SERVICE_NAME, ELECTRONIX_TUTOR_TASK_UPLOAD_VERB, None, taskList, INFORM_ACT, msg.getContext()) if reply is not None: logInfo('{0} is broadcasting a {1}, {2} message'.format(CSV_READER_SERVICE_NAME, INFORM_ACT, VALUE_VERB), 4) self.sendMessage(reply)
def setUp(self): self.icalReader = ICalReader() self.calendarData = DBCalendarData() self.calendarData.ownerId = 'dummyOwner' self.calendarData.ownerType = STUDENT_OWNER_TYPE self.calendarData.accessPermissions = PUBLIC_PERMISSION self.calendarData.calendarData = Calendar().to_ical() self.dummyTask = DBTask() self.dummyTask.displayName = "dummyTaskDisplayName" self.dummyTask.name = "dummyTaskName" self.dummyTask.taskId = "dummyTaskId"
def populateTaskAssistmentsDictionary(self): result = {} tasks = DBTask.find_all() assistmentsItems = DBAssistmentsItem.find_all() for task in tasks: if task.assistmentsItemId is not '': for assistmentsItem in assistmentsItems: if assistmentsItem.id == task.assistmentsItemId: result[assistmentsItem.id] = task.taskId break return result
def retrieveTaskFromCacheOrDB(self, taskId, useCache=True): if taskId is None: return None if taskId in self.taskCache.keys() and useCache: logInfo('{0} found cached task object with id:{1}'.format(self.serviceName, taskId), 4) return self.taskCache[taskId] else: logInfo('{0} could not find cached task object with id: {1}. Falling back to database.'.format(self.serviceName, taskId), 3) dbTaskList = DBTask.find_by_index("taskIdIndex", taskId) task = None if len(dbTaskList) > 0: task = dbTaskList[0] else: logInfo('{0} could not find cached task object with id: {1}. attempting to find by ASSISTments item Id.'.format(self.serviceName, taskId), 3) if self.taskASSISTmentsDictionary is not None and taskId in self.taskASSISTmentsDictionary.keys(): dbTaskList = DBTask.find_by_index("taskIdIndex", self.taskASSISTmentsDictionary[taskId]) if len(dbTaskList) > 0: task = dbTaskList[0] #Cache the result so we don't need to worry about looking it up again. self.taskCache[taskId] = task return task
def getRecommendedTasks(self, studentId, studentModel, numberOfTasksRequested): logInfo("MAKING RECOMMENDATIONS", 1) taskMastery = list() dbtaskList = DBTask.find_all() dbassistmentItemsList = DBAssistmentsItem.find_all() for dbTask in dbtaskList: if dbTask.assistmentsItemId is not None and dbTask.assistmentsItemId is not '': for dbassistmentsItem in dbassistmentItemsList: if dbassistmentsItem.id == dbTask.assistmentsItemId: dbTask.assistmentsItemCache = dbassistmentsItem break taskList = [x.toSerializable() for x in dbtaskList] logInfo("RETRIEVED TASKS FROM DATABASE", 1) #taskList = self.validateTasks(taskList) #taskList = self.checkNovelty(studentId, taskList) for task in taskList: taskMastery.append((self.calcMaxMasteryGain(task, studentModel), task)) sortedTaskMastery = sorted(taskMastery, key=lambda taskMastery: taskMastery[0], reverse=True) #logInfo("sortedTaskMastery={0}".format(sortedTaskMastery), 6) result = sortedTaskMastery #print("RESULT: " + str(len(result))) student = self.retrieveStudentFromCacheOrDB(studentId, None, True) logInfo("retrieved student", 1) sessions = student.getSessions(False) logInfo("retrieved sessions", 1) for gain, task in result: if task._assistmentsItem is not None: task._assistmentsItem._assignmentNumber = self.findAssignmentNumber( task, sessions) # print("TASK: " + str(task)) #print(str(task._assistmentsItem)) result = [ task for gain, task in result if task._assistmentsItem is not None and task._assistmentsItem.getActiveAssignmentURL() is not None ] result = result[0:numberOfTasksRequested] #print("RESULT:" + str(result)) logInfo("GOT RESULT", 1) return result
def getRecommendedTasks(self, studentId, studentModel, numberOfTasksRequested): print("MAKING RECOMMENDATIONS") taskMastery = list() dbtaskList = DBTask.find_all() dbassistmentItemsList = DBAssistmentsItem.find_all() for dbTask in dbtaskList: if dbTask.assistmentsItemId is not None and dbTask.assistmentsItemId is not '': for dbassistmentsItem in dbassistmentItemsList: if dbassistmentsItem.id == dbTask.assistmentsItemId: dbTask.assistmentsItemCache = dbassistmentsItem break taskList = [x.toSerializable() for x in dbtaskList] print("RETRIEVED TASKS FROM DATABASE") #taskList = self.validateTasks(taskList) #taskList = self.checkNovelty(studentId, taskList) for task in taskList: taskMastery.append((self.calcMaxMasteryGain(task, studentModel), task)) sortedTaskMastery = sorted(taskMastery, key=lambda taskMastery : taskMastery[0], reverse=True) #logInfo("sortedTaskMastery={0}".format(sortedTaskMastery), 6) result = sortedTaskMastery #print("RESULT: " + str(len(result))) student = self.retrieveStudentFromCacheOrDB(studentId, None, True) logInfo("retrieved student", 1) sessions = student.getSessions(False) logInfo("retrieved sessions", 1) for gain, task in result: if task._assistmentsItem is not None: task._assistmentsItem._assignmentNumber = self.findAssignmentNumber(task, sessions) # print("TASK: " + str(task)) #print(str(task._assistmentsItem)) result = [task for gain, task in result if task._assistmentsItem is not None and task._assistmentsItem.getActiveAssignmentURL() is not None] result = result[0:numberOfTasksRequested] #print("RESULT:" + str(result)) return result
def receiveMessage(self, msg): #depending on the content of the message react differently #logInfo('Entering CSVReader.receiveMessage', 5) reply = None #Only considering if msg.getSpeechAct() == INFORM_ACT: if msg.getVerb() == ELECTRONIX_TUTOR_TASK_UPLOAD_VERB: logInfo( '{0} is processing a {1},{2} message'.format( CSV_READER_SERVICE_NAME, ELECTRONIX_TUTOR_TASK_UPLOAD_VERB, INFORM_ACT), 4) csvString = msg.getResult() taskList = self.processCSVFile(csvString) print("STORAGE SERVICE NAME: %s" % (STORAGE_SERVICE_NAME)) reply = Message(STORAGE_SERVICE_NAME, VALUE_VERB, TASKS_OBJECT, taskList) if msg.getSpeechAct() == REQUEST_ACT: if msg.getVerb() == ELECTRONIX_TUTOR_TASK_UPLOAD_VERB: dbtaskList = DBTask.find_all() dbassistmentItemsList = DBAssistmentsItem.find_all() for dbTask in dbtaskList: if dbTask.assistmentsItemId is not None and dbTask.assistmentsItemId is not '': for dbassistmentsItem in dbassistmentItemsList: if dbassistmentsItem.id == dbTask.assistmentsItemId: dbTask.assistmentsItemCache = dbassistmentsItem break taskList = [x.toSerializable() for x in dbtaskList] reply = Message(CSV_READER_SERVICE_NAME, ELECTRONIX_TUTOR_TASK_UPLOAD_VERB, None, taskList, INFORM_ACT, msg.getContext()) if reply is not None: logInfo( '{0} is broadcasting a {1}, {2} message'.format( CSV_READER_SERVICE_NAME, INFORM_ACT, VALUE_VERB), 4) self.sendMessage(reply)