def count_assignments(self): """ Looks through all writers' assigned solutions and counts which have been assigned and how many times they have """ problemsAssignedDict = {} # Maps specificProblems to completed counts writersAssignedDict = {} for writer in Writers.get_all_writers(): for (problemNumber, problemLanguage) in writer.assignedProblems: languageObject = Languages.get_language_by_name(problemLanguage) # Only consider the languages and problems sent into the object if (not problemNumber in self.allowedProblemNumbers or not languageObject in self.allowedLanguages): continue specificInstance = SpecificProblem(problemNumber, languageObject) if not specificInstance in problemsAssignedDict: problemsAssignedDict[specificInstance] = 1 else: problemsAssignedDict[specificInstance] += 1 if writer in self.writers: writersAssignedDict[writer] = len(writer.assignedProblems) return (problemsAssignedDict, writersAssignedDict)
def _get_loaded_writers(writerNames: list = None) -> list: """ Loads the writers with the provided names and returns them in a list. Arguments: writerNames: list - The list of names to load writers for. If None, all writers are loaded. """ if writerNames is None or len(writerNames) == 0: return Writers.get_all_writers() loadedWriters = [] for writerName in writerNames: loadedWriter = Writer.load_from_folder(writerName) if loadedWriter is None: raise PyCException('Error: {} is an invalid writer'.format(writerName)) else: loadedWriters.append(loadedWriter) return loadedWriters
def operate(args): """ Takes the passed in args and delegates to proper functionality. This is set as the executable function when the `writers assign` subparser is used. Arguments: args: Namespace - The arguments passed via CLI """ # If the user specified a problem list, use that as the list of problems. problemParser = NumberParse() if not args.problems is None: specifiedProblems = problemParser.str_list_to_uniq_range(args.problems) else: specifiedProblems = problemParser.str_list_to_uniq_range(['1+']) specifiedLanguages = [] if not args.language is None: for languageName in args.language: loadedLanguage = Languages.get_language_by_name(languageName) if loadedLanguage is None: raise PyCException('Error: {} is an invalid language'.format(languageName)) specifiedLanguages.append(loadedLanguage) else: specifiedLanguages = [Languages.get_language_by_name(name) for name in Languages.get_all_language_names()] specifiedWriters = [] if not args.full and not args.writer_names is None and len(args.writer_names) > 0: for writerName in args.writer_names: loadedWriter = Writer.load_from_folder(writerName) if loadedWriter is None: raise PyCException('Error: {} is an invalid writer'.format(writerName)) specifiedWriters.append(loadedWriter) else: specifiedWriters = Writers.get_all_writers() allocator = AssignmentAllocator(specifiedProblems, specifiedLanguages, specifiedWriters, fromScratch=args.full) allocator.do_assignment(Definitions.get_value('complete_threshold'), overflow=args.overallocate)