fs-lawrisk/tools/delete_permit_by_name.py

69 lines
2.3 KiB
Python

import sys
import os
# Init path to allow importing lawrisk
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from lawrisk.services import licensing_repo as lic_repo
from lawrisk.utils.env_loader import load_env
def delete_permit_by_name(permit_name):
load_env()
conn = lic_repo._lic_pg_conn()
cur = conn.cursor()
try:
print(f"Searching for permit: {permit_name}")
cur.execute("SELECT id FROM permits WHERE name = %s", (permit_name,))
row = cur.fetchone()
if not row:
print(f"Permit '{permit_name}' not found.")
return
permit_id = row[0]
print(f"Found permit ID: {permit_id}")
# List of tables to clean up that reference permit_id
# Based on licensing_repo.py structures
tables = [
"region_permit_risks",
"region_permit_scopes",
"region_permit_subitems",
"region_permit_details",
"region_theme_permits",
"region_permit_theme_overrides", # Might not exist or might be empty, but good to try
"permit_sources"
]
for table in tables:
try:
# Check if table exists first to avoid crashing on optional tables
cur.execute(f"SELECT to_regclass('{table}')")
if cur.fetchone()[0]:
print(f"Cleaning table: {table}")
cur.execute(f"DELETE FROM {table} WHERE permit_id = %s", (permit_id,))
print(f" Deleted {cur.rowcount} rows.")
else:
print(f"Table {table} does not exist, skipping.")
except Exception as e:
print(f"Error cleaning {table}: {e}")
# Don't abort, try next table
# Finally delete from permits
print("Deleting from permits table...")
cur.execute("DELETE FROM permits WHERE id = %s", (permit_id,))
print(f"Deleted {cur.rowcount} rows from permits.")
conn.commit()
print(f"Successfully deleted permit '{permit_name}' and likely associated data.")
except Exception as e:
conn.rollback()
print(f"An error occurred: {e}")
finally:
conn.close()
if __name__ == "__main__":
delete_permit_by_name("食品小作坊登记证")