public async Task <CodeJobResult> ExecuteClassJob([FromBody] ClassJob job) { return(await _codeRunnerService.ExecuteClassJobAsync(job)); }
/// <summary> /// Generates a specific question given a generated question and a seed. /// </summary> public async Task <QuestionGenerationResult> GenerateQuestionAsync( GeneratedQuestionTemplate question, int seed) { var classJob = CreateQuestionGeneratorClassJob(question, seed); var classJobResult = await _codeRunnerService.ExecuteClassJobAsync(classJob); if (!classJobResult.ClassCompilationResult.Success) { return(new QuestionGenerationResult ( error: "Failed to compile question generator. Compilation errors: \n" + string.Join( "\n", classJobResult.ClassCompilationResult.Errors.Select(error => error.FullError)) )); } if (!classJobResult.ClassDefinition.Methods.Any( m => m.IsStatic && m.IsPublic && m.ReturnType.EndsWith("Question") && m.Name == "generateQuestion" && m.ParameterTypes.Count == 1 && m.ParameterTypes.Single() == "int")) { return(new QuestionGenerationResult ( error: "The QuestionGenerator class must have a method with the following signature: \n" + "public static Question generateQuestion(int seed)" )); } if (!classJobResult.TestsCompilationResult.Success) { return(new QuestionGenerationResult ( error: "Failed to compile question generator. Compilation errors: \n" + string.Join( "\n", classJobResult.TestsCompilationResult.Errors.Select(error => error.FullError)) )); } if (!classJobResult.TestResults[0].Completed) { return(new QuestionGenerationResult ( error: "An exception was encountered when calling QuestionGenerator.generateQuestion: \n" + classJobResult.TestResults[0].Exception )); } return(new QuestionGenerationResult ( classJobResult.TestResults[0].ReturnValue, classJob.FileContents, classJob.LineNumberOffset, seed )); }