import os import argparse import json import pprint import xmltodict parser = argparse.ArgumentParser() parser.add_argument('--basepath', '-b', dest='basepath', required=True) parser.add_argument('--binserve-config', '-c', dest='binserve_config', default='config.json') parser.add_argument('--basedirectory', '-d', dest='basedir', default='public', required=True) parser.add_argument('--binserve-output', '-o', dest='binserve_output', default='new.binserve.json') parser.add_argument('--filename', '-f', dest='filename', default='sitemap-0.xml') parser.add_argument('--skip-file-extension-check', '-s', dest='extensioncheck', action='store_true', default=False) def main(args: dict): # Extract args filename = args.filename checkfileextension = args.extensioncheck basepath = args.basepath.rstrip('/') basedir = args.basedir config = args.binserve_config output = args.binserve_output # Create new data data = get_xml_content(filename, checkfileextension) routes = get_url_slugs(basepath, data) # Modify config new_config_data = generate_config_entry(routes, basedir) with open(config, 'r') as file: configdata = json.load(file) configdata['routes'] = {**new_config_data, **configdata['routes']} with open(output, 'w+') as file: json.dump(configdata, file, indent=4) def get_xml_content(filename: str, checkfileextension: bool): if not filename.lower().endswith('.xml') and not checkfileextension: raise NameError('Wrong file extension') if not os.path.isfile(filename): raise FileExistsError('File is missing') with open(filename, 'r') as file: data = xmltodict.parse(file.read()) return data def get_url_slugs(basepath: str, sitemap: dict): url_slugs = [] for location in sitemap['urlset']['url']: url_slugs.append(location['loc'].replace(basepath, '')) return url_slugs def generate_config_entry(routes, basedir): routes_config = {} for route in routes: routes_config.update({f"{'/' if route == '/' else ''}{route.rstrip('/')}": f"{basedir}{'/' if route == '/' else ''}{route.rstrip('/')}"}) return routes_config if __name__ == '__main__': args = parser.parse_args() main(args)