import os import json import gzip from string import Template from collections import defaultdict from fnmatch import fnmatch from jinja2 import Environment, FileSystemLoader env = Environment(loader=FileSystemLoader('.')) template = env.get_template('templates/index.j2') directory = '/data/html_data' # Change this to your directory path rocky_version = "8.10" def generate_sitemap(directory): links = defaultdict(lambda: defaultdict(dict)) for root, _, files in os.walk(directory): for file in files: full_filepath = os.path.join(root, file) filepath = full_filepath.split(rocky_version, 1)[-1] if any(fnmatch(filepath, pattern) for pattern in ['/index.html', '/links.html','/list.json*', '/sitemap*']): continue filepath_parts = filepath.split('/') package_name = filepath_parts[1] man_type = filepath_parts[2] man_type_number = man_type.lstrip('man') if man_type.startswith('man') else man_type command_file = filepath_parts[3] command = command_file.split('.html', 1)[0] if filepath.startswith('/'): filepath = filepath[1:] fullname = f"{package_name} - {command}({man_type_number})" links[package_name][command] = { "url": filepath, "man_type": man_type, "man_type_number": man_type_number, "fullname": fullname } return links def generate_links_html(links): links_html = "" for package_name in links.keys(): links_html += f"

package_name

" links_html += "" data = { 'title': f"Rocky Man Page - {rocky_version}", 'header_title': f"Rocky Man Page - {rocky_version}", 'main_content': f"{links_html}" } return template.render(data) def convert_sitemap_to_json(links, minify=False): # data # for package_name in links.keys(): # for command in links[package_name]: # # Add command details to sitemap # sitemap[package_name][command] = { # "url": filepath, # "mantype": man_type, # "fullname": fullname # } if minify: return json.dumps(links, separators=(',', ':')) return json.dumps(links, indent=4) if __name__ == "__main__": sitemap = generate_sitemap(directory) # Output the links HTML page to a file with open(f"{directory}/{rocky_version}/links.html", "w") as file: file.write(generate_links_html(sitemap)) # Output the list JSON to a file with open(f"{directory}/{rocky_version}/list.json", "w") as file: file.write(convert_sitemap_to_json(sitemap, minify=True)) # Gzip the JSON file with gzip.open(f"{directory}/{rocky_version}/list.json.gz", "wb") as f_out: f_out.write(convert_sitemap_to_json(sitemap, minify=True).encode('utf-8'))