import os from auto_archiver.core.module import ModuleFactory from auto_archiver.core.consts import MODULE_TYPES import jinja2 # Get available modules module_factory = ModuleFactory() available_modules = module_factory.available_modules() modules_by_type = {} # Categorize modules by type for module in available_modules: for type in module.manifest.get('type', []): modules_by_type.setdefault(type, []).append(module) module_sections = "" # Add module sections for module_type in MODULE_TYPES: module_sections += f"

{module_type.title()}s

" # make this section in rows, max 8 modules per row for module in modules_by_type[module_type]: module_name = module.name module_sections += f"""
""" module_sections += "
" # Add module configuration sections all_modules_ordered_by_type = sorted(available_modules, key=lambda x: (MODULE_TYPES.index(x.type[0]), not x.requires_setup)) module_configs = "" for module in all_modules_ordered_by_type: if not module.configs: continue module_configs += f"

{module.display_name} Configuration

" for option, value in module.configs.items(): # create a human readable label option = option.replace('_', ' ').title() # type - if value has 'choices', then it's a select module_configs += "
" if 'choices' in value: module_configs += f""" " elif value.get('type') == 'bool' or isinstance(value.get('default', None), bool): module_configs += f""" """ else: module_configs += f""" """ # add help text if 'help' in value: module_configs += f"
{value.get('help')}
" module_configs += "
" module_configs += "
" # format the settings.html jinja page with the module sections and module configuration sections settings_page = "settings.html" template_loader = jinja2.FileSystemLoader(searchpath="./") template_env = jinja2.Environment(loader=template_loader) template = template_env.get_template(settings_page) html_content = template.render(module_sections=module_sections, module_configs=module_configs) # Write HTML content to file output_file = '/Users/patrick/Developer/auto-archiver/scripts/settings_page.html' with open(output_file, 'w') as file: file.write(html_content) print(f"Settings page generated at {output_file}")