chore: bulk commit of local changes across blog writer, SEO dashboard, scheduler, docs-site, and frontend
This commit is contained in:
86
backend/scripts/create_youtube_tasks_tables.py
Normal file
86
backend/scripts/create_youtube_tasks_tables.py
Normal file
@@ -0,0 +1,86 @@
|
||||
"""
|
||||
Create YouTube Video Tasks Table
|
||||
|
||||
Standalone script to create the youtube_video_tasks table in all user
|
||||
databases. Also recovers stale in-flight tasks by marking them as failed.
|
||||
"""
|
||||
|
||||
import sys
|
||||
import os
|
||||
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
|
||||
|
||||
from loguru import logger
|
||||
from models.youtube_task_models import YouTubeVideoTask, Base
|
||||
from models.subscription_models import Base as SubscriptionBase
|
||||
from services.database import get_engine_for_user, _user_engines
|
||||
from sqlalchemy import inspect
|
||||
|
||||
|
||||
def create_youtube_tasks_tables():
|
||||
"""Create youtube_video_tasks table for all existing user databases."""
|
||||
from services.database import get_all_user_dbs
|
||||
created = 0
|
||||
skipped = 0
|
||||
recovered = 0
|
||||
|
||||
try:
|
||||
user_dbs = get_all_user_dbs()
|
||||
except Exception:
|
||||
user_dbs = []
|
||||
|
||||
if not user_dbs:
|
||||
logger.warning("No user databases found. Creating table in default database.")
|
||||
user_dbs = [None]
|
||||
|
||||
for user_id in user_dbs:
|
||||
try:
|
||||
if user_id:
|
||||
engine = get_engine_for_user(user_id)
|
||||
else:
|
||||
from services.database import default_engine
|
||||
if not default_engine:
|
||||
logger.error("No default engine available")
|
||||
continue
|
||||
engine = default_engine
|
||||
|
||||
SubscriptionBase.metadata.create_all(bind=engine, checkfirst=True)
|
||||
|
||||
# Recover stale tasks
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
SessionLocal = sessionmaker(bind=engine)
|
||||
db = SessionLocal()
|
||||
try:
|
||||
stale = db.query(YouTubeVideoTask).filter(
|
||||
YouTubeVideoTask.status.in_([
|
||||
'pending', 'processing',
|
||||
])
|
||||
).all()
|
||||
|
||||
for task in stale:
|
||||
task.status = 'failed'
|
||||
task.error = 'Task interrupted by server restart'
|
||||
task.message = 'Recovered on table creation'
|
||||
recovered += 1
|
||||
|
||||
if stale:
|
||||
db.commit()
|
||||
logger.info(f"Recovered {len(stale)} stale tasks for user {user_id}")
|
||||
except Exception as e:
|
||||
logger.warning(f"Failed to recover stale tasks for user {user_id}: {e}")
|
||||
db.rollback()
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
created += 1
|
||||
logger.info(f"Created youtube_video_tasks table for user {user_id}")
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to create table for user {user_id}: {e}")
|
||||
skipped += 1
|
||||
|
||||
logger.info(f"YouTube task table creation complete: {created} created, {skipped} skipped, {recovered} recovered")
|
||||
return created
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
create_youtube_tasks_tables()
|
||||
Reference in New Issue
Block a user