import os import uuid from src.main.utils import load_json, dump_json class Package: def __init__(self, root) -> None: self.root = root def walk(self): for base, dirs, files in os.walk(self.root): for file_name in files: file_full_name = os.path.join(base, file_name) _, ext = os.path.splitext(file_name) if ext == '.json': pkg = load_json(file_full_name) if pkg.get('type') == 'job': self.visit_package(file_full_name, pkg) def visit_package(self, file_full_name, pkg): pacakge = pkg['package'] levels = pkg['levels'] if pkg.get('package_id') is None or pkg.get('package_id').strip() == '': pkg['package_id'] = f'pkg-{pacakge}-'+uuid.uuid4().hex for level in levels: if level.get('level_id') is None or level.get('level_id') == '': level['level_id'] = f'pkg-{pacakge}-level-'+uuid.uuid4().hex dump_json(file_full_name, pkg, exist_ok=True, override=True) def list(self): pkg_list = [] tree_list = [] for base, dirs, files in os.walk(self.root): for file_name in files: file_full_name = os.path.join(base, file_name) _, ext = os.path.splitext(file_name) if ext == '.json': print(file_full_name) pkg = load_json(file_full_name) if pkg.get('type') == 'job': self.list_package(file_full_name, pkg, pkg_list, tree_list) out = { 'jobs': pkg_list, 'trees': sorted(list(set(tree_list))) } dump_json('data/index.json', out, exist_ok=True, override=True) def list_package(self, file_full_name, pkg, pkg_list, tree_list): package = pkg['package'] package_name = pkg['package_name'] levels = pkg['levels'] for level in levels: level_en = level['level'] level_name = level['level_name'] skill_trees = level['skill_trees'] package_level = f'{package}_{level_en}' pkg_list.append({ 'name': package_name, 'level_name': level_name, 'router': package_level }) for skill_tree in skill_trees: tree_list.append(skill_tree)