125 lines
4.1 KiB
Python
125 lines
4.1 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
TOOLS.py - Main utility script for the website application.
|
|
|
|
This script provides a command-line interface to all utilities
|
|
for database management, user management, and server administration.
|
|
|
|
Usage:
|
|
python3 TOOLS.py [command] [options]
|
|
|
|
Available commands:
|
|
- db:fix Fix database schema
|
|
- db:rebuild Completely rebuild the database
|
|
- db:test Test database connection and models
|
|
- db:stats Show database statistics
|
|
|
|
- user:list List all users
|
|
- user:create Create a new user
|
|
- user:admin Create admin user (username: admin, password: admin)
|
|
- user:reset-pw Reset user password
|
|
- user:delete Delete a user
|
|
|
|
- server:run Run the development server
|
|
|
|
Examples:
|
|
python3 TOOLS.py db:rebuild
|
|
python3 TOOLS.py user:admin
|
|
python3 TOOLS.py server:run --port 8080
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
import argparse
|
|
from utils import (
|
|
fix_database_schema, rebuild_database, run_all_tests, print_database_stats,
|
|
list_users, create_user, reset_password, delete_user, create_admin_user,
|
|
run_development_server
|
|
)
|
|
|
|
def parse_args():
|
|
parser = argparse.ArgumentParser(
|
|
description='Website Administration Tools',
|
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
epilog=__doc__
|
|
)
|
|
|
|
# Main command argument
|
|
parser.add_argument('command', help='Command to execute')
|
|
|
|
# Additional arguments
|
|
parser.add_argument('--username', '-u', help='Username for user commands')
|
|
parser.add_argument('--email', '-e', help='Email for user creation')
|
|
parser.add_argument('--password', '-p', help='Password for user creation/reset')
|
|
parser.add_argument('--admin', '-a', action='store_true', help='Make user an admin')
|
|
parser.add_argument('--host', help='Host for server (default: 127.0.0.1)')
|
|
parser.add_argument('--port', type=int, help='Port for server (default: 5000)')
|
|
parser.add_argument('--no-debug', action='store_true', help='Disable debug mode for server')
|
|
|
|
return parser.parse_args()
|
|
|
|
def main():
|
|
args = parse_args()
|
|
|
|
# Database commands
|
|
if args.command == 'db:fix':
|
|
fix_database_schema()
|
|
|
|
elif args.command == 'db:rebuild':
|
|
print("WARNING: This will delete all data in the database!")
|
|
confirm = input("Are you sure you want to continue? (y/n): ").lower()
|
|
if confirm == 'y':
|
|
rebuild_database()
|
|
else:
|
|
print("Aborted.")
|
|
|
|
elif args.command == 'db:test':
|
|
run_all_tests()
|
|
|
|
elif args.command == 'db:stats':
|
|
print_database_stats()
|
|
|
|
# User commands
|
|
elif args.command == 'user:list':
|
|
list_users()
|
|
|
|
elif args.command == 'user:create':
|
|
if not args.username or not args.email or not args.password:
|
|
print("Error: Username, email, and password are required.")
|
|
print("Example: python3 TOOLS.py user:create -u username -e email -p password [-a]")
|
|
sys.exit(1)
|
|
create_user(args.username, args.email, args.password, args.admin)
|
|
|
|
elif args.command == 'user:admin':
|
|
create_admin_user()
|
|
|
|
elif args.command == 'user:reset-pw':
|
|
if not args.username or not args.password:
|
|
print("Error: Username and password are required.")
|
|
print("Example: python3 TOOLS.py user:reset-pw -u username -p new_password")
|
|
sys.exit(1)
|
|
reset_password(args.username, args.password)
|
|
|
|
elif args.command == 'user:delete':
|
|
if not args.username:
|
|
print("Error: Username is required.")
|
|
print("Example: python3 TOOLS.py user:delete -u username")
|
|
sys.exit(1)
|
|
delete_user(args.username)
|
|
|
|
# Server commands
|
|
elif args.command == 'server:run':
|
|
host = args.host or '127.0.0.1'
|
|
port = args.port or 5000
|
|
debug = not args.no_debug
|
|
run_development_server(host=host, port=port, debug=debug)
|
|
|
|
else:
|
|
print(f"Unknown command: {args.command}")
|
|
print("Run 'python3 TOOLS.py -h' for usage information")
|
|
sys.exit(1)
|
|
|
|
if __name__ == '__main__':
|
|
main() |