Big-Link-Man/scripts/delete_generated_content.py

67 lines
1.9 KiB
Python

"""
Delete all generated content for a specific project
"""
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
import click
from src.database.session import db_manager
from src.database.models import GeneratedContent
def delete_project_content(project_id: int, confirm: bool = True):
"""
Delete all generated content for a project
Args:
project_id: Project ID to delete content for
confirm: If True, ask for confirmation before deleting
"""
db_manager.initialize()
session = db_manager.get_session()
try:
records = session.query(GeneratedContent).filter(
GeneratedContent.project_id == project_id
).all()
count = len(records)
if count == 0:
click.echo(f"No generated content found for project {project_id}")
return
click.echo(f"Found {count} generated content records for project {project_id}:")
for record in records:
click.echo(f" - ID {record.id}: {record.tier} - {record.title[:60]}...")
if confirm:
response = click.confirm(f"\nDelete all {count} records?", default=False)
if not response:
click.echo("Cancelled.")
return
for record in records:
session.delete(record)
session.commit()
click.echo(f"Successfully deleted {count} records for project {project_id}")
except Exception as e:
session.rollback()
click.echo(f"Error: {e}", err=True)
raise
finally:
session.close()
@click.command()
@click.argument('project_id', type=int)
@click.option('--yes', '-y', is_flag=True, help='Skip confirmation prompt')
def main(project_id: int, yes: bool):
"""Delete all generated content for PROJECT_ID"""
delete_project_content(project_id, confirm=not yes)
if __name__ == "__main__":
main()