69 lines
2.2 KiB
Python
69 lines
2.2 KiB
Python
|
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)
|