This commit is contained in:
Jason
2026-04-11 00:04:09 -05:00
commit 7a2fffd62e
110 changed files with 51809 additions and 0 deletions
+228
View File
@@ -0,0 +1,228 @@
#!/usr/bin/env python3
"""
Comprehensive app test script
Run this through control panel to diagnose issues
Writes detailed logs to test_app.log
"""
import sys
import os
from datetime import datetime
# Setup logging
log_file = os.path.join(os.path.dirname(__file__), 'test_app.log')
def log(message, also_print=True):
"""Write to log file and optionally print"""
timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
full_message = f"[{timestamp}] {message}"
with open(log_file, 'a') as f:
f.write(full_message + '\n')
if also_print:
print(full_message)
try:
log("="*70)
log("APP TEST SCRIPT - START")
log("="*70)
# 1. Environment Info
log("\n1. PYTHON ENVIRONMENT")
log(f" Python: {sys.version}")
log(f" Executable: {sys.executable}")
log(f" CWD: {os.getcwd()}")
# 2. Check environment variables
log("\n2. ENVIRONMENT VARIABLES")
log(f" APPLICATION_ROOT: {os.environ.get('APPLICATION_ROOT', 'NOT SET')}")
log(f" FLASK_ENV: {os.environ.get('FLASK_ENV', 'NOT SET')}")
log(f" SECRET_KEY: {'SET' if os.environ.get('SECRET_KEY') else 'NOT SET'}")
# 3. Check critical files
log("\n3. FILE STRUCTURE CHECK")
files_to_check = [
'app.py',
'passenger_wsgi.py',
'config.py',
'data/users.json',
'templates/login.html',
'templates/index2.html',
'templates/select_location.html',
'templates/user_manager.html'
]
all_files_exist = True
for file_path in files_to_check:
full_path = os.path.join(os.path.dirname(__file__), file_path)
exists = os.path.exists(full_path)
status = "" if exists else "✗ MISSING"
log(f" {status} {file_path}")
if not exists:
all_files_exist = False
if not all_files_exist:
log("\n⚠️ CRITICAL: Missing files detected!")
# 4. Check dependencies
log("\n4. PYTHON PACKAGES")
packages = [
('flask', 'Flask'),
('werkzeug', 'Werkzeug')
]
all_packages_ok = True
for module_name, display_name in packages:
try:
module = __import__(module_name)
try:
from importlib.metadata import version
ver = version(module_name)
except:
ver = getattr(module, '__version__', 'unknown')
log(f"{display_name}: {ver}")
except ImportError as e:
log(f"{display_name}: NOT INSTALLED ({e})")
all_packages_ok = False
if not all_packages_ok:
log("\n⚠️ CRITICAL: Missing packages! Run: pip install Flask==3.0.0 Werkzeug==3.0.1")
sys.exit(1)
# 5. Try importing app
log("\n5. APP IMPORT TEST")
log(" Attempting to import Flask app...")
try:
# Make sure current directory is in path
current_dir = os.path.dirname(__file__)
if current_dir not in sys.path:
sys.path.insert(0, current_dir)
from app import app
log(" ✓ Flask app imported successfully!")
# Check app config
log("\n6. APP CONFIGURATION")
log(f" APPLICATION_ROOT: {app.config.get('APPLICATION_ROOT', 'NOT SET')}")
log(f" DEBUG: {app.config.get('DEBUG')}")
log(f" SECRET_KEY: {'SET (' + str(len(app.config.get('SECRET_KEY', ''))) + ' chars)' if app.config.get('SECRET_KEY') else 'NOT SET'}")
# Check if middleware applied
log(f" WSGI App Type: {type(app.wsgi_app).__name__}")
if 'PrefixMiddleware' in str(type(app.wsgi_app)):
log(" ✓ PrefixMiddleware is active")
else:
log(" ⚠️ PrefixMiddleware NOT active (may cause issues at /product-finder)")
# Count routes
log("\n7. ROUTES CHECK")
routes = list(app.url_map.iter_rules())
log(f" Total routes: {len(routes)}")
# Check critical routes
critical_routes = ['/login', '/api/login', '/users', '/select-location']
log(" Critical routes:")
for route_path in critical_routes:
found = any(str(rule) == route_path or str(rule).startswith(route_path + '<') for rule in routes)
status = "" if found else "✗ MISSING"
log(f" {status} {route_path}")
# 8. Test loading users
log("\n8. USER DATA TEST")
try:
users_file = os.path.join(current_dir, 'data', 'users.json')
if os.path.exists(users_file):
import json
with open(users_file, 'r') as f:
users = json.load(f)
log(f" ✓ Users file loaded: {len(users)} users")
log(f" Usernames: {', '.join([u.get('username', '?') for u in users])}")
else:
log(f" ✗ Users file NOT FOUND at {users_file}")
except Exception as e:
log(f" ✗ Error loading users: {e}")
# 9. Test a simple request
log("\n9. REQUEST TEST")
log(" Testing if app can handle requests...")
with app.test_client() as client:
# Test root redirect
try:
response = client.get('/')
log(f" GET / -> Status: {response.status_code}")
if response.status_code == 302:
log(f" Redirects to: {response.location}")
except Exception as e:
log(f" ✗ Error testing /: {e}")
# Test login page
try:
response = client.get('/login')
log(f" GET /login -> Status: {response.status_code}")
if response.status_code != 200:
log(f" ⚠️ Login page returned {response.status_code} instead of 200")
except Exception as e:
log(f" ✗ Error testing /login: {e}")
# 10. Summary
log("\n" + "="*70)
log("TEST SUMMARY")
log("="*70)
if all_files_exist and all_packages_ok:
log("✓ All files present")
log("✓ All packages installed")
log("✓ App imports successfully")
log(f"{len(routes)} routes registered")
app_root = app.config.get('APPLICATION_ROOT', '/')
if app_root == '/product-finder':
log("✓ Configured for /product-finder deployment")
else:
log(f"⚠️ APPLICATION_ROOT is '{app_root}' (should be '/product-finder' for production)")
log("\n🎉 APP APPEARS READY!")
log("\nIf still getting 500 errors:")
log("1. Check that data/users.json exists")
log("2. Verify APPLICATION_ROOT env var is set to /product-finder")
log("3. Check Apache error log for runtime errors")
log("4. Ensure .htaccess is correct")
else:
log("\n⚠️ ISSUES FOUND - Fix these before deployment")
log("="*70)
log(f"\nLog saved to: {log_file}")
except ImportError as e:
log(f" ✗ FAILED to import app!")
log(f" Error: {e}")
import traceback
log("\nFull traceback:")
log(traceback.format_exc())
log("\n❌ CRITICAL ERROR: Cannot import Flask app")
log("Check that app.py exists and has no syntax errors")
except Exception as e:
log(f" ✗ Unexpected error during import!")
log(f" Error: {e}")
import traceback
log("\nFull traceback:")
log(traceback.format_exc())
except Exception as e:
log(f"\n❌ FATAL ERROR: {e}")
import traceback
log(traceback.format_exc())
finally:
log("\n" + "="*70)
log("TEST COMPLETE")
log("="*70)
print(f"\n📄 Full log saved to: {log_file}")
print("Download this file to see all test results")