Add --prune flag to seed command to remove stale data
Without --prune, seeds continue to only upsert (add/update). With --prune, routes, encounters, and bosses not present in the seed JSON files are deleted from the database. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -38,9 +38,12 @@ def load_json(filename: str):
|
||||
return json.load(f)
|
||||
|
||||
|
||||
async def seed():
|
||||
"""Run the full seed process."""
|
||||
print("Starting seed...")
|
||||
async def seed(*, prune: bool = False):
|
||||
"""Run the full seed process.
|
||||
|
||||
When prune is True, removes DB rows not present in seed data.
|
||||
"""
|
||||
print("Starting seed..." + (" (with pruning)" if prune else ""))
|
||||
|
||||
async with async_session() as session, session.begin():
|
||||
# 1. Upsert version groups
|
||||
@@ -88,7 +91,7 @@ async def seed():
|
||||
continue
|
||||
|
||||
# Upsert routes once per version group
|
||||
route_map = await upsert_routes(session, vg_id, routes_data)
|
||||
route_map = await upsert_routes(session, vg_id, routes_data, prune=prune)
|
||||
route_maps_by_vg[vg_id] = route_map
|
||||
total_routes += len(route_map)
|
||||
print(f" {vg_slug}: {len(route_map)} routes")
|
||||
@@ -119,6 +122,7 @@ async def seed():
|
||||
route["encounters"],
|
||||
dex_to_id,
|
||||
game_id,
|
||||
prune=prune,
|
||||
)
|
||||
total_encounters += enc_count
|
||||
|
||||
@@ -137,6 +141,7 @@ async def seed():
|
||||
child["encounters"],
|
||||
dex_to_id,
|
||||
game_id,
|
||||
prune=prune,
|
||||
)
|
||||
total_encounters += enc_count
|
||||
|
||||
@@ -160,7 +165,13 @@ async def seed():
|
||||
|
||||
route_name_to_id = route_maps_by_vg.get(vg_id, {})
|
||||
boss_count = await upsert_bosses(
|
||||
session, vg_id, bosses_data, dex_to_id, route_name_to_id, slug_to_id
|
||||
session,
|
||||
vg_id,
|
||||
bosses_data,
|
||||
dex_to_id,
|
||||
route_name_to_id,
|
||||
slug_to_id,
|
||||
prune=prune,
|
||||
)
|
||||
total_bosses += boss_count
|
||||
print(f" {vg_slug}: {boss_count} bosses")
|
||||
|
||||
Reference in New Issue
Block a user