Пример #1
0
    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)
Пример #2
0
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
Пример #3
0
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)