55 lines
2.0 KiB
Python
55 lines
2.0 KiB
Python
from importlib import resources
|
|
from pathlib import Path
|
|
from typing import Tuple
|
|
|
|
import inquirer
|
|
import tomli
|
|
import yaml
|
|
|
|
from joj3_config_generator.models import answer, joj1, repo, task
|
|
|
|
|
|
def load_joj3_task_toml_answers() -> answer.Answers:
|
|
name = inquirer.text("What's the task name?", default="hw0")
|
|
language: answer.LanguageInterface = inquirer.list_input(
|
|
"What's the language?", choices=answer.LANGUAGES
|
|
)
|
|
if inquirer.confirm("Load content from templates?", default=True):
|
|
answers = inquirer.prompt(language.get_template_questions())
|
|
templates_dir = resources.files(f"joj3_config_generator.templates").joinpath(
|
|
language.__str__()
|
|
)
|
|
template_file_path = answers["template_file"]
|
|
template_file_content = Path(templates_dir / template_file_path).read_text()
|
|
return answer.Answers(
|
|
name=name, language=language, template_file_content=template_file_content
|
|
)
|
|
stages = inquirer.checkbox(
|
|
"What's the stages?",
|
|
choices=[member.value for member in language.Stage],
|
|
default=[member.value for member in language.Stage],
|
|
)
|
|
language.set_stages(stages)
|
|
attribute = inquirer.prompt(language.get_attribute_questions())
|
|
language.set_attribute(attribute)
|
|
return answer.Answers(name=name, language=language)
|
|
|
|
|
|
def load_joj1_yaml(yaml_path: Path) -> joj1.Config:
|
|
joj1_obj = yaml.safe_load(yaml_path.read_text())
|
|
return joj1.Config(**joj1_obj)
|
|
|
|
|
|
def load_joj3_toml(
|
|
root_path: Path, repo_toml_path: Path, task_toml_path: Path
|
|
) -> Tuple[repo.Config, task.Config]:
|
|
repo_obj = tomli.loads(repo_toml_path.read_text())
|
|
task_obj = tomli.loads(task_toml_path.read_text())
|
|
repo_conf = repo.Config(**repo_obj)
|
|
repo_conf.root = root_path
|
|
repo_conf.path = repo_toml_path.relative_to(root_path)
|
|
task_conf = task.Config(**task_obj)
|
|
task_conf.root = root_path
|
|
task_conf.path = task_toml_path.relative_to(root_path)
|
|
return repo_conf, task_conf
|