63 lines
2.0 KiB
Python
63 lines
2.0 KiB
Python
from typing import Any, Callable, Dict, List, Type
|
|
|
|
import tomli
|
|
|
|
from joj3_config_generator.models import answer, task
|
|
|
|
|
|
def get_task_conf_from_answers(answers: answer.Answers) -> task.Config:
|
|
if answers.template_file_content:
|
|
toml_dict = tomli.loads(answers.template_file_content)
|
|
return task.Config(
|
|
task=task.Task(name=answers.name),
|
|
stages=toml_dict["stages"],
|
|
)
|
|
language = answers.language
|
|
transformer_dict = get_transformer_dict()
|
|
if language not in transformer_dict:
|
|
return task.Config(task=task.Task(name=answers.name), stages=[])
|
|
transformer = transformer_dict[language]
|
|
stages = transformer(language)
|
|
return task.Config(task=task.Task(name=answers.name), stages=stages)
|
|
|
|
|
|
def get_transformer_dict() -> Dict[
|
|
Type[answer.LanguageInterface],
|
|
Callable[[Type[Any]], List[task.Stage]],
|
|
]:
|
|
return {
|
|
answer.Cpp: get_cpp_stages,
|
|
answer.Python: get_python_stages,
|
|
answer.Rust: get_rust_stages,
|
|
}
|
|
|
|
|
|
# TODO: implement
|
|
def get_cpp_stages(language: Type[answer.Cpp]) -> List[task.Stage]:
|
|
stages = language.stages
|
|
attribute: answer.Cpp.Attribute = language.attribute
|
|
task_stages = []
|
|
if answer.Cpp.Stage.CPPCHECK in stages:
|
|
task_stages.append(task.Stage(name=answer.Cpp.Stage.CPPCHECK))
|
|
if answer.Cpp.Stage.CPPLINT in stages:
|
|
task_stages.append(task.Stage(name=answer.Cpp.Stage.CPPLINT))
|
|
if answer.Cpp.Stage.CLANG_TIDY in stages:
|
|
task_stages.append(task.Stage(name=answer.Cpp.Stage.CLANG_TIDY))
|
|
if answer.Cpp.Stage.RUN in stages:
|
|
task_stages.append(task.Stage(name=answer.Cpp.Stage.RUN))
|
|
return task_stages
|
|
|
|
|
|
# TODO: implement
|
|
def get_python_stages(language: Type[answer.Python]) -> List[task.Stage]:
|
|
stages = language.stages
|
|
attribute: answer.Python.Attribute = language.attribute
|
|
return []
|
|
|
|
|
|
# TODO: implement
|
|
def get_rust_stages(language: Type[answer.Rust]) -> List[task.Stage]:
|
|
stages = language.stages
|
|
attribute: answer.Rust.Attribute = language.attribute
|
|
return []
|