Source code for oi_cli2.utils.template

from typing import List, Optional
import logging

from oi_cli2.model.Template import Template
from oi_cli2.utils.db import JsonFileDB
from oi_cli2.utils.consts.ids import Ids


[docs]class TemplateManager: def __init__(self, db: JsonFileDB, platform: str = ''): self.db = db self.platform = platform self.keys = ['platform', 'alias', 'path', 'compilation', 'execute', 'clean', 'default'] def _get_template_list(self) -> List[Template]: temp_list: List[dict] = self.db.load(Ids.template) or [] return list(map(lambda d: Template().dict_init(d), temp_list)) def _set_template_list(self, temp_list: List[Template]): temp_list.sort(key=lambda temp0: (temp0.platform, -temp0.default, temp0.alias)) self.db.save(Ids.template, list(map(lambda d: d.__dict__, temp_list)))
[docs] def get_list(self) -> List[Template]: return self._get_template_list()
[docs] def alias_exist(self, temps: List[Template], platform: str, alias: str): return self.find_alias(temps=temps, platform=platform, alias=alias) != -1
[docs] def find_alias(self, temps: List[Template], platform: str, alias: str) -> int: for i in range(len(temps)): if temps[i].platform == platform and temps[i].alias == alias: return i return -1
[docs] def get_platform_default(self, platform: str) -> Optional[Template]: temps: List[Template] = self._get_template_list() for i in range(len(temps)): if temps[i].platform == platform and temps[i].default: return temps[i] return None
[docs] def get_default(self) -> Optional[Template]: if not self.platform: logging.error('Please set platform first or using get_platform_default()') return None temps: List[Template] = self._get_template_list() for i in range(len(temps)): if temps[i].platform == self.platform and temps[i].default: return temps[i] return None
[docs] def get_template_by_name(self, platform: str, name: str) -> Optional[Template]: temps: List[Template] = self._get_template_list() for i in range(len(temps)): if temps[i].platform == platform and temps[i].alias == name: return temps[i] return None
[docs] def get_template_by_alias(self, alias: str) -> Optional[Template]: # deperated assert False pass if not self.platform: logging.error('Please set platform first or using get_platform_default()') return None temps: List[Template] = self._get_template_list() for i in range(len(temps)): if temps[i].platform == self.platform and temps[i].alias == alias: return temps[i] return None
[docs] def set_temps_default(self, temps: List[Template], index: int): assert 0 <= index < len(temps) for i in range(len(temps)): if i == index: temps[i].default = True elif temps[i].platform == temps[index].platform: temps[i].default = False
[docs] def set_default(self, index: int): temps: List[Template] = self._get_template_list() assert 0 <= index < len(temps) for i in range(len(temps)): if i == index: temps[i].default = True elif temps[i].platform == temps[index].platform: temps[i].default = False self._set_template_list(temps)
[docs] def delete_template(self, platform: str, name: str) -> bool: temps: List[Template] = self._get_template_list() idx = -1 for i in range(len(temps)): if temps[i].platform == platform and temps[i].alias == name: idx = i break if idx < 0: return False if temps[idx].default: for i in range(len(temps)): if i == idx: continue if temps[i].platform == temps[idx].platform: temps[i].default = True break del temps[idx] self._set_template_list(temps) return True
# set default if no platform there
[docs] def add_template(self, platform, alias, path, compilation, execute, uplang) -> None: temps: List[Template] = self._get_template_list() if self.find_alias(temps, platform, alias) != -1: raise Exception('Duplicate alias') is_default = True for item in temps: if item.platform == platform and item.default: is_default = False break temps.append(Template().initial(platform=platform, alias=alias, path=path, compilation=compilation, execute=execute, uplang=uplang, default=is_default)) self._set_template_list(temps)
[docs] def modify_alias(self, index: int, value: str): temps: List[Template] = self._get_template_list() assert 0 <= index < len(temps) if self.alias_exist(temps, temps[index].platform, value): raise Exception('Duplicate alias') temps[index].alias = value self._set_template_list(temps)
[docs] def modify_path(self, index: int, value: str): temps: List[Template] = self._get_template_list() assert 0 <= index < len(temps) temps[index].path = value self._set_template_list(temps)
[docs] def modify_compilation(self, index: int, value: str): temps: List[Template] = self._get_template_list() assert 0 <= index < len(temps) temps[index].compilation = value self._set_template_list(temps)
[docs] def modify_execute(self, index: int, value: str): temps: List[Template] = self._get_template_list() assert 0 <= index < len(temps) temps[index].execute = value self._set_template_list(temps)
[docs] def modify_clean(self, index: int, value: str): temps: List[Template] = self._get_template_list() assert 0 <= index < len(temps) temps[index].clean = value self._set_template_list(temps)
# update
[docs] def update_template(self, platform, alias: str, newalias: str, path: str, compilation: str, execute: str, uplang: str, default: bool): temps: List[Template] = self._get_template_list() idx = self.find_alias(temps, platform, alias) if idx == -1: raise Exception('Template Not Exist') if default: self.set_temps_default(temps, idx) if newalias: temps[idx].alias = newalias if path: temps[idx].path = path if compilation: temps[idx].compilation = compilation if execute: temps[idx].execute = execute if uplang: temps[idx].uplang = uplang self._set_template_list(temps)