97 lines
3.0 KiB
Python
97 lines
3.0 KiB
Python
import json
|
|
from pathlib import Path
|
|
from slugify import slugify
|
|
|
|
def load_json_file(file_path: str):
|
|
"""Load and parse a JSON file"""
|
|
try:
|
|
with open(file_path, 'r', encoding='utf-8') as f:
|
|
return json.load(f)
|
|
except (FileNotFoundError, json.JSONDecodeError) as e:
|
|
print(f"Error reading {file_path}: {str(e)}")
|
|
return {}
|
|
|
|
def save_json_file(data, file_path: str):
|
|
"""Save data to a JSON file"""
|
|
try:
|
|
with open(file_path, 'w', encoding='utf-8') as f:
|
|
json.dump(data, f, indent=2, ensure_ascii=False)
|
|
print(f"Successfully saved: {file_path}")
|
|
except Exception as e:
|
|
print(f"Error saving {file_path}: {str(e)}")
|
|
|
|
def generate_layout_slug(layout_years: str) -> str:
|
|
return layout_years
|
|
|
|
def add_slugs_to_data(data):
|
|
"""Recursively add slugs to the circuit data structure"""
|
|
new_data = {}
|
|
|
|
for country, country_data in data.items():
|
|
country_slug = slugify(country)
|
|
new_country_data = {
|
|
"slug": country_slug,
|
|
"cities": {}
|
|
}
|
|
|
|
for city, city_data in country_data.items():
|
|
city_slug = slugify(city)
|
|
new_city_data = {
|
|
"slug": city_slug,
|
|
"circuits": {}
|
|
}
|
|
|
|
for circuit_name, circuit_data in city_data.items():
|
|
circuit_slug = slugify(circuit_name)
|
|
|
|
# Copy all existing circuit data
|
|
new_circuit_data = circuit_data.copy()
|
|
# Add circuit slug
|
|
new_circuit_data["slug"] = circuit_slug
|
|
|
|
# Add slugs to layouts
|
|
if "layouts" in new_circuit_data:
|
|
new_layouts = {}
|
|
for layout_years, layout_data in new_circuit_data["layouts"].items():
|
|
# Create new layout data with slug
|
|
new_layout_data = layout_data.copy()
|
|
new_layout_data["slug"] = generate_layout_slug(layout_years)
|
|
new_layout_data["years"] = layout_years # Store original years string
|
|
|
|
new_layouts[layout_years] = new_layout_data
|
|
|
|
new_circuit_data["layouts"] = new_layouts
|
|
|
|
new_city_data["circuits"][circuit_name] = new_circuit_data
|
|
|
|
new_country_data["cities"][city] = new_city_data
|
|
|
|
new_data[country] = new_country_data
|
|
|
|
return new_data
|
|
|
|
def main():
|
|
# Define file paths
|
|
input_file = Path("circuits.json")
|
|
output_file = Path("circuits-with-slugs.json")
|
|
|
|
# Load existing data
|
|
print(f"Loading data from {input_file}")
|
|
data = load_json_file(input_file)
|
|
|
|
if not data:
|
|
print("No data loaded. Exiting.")
|
|
return
|
|
|
|
# Add slugs to the data structure
|
|
print("Adding slugs to data structure...")
|
|
new_data = add_slugs_to_data(data)
|
|
|
|
# Save the modified data
|
|
print(f"Saving modified data to {output_file}")
|
|
save_json_file(new_data, output_file)
|
|
|
|
print("Done!")
|
|
|
|
if __name__ == "__main__":
|
|
main() |