161 lines
No EOL
5.5 KiB
Python
161 lines
No EOL
5.5 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Complete application reset script
|
|
Removes database, clears cache files, and reinitializes everything
|
|
"""
|
|
import os
|
|
import sys
|
|
import shutil
|
|
import logging
|
|
import importlib
|
|
from pathlib import Path
|
|
|
|
# Configure logging
|
|
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
|
logger = logging.getLogger("app-reset")
|
|
|
|
# Application paths
|
|
DB_FILES = ["app.db", "instance/app.db"]
|
|
UPLOADS_FOLDER = "uploads"
|
|
PYCACHE_PATTERN = "**/__pycache__"
|
|
|
|
def confirm_reset():
|
|
"""Get user confirmation before proceeding"""
|
|
print("\n⚠️ WARNING: This will completely reset the application ⚠️")
|
|
print("📢 All data will be lost, including:")
|
|
print(" - Database and all its tables")
|
|
print(" - All uploaded files")
|
|
print(" - Cache files and temporary data")
|
|
print("\nAre you absolutely sure you want to continue?")
|
|
return input("Type 'yes' to confirm: ").lower() == 'yes'
|
|
|
|
def remove_database_files():
|
|
"""Remove all database files"""
|
|
success = True
|
|
for db_file in DB_FILES:
|
|
if os.path.exists(db_file):
|
|
try:
|
|
logger.info(f"Removing database file: {db_file}")
|
|
os.remove(db_file)
|
|
except Exception as e:
|
|
logger.error(f"Failed to remove {db_file}: {e}")
|
|
success = False
|
|
return success
|
|
|
|
def clear_uploads_directory():
|
|
"""Clear all uploaded files but keep the directory"""
|
|
if not os.path.exists(UPLOADS_FOLDER):
|
|
logger.info(f"Creating uploads folder: {UPLOADS_FOLDER}")
|
|
os.makedirs(UPLOADS_FOLDER, exist_ok=True)
|
|
return True
|
|
|
|
try:
|
|
logger.info(f"Clearing uploads folder: {UPLOADS_FOLDER}")
|
|
for item in os.listdir(UPLOADS_FOLDER):
|
|
path = os.path.join(UPLOADS_FOLDER, item)
|
|
if os.path.isfile(path):
|
|
os.remove(path)
|
|
elif os.path.isdir(path):
|
|
shutil.rmtree(path)
|
|
return True
|
|
except Exception as e:
|
|
logger.error(f"Failed to clear uploads directory: {e}")
|
|
return False
|
|
|
|
def clear_pycache_files():
|
|
"""Clear all __pycache__ directories"""
|
|
try:
|
|
logger.info("Clearing Python cache files...")
|
|
count = 0
|
|
for cache_dir in Path('.').glob(PYCACHE_PATTERN):
|
|
if cache_dir.is_dir():
|
|
shutil.rmtree(cache_dir)
|
|
count += 1
|
|
|
|
logger.info(f"Removed {count} __pycache__ directories")
|
|
return True
|
|
except Exception as e:
|
|
logger.error(f"Failed to clear cache files: {e}")
|
|
return False
|
|
|
|
def initialize_application(create_admin=False):
|
|
"""Initialize the application with fresh database"""
|
|
try:
|
|
logger.info("Initializing Flask application...")
|
|
# Force reload the app module
|
|
if 'app' in sys.modules:
|
|
importlib.reload(sys.modules['app'])
|
|
|
|
# Import and create app
|
|
from app import create_app, db
|
|
app = create_app()
|
|
|
|
with app.app_context():
|
|
logger.info("Creating database tables...")
|
|
db.create_all()
|
|
|
|
# Create admin user if requested
|
|
if create_admin:
|
|
from app.models import User, Share
|
|
if User.query.filter_by(username='admin').first() is None:
|
|
admin = User(username='admin', email='admin@example.com', is_admin=True)
|
|
admin.password = 'adminpassword'
|
|
db.session.add(admin)
|
|
db.session.commit()
|
|
logger.info("Created admin user (username: admin, password: adminpassword)")
|
|
else:
|
|
logger.info("Admin user already exists")
|
|
else:
|
|
logger.info("Skipping admin user creation as requested")
|
|
|
|
logger.info("Application initialized successfully")
|
|
return True
|
|
except Exception as e:
|
|
logger.error(f"Failed to initialize application: {e}")
|
|
return False
|
|
|
|
def main():
|
|
"""Main reset procedure"""
|
|
print("\n🔄 Flask Files Application Reset Tool 🔄\n")
|
|
|
|
if not confirm_reset():
|
|
print("\n❌ Reset cancelled by user")
|
|
return False
|
|
|
|
create_admin = input("\nCreate admin user? (yes/no): ").lower() == 'yes'
|
|
|
|
print("\n🚀 Starting reset process...\n")
|
|
|
|
# Step 1: Remove database files
|
|
if remove_database_files():
|
|
logger.info("✅ Database files removed successfully")
|
|
else:
|
|
logger.error("❌ Failed to remove some database files")
|
|
|
|
# Step 2: Clear uploads directory
|
|
if clear_uploads_directory():
|
|
logger.info("✅ Uploads directory cleared successfully")
|
|
else:
|
|
logger.error("❌ Failed to clear uploads directory")
|
|
|
|
# Step 3: Clear cache files
|
|
if clear_pycache_files():
|
|
logger.info("✅ Python cache files cleared successfully")
|
|
else:
|
|
logger.error("❌ Failed to clear cache files")
|
|
|
|
# Step 4: Initialize application
|
|
if initialize_application(create_admin):
|
|
logger.info("✅ Application initialized successfully")
|
|
else:
|
|
logger.error("❌ Failed to initialize application")
|
|
return False
|
|
|
|
print("\n✨ Reset completed successfully! ✨")
|
|
print("\nYou can now start the application with 'python run.py'")
|
|
if create_admin:
|
|
print("Default admin credentials: username=admin, password=adminpassword")
|
|
return True
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(0 if main() else 1) |