Source code for flexlate_dev.publish
from pathlib import Path
from typing import List, Optional
from flexlate.template_data import TemplateData
from flexlate_dev.config import DEFAULT_PROJECT_NAME, load_config
from flexlate_dev.dict_merge import merge_dicts_preferring_non_none
from flexlate_dev.external_command_type import ExternalCLICommandType
from flexlate_dev.project_ops import update_or_initialize_project_get_folder
[docs]def publish_template(
template_path: Path,
out_root: Path,
run_config_name: Optional[str] = None,
config_path: Optional[Path] = None,
no_input: bool = False,
save: bool = False,
abort_on_conflict: bool = False,
data: Optional[TemplateData] = None,
folder_name: Optional[str] = None,
):
config = load_config(config_path)
run_config = config.get_full_run_config(
ExternalCLICommandType.PUBLISH, run_config_name
)
use_data = merge_dicts_preferring_non_none(
run_config.data.data if run_config.data else {}, data or {}
)
update_or_initialize_project_get_folder(
template_path,
out_root,
config,
run_config,
data=use_data,
no_input=no_input,
auto_commit=False,
save=save,
abort_on_conflict=abort_on_conflict,
default_folder_name=folder_name
or (
run_config.data.use_folder_name if run_config.data else DEFAULT_PROJECT_NAME
),
)
[docs]def publish_all_templates(
template_path: Path,
out_root: Path,
config_path: Optional[Path] = None,
always_include_default: bool = False,
exclude: Optional[List[str]] = None,
no_input: bool = False,
save: bool = False,
abort_on_conflict: bool = False,
data: Optional[TemplateData] = None,
folder_name: Optional[str] = None,
):
config = load_config(config_path)
exclude = exclude or []
run_config_names = [
name
for name in config.get_run_config_names(
always_include_default=always_include_default
)
if name not in exclude
]
for run_config_name in run_config_names:
publish_template(
template_path,
out_root,
run_config_name=run_config_name,
config_path=config_path,
no_input=no_input,
save=save,
abort_on_conflict=abort_on_conflict,
data=data,
folder_name=folder_name,
)