- Switch to single Gunicorn worker to eliminate SQLite database locking issues - Remove Flask-Limiter and all rate limiting complexity - Remove Cloudflare proxy setup and dependencies - Simplify configuration and remove unnecessary features - Update all templates and static files for streamlined operation - Clean up old files and documentation - Restore stable database from backup - System now runs fast and reliably without database locks
77 lines
2.4 KiB
Python
77 lines
2.4 KiB
Python
#!/usr/bin/env python3
|
|
"""Create a fresh quotes database with test data"""
|
|
|
|
import os
|
|
import sqlite3
|
|
from datetime import datetime
|
|
|
|
# Remove existing database files
|
|
db_files = ['instance/quotes.db', 'instance/quotes.db-shm', 'instance/quotes.db-wal']
|
|
for db_file in db_files:
|
|
if os.path.exists(db_file):
|
|
os.remove(db_file)
|
|
print(f"Removed {db_file}")
|
|
|
|
# Create fresh database
|
|
conn = sqlite3.connect('instance/quotes.db')
|
|
cursor = conn.cursor()
|
|
|
|
# Create the quote table with proper schema
|
|
cursor.execute("""
|
|
CREATE TABLE quote (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
text TEXT NOT NULL,
|
|
votes INTEGER DEFAULT 0,
|
|
date DATETIME,
|
|
status INTEGER DEFAULT 0,
|
|
ip_address TEXT,
|
|
user_agent TEXT,
|
|
submitted_at DATETIME,
|
|
flag_count INTEGER DEFAULT 0
|
|
)
|
|
""")
|
|
|
|
# Create indexes for performance
|
|
cursor.execute("CREATE INDEX idx_status_id ON quote(status, id)")
|
|
cursor.execute("CREATE INDEX idx_flag_count_id ON quote(flag_count, id)")
|
|
|
|
# Insert test data
|
|
test_quotes = [
|
|
("This is a pending quote for testing moderation", 0, 0), # pending
|
|
("This is an approved quote that should appear in browse", 5, 1), # approved
|
|
("Another approved quote with positive votes", 12, 1), # approved
|
|
("A rejected quote that was not good enough", -2, 2), # rejected
|
|
("Another pending quote to test approve/reject", 0, 0), # pending
|
|
("Third pending quote for comprehensive testing", 0, 0), # pending
|
|
]
|
|
|
|
current_time = datetime.now()
|
|
|
|
for i, (text, votes, status) in enumerate(test_quotes, 1):
|
|
cursor.execute("""
|
|
INSERT INTO quote (text, votes, status, submitted_at, ip_address, user_agent, flag_count)
|
|
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
""", (text, votes, status, current_time, '127.0.0.1', 'Test Script', 0))
|
|
|
|
# Set WAL mode for better concurrency
|
|
cursor.execute("PRAGMA journal_mode=WAL")
|
|
cursor.execute("PRAGMA busy_timeout=1000")
|
|
|
|
# Commit and close
|
|
conn.commit()
|
|
|
|
# Verify the data
|
|
cursor.execute("SELECT id, text, status FROM quote ORDER BY id")
|
|
results = cursor.fetchall()
|
|
|
|
print("\nCreated fresh database with test quotes:")
|
|
print("ID | Status | Text")
|
|
print("-" * 50)
|
|
for quote_id, text, status in results:
|
|
status_name = {0: "PENDING", 1: "APPROVED", 2: "REJECTED"}[status]
|
|
print(f"{quote_id:2d} | {status_name:8s} | {text[:40]}...")
|
|
|
|
conn.close()
|
|
print(f"\nFresh database created successfully!")
|
|
print(f"Total quotes: {len(test_quotes)}")
|
|
print("3 pending, 2 approved, 1 rejected") |