59 lines
No EOL
2.2 KiB
Python
59 lines
No EOL
2.2 KiB
Python
"""
|
|
Database reset utility - USE WITH CAUTION
|
|
This will delete and recreate your entire database
|
|
"""
|
|
import os
|
|
import logging
|
|
from flask import Flask
|
|
from .. import create_app, db
|
|
from ..models import User, Folder, File, Download
|
|
|
|
logging.basicConfig(level=logging.INFO)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
def reset_database():
|
|
"""Reset the entire database and recreate tables"""
|
|
app = create_app()
|
|
|
|
with app.app_context():
|
|
try:
|
|
# Drop all tables
|
|
logger.warning("Dropping all database tables...")
|
|
db.drop_all()
|
|
logger.info("All tables dropped successfully")
|
|
|
|
# Recreate tables based on models
|
|
logger.info("Recreating database tables...")
|
|
db.create_all()
|
|
logger.info("Database tables created successfully")
|
|
|
|
# Create admin user if needed
|
|
if User.query.filter_by(username='admin').first() is None:
|
|
admin = User(username='admin', email='admin@example.com', is_admin=True)
|
|
admin.password = 'adminpassword' # Set to a secure password in production
|
|
db.session.add(admin)
|
|
db.session.commit()
|
|
logger.info("Created admin user")
|
|
|
|
# Clear uploads folder
|
|
uploads_folder = app.config['UPLOAD_FOLDER']
|
|
if os.path.exists(uploads_folder):
|
|
logger.info(f"Clearing uploads folder: {uploads_folder}")
|
|
for file in os.listdir(uploads_folder):
|
|
file_path = os.path.join(uploads_folder, file)
|
|
try:
|
|
if os.path.isfile(file_path):
|
|
os.unlink(file_path)
|
|
elif os.path.isdir(file_path):
|
|
import shutil
|
|
shutil.rmtree(file_path)
|
|
except Exception as e:
|
|
logger.error(f"Error removing {file_path}: {e}")
|
|
|
|
return True
|
|
except Exception as e:
|
|
logger.error(f"Error resetting database: {e}")
|
|
return False
|
|
|
|
if __name__ == "__main__":
|
|
reset_database() |