コード例 #1
0
ファイル: writer.py プロジェクト: ucsd-wic-bpc/PyCFramework
    def _add_known_language_from_name(self, languageName):
        language = Languages.get_language_by_name(languageName)

        if language is None:
            raise PyCException('Error: {} is not a valid language'.format(languageName))

        self._add_known_language(language)
コード例 #2
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)
コード例 #3
0
    def test_get_language_by_name(self, mocked_load_languages):
        """
        Ensure Languages.get_language_by_name properly gets a language from name
        """
        mockedLangOne = mock.MagicMock(spec=Language)
        mockedLangTwo = mock.MagicMock(spec=Language)
        mockedLangOne.name = 'Python'
        mockedLangTwo.name = 'C++'
        def populateDict():
            Languages._languagesDict = {'ext1' :mockedLangOne, 'ext2' : mockedLangTwo}
        mocked_load_languages.side_effect = populateDict

        self.assertEqual(Languages.get_language_by_name('C++'), mockedLangTwo)
        mocked_load_languages.assert_called_with()

        self.assertEqual(Languages.get_language_by_name('non'), None)
コード例 #4
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)